DOIF schaltet richtig, aber auch falsch?

Begonnen von micomat, 12 September 2016, 19:46:10

Vorheriges Thema - Nächstes Thema

micomat

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ß
Synology DS218+ with fhem+iobroker in docker, 2x RasPi w. ser2net, CUL433+868, IT, EGPM2LAN, THZ/LWZ, FB_Callmonitor, HMS100TF, Homematic, 2x TX3-TH, Pushover, USB-IR-SML-Head, SONOS, GHoma, MBus, KLF200

EIB-Fan

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

micomat

Synology DS218+ with fhem+iobroker in docker, 2x RasPi w. ser2net, CUL433+868, IT, EGPM2LAN, THZ/LWZ, FB_Callmonitor, HMS100TF, Homematic, 2x TX3-TH, Pushover, USB-IR-SML-Head, SONOS, GHoma, MBus, KLF200

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

micomat

Synology DS218+ with fhem+iobroker in docker, 2x RasPi w. ser2net, CUL433+868, IT, EGPM2LAN, THZ/LWZ, FB_Callmonitor, HMS100TF, Homematic, 2x TX3-TH, Pushover, USB-IR-SML-Head, SONOS, GHoma, MBus, KLF200

Per

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.