FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: GunterB am 11 April 2024, 13:05:24

Titel: DOIF indirekte Zeitangaben / commandref
Beitrag von: GunterB am 11 April 2024, 13:05:24
Hat sich bei dem Perl-Modus ein Fehler eingeschlichen?

define di_time DOIF {[[time]];fhem_set"lamp on"}sollte
define di_time DOIF ([[time]]) {fhem "set lamp on"}sein?

Code (Auszug aus der commandref) Auswählen
Anwendungsbeispiel: Lampe soll zu einer bestimmten Zeit eingeschaltet werden. Die Zeit soll über den Dummy time einstellbar sein:

define time dummy
set time 08:00

define di_time DOIF ([[time]])(set lamp on)
attr di_time do always

Perl-Modus:
define di_time DOIF {[[time]];fhem_set"lamp on"}
Titel: Aw: DOIF indirekte Zeitangaben / commandref
Beitrag von: Damian am 11 April 2024, 15:37:31
Das ist alles ok so.

Im DOIF-Perlmodus kannst du an beliebiger Stelle einen Trigger unterbringen.

Der Ausdruck [[time]] triggert und führt zur Ausführung des gesamten Blocks, dabei ist das Ergebnis von [[time]] zum Triggerzeitpunkt wahr sonst falsch. Da es hier nicht abgefragt wird, wird es von Perl ignoriert und der Rest wird ordnungsgemäß ausgeführt.

Man könnte es auch in eine if-Abfrage einbauen

{if ([[time]]) {fhem_set"lamp on"}}
das würde hier aber an der Funktionsweise zum Triggerzeitpunkt nichts ändern.

Einen Unterschied würde man bemerken, wenn man per set den Block ausführen wollte, im ersten Fall würde die Lampe angehen, im zweiten nicht, da die Abfrage dann falsch ist, da der Zeittrigger zu dem Zeitpunkt nicht ausgelöst hat und daher falsch ist.