Hallo zusammen,
wo liegt mein Denkfehler?
Ziel soll es sein, wenn wir das Haus verlassen und vergessen, die Garage zu schließen, diese dann 10 Minuten nachdem der HomeStatus "off" wird automatisch zu schließen. Und zwar auch nur dann ;)
define test DOIF (([HomeStatus:state] eq "off") and ([Garagentor:state] eq "open")) (set Garagentoroeffner on-for-timer 1)
attr test wait 600
Das funktioniert soweit auch gut.
Aber:
Wenn ich heim komme, das Garagentor oeffne, startet der Timer, weil Garagentor:state dann "open".
Der Homestatus welchselt dann kurz darauf zu "on" weil wir zuhause sind. Damit sollte doch das DOIF eigentlich "ungueltig" werden, weil die erste Bedingung nicht mehr zutrifft, oder?
Hier ist jetzt der Knackpunkt, denn selbst wenn der Status waehrend der 600Sek auf "on" geht, wird das Garagentor geschlossen. Prueft DOIF die Bedingung nur zu Beginn und nicht mehr nach Ablauf des Timers?
Gruß
Hallo micomat,
dein DOIF löst auf beide Trigger [HomeStatus:state] & [Garagentor:state] aus.
Wenn ich es richtig verstanden habe, sollte es so funktionieren:
define test DOIF (([HomeStatus:state] eq "off") and ([?Garagentor:state] eq "open")) (set Garagentoroeffner on-for-timer 1)
attr test wait 600
Das Fragezeichen fragt nur den Zustand ohne Trigger ab.
Gruß Jens
Genial :D
Danke!
Auch dafür geeignet ist das nutzen von Events anstelle von Readings.
define test DOIF ([HomeStatus:"off"] and [Garagentor:state] eq "open") (set Garagentoroeffner on-for-timer 1)
Events gibt es nur zu einem Zeitpunkt, Readings für einen Zeitraum. Es können nie zwei Events gleichzeitig auftreten.
Danke auch :)
Zitat von: micomat am 12 September 2016, 19:46:10Prueft DOIF die Bedingung nur zu Beginn und nicht mehr nach Ablauf des Timers?
Nein, macht es nicht.
DOIF wird von außen (Events, Zeiten...) getriggert. Kommt nix neues, tut sich nix.
Aber selbst wenn, mangels Alternative (
DOELSE(
IF)) würde
DOIF hier nix anderes machen.
Was du, neben dem
? machen könntest, wäre ein
IF(), allerdings ist das hier nicht nötig und wäre aufwendiger.