FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: micomat am 12 September 2016, 19:46:10

Titel: DOIF schaltet richtig, aber auch falsch?
Beitrag von: micomat am 12 September 2016, 19:46:10
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ß
Titel: Antw:DOIF schaltet richtig, aber auch falsch?
Beitrag von: EIB-Fan am 12 September 2016, 20:05:30
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
Titel: Antw:DOIF schaltet richtig, aber auch falsch?
Beitrag von: micomat am 12 September 2016, 20:07:21
Genial :D

Danke!
Titel: Antw:DOIF schaltet richtig, aber auch falsch?
Beitrag von: igami am 12 September 2016, 22:24:45
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.
Titel: Antw:DOIF schaltet richtig, aber auch falsch?
Beitrag von: micomat am 12 September 2016, 23:06:39
Danke auch :)
Titel: Antw:DOIF schaltet richtig, aber auch falsch?
Beitrag von: Per am 13 September 2016, 12:04:27
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.