Ich habe ein Problem mit einer verzögerten Ausschalt-Szene, die mit einem Bewegungsmelder verbunden ist. In meiner Szene schalte ich die Lichter X Minuten nach dem Auslösen aus. Wenn während dieser Zeit eine Bewegung erkannt wird, möchte ich die Ausschalt-Szene zurücksetzen, um zu verhindern, dass die Lichter zu nah an der Erkennung ausgeschaltet werden und eine unnötige Ausschaltung erfolgt.
Ich sehe zwei mögliche Funktionen, um mein Problem zu lösen.
Entweder in einer Szene A die wartende Szene B zu stoppen
Oder die Dauer seit der letzten Erkennung abrufen (wie im Dashboard)
Hier sehe ich zwei Möglichkeiten, dies umzusetzen:
- Entweder als Funktion wie „Warten“ im Aktionen-Bereich oder besser im Auslöser-Bereich.
solange ( [Erkennungsdauer] < X Minuten/Stunden…) { warten }
- Oder den Wert abrufen und dann bedingte Logik in der Szene anwenden. (Die Ausschalt-Szene, die vor der neuen Erkennung wartet, wird nicht beendet.)
@pierre-gilles: Das ist nicht schlimm wegen der Frist, wichtig ist, dass die Anforderung in einer zukünftigen Version behandelt wird. (Das verhindert, dass mich mein Sohn anruft und mich anschreit, weil das Licht zu schnell ausgeht.)
Hallo,
Ich habe das gleiche Problem:
Ich habe einen Bewegungsmelder und ich möchte, dass die Erkennung für eine bestimmte Zeit pausiert.
Eine Lösung wäre, eine Variable « etat_precedent » zu erstellen, die auf 1 gesetzt wird, wenn eine erste Erkennung erfolgt, entweder durch Änderung des Sensorzustands oder durch Abruf des letzten Sensorzustands.
Das würde so funktionieren:
Auslöser: Änderung des Gerätezustands (=Erkennung) UND « etat_precedent » = 0
Aktionen: Nachricht senden (zum Testen) UND « etat_precedent » = 1 (Variable auf 1 setzen)
Aktion: Warten auf die gewünschte Dauer
Aktion: « etat_precedent » = 0 (Variable auf 0 setzen)
Tatsächlich wären zwei Aktionen « Variable erstellen… » und « Variable auf … setzen » gut
In einem Aktionsblock:
Letzten Zustand des Geräts Sensor abrufen UND Variable « etat_precedent » erstellen UND « etat_precedent » auf den gewünschten Wert setzen (allerdings glaube ich, dass man den Zustandswert nicht im selben Aktionsblock wie « Letzten Zustand abrufen » verwenden kann, was logisch ist, da es sequenziell abläuft)
Also eher:
Aktion:
Letzten Zustand des Geräts Sensor abrufen UND Variable « etat_precedent » erstellen
Aktion:
Variable « etat_precedent » (aus der Liste auswählen) auf « 1 » (Wert eingeben) setzen
Ich habe geschummelt, indem ich alle 15 Sekunden einen geplanten Auslöser erstellt habe, aber das gefällt mir nicht!
Ich denke, diese Anforderung ist wichtig (Trigger mit einer Nicht-Erkennungsdauer), sie wird oft gefordert, aber ich bin mir nicht 100% sicher, wie sie umgesetzt werden könnte.
@VonOx hat uns in einem anderen Thema gezeigt, wie das bei Home Assistant gemacht wird:
Aber wenn ich das richtig verstehe, setzt das voraus, dass der Bewegungssensor einen Rücksetzmechanismus hat (d. h. er sendet nicht nur « 1 » sondern auch « 0 » (keine Bewegung)), stimmt das @VonOx?
Ah, ich dachte mir schon, ich habe gerade bemerkt, dass wir bereits viel über dieses Thema diskutiert haben:
Ich verstehe immer noch nicht, wie man diese Funktion umsetzen soll (funktional, natürlich sprechen wir hier nicht über Code), also bin ich für jedes zusätzliche Feedback offen
da ich gefragt habe, werde ich versuchen, dir die Funktion zu beschreiben
Der Detektor wechselt in den Erfassungszustand. Wenn er wieder in den Standby-Modus wechselt, sollte in diesem Moment der Timer beginnen. Jedes Mal, wenn der Detektor in den Zustand „erfasst“ wechselt, muss der Timer zurückgesetzt werden.
Zur Info: Im Dashboard ist das bereits der Fall, wir haben die Info, wenn wir das Gerät mit der Funktion „Bewegungserkennung“ anzeigen.
In der Gerätefunktion fügen wir eine Option « Tempo vom Sensor gesteuert: Ja/Nein » hinzu. Wenn Nein, dann konfigurieren wir eine Grund-Rücksetzzeit von z.B. 2 Minuten (ein physischer und nicht domotischer Bewegungssensor ist immer vorkonfiguriert, und man dreht die Schraube, wenn man eine andere Zeit wünscht; logischerweise sollte man genauso vorgehen),
wir weisen den Benutzer darauf hin, dass er diese Zeit in der Funktion ändern kann (es könnte sogar ein Popup bei der automatischen Erstellung des Sensors sein),
Wenn der Sensor kein integriertes Tempo hat:
Der Bewegungssensor sendet 1 oder true → Bewegungserkennung → DB-Wert = 1,
Der Sensor sendet 2 Minuten lang nichts → DB-Wert = 0 nach diesen 2 Minuten,
Der Sensor hat nach 1 Minute erneut 1 gesendet → Das 2-Minuten-Tempo startet neu → DB-Wert = 0 nach diesen 2 Minuten,
Wenn der Sensor ein integriertes Tempo hat und 0 sendet:
Der Bewegungssensor sendet 1 oder true → Bewegungserkennung → DB-Wert = 1,
Der Bewegungssensor sendet 0 oder false → Bewegungserkennung → DB-Wert = 0.
Danke für das Feedback! Okay, also funktioniert die Funktion nur, wenn man den Rücksetzcode für Bewegungsmelder programmiert, die das nicht selbstständig tun.
Sobald ein Wert « AUS » empfangen wird, startet Gladys einen Timer von 5 Minuten
Während der 5 Minuten, wenn ein Wert « AN » empfangen wird, wird der Timer gelöscht
Während der 5 Minuten, wenn ein Wert « AUS » empfangen wird, passiert nichts (und der aktuell laufende Timer läuft weiter)
Nach 5 Minuten, wenn nichts den Timer aufgehoben hat, wird die Szene ausgeführt
Dieser Auslöser funktioniert mit jedem Sensortyp, es kann z.B. ein Temperatursensor mit einer Bedingung « Temperatur > 12°C » sein.
Einziger aktueller Nachteil, der mir aber derzeit nicht sehr einschränkend erscheint: Wenn Gladys während eines Timers neu startet, geht der Timer verloren.
Allerdings ist das Verhalten aktuell dasselbe, wenn eine Szene ausgeführt wird und Gladys neu startet, geht sie verloren.
Der Pull Request:
Ich wäre für Feedback zum Pull Request dankbar, insbesondere zum Code. Ich möchte sicherstellen, dass ich keine Fälle übersehen habe!