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

Informationen und Diskussionen über Logik-Engine und Logik-Editor
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
Antworten

Ersteller
hkettler
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

#1

Beitrag von hkettler »

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
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

Robert_Mini
Reactions:
Beiträge: 3907
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1275 Mal
Danksagung erhalten: 2220 Mal

#2

Beitrag von Robert_Mini »

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
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

eib-eg
Reactions:
Beiträge: 606
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1596 Mal
Danksagung erhalten: 387 Mal

#3

Beitrag von eib-eg »

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
TW 2600_99 seit 1.1.2018 / VPN zu

AndererStefan
Reactions:
Beiträge: 295
Registriert: Sa Mär 02, 2024 11:04 am
Hat sich bedankt: 155 Mal
Danksagung erhalten: 194 Mal

#4

Beitrag von AndererStefan »

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. :shifty:
► Text zeigen
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
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

eib-eg
Reactions:
Beiträge: 606
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1596 Mal
Danksagung erhalten: 387 Mal

#5

Beitrag von eib-eg »

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 😉
TW 2600_99 seit 1.1.2018 / VPN zu

gbglace
Reactions:
Beiträge: 4103
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1433 Mal
Danksagung erhalten: 1923 Mal

#6

Beitrag von gbglace »

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.
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

Sun1453
Reactions:
Beiträge: 2245
Registriert: Do Feb 07, 2019 8:08 am
Hat sich bedankt: 2034 Mal
Danksagung erhalten: 893 Mal

#7

Beitrag von Sun1453 »

bei einigen Subsystemen bietet der TWs ja die Filterung der Rohwerte, bevor sie an den Dispatcher ins interne Objektsystem gehen.
Genau da muss die Erweiterung auch rein. Ist ja super bei einigen Systemen schon vorhanden.
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 |

AndererStefan
Reactions:
Beiträge: 295
Registriert: Sa Mär 02, 2024 11:04 am
Hat sich bedankt: 155 Mal
Danksagung erhalten: 194 Mal

#8

Beitrag von AndererStefan »

eib-eg hat geschrieben: Mi Jul 23, 2025 12:20 am @AndererStefan
Warum hast du mit deiner ki den Code nicht erstellen lassen und bereitgestellt ?
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
VG Stefan
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

gbglace
Reactions:
Beiträge: 4103
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1433 Mal
Danksagung erhalten: 1923 Mal

#9

Beitrag von gbglace »

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

Sun1453
Reactions:
Beiträge: 2245
Registriert: Do Feb 07, 2019 8:08 am
Hat sich bedankt: 2034 Mal
Danksagung erhalten: 893 Mal

#10

Beitrag von Sun1453 »

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 |
Antworten

Zurück zu „Logikengine & Logik-Editor“