NEWS
Aktion innerhalb eines Zeitraumes nur 1x ausführen [gelöst]
-
Hallo zusammen,
das Ergebnis des folgenden Blockly soll sein:
Wenn innerhalb das Objekt "druckt" auf falsch steht soll innerhalb eines bestimmten Zeitraumes bei gleichzeitiger Überprüfung der Temperatur eine Steckdose geschaltet werden. Darüber soll 1x per Telegram informiert werden.
Gelöst habe ich das so:
Ist: die Aktion wird fortlaufend ausgeführt
Wo ist mein Fehler?
-
@devdracon sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Wo ist mein Fehler?
wird der Datenpunkt druckt dauernd aktualisiert?
dann wird deine Variable is switched immer als erstes auf false gesetzt -
@homoran sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
wird der Datenpunkt druckt dauernd aktualisiert?
Wäre auch meine Idee gewesen.
Prüfe besser auf "ist kleiner als letztes" oder auf "wurde geändert" und dann nochmal auf false. -
@codierknecht & @Homoran nein, der DP wird nicht dauernd aktualisiert.
Auf "geändert" zu prüfen ist schwierig, da dieser Trigger u.U. nicht immer im angegebenen Zeitfenster ausgelöst wird. "kleiner als letztes": da ist mir nicht (genau) klar wann dieser Trigger ausgelöst wird...
-
DIese Zeitabfrage könnte das Problemchens Lösung sein.
-
@devdracon sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
@codierknecht & @Homoran nein, der DP wird nicht dauernd aktualisiert.
Sicher?
Datenpunkte werden vom jeweiligen Adapter gerne mal zyklisch "aktualisiert". Unabhängig davon, ob sich nun der Wert geändert hat oder nicht. Dein Trigger würde dann feuern.Kurze Ergänzung zum Post von @DJMarc75 : Zeiträume über den Tageswechsel zu prüfen, führt gerne mal zu Problemen. Die gezeigte Variante umgeht das.
@devdracon sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Auf "geändert" zu prüfen ist schwierig, da dieser Trigger u.U. nicht immer im angegebenen Zeitfenster ausgelöst wird
Da muss natürlich zusätzlich die Zeit abgeprüft werden.
@devdracon sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
"kleiner als letztes": da ist mir nicht (genau) klar wann dieser Trigger ausgelöst wird...
Der feuert, wenn sich der Wert ändert und - wie der Name es sagt - der Wert kleiner als der zuletzt übermittelte Wert ist.
Boolean werden intern als 0 (false) oder 1 (true) dargestellt ***. Der Trigger feuert in dem Fall also nur dann, wenn der Wert vontrue
auffalse
wechselt.*** Per Definition ist false = 0 und true ist alles was nicht 0 ist - aber das lassen wir hier mal unter den Tisch fallen.
-
@devdracon sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Hallo zusammen,
das Ergebnis des folgenden Blockly soll sein:
Wenn innerhalb das Objekt "druckt" auf falsch steht soll innerhalb eines bestimmten Zeitraumes bei gleichzeitiger Überprüfung der Temperatur eine Steckdose geschaltet werden. Darüber soll 1x per Telegram informiert werden.
Vielleicht verstehe ich das auch falsch, aber ist der Trigger nicht falsch? Was ist, wenn die Temperatur sich verändert wenn druck auf falsch steht? Dann bekommst du es nicht mit. Müsste man nicht eher auf die Temperatur triggern und da dann die Zeit und den Druckstatus mit abfragen?
Oder soll die Steckdose nur dann ausgeschaltet werden wenn Druck ausgeschaltet wurde, es ist zwischen x und y Uhrzeit und die Temperatur ist <23
Was ist wenn die Temperatur zB 1 Minute nach dem ausschalten <23 wird? -
@codierknecht said in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Sicher?
Datenpunkte werden vom jeweiligen Adapter gerne mal zyklisch "aktualisiert". Unabhängig davon, ob sich nun der Wert geändert hat oder nicht. Dein Trigger würde dann feuern.Das war mir bisher nicht bekannt. - Das wäre jedoch auch ein wenig zuverlässiger Trigger?
Kurze Ergänzung zum Post von @DJMarc75 : Zeiträume über den Tageswechsel zu prüfen, führt gerne mal zu Problemen. Die gezeigte Variante umgeht das.
Guter Hinweis - werde ich berücksichtigen. Dank an @DJMarc75
@devdracon sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
"kleiner als letztes": da ist mir nicht (genau) klar wann dieser Trigger ausgelöst wird...
Der feuert, wenn sich der Wert ändert und - wie der Name es sagt - der Wert kleiner als der zuletzt übermittelte Wert ist.
Boolean werden intern als 0 (false) oder 1 (true) dargestellt ***. Der Trigger feuert in dem Fall also nur dann, wenn der Wert vontrue
auffalse
wechselt.*** Per Definition ist false = 0 und true ist alles was nicht 0 ist - aber das lassen wir hier mal unter den Tisch fallen.
Danke für die Erläuterung.
@nordischerjung said in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Oder soll die Steckdose nur dann ausgeschaltet werden wenn Druck ausgeschaltet wurde, es ist zwischen x und y Uhrzeit und die Temperatur ist <23
Ja, so soll das ein. (Hintergrund: ein laufender Druck endet später am Abend, dann kann nach Abkühlen die Steckdose ausgeschaltet werden)
Was ist wenn die Temperatur zB 1 Minute nach dem ausschalten <23 wird?
Dann ist die Bedingung <23 doch immer noch wahr?
-
@devdracon sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Dann ist die Bedingung <23 doch immer noch wahr?
Ja aber der Trigger hat dann ausgelöst und geprüft ob die Zeit stimmt und ob die Temperatur <23 ist. Wenn die Temperatur dann zB 23,5°C ist, wird die Steckdose nicht ausgeschaltet.
Wenn die Temperatur <23 wird, schaltet die Steckdose nicht aus, da der Trigger nicht kommt, weil der Druck schon aus ist.In deinem Fall schaltet die Steckdose nur in dem Moment aus, wenn Druck wurde beendet UND Temperatur ist <23 UND Zeit ist zwichen x und y.
Ist eins davon nicht erfüllt, bleibt die Steckdose an. -
@nordischerjung
Guter Einwand!@devdracon
Du bräuchtest also einen zweiten Trigger, der die (sinkende) Temperatur überwacht und die Steckdose ausschaltet wenn die Temp. unter 23°C sinkt und der Druck beendet ist. -
@codierknecht sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Du bräuchtest also einen zweiten Trigger, der die (sinkende) Temperatur überwacht und die Steckdose ausschaltet wenn die Temp. unter 23°C sinkt und der Druck beendet ist.
So würde ich das auch machen:
-
@nordischerjung said in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Ja aber der Trigger hat dann ausgelöst und geprüft ob die Zeit stimmt und ob die Temperatur <23 ist. Wenn die Temperatur dann zB 23,5°C ist, wird die Steckdose nicht ausgeschaltet.
Wenn die Temperatur <23 wird, schaltet die Steckdose nicht aus, da der Trigger nicht kommt, weil der Druck schon aus ist.In deinem Fall schaltet die Steckdose nur in dem Moment aus, wenn Druck wurde beendet UND Temperatur ist <23 UND Zeit ist zwichen x und y.
Ist eins davon nicht erfüllt, bleibt die Steckdose an.Danke für den Hinweis!
@djmarc75 said in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
@codierknecht sagte in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
Du bräuchtest also einen zweiten Trigger, der die (sinkende) Temperatur überwacht und die Steckdose ausschaltet wenn die Temp. unter 23°C sinkt und der Druck beendet ist.
So würde ich das auch machen:
Der Ansatz ist gut, Danke dafür!
...ich merke, das ein -bei mir- wiederkehrendes Problem ist, das ich versuche zuviele Aktionen mit einem Trigger zu "erschlagen".
Ich implementiere das o.g. Blockly auf meine Anforderungen hin und berichte dann hier das Ergebnis!
-
@devdracon Und evtl noch ein CRON um 20 Uhr UND nicht Druck UND Steckdose ist noch an
-
@nordischerjung said in Aktion innerhalb eines Zeitraumes nur 1x ausführen:
@devdracon Und evtl noch ein CRON um 20 Uhr UND nicht Druck UND Steckdose ist noch an
...warum? Der Cron dann als separater Trigger? Würde der dann -gemäß deiner Definition- nicht den Parameter Temp außen vor lassen?
-
@devdracon
Das hat ja nix mit dem Trigger zu tun. Zusätzliche Bedingungen wären innerhalb des Trigger natürlich zu prüfen.Wenn ich das richtig interpretiere, willst Du zwischen 20:00 und 05:00 Uhr die Dose für den Drucker komplett ausschalten. Tagsüber soll sie einfach an bleiben.
Du bräuchtest 3 Trigger ... naja - eigentlich nur 2, da der Fall "Druck wird beendet und Temperatur ist in diesem Moment bereits < 23°C wohl kaum eintreten wird.
- Einen Trigger auf die sinkende Temperatur. Sinkt sie unter 23°C und es ist Nacht, wird die Dose ausgeschaltet.
- Einen Trigger auf 20:00 Uhr. Ist die Temperatur um diese Zeit bereits < 23°C, wird ebenfalls die Dose ausgeschaltet.
Du musst ja den Fall prüfen, dass der Druck vor 20:00 Uhr beendet wurde und die Temperatur dann unter 23°C sinkt.
In diesem Fall wäre ja die Dose an geblieben und soll dann um 20:00 Uhr für die Nacht ausgeschaltet werden.
-
@devdracon um die Worte von @Codierknecht zu bebildern:
Der Zeitplan prüft um 20 Uhr ob noch gedruckt wird und wie es mit der Temp aussieht.
Wird nicht gedruckt und ist die Temp schon unter 23 Grad dann Dose aus. -
@djmarc75 & @Codierknecht Danke für eure Erklärung & Unterstützung!
-
Das Beispiel von @DJMarc75 liefert das gewünschte Ergebnis; vielen Dank an alle die sich beteiligt haben!
-
@devdracon sagte: Das Beispiel von @DJMarc75 liefert das gewünschte Ergebnis
Packt man den gemeinsamen Teil in eine Funktion, wird es noch übersichtlicher.
-
@paul53 müsste hier nicht auch bei der Zeit auf "nicht zwischen" geprüft um den Tageswechsel zu vermeiden?