DOIF indirekte Zeitangaben / commandref

Begonnen von GunterB, 11 April 2024, 13:05:24

Vorheriges Thema - Nächstes Thema

GunterB

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"}

Damian

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.



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF