Sorry für die Anfängerfrage, aber ich komme mit den Unterschieden zwischen Perl if und FHEM IF und den Klammern irgendwie nicht klar.
Ich hab einen funktionierenden watchdog, der beim Heinkommen die Kamera unscharf schaltet und die Heizung hochdreht:
define watchdog_Anwesenheit watchdog rgr_Bewohner:home 00:02 rgr_Bewohner:absent {{
fhem("IF (isday(\"HORIZON=2.0\")) (set Hofkamera1 cmd 2)");;
fhem("IF ([WZ_Fenster1] eq \"closed\") (set WZ_heiz1_Clima controlMode auto)");;
fhem("IF ([KuechenFenster] eq \"closed\") (set Ku_heiz_Clima controlMode auto)");;
fhem("IF ([Ki_Fenster] eq \"closed\") (set Kl_heiz_Clima controlMode auto)");;
fhem("IF ([WC_Fenster] eq \"closed\") (set WC_heiz_Clima controlMode auto)");;
}}
nun macht das Hochdrehen der Heizung nur im Sommer Sinn, daher dachte ich an ein zusätzliches IF vor dem Heizungsblock.
Alleine funktioniert
if ([wetter_Wurzen:temperature] < 25) (IF ([WZ_Fenster1] eq "closed") (set WZ_heiz1_Clima controlMode auto))
auch, aber sobald ich das in irgendeiner Form zusammenbaue werden mir im Log fehlende Klammern angezeigt.
Wunsch:
define watchdog_Anwesenheit watchdog rgr_Bewohner:home 00:02 rgr_Bewohner:absent {{
fhem("IF (isday(\"HORIZON=2.0\")) (set Hofkamera1 cmd 2)");;
fhem("IF ([wetter_Wurzen:temperature] < 25) (
fhem("IF ([WZ_Fenster1] eq \"closed\") (set WZ_heiz1_Clima controlMode auto)");;
fhem("IF ([KuechenFenster] eq \"closed\") (set Ku_heiz_Clima controlMode auto)");;
fhem("IF ([Ki_Fenster] eq \"closed\") (set Kl_heiz_Clima controlMode auto)");;
fhem("IF ([WC_Fenster] eq \"closed\") (set WC_heiz_Clima controlMode auto)");;
)")
}}
Geht das überhaupt in dieser Verschachtelung oder hab ich einen anderen Denkfehler? Alternativ ein DOIF im watchdog?
Vielen Dank schon mal an alle Anregungen!
EDIT: wg. Tippfehler
in diesem Szenario würde ich ausschließlich mir perl arbeiten und die ganzen Fallunterscheidungen in eine Funktion in der 99_myUtils.pm auslagern. Das ist viel übersichtlicher und logischer nachvollziehbar.
Ausserdem kannst Du das Ganze sogar in Deinem watchdog sehr viel übersichtlicher schreiben
define watchdog_Anwesenheit watchdog rgr_Bewohner:home 00:02 rgr_Bewohner:absent {
fhem("set Hofkamera1 cmd 2") if (isday("HORIZON=2.0"));;
fhem("set WZ_heiz1_Clima controlMode auto") if (Value("WZ_Fenster1") eq "closed");;
}
(im Beispiel habe ich nur die ersten zwei Fälle aufgeführt, der Rest wäre analog einzufügen)
Hat ein wenig gedauert und mir ein paar graue Haare beschert, jetzt hab ich aber einen Ansatz:
Zitat
rgr_Bewohner:home 00:02 rgr_Bewohner:absent {{
fhem("set Hofkamera1 cmd 2") if (isday("HORIZON=2.0"));;
fhem("set WZ_heiz1_Clima controlMode auto") if ((ReadingsVal('wetter_Wurzen','temperature',' ') < 23) && (Value('WZ_Fenster1') eq 'closed')) ;;
fhem("set Ku_heiz_Clima controlMode auto") if ((ReadingsVal('wetter_Wurzen','temperature',' ') < 23) && Value('KuechenFenster') eq 'closed')) ;;
}}
Vollkommen ist das noch nicht, ich hätte gern ein äußeres if (da if ((ReadingsVal('wetter_Wurzen','temperature',' ') < 23) überall drinsteht), aber da kämpfe ich noch mit Klammern und Anführungszeichen.
Bei dieser Gelegenheit ist mir ein Tippfehler in der CommandRef (zu IF) aufgefallen.
ZitatIF ([living_room:temperature] > 12) (set lamp on, set lamp2 off)
entspricht:
{if (ReadingVal('living_room','temperature','') > 12) {fhem('set lamp on');;fhem('set lamp2 off')}},
Da fehlt wohl das "s" in ReadingsVal.