FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mehldutt am 18 Dezember 2017, 22:57:59

Umfrage
Frage: Fehler in letzter Code-Zeile?
Antwort 1: 1 Stimmen: 1
Antwort 2: 2 Stimmen: 1
Titel: [Gelöst] Fehler in letzter Code-Zeile?
Beitrag von: mehldutt am 18 Dezember 2017, 22:57:59
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?
Titel: Antw:Fehler in letzter Code-Zeile?
Beitrag von: amenomade am 18 Dezember 2017, 23:12:18
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"};;
Titel: Antw:Fehler in letzter Code-Zeile?
Beitrag von: Otto123 am 18 Dezember 2017, 23:16:27
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
Titel: Antw:Fehler in letzter Code-Zeile?
Beitrag von: herrmannj am 18 Dezember 2017, 23:19:33
... und evtl der Hinweis das der FHEM Codeeditor das escapen übernimmt.
Titel: Antw:Fehler in letzter Code-Zeile?
Beitrag von: DeeSPe am 18 Dezember 2017, 23:25:28
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
Titel: Antw:Fehler in letzter Code-Zeile?
Beitrag von: mehldutt am 19 Dezember 2017, 22:22:04
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