Seite 1 von 1

[V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Di Jul 22, 2025 1:13 pm
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

Re: (4.5 Insider Preview 7) Datenfilter in Logik bzw. Zeitreihe

Verfasst: Di Jul 22, 2025 8:39 pm
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

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Di Jul 22, 2025 9:55 pm
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

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Di Jul 22, 2025 11:26 pm
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

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Mi Jul 23, 2025 12:20 am
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 😉

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Mi Jul 23, 2025 5:42 pm
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.

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Mi Jul 23, 2025 9:05 pm
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.

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Mi Jul 23, 2025 11:37 pm
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

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Do Jul 24, 2025 5:24 pm
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.

Re: [V4.5 IP7] Datenfilter in Logik bzw. Zeitreihe

Verfasst: Do Jul 24, 2025 6:18 pm
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.