[Gelöst] Fehler in letzter Code-Zeile?

Begonnen von mehldutt, 18 Dezember 2017, 22:57:59

Vorheriges Thema - Nächstes Thema

mehldutt

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?

amenomade

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"};;
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

#2
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

herrmannj

... und evtl der Hinweis das der FHEM Codeeditor das escapen übernimmt.

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

mehldutt

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