Umfrage
Frage:
Fehler in letzter Code-Zeile?
Antwort 1: 1
Stimmen: 1
Antwort 2: 2
Stimmen: 1
Hallo,
tue mich schwer mit meinen ersten codes.
In der letzten Zeile stimmt etwas nicht.
Die letzte Zeile wird bei Sonnenuntergang und nicht 4 Minuten später ausgelöst.
Plan ist:
- Anwesenheit mittels PRESENT soll nicht 2-minütlich, sondern nur 3-mal in 1-minütigen Abständen bei Sonnenuntergang ermittelt werden (funktioniert).
- 3x soll mittels PRESENT "statusRequest" geprüft werden, ob wirklich alle G-tags (bluetooth) außer Haus sind (funktioniert).
- bei Abwesenheit wird DUMMY "d_Anwesenheit" von "anwesend" mindestens 1x auf "abwesend" gestellt (funktioniert)
- nach 4 Minuten sollen die Rollos runter wenn "d_Anwesenheit" = "abwesend" ist (hier liegt das Problem: Die letzte Ziel wird bei sofort, bei Sonnenuntergang abgesetzt und nicht erst nach 4 Minuten mit IF-Prüfung von DUMMY d_Anwesenheit)
define test_Rollos_runter at *{sunset(+16200)} {\
fhem("set d_Anwesenheit present");;\
fhem("define min_1 at +00:01 set tag_.* statusRequest");;\
fhem("define min_2 at +00:02 set tag_.* statusRequest");;\
fhem("define min_3 at +00:03 set tag_.* statusRequest");;\
{fhem("define min_4 at +00:04")} if(Value("d_Anwesenheit") eq "absent") {fhem "set Rollo_.* off" ;; "setstate Hauptschalter zu"};;\
}
Vielen Dank im voraus.
Kennt jemand vielleicht einen besseren Ansatz?
Du hast bestimmt eine Fehlermeldung in der Log, oder???
Zitat{fhem("define min_4 at +00:04")} if(Value("d_Anwesenheit") eq "absent") {fhem "set Rollo_.* off" ;; "setstate Hauptschalter zu"};;
Hi,
beim letzten statement sind die Klammern völlig wirr gesetzt:
fhem("define min_4 at +00:04 {if(<Bedingung>){<Ausführung>}}")
Allerdings bekommst Du noch jede Menge Spaß mit den " ;)
Da musst Du sicher noch andere einsetzen.
Mir ist es jetzt leider zu spät um zu testen. Ich kann das nicht ausformulieren. Vielleicht genügt der Tipp zur Selbsthilfe.
Du würdest es auch leichter haben nicht gleich am Anfang nach Perl zu wechseln, sondern erst mal in FHEM zu bleiben. Ist aber Geschmacksache.
Also in der Art auch für die anderen Zeilen:
define min_4 at +00:04 {if(<Bedingung>){<Ausführung>}}
Dann bist du lediglich beim if im Perl. Auch dies liese sich in FHEM mit IF (beachte [urlhttps://fhem.de/commandref_DE.html#IF]FHEM IF[/url]) abbilden.
Gruß Otto
P.S. Ich habe jetzt für 2 gestimmt - warum weiß ich nicht. :o ;D
... und evtl der Hinweis das der FHEM Codeeditor das escapen übernimmt.
Die letze Zeile könnte so aussehen:
fhem "define min_4 at +00:04 { fhem \"set Rollo_.* off; setstate Hauptschalter zu\" if(Value(\"d_Anwesenheit\") eq \"absent\") }";;\
Gruß
Dan
Vielen Dank an alle für die wertvollen Tips.
Ich habe mich dazu entschlossen Perl möglichst wegzulassen.
Hier der funktionierende Code:
define Rollo_runter at *{sunset()}\
set d_Anwesenheit pending ;;\
define min_1 at +00:01 set tag_.* statusRequest ;;\
define min_2 at +00:02 set tag_.* statusRequest ;;\
define min_3 at +00:03 set tag_.* statusRequest ;;\
define min_4 at +00:04 {if(Value("d_Anwesenheit") eq "absent"){fhem "set Rollo_.* off" ;;;; fhem "setstate Hauptschalter zu"}}
Gruß Mehldutt