NEWS
Mehrfach Triggern verhindern? (Ohne Verlust)
-
@newpicsel In Node-Red gibt es in der trigger Node natürlich so eine Funktion. Du musst im Prinzip mehrere Timeouts starten und stoppen und zwar immer in Abhängigkeit der ID - in NodeRed nennt man das topic.
-
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
Wer kennt es nicht, Trigger werden ab und an mal mehrfach ausgelöst…
ich!
was ist denn dein Problem?
Glaskugel meint:
Musst du den timeout "absichern" damit er nicht mehrfach gestartet und deswegen nicht mehr zu stoppen ist? -
@homoran said in Mehrfach Triggern verhindern? (Ohne Verlust):
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
Wer kennt es nicht, Trigger werden ab und an mal mehrfach ausgelöst…
ich!
Es gibt in deinem System kein Objekt, welches in sehr kurzer Zeit vielleicht zwei mal aktualisiert?
Welches dann natürlich auch zwei mal einen trigger auslösen würde?was ist denn dein Problem?
Glaskugel meint:
Musst du den timeout "absichern" damit er nicht mehrfach gestartet und deswegen nicht mehr zu stoppen ist?Ich bin sehr dankbar über jede Hilfe, aber deine Glaskugel scheint defekt, ich habe mein Problem doch beschrieben, es kann sein dass eine ID den trigger unter Umständen z.B. zwei mal auslöst, dies würde ich gerne unterbinden.
Da allerdings mehrere IDs anliegen und es wichtig ist, dass diese auch durchgeführt werden, kann ich zumindest nicht ohne weiteres ein timeout einfügen den ich direkt vorher stoppe.
(Würde auch die erste trigger Auslösung einer anderen ID stoppen)Ich hoffe das war etwas verständlicher, fragt einfach wenn etwas unklar ist, meine Glaskugel ist leider auch defekt und ich weiß somit leider nicht immer gleich was genau euch nicht klar ist.
-
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
ich habe mein Problem doch beschrieben,
leider nein.
Nur die Ursache.zu welchem Problem diese Ursache führt, damit man dieses Problem vermeiden kann, leider nicht.
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
kann ich zumindest nicht ohne weiteres ein timeout einfügen den ich direkt vorher stoppe.
nein, aber den timeout in ein
falls nicht timeout
packen.@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
Es gibt in deinem System kein Objekt, welches in sehr kurzer Zeit vielleicht zwei mal aktualisiert?
kann ich mich zwar auch nicht erinnern, aber deine Formulierung klang für mich, als ob du ein Prellen eines Triggerevents meintest, was zu mehrfachem triggern führt, obwohl nur ein echter Trigger vorliegt
-
@mickym said in Mehrfach Triggern verhindern? (Ohne Verlust):
@newpicsel In Node-Red gibt es in der trigger Node natürlich so eine Funktion. Du musst im Prinzip mehrere Timeouts starten und stoppen und zwar immer in Abhängigkeit der ID - in NodeRed nennt man das topic.
Das wäre genau das was ich bräuchte!
Mir ist nur nicht klar wie ich diese Abhängigkeit schaffen kann, am einfachsten wäre wenn ich den den Namen der variable des timeouts mit einer variable füllen könnte(z.B. timeout_ObjektID) variabel für den timeout setzen könnte.
Sehe hier aber zumindest über den Block keine Möglichkeit, über eine Funktion müsste es aber gehen…Danke dir
-
@newpicsel Tja das ist halt der Nachteil des Puzzleteils.
Aber ihr liebt ja alle das Puzzeln oder JS schreiben. In node-red ist das so einfach mit der Trigger Node:
Dafür kannst in NodeRed - nicht Deinen schönen Selektor nehmen, sondern musst mit Wildcards arbeiten und dann kannst über RegEx die topics herausfiltern. Ist bissi umständlicher - geht aber auch-
Noch besser ist die filter Node - so dass diese nicht zeitabhängig, sondern Werte basiert arbeitet. Das hast Du aber doch eigentlich mit Wert "geändert" auch implementiert. Du möchtest also Mehrfachtrigger verhindern, auch wenn sich der Wert geändert hat. Dann wirst Du aber mit Verlusten ggf. leben müssen.
-
Ok, meine Formulierung war wohl etwas unklar
@newpicsel said in Mehrfach Triggern verhindern? (Ohne Verlust):
Dies bedeutet aber auch ein Verlust, wenn mehrere Objekte Anliegen und diese "gleichzeitig" auslösen.
Im Nachhinein hätte ich es wirklich besser formulieren können, aber dies sollte mein Problem beschreiben
Was genau meinst du mit:
@homoran said in Mehrfach Triggern verhindern? (Ohne Verlust):nein, aber den timeout in ein
falls nicht timeout
packen.Meinst den "Stop timeout", damit dieser nur greift wenn die ID gleich ist, und die eigentliche Aktion in den timeout?
Könnte wenn das timing schlecht ist auch den falschen timeout stoppen
Oder verstehe ich dich falsch? -
@newpicsel Die Frage, die sich stellt - warum Du überhaupt mit Timeouts arbeitest? - Nachdem nur geänderte Werte triggern, hast Du doch Datenverlust, wenn Du mit den Timern arbeitest?
-
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
Meinst den "Stop timeout",
nein, ich meine dass ein neuer timeout nur gestartet wird, wenn noch kein timeout läuft.
Erfüllt wahrscheinlich aber auch nicht deine Kriterien.Ich hab aber immer noch nicht verstanden was genau die Erkennung unterschiedlicher Trigger für den Timeout bedeuten sollen.
Du triggerst auf irgendwelche Netatmo DPs und willst irgend einen state auf wahr setzen, aber nicht wenn der selbe Datenpunkt innerhalb von 3 Sekunden zuschlägt.
Wenn jetzt aber 2 verschiedene Datenpunkte alternierend im Millisekundentakt feuern, soll geschaltet werden
-
@mickym said in Mehrfach Triggern verhindern? (Ohne Verlust):
@newpicsel Die Frage, die sich stellt - warum Du überhaupt mit Timeouts arbeitest? - Nachdem nur geänderte Werte triggern, hast Du doch Datenverlust, wenn Du mit den Timern arbeitest?
Genau deshalb würde ich ungerne mit den Timern arbeiten!
Mir fällt dazu aber keine Lösung ein…Mit dem Verlust der gleichen ID des Auslösers kann ich in dem Fall leben, allerdings nicht mit dem Verlust, sollte eine weitere ID den trigger quasi zeitgleich ausgelöst haben, dies soll schön nacheinander abgearbeitet werden.
-
@newpicsel Nun wenn Du einfach den timer weglässt, dann wird das doch vom System gequeued. Sprich auch wenn gerade ein Trigger in Bearbeitung ist (und getriggert wird ja nur bei Wertänderungen), dann geht Dir doch im Normalfall nichts verloren?
-
@newpicsel sagte: Funktioniert leider nicht
Du setzt den Trigger-Datenpunkt auf wahr, auch dann, wenn er schon wahr enthält. Ändere den Trigger auf "ist kleiner als letztes".
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
Ein Timeout
Es bräuchte zu jedem Datenpunkt einen eigenen Timeout. Da aber die Datenpunkte nicht bekannt sind (RegExp), steht es schlecht um die Umsetzung.
-
@homoran said in Mehrfach Triggern verhindern? (Ohne Verlust):
Du triggerst auf irgendwelche Netatmo DPs und willst irgend einen state auf wahr setzen, aber nicht wenn der selbe Datenpunkt innerhalb von 3 Sekunden zuschlägt.
Wenn jetzt aber 2 verschiedene Datenpunkte alternierend im Millisekundentakt feuern, soll geschaltet werden
Exakt
(Die DPs können von unterschiedlichen Quellen geändert werden, weshalb es durchaus vorkommen kann, dass sich diese Werte nahezu zeitgleich ändern, wobei hier dann tatsächlich nur jeweils die letzte Änderung eines gleichen DPs relevant ist.)Den steuere Block hab ich nur als Beispiel eingefügt
da folgen einige abfragen wie (falls mache (falls mache () sonst falls () sonst()) sonst())
-
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
nur jeweils die letzte Änderung eines gleichen DPs relevant ist
wenn ich es jetzt richtig verstanden habe, könnte dann sogar unter 3 Sekunden der selbe DP noch einmal triggern, wenn zwischendurch ein anderer DP getriggert hatte?
dann würde nicht einmal die Idee von @paul53 helfen für jeden möglichen Datenpunkt ein fixes timeout festzulegen.
Dann brauchst du im Prinzip gar keinen timeout
wenn nie derselbe Datenpunkt zweimal ohne Wechsel auslösen darf -
@paul53 said in Mehrfach Triggern verhindern? (Ohne Verlust):
@newpicsel sagte: Funktioniert leider nicht
Du setzt den Trigger-Datenpunkt auf wahr, auch dann, wenn er schon wahr enthält. Ändere den Trigger auf "ist kleiner als letztes".
Der würde dann bei jeder anderen ID auslösen nur nicht bei der gleichen?
Interessant!
Allerdings wie verhält es sich dann, wenn zwischenzeitlich kein anderer DPs den trigger auslöst? Unwahrscheinlich aber nicht unmöglich muss ich zumindest annehmen@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
Ein Timeout
Es bräuchte zu jedem Datenpunkt einen eigenen Timeout. Da aber die Datenpunkte nicht bekannt sind (RegExp), steht es schlecht um die Umsetzung.
Deshalb die Überlegung den timeout über eine Funktion zu erstellen, bei der ich die variable frei setzen kann und hier die ObjektID in den Namen der variable einfließen lassen kann…
(Nur eine undurchdachte Überlegung) -
Richtig, fixe timeout für jeden DP fällt auch raus, da diese unbekannt sind
ist etwas komplexer die Geschichte dahinter…
Aber leider kann es durchaus vorkommen, dass (allerdings nicht relevant unter 3sek) der selbe DP den trigger auslösen könnte.
-
@newpicsel sagte in Mehrfach Triggern verhindern? (Ohne Verlust):
Aber leider kann es durchaus vorkommen, dass (allerdings nicht relevant unter 3sek) der selbe DP den trigger auslösen könnte
können kann er!
sollen aber wohl nicht.aber nach 3 Sekunden ohne anderen triggernden Datenpunkt, darf er wieder?
Das muss dann in der Logik abgefangen werden.
im Trigger ist das nicht möglich -
@newpicsel sagte: Trigger werden ab und an mal mehrfach ausgelöst…
Was sind das für Datenpunkte, die sich so verhalten (kurz aufeinander den Wert ändern)?
-
@paul53 said in Mehrfach Triggern verhindern? (Ohne Verlust):
Was sind das für Datenpunkte, die sich so verhalten (kurz aufeinander den Wert ändern)?
Das sind soll wert DP einer Heizung, diese werden hauptsächlich aus der API aktualisiert, allerdings kann hier jeder seinen Intervall selber einstellen und dann kommen noch manuelle Änderungen aus iobroker hinzu sowie Änderungen von Fenstersensoren.
Ich sag mal so, dass funktioniert schon so, nur ist es halt irgendwie auch nicht schön!
In der Regel erfolgen Änderungen nicht parallel aber ich kann nicht von der Regel ausgehen, es kann durch eine Intervall Aktualisierung durchaus auch vorkommen, dass sich Aktualisierungen überschneiden, auch gerade weil einige Änderungen eine Aktualisierung beinhalten was im Zweifel wenn es mal hart auf hart kommt, 2-3 sehr kurze Aktualisierungen bedeuten könnte! Ich versuche es natürlich zu unterbinden aber ich rechne eher mit der Ausnahme als mit der Regel… -
Eine Möglichkeit, die ich bei sowas nutze, ist die zyklische Abfrage von Signalen. Also z.B. Temperaturen oder Energieverbrauch im 30s Takt. Macht gegenseitige Abhängigkeiten, Regler, komplexe Logik usw. einfacher.
Ist in der Prozesstechnik weit verbreitet.