FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: pcbastler am 28 August 2018, 20:55:33

Titel: Watchdog mit mehreren Bedingungen und Aktionen
Beitrag von: pcbastler am 28 August 2018, 20:55:33
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
Titel: Antw:Watchdog mit mehreren Bedingungen und Aktionen
Beitrag von: betateilchen am 28 August 2018, 21:02:21
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.
Titel: Antw:Watchdog mit mehreren Bedingungen und Aktionen
Beitrag von: betateilchen am 28 August 2018, 21:06:21
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)
Titel: Antw:Watchdog mit mehreren Bedingungen und Aktionen
Beitrag von: pcbastler am 25 September 2018, 20:52:23
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.