NEU! UPGRADE IP 11 verfügbar!
NEU! LICHTWIDGET - DPT 7.600 - Logik Manager Update - sowie viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/B9MUEJj2

Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Ab sofort kann jeder die neue VISU & IFTTT testen. Info: viewtopic.php?f=8&t=5074

Release V 4 am 15. Juni 2024
Es gibt nun einen fixen Termin. Info: viewtopic.php?f=8&t=5117

NEU! Ausführliches Video Tutorial zur VISU
Jetzt werden alle Fragen beantwortet. Das Video: https://youtu.be/_El-zaC2Rrs

[FINR] Logik verzögert triggern/abarbeiten

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

Ersteller
Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

Logik verzögert triggern/abarbeiten

#1

Beitrag von Dragonos2000 »

Hi,

ich stehe gerade vor dem Problem, dass ich eine Logik verzögert abarbeiten will, nachdem diese eigentlich durch einen Change am Eingang getriggert wurde.
Konkreter Fall: Meine Wetterstation liefert mir 4 Helligkeitswerte, die bei Änderungen und zyklisch gesendet werden und nicht gleichzeitig kommen. D.h. meine Logik fängt bei einem neuen Wert auf dem ersten Helligkeitseingang mitunter schon an zu rechnen, mit veralteten Helligkeitswerten der anderen Eingänge.
Einfachste High-Level Lösung wäre aus meiner Sicht die Abarbeitung 1s zu verzögern, dann sind alle Werte gültig. Oder eine Ein-/Ausschaltverzögerung auf dem Ausgang mit der LE "eingebauten" Lösung. Diese sendet im Falle der Ein-/Ausschaltverzögerung nicht nur den aktuellen Wert, sondern auch noch den vorangegangenen (Beta25).
Die Logik soll durch Änderungen an den Eingängen triggern, nicht zyklisch.

Hat da jemand eine schlaue und schlanke Idee?
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

StefanW
Elaborated Networks
Reactions:
Beiträge: 9775
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4879 Mal
Danksagung erhalten: 7820 Mal
Kontaktdaten:

#2

Beitrag von StefanW »

Hallo Jochen,

stelle halt die ersten drei Eingänge vom Triggerverhalten so, dass diese keinen Berechnungstrigger auslösen und nur bei Eintreffen auf den vierten Wert wird getriggert. Oder geht das nicht, weil die Reihenfolge der Meldungen unterschiedlich ist?

Ansonsten bräuchte man ein vierfach-Und mit Zeitfenster... (wenn alle vier Werte innerhalb Zeitraum X eintreffen, wird eine 1 am Ausgang gesendet)...

mal sehen, was dem anderen Stefan dazu einfällt

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Ersteller
Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#3

Beitrag von Dragonos2000 »

Hi Stefan,

wäre ne Idee. Muss mir das Timing ansehen, ob die konsistent in der gleichen Reihenfolge kommen. Dank TWS KNX Busmonitor ja kein Problem :handgestures-thumbsup:
Zuletzt geändert von Dragonos2000 am Sa Aug 03, 2019 2:05 pm, insgesamt 2-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#4

Beitrag von S. Kolbinger »

Hallo Jochen,
Dragonos2000 hat geschrieben: Fr Aug 02, 2019 1:02 pm Einfachste High-Level Lösung wäre aus meiner Sicht die Abarbeitung 1s zu verzögern, dann sind alle Werte gültig.
hat etwas länger gedauert. Musste er erst zum joggen, da fällt mir dann auch meist was ein.
Und wie ich als alter Latriner immer zu sagen pflege: "Mens sana in campari soda" (oder so ähnlich) ;)

Ich glaube, ich habe da die richtige Erweiterung für deine Custom-Logik.
Folgende Erweiterung in deine Custom-Logik "mergen" und deine Ausgänge auf Sende-Option "T" (on timer) umstellen:

Code: Alles auswählen

    "Level": [
        ["$ConstTrue","bool",true],
        ["$WaitTime","float",1],
    ],
    "Module": [
        ["Monoflop","$ConstTrue","-$ConstTrue",0,"$WaitTime",0],
    ],
    "Input": [
        ["Wartezeit","Wartezeit nach Eingang des ersten Triggers bevor Ergebnis gesendet wird","$WaitTime","c"],
    ],
    "Output": [
    ]
Beispiel:
Vorher:

Code: Alles auswählen

{
    "Level": [
        ["$VAR<In!>","float",0],
        ["$Min","float",0],
        ["$Max","float",0],
        ["$Mean","float",0],
        ["$Median","float",0],
        ["$VAR<Inhibit?>","bool",false]
    ],
    "Module": [
        ["Break",["$VAR<Inhibit?>"]],
        ["Statistic",["$VAR<In!>"],"$Min","$Max","$Mean","$Median"]
    ],
    "Input": [
        ["Eingang","Eingangs-Wert","$VAR<In!>","c"],
        ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
    ],
    "Output": [
        ["Min","Minimum","$Min","t"],
        ["Max","Maximum","$Max","t"],
        ["Mean","Mittelwert","$Mean","t"],
        ["Median","Zentralwert","$Median","t"]
    ]
}
Nachher:

Code: Alles auswählen

{
    "Level": [
        ["$VAR<In!>","float",0],
        ["$Min","float",0],
        ["$Max","float",0],
        ["$Mean","float",0],
        ["$Median","float",0],
        ["$ConstTrue","bool",true],
        ["$WaitTime","float",1],
        ["$VAR<Inhibit?>","bool",false]
    ],
    "Module": [
        ["Break",["$VAR<Inhibit?>"]],
        ["Monoflop","$ConstTrue","-$ConstTrue",0,"$WaitTime",0],
        ["Statistic",["$VAR<In!>"],"$Min","$Max","$Mean","$Median"]
    ],
    "Input": [
        ["Eingang","Eingangs-Wert","$VAR<In!>","c"],
        ["Wartezeit","Wartezeit nach Eingang des ersten Triggers bevor Ergebnis gesendet wird","$WaitTime","c"],
        ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
    ],
    "Output": [
        ["Min","Minimum","$Min","t"],
        ["Max","Maximum","$Max","t"],
        ["Mean","Mittelwert","$Mean","t"],
        ["Median","Zentralwert","$Median","t"]
    ]
}
Das sieht dann, nach hinzufügen der gewünschten Eingänge, in etwa so aus:
Bild


Durch einen neuen Wert an einem der Eingänge wird der Timer gestartet.
Nach Ablauf der Wartezeit wird die Logik berechnet und die Werte an den Ausgängen gesendet.
Wenn während der Timer läuft, neue Werte an den Eingängen eintreffen, wird die Logik zwar auch berechnet, aber es wird nichts an den Ausgängen gesendet (wegen der Sende-Option "T" = "on timer").

Alternativ könnte man auch den retirggerbaren Timer (Monoflop) verwenden (mit Trigger-Option 1):
["Monoflop","$ConstTrue","-$ConstTrue",0,"$WaitTime",1]
Dann würde die Logik mit der Ausgabe der Werte solange warten bis (die Dauer der Wartezeit lang) Ruhe an den Eingängen herrscht.
Jeder neue Wert an den Eingängen würde dann den Timer "retriggern" und erst wenn eine Wartezeit lang kein neuer Wert eingetroffen ist, werden die Ausgänge gesendet.
Zuletzt geändert von S. Kolbinger am Sa Aug 03, 2019 4:43 pm, insgesamt 1-mal geändert.
Gruß,
Stefan K.

Ersteller
Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#5

Beitrag von Dragonos2000 »

Hallo Stefan,

vielen herzlichen Dank! Das wäre echt simpel und schlank :bow-yellow:
Musste das aber trotzdem mehrmals lesen und hab' immer noch Stirnrunzeln :confusion-scratchheadyellow:
Verständnisfragen:
Bleibt die Logik beim Monoflop stehen, bis der Timer abgelaufen ist? Oder läuft der Timer los und noch während der Timer läuft, wird auch schon die Statistik berechnet und nur noch nicht gesendet?
Wenn ich mehrere Timer in einer Customlogik verwende: Welcher Timer zieht dann bei Sendeoption "T" ?

Btw.: Die Werte kommen in der Reihenfolge inkonsistent...(um die Frage von vorher noch zu beantworten).
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#6

Beitrag von Dragonos2000 »

Und Stefan: Kein Ding, dass es etwas gedauert hat. Zumal wir auch Wochenende haben! :romance-grouphug:
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#7

Beitrag von S. Kolbinger »

Hallo Jochen,
Dragonos2000 hat geschrieben: Sa Aug 03, 2019 8:29 pm Bleibt die Logik beim Monoflop stehen, bis der Timer abgelaufen ist? Oder läuft der Timer los und noch während der Timer läuft, wird auch schon die Statistik berechnet und nur noch nicht gesendet?
Die Logik bleibt nicht stehen. Es wird weiter berechnet, aber erst nach Ablauf des Timers, wird dann auch das Ergebnis gesendet.

Eine alternative Lösung wäre, die Ausführung der Logik zu unterbrechen, bis der Timer abgelaufen ist.
Da gibt es aktuell aber noch ein Problem, dessen Fix es leider nicht mehr in diese Version geschafft hat.
Aber der sollte aller Wahrscheinlichkeit nach beim nächsten Bug-Fix dabei sein.
Dragonos2000 hat geschrieben: Sa Aug 03, 2019 8:29 pm Wenn ich mehrere Timer in einer Customlogik verwende: Welcher Timer zieht dann bei Sendeoption "T" ?
Die Sende-Option "T" (on timer) bezieht sich auf alle Timer-Module in der Logikzelle und ist nicht selektiv.
Mögliche Timer-Module sind:
  • Monoflop (single shot timer): Triggert nach Ablauf der Zeitdauer
  • Clock (zyklischer Timer) : Triggert jedesmal nach Wechsel des Taktzustandes
  • Cron (Uhrzeit abhängiger Timer): Triggert jedesmal bei erreichen der eingestellten Zeit(en)
Gruß,
Stefan K.

Ersteller
Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#8

Beitrag von Dragonos2000 »

Ich hab's mal so implementiert und beobachte die Tage das Verhalten. Im Doktormodus de LE ist das irgendwie nicht so richtig visualisierbar. Da sieht es aus, als würde der Ausgang einfach zweimal senden (einmal sofort und dann nach der eingestellten Verzögerung).
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

S. Kolbinger
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 559 Mal

#9

Beitrag von S. Kolbinger »

Dragonos2000 hat geschrieben: Mo Aug 05, 2019 9:41 am Im Doktormodus de LE ist das irgendwie nicht so richtig visualisierbar. Da sieht es aus, als würde der Ausgang einfach zweimal senden (einmal sofort und dann nach der eingestellten Verzögerung).
Das ist noch ein Anzeigefehler im Doktor-Modus. Das werden wir noch korrigieren.
Gruß,
Stefan K.

Ersteller
Dragonos2000
Reactions:
Beiträge: 2184
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 482 Mal
Danksagung erhalten: 889 Mal

#10

Beitrag von Dragonos2000 »

Ich werde die TImer-Infos von oben in die KB einbauen. @Robert_Mini ok? Oder willst Du das machen?
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit
Antworten

Zurück zu „Logikengine & Logik-Editor“