NEU! Datensicherung per FTP / FTPS
mit Anforderung Backup über Systemobjekt, Zeitschaltuhr und VISU
Viele Details dazu hier im Forum
Upgrade: Erweiterte Prüfung von Custom Logik Code
Upgrade: Navigation im Menübaum über Suche mit CTRL-F
Upgrade: Dekodierung für 17 weitere DPT im Busmonitor - mit Farbpunkt bei RGB
Upgrade: Weitere 31 neue physikalische Einheiten und verbesserte Darstellung / Auswahl
Upgrade: Zusätzliche Gestaltungsmöglichkeiten für VISU Widgets auf der Detailseite
Jetzt in der Insider Version 7 zur 4.5 - für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki
[Beantwortet] [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe
Forumsregeln
- Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
- Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
- Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
- Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
-
- Reactions:
- Beiträge: 8
- Registriert: Di Mär 21, 2023 2:56 pm
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 2 Mal
[V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe
Hallo,
ich möchte gerne sicherstellen, dass bestimmte ungültige Werte (in meinem Fall negative Wert) nicht ausgegeben werden bzw. nicht in die Zeitreihe geschrieben werden. Mit Limiter kann ich filtern z.B. auf 0-100, aber es würde aus aus einer "-1" eine "0" und aus einer "150" ein "100".
Gibt es Möglichkeiten Werte außerhalb des gültigen Wertebereichs in einer Logik *gar nicht* auszugeben bzw. beim Übertragen in eine Zeitreihe vollständig zu filtern?
viele Grüße,
Henning
ich möchte gerne sicherstellen, dass bestimmte ungültige Werte (in meinem Fall negative Wert) nicht ausgegeben werden bzw. nicht in die Zeitreihe geschrieben werden. Mit Limiter kann ich filtern z.B. auf 0-100, aber es würde aus aus einer "-1" eine "0" und aus einer "150" ein "100".
Gibt es Möglichkeiten Werte außerhalb des gültigen Wertebereichs in einer Logik *gar nicht* auszugeben bzw. beim Übertragen in eine Zeitreihe vollständig zu filtern?
viele Grüße,
Henning
Zuletzt geändert von blaubaerli am Di Jul 22, 2025 8:43 pm, insgesamt 1-mal geändert.
TWS 3500XL | ID: 1117 | Timberwolf Support über Internet erreichbar, Support-VPN kann gestartet werden | Reboot nach Absprache
-
- Reactions:
- Beiträge: 3907
- Registriert: So Aug 12, 2018 8:44 am
- Hat sich bedankt: 1275 Mal
- Danksagung erhalten: 2220 Mal
Servus!
Für deinen Fall ginge das in einer Custom Logik.
- Limiter hat auch einen Ausgang, der Innerhalb/Außerhalb auswertet.
- Damit ein SendExplicit verknüpfen, so dass nur bei True gesendet wird
Fertig.
Lg
Robert
Für deinen Fall ginge das in einer Custom Logik.
- Limiter hat auch einen Ausgang, der Innerhalb/Außerhalb auswertet.
- Damit ein SendExplicit verknüpfen, so dass nur bei True gesendet wird
Fertig.
Lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
-
- Reactions:
- Beiträge: 606
- Registriert: Fr Sep 14, 2018 5:03 pm
- Hat sich bedankt: 1596 Mal
- Danksagung erhalten: 387 Mal
ich weis das von der ki geschriebene texte nicht gelesen werden
aber ich füge ihn dennoch mit ein wegen den erklärungen
der code ist im text enthalten und wurde von mir getestet
folgend ist der KI text
___________________________________
Servus Henning,
eine sehr gute und wichtige Frage! Der Ansatz von Robert_Mini ist der goldrichtige Weg. Dein Ziel ist es, Werte, die außerhalb eines definierten Bereichs liegen, nicht nur zu begrenzen, sondern komplett zu verwerfen, sodass sie gar nicht erst in die Zeitreihe geschrieben werden.
Die Herausforderung dabei ist, wie du korrekt beobachtet hast, dass der Limiter alleine den Wert nur "klemmt" (z.B. aus -1 eine 0 macht). Wir müssen ihn aber mit SendExplicit kombinieren, um den Sendevorgang selbst zu steuern.
Nach einigen Tests hat sich gezeigt, dass man eine kleine Falle der Logik-Engine (die "Ein-Zyklus-Verzögerung") umgehen muss, um eine 100% robuste Lösung zu erhalten. Eine einfache Kaskade reicht nicht aus.
Hier ist die finale, validierte Custom Logic, die genau das tut, was du möchtest. Sie ist so aufgebaut, dass sie auch in der Live-Ansicht des Logik-Editors immer den korrekten, letzten gültigen Wert anzeigt.
Die Architektur im Detail:
Prüfen (Limiter): Ein Limiter prüft, ob der eingehende Wert gültig ist. Das Ergebnis (true/false) wird in einer Logik-Variable gespeichert.
Entscheiden (Multiplexer): Eine Weiche entscheidet, welcher Wert für diesen Zyklus "gewinnt". Ist der neue Wert gültig, wird er durchgereicht. Ist er ungültig, wird der letzte gespeicherte gültige Wert beibehalten.
Bedingt Senden (SendExplicit): Nur wenn der Limiter in Schritt 1 "gültig" (true) gemeldet hat, wird der "Gewinner-Wert" aus Schritt 2 explizit an den Ausgang gesendet.
Speichern (Latch): Am Ende des Zyklus wird der "Gewinner-Wert" für den nächsten Durchlauf gespeichert. Dies verhindert die erwähnte Ein-Zyklus-Verzögerung.
Finale Custom Logic "Daten-Verwerfungsfilter"
{
"Level": [
[ "$P_Wert_In", "float", 0.0 ],
[ "$P_Min_Valid", "float", 0.0 ],
[ "$P_Max_Valid", "float", 100.0 ],
[ "$O_Gefilterter_Wert", "float", 0.0 ],
[ "$State_Last_Valid_Value", "float", 0.0 ],
[ "$Lgc_Wert_Ist_Gueltig", "bool", false ],
[ "$Konst_True", "bool", true ]
],
"Module": [
[ "Limiter", "$P_Wert_In", 0, "$Lgc_Wert_Ist_Gueltig", [ "$P_Min_Valid", "$P_Max_Valid" ] ],
[ "Multiplexer", [ "$State_Last_Valid_Value", "$P_Wert_In" ], "$O_Gefilterter_Wert", "$Lgc_Wert_Ist_Gueltig" ],
[ "SendExplicit", "$Lgc_Wert_Ist_Gueltig", "$O_Gefilterter_Wert", 0 ],
[ "Latch", "$O_Gefilterter_Wert", "$State_Last_Valid_Value", "$Konst_True", 0 ]
],
"Input": [
[ "1. Eingang: Zu filternder Wert", "Der Wert, der auf Gültigkeit geprüft wird (z.B. von einem Sensor).", "$P_Wert_In", "c" ],
[ "2. Parameter: Gültiges Minimum", "Werte unterhalb dieses Limits werden verworfen.", "$P_Min_Valid", "c" ],
[ "3. Parameter: Gültiges Maximum", "Werte oberhalb dieses Limits werden verworfen.", "$P_Max_Valid", "c" ]
],
"Output": [
[ "1. Ausgang: Gefilterter Wert", "Sendet den Wert nur, wenn er im gültigen Bereich liegt. Behält den letzten gültigen Wert.", "$O_Gefilterter_Wert", "x" ]
]
}
Anleitung zur Verwendung:
1. Erstelle eine neue "Eigene Logik (JSON)".
2. Kopiere den obigen Code vollständig hinein und speichere.
3. Verbinde deine Datenquelle mit dem Eingang "1. Eingang: Zu filternder Wert".
4. Passe bei Bedarf die Eingänge "2. Parameter: Gültiges Minimum" und "3. Parameter: Gültiges Maximum" an deine Anforderungen an.
5. Verbinde den Ausgang "1. Ausgang: Gefilterter Wert" mit deiner Zeitreihe. Der Trigger-Mode x am Ausgang ist hier entscheidend.
Damit ist sichergestellt, dass deine Zeitreihe sauber bleibt und nur Werte aufgezeichnet werden, die deinen Kriterien entsprechen.
__________________________________
KI text ende
viel ervolg beim testen
mfg eib-eg und die ki
aber ich füge ihn dennoch mit ein wegen den erklärungen
der code ist im text enthalten und wurde von mir getestet
folgend ist der KI text
___________________________________
Servus Henning,
eine sehr gute und wichtige Frage! Der Ansatz von Robert_Mini ist der goldrichtige Weg. Dein Ziel ist es, Werte, die außerhalb eines definierten Bereichs liegen, nicht nur zu begrenzen, sondern komplett zu verwerfen, sodass sie gar nicht erst in die Zeitreihe geschrieben werden.
Die Herausforderung dabei ist, wie du korrekt beobachtet hast, dass der Limiter alleine den Wert nur "klemmt" (z.B. aus -1 eine 0 macht). Wir müssen ihn aber mit SendExplicit kombinieren, um den Sendevorgang selbst zu steuern.
Nach einigen Tests hat sich gezeigt, dass man eine kleine Falle der Logik-Engine (die "Ein-Zyklus-Verzögerung") umgehen muss, um eine 100% robuste Lösung zu erhalten. Eine einfache Kaskade reicht nicht aus.
Hier ist die finale, validierte Custom Logic, die genau das tut, was du möchtest. Sie ist so aufgebaut, dass sie auch in der Live-Ansicht des Logik-Editors immer den korrekten, letzten gültigen Wert anzeigt.
Die Architektur im Detail:
Prüfen (Limiter): Ein Limiter prüft, ob der eingehende Wert gültig ist. Das Ergebnis (true/false) wird in einer Logik-Variable gespeichert.
Entscheiden (Multiplexer): Eine Weiche entscheidet, welcher Wert für diesen Zyklus "gewinnt". Ist der neue Wert gültig, wird er durchgereicht. Ist er ungültig, wird der letzte gespeicherte gültige Wert beibehalten.
Bedingt Senden (SendExplicit): Nur wenn der Limiter in Schritt 1 "gültig" (true) gemeldet hat, wird der "Gewinner-Wert" aus Schritt 2 explizit an den Ausgang gesendet.
Speichern (Latch): Am Ende des Zyklus wird der "Gewinner-Wert" für den nächsten Durchlauf gespeichert. Dies verhindert die erwähnte Ein-Zyklus-Verzögerung.
Finale Custom Logic "Daten-Verwerfungsfilter"
{
"Level": [
[ "$P_Wert_In", "float", 0.0 ],
[ "$P_Min_Valid", "float", 0.0 ],
[ "$P_Max_Valid", "float", 100.0 ],
[ "$O_Gefilterter_Wert", "float", 0.0 ],
[ "$State_Last_Valid_Value", "float", 0.0 ],
[ "$Lgc_Wert_Ist_Gueltig", "bool", false ],
[ "$Konst_True", "bool", true ]
],
"Module": [
[ "Limiter", "$P_Wert_In", 0, "$Lgc_Wert_Ist_Gueltig", [ "$P_Min_Valid", "$P_Max_Valid" ] ],
[ "Multiplexer", [ "$State_Last_Valid_Value", "$P_Wert_In" ], "$O_Gefilterter_Wert", "$Lgc_Wert_Ist_Gueltig" ],
[ "SendExplicit", "$Lgc_Wert_Ist_Gueltig", "$O_Gefilterter_Wert", 0 ],
[ "Latch", "$O_Gefilterter_Wert", "$State_Last_Valid_Value", "$Konst_True", 0 ]
],
"Input": [
[ "1. Eingang: Zu filternder Wert", "Der Wert, der auf Gültigkeit geprüft wird (z.B. von einem Sensor).", "$P_Wert_In", "c" ],
[ "2. Parameter: Gültiges Minimum", "Werte unterhalb dieses Limits werden verworfen.", "$P_Min_Valid", "c" ],
[ "3. Parameter: Gültiges Maximum", "Werte oberhalb dieses Limits werden verworfen.", "$P_Max_Valid", "c" ]
],
"Output": [
[ "1. Ausgang: Gefilterter Wert", "Sendet den Wert nur, wenn er im gültigen Bereich liegt. Behält den letzten gültigen Wert.", "$O_Gefilterter_Wert", "x" ]
]
}
Anleitung zur Verwendung:
1. Erstelle eine neue "Eigene Logik (JSON)".
2. Kopiere den obigen Code vollständig hinein und speichere.
3. Verbinde deine Datenquelle mit dem Eingang "1. Eingang: Zu filternder Wert".
4. Passe bei Bedarf die Eingänge "2. Parameter: Gültiges Minimum" und "3. Parameter: Gültiges Maximum" an deine Anforderungen an.
5. Verbinde den Ausgang "1. Ausgang: Gefilterter Wert" mit deiner Zeitreihe. Der Trigger-Mode x am Ausgang ist hier entscheidend.
Damit ist sichergestellt, dass deine Zeitreihe sauber bleibt und nur Werte aufgezeichnet werden, die deinen Kriterien entsprechen.
__________________________________
KI text ende
viel ervolg beim testen
mfg eib-eg und die ki
TW 2600_99 seit 1.1.2018 / VPN zu
-
- Reactions:
- Beiträge: 295
- Registriert: Sa Mär 02, 2024 11:04 am
- Hat sich bedankt: 155 Mal
- Danksagung erhalten: 194 Mal
Hallo eib-eg
der Sprachtstil "deiner" KI wirkt auf mich befremdlich. Ich finde die persönliche Ansprache mit "du" und den vorgetäuschten menschlichen Stil komisch.
Das Problem mit einer Logik zu lösen ist möglich, aber das ist ja etwas an der originalen Frage vorbei. Die ist m.E. eher ein Feature Request um direkt bei Verknüpfung eines Objektes für die Zeitreihe einen Filter konfigurieren zu können.
VG
Stefan
der Sprachtstil "deiner" KI wirkt auf mich befremdlich. Ich finde die persönliche Ansprache mit "du" und den vorgetäuschten menschlichen Stil komisch.

► Text zeigen
VG
Stefan
Zuletzt geändert von AndererStefan am Di Jul 22, 2025 11:26 pm, insgesamt 1-mal geändert.
TWS 3500XL ID:1486, VPN aktiv, Reboot nach Rücksprache
-
- Reactions:
- Beiträge: 606
- Registriert: Fr Sep 14, 2018 5:03 pm
- Hat sich bedankt: 1596 Mal
- Danksagung erhalten: 387 Mal
Hm
@AndererStefan
Warum hast du mit deiner ki den Code nicht erstellen lassen und bereitgestellt ?
Nur mal so in den Raum geworfen

Ui Feature Request
Mache eine Ausarbeitung und eine Umfrage
@AndererStefan
Warum hast du mit deiner ki den Code nicht erstellen lassen und bereitgestellt ?
Nur mal so in den Raum geworfen
Ui Feature Request
Mache eine Ausarbeitung und eine Umfrage
TW 2600_99 seit 1.1.2018 / VPN zu
-
- Reactions:
- Beiträge: 4103
- Registriert: So Aug 12, 2018 10:20 am
- Hat sich bedankt: 1433 Mal
- Danksagung erhalten: 1923 Mal
Na der TE hat nur eine Frage gestellt und die zielte explizit auf eine spezielle Logik.
Den Dispatcher jetzt noch neben dem impliziten Format-Mapping um manuelle individuelle Filter zu erweitern klingt für so manchen User logisch das da zu wollen, aber ist am Ende nicht konsequent.
Denn was machst wenn Du genau jene Werte die in die TS geschreiben wurden auch an einer anderen Vernüpfung benötigst, dann baust da jedes Mal im Dispatcher wieder und wieder am selben Quellobjekt zum x. Zielobjekt solche Filter?
So etwas ergibt nur inkonsistente Daten.
Deutlich konsequenter ist es da aus dem Roh-Quellobjekt mit einer Logik ein DQ gesichertes Objekt zu machen und dann eben dieses im Dispatcher direkt an den x verschiedenen Stellen zu verwenden.
Der Dispatcher ist kein Quellsystem.
Wenn dann sollte man bei jenen ansetzen und auf DQ gesicherte Werte Filtern. bei einigen Subsystemen bietet der TWs ja die Filterung der Rohwerte, bevor sie an den Dispatcher ins interne Objektsystem gehen.
Den Dispatcher jetzt noch neben dem impliziten Format-Mapping um manuelle individuelle Filter zu erweitern klingt für so manchen User logisch das da zu wollen, aber ist am Ende nicht konsequent.
Denn was machst wenn Du genau jene Werte die in die TS geschreiben wurden auch an einer anderen Vernüpfung benötigst, dann baust da jedes Mal im Dispatcher wieder und wieder am selben Quellobjekt zum x. Zielobjekt solche Filter?
So etwas ergibt nur inkonsistente Daten.
Deutlich konsequenter ist es da aus dem Roh-Quellobjekt mit einer Logik ein DQ gesichertes Objekt zu machen und dann eben dieses im Dispatcher direkt an den x verschiedenen Stellen zu verwenden.
Der Dispatcher ist kein Quellsystem.
Wenn dann sollte man bei jenen ansetzen und auf DQ gesicherte Werte Filtern. bei einigen Subsystemen bietet der TWs ja die Filterung der Rohwerte, bevor sie an den Dispatcher ins interne Objektsystem gehen.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
-
- Reactions:
- Beiträge: 2245
- Registriert: Do Feb 07, 2019 8:08 am
- Hat sich bedankt: 2034 Mal
- Danksagung erhalten: 893 Mal
Genau da muss die Erweiterung auch rein. Ist ja super bei einigen Systemen schon vorhanden.bei einigen Subsystemen bietet der TWs ja die Filterung der Rohwerte, bevor sie an den Dispatcher ins interne Objektsystem gehen.
Gruß Michael
Timberwolf 950 QL #344 | Mit Internetanbindung | VPN Offen | Reboot nach Absprache | PROD Server
Timberwolf 2500 #602 | VPN offen | TEST Server | Reboot nach Absprache |
Timberwolf 950 QL #344 | Mit Internetanbindung | VPN Offen | Reboot nach Absprache | PROD Server
Timberwolf 2500 #602 | VPN offen | TEST Server | Reboot nach Absprache |
-
- Reactions:
- Beiträge: 295
- Registriert: Sa Mär 02, 2024 11:04 am
- Hat sich bedankt: 155 Mal
- Danksagung erhalten: 194 Mal
Hatte ich, doch dann habe ich bemerkt, dass ich die Anforderung falsch verstanden hatte. Darauf hin hatte mich dann entschieden lieber den bereitgestellen Code prüfen/beschreiben zu lassen als eine vermutlich ähnliche Alternative erstellen zu lassen.
Aber bitte:
► Text zeigen
Zuletzt geändert von AndererStefan am Mi Jul 23, 2025 11:38 pm, insgesamt 1-mal geändert.
TWS 3500XL ID:1486, VPN aktiv, Reboot nach Rücksprache
-
- Reactions:
- Beiträge: 4103
- Registriert: So Aug 12, 2018 10:20 am
- Hat sich bedankt: 1433 Mal
- Danksagung erhalten: 1923 Mal
Ja die Filteroptionen in allen Quellsystemen haben wäre super, ist aber relativ aufwändig und kann mit dem Workaround Logik umgangen werden. Insofern ist es etwas was kommen wird aber nicht mit prio1. In einigen Systemen sind die UI-Elemente zum Einstieg in eine Filterdefinition ja schon vorhanden aber derzeit noch ohne Funktion. Also konzeptionell vergessen ist es auch nicht.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU
-
- Reactions:
- Beiträge: 2245
- Registriert: Do Feb 07, 2019 8:08 am
- Hat sich bedankt: 2034 Mal
- Danksagung erhalten: 893 Mal
Zielstellung ist die Filter gut in allen Systemen zu haben, guter workaround bis dahin Daten über Logik Engine zu schieben und zu filtern.
Gruß Michael
Timberwolf 950 QL #344 | Mit Internetanbindung | VPN Offen | Reboot nach Absprache | PROD Server
Timberwolf 2500 #602 | VPN offen | TEST Server | Reboot nach Absprache |
Timberwolf 950 QL #344 | Mit Internetanbindung | VPN Offen | Reboot nach Absprache | PROD Server
Timberwolf 2500 #602 | VPN offen | TEST Server | Reboot nach Absprache |