Watchdog mit mehreren Bedingungen und Aktionen

Begonnen von pcbastler, 28 August 2018, 20:55:33

Vorheriges Thema - Nächstes Thema

pcbastler

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

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

pcbastler

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.