Hi zusammen,
ich habe mir, nach dem Vorbild https://wiki.fhem.de/wiki/DOIF/Automatisierung#Beschattungssteuerung_abh.C3.A4ngig_von_der_Zimmertemperatur_und_Sonneneinstrahlung_f.C3.BCr_mehrere_Szenarien , folgendes Template gebastelt:
DEF TPL_light ( ## Definition des Templates namens TPL_light
## Parameternummer $1 $2 $3 $4 $5 $6 $7 $8 $9
## Bedeutung Name der Szene Lichtsensor des Zimmers Lichtaktor Schwellwert ein Schwellwert aus von Uhrzeit bis Uhrzeit Befehl zum Einschalten Befehl zum Ausschalten
light_$1 {
## DOIF Block
if ([$6-$7]) { ## innerhalb des Zeitfensters
if ([$2:control:d] < [$4] and !$VAR{$1}) { ## Wenn die Helligkeit unterhalb des Schwellwerts_ein liegt und Sonne scheint und die Lampe noch nicht eingeschaltet wurde
fhem_set("$3 $8"); ## Fenster herunterfahren
set_State("Szene: $1 Lampe ein"); ## Status mit letztem Befehl belegen
$VAR{$1}=1; ## Merker setzen, dass Fenster bereits heruntergefahren wurde
} elsif ([$2:control:d] > [$5] and $VAR{$1}) { ## Wenn die Helligkeit oberhalb des Schwellwerts_aus liegt
fhem_set("$3 $9"); ## Fenster hochfahren
set_State("Szene: $1 Lampe aus");; ## Status mit letztem Befehl belegen
$VAR{$1}=0; ## Merker zurücksetzen
}
}
}
) ## Ende der Templatedefinition
reset {[00:01];delete $VAR;} ## DOIF-Block namens reset um nachts alle Merker zu löschen
## Definition einzelner DOIF-Blöcke pro Fenstergruppe mit Hilfe des Templates
## $1 $2 $3 $4 $5 $6 $7 $8 $9
TPL_light (Treppenbeleuchtung,Sensor_Aussen_Kind1_Sonne,Licht_EG_Treppe,1600,2500,00:00,23:59,datapoint 2.STATE 1,datapoint 2.STATE 0)
TPL_light (Wohnzimmer_Stehlampe,Sensor_Aussen_Ankleide_Sonne,Steckdose_Roaming_Roaming_Sonoff,3000,3500,00:00,23:59,on,off)
Aber aus irgendeinem Grund läuft das immer in den if-Zweig und landet nicht im elsif. Obwohl die beiden Lichtsensor aktuell auf mehr als 10000 stehen.
An welcher Stelle habe ich denn Tomaten vor den Augen?
Der vierte und fünfte Parameter $4 oder $5 wird mit Zahlen belegt z. B. 1600
mit if ([$2:control:d] < [$4] and !$VAR{$1})
steht dann da:
.... < [1600] and ...
so etwas gibt es nicht in Perl und es ist auch keine DOIF-Syntax.
Aaargh, ich wusste das ich was banales übersehe.
Danke für den Hinweis. Ich nehme dann mal die [] weg.
Zitat von: kjmEjfu am 04 November 2020, 17:02:33
Aaargh, ich wusste das ich was banales übersehe.
Danke für den Hinweis. Ich nehme dann mal die [] weg.
ja, am Ende muss DOIF-Perl-Syntax rauskommen.
Mit list kannst du intern sehen, was DOIF aus deinem Template an Szenarien erstellt hat:)