Vorteil von DOIF über at für Zeitsteuerung?

Begonnen von Pati_Alpha, 12 Dezember 2016, 23:41:50

Vorheriges Thema - Nächstes Thema

Pati_Alpha

Hallo,

DOIF verwirrt mich manchmal etwas....
Ich wollte eine Lichterkette am Garten per DOIF abends einschalten und habe folgendes programmiert:

define LichterketteAnNote DOIF ([{twilight("Twilight","ss","0:01","23:59")}]) (set GartenLichterketteLampe on)
Allerdings funktionierte es am 2. Tag nicht.
Fehlt da ein "do always"?

Falls ja, wieso funktioniert das hier dann zuverlässig ohne "do always"?
define ZuhauseWegNote DOIF ([Ich:"on"] and [SonneObenIntern] eq "off") (set Kueche_Lampen on)

Dieses DOIF hat ja auch im Prinzip immer den selben Status? Oder ändert der, wenn SonneObenIntern auf "on" geht?

Das hier:
define LichterketteAnAt at *{twilight("Twilight","ss","0:01","23:59")} set GartenLichterketteLampe on

funktioniert jedenfalls auch... oder hat ein DOIF bei einer einfachen, zeitgesteuerten Anwendung noch Vorteile?

Vielleicht sollte man in Situationen, in denen es nur einen Zustand gibt, der wiederholt auftritt auch einfach ein Notify benutzen? Oder eben ein DOIF mit "do always"?

In dem Zusammenhang verwirrt mich auch folgendes:
Gibt es einen Unterschied zwischen der Bedingung ([Lampe:"on")] und ([Lampe] eq "on")?
Ich dachte immer, dass das erste nur greifen würde, wenn der Status sich auf "on" ÄNDERT, aber ich hab das grade mit Dummys ausprobiert und es scheint garkeinen Unterschied zwischen den beiden Schreibweisen zu geben, oder?

Vielen Dank und viele Grüße

Brockmann

ZitatFehlt da ein "do always"?
Ja. Wenn ein DOIF nur eine Zeitangabe als Bedingung hat, musst Du immer do always setzen.
http://fhem.de/commandref_DE.html#DOIF_Zu_beachten

ZitatDieses DOIF hat ja auch im Prinzip immer den selben Status? Oder ändert der, wenn SonneObenIntern auf "on" geht?
Ja, der Status ändert sich, wenn die Bedingung nicht erfüllt ist. Wenn Du nur ein DOIF verwendest (ohne DOELSEIF), dann hat das DOIF immer automatisch ein (unsichtbares) DOELSE, zu dem es wechselt, wenn die Bedingung nicht erfüllt ist. Bei Deinem ersten DOIF klappt das nicht, weil eine reine Zeitangabe immer nur dann getriggert wird, wenn sie gerade wahr ist. Deshalb kann da kein Statuswechsel erfolgen.

ZitatIch dachte immer, dass das erste nur greifen würde, wenn der Status sich auf "on" ÄNDERT, aber ich hab das grade mit Dummys ausprobiert und es scheint garkeinen Unterschied zwischen den beiden Schreibweisen zu geben, oder?
In dieser einfachen Form macht es tatsächlich keinen wesentlichen Unterschied. Aber wenn Du es mit weiteren Bedingungen kombinierst ist der Unterschied dieser:
Die erste Variante ist nur genau in dem Moment wahr, wo das Event Lampe:on auftritt, also wenn die Lampe eingeschaltet wird.
Die zweite Variante ist solange wahr, wie Lampe den Status "on" hat, also solange die Lampe eingeschaltet ist.

Wenn Deine Tests etwas anderes ergeben haben, dann hast Du falsch getestet.  ;)

Pati_Alpha

Ah! :) Danke dir für deine erleuchtende Antwort!
Grade Punkt 2 war mir so nicht klar!

Und Punkt 3 macht völlig Sinn! Vermutlich war mein Kopf so spät schon zu verdreht um das noch zu verstehen. ;)

Danke für die Geduld bei den Anfängerfragen! :)