Guten Tag,
ich wollte heute ein funktionierendes DOIF um eine Zeile mit einem Push-Befehl erweitern. Trotz Nutzung von Kommata und diversen Klammerversuchen habe ich bei der Ausführung dieser Bedinung einen Fehler in den Readings. Hat jemand einen Tipp?
Internals:
CFGFN ./FHEM/jalousien_automation.cfg
DEF ([[auto_jal_time_workday]|8] or [[auto_jal_time_weekend]|7])
(
IF ([auto_jal_open_mit_tueren] eq "ja")
(set alle_jalousien_mit_tueren Hoch)
ELSE
(set alle_jalousien_ohne_tueren Hoch)
)
DOELSEIF
(
([twilight:azimuth] > 120) and
([twilight:azimuth] < 270) and
([twilight:twilight_weather]>=40) and
([Wetter:fc1_high_c]>25) and
[[auto_jal_time_weekend]-([twilight:ss_civil]-[00:35])]
)
(
set jalousien_beschattung 40,
set pushmsg message 'Jalousien an südlichen Fenstern auf Beschattung gesetzt.' 'room:Jalousien'
)
DOELSEIF ([([{twilight("twilight", "ss_civil", "16:20", "21:00")}]-[00:00])])
(
IF ([auto_jal_close_mit_tueren] eq "ja")
(set alle_jalousien_mit_tueren [FILTER=level>50] 50)
ELSE
(set alle_jalousien_ohne_tueren [FILTER=level>50] 50)
)
DOELSEIF ([([{twilight("twilight", "ss_civil", "16:20", "21:00")}]+[00:30])])
(
IF ([auto_jal_close_mit_tueren] eq "ja")
(set alle_jalousien_mit_tueren Runter)
ELSE
(set alle_jalousien_ohne_tueren Runter)
)
NAME di_auto_jal_1
NR 314
NTFY_ORDER 50-di_auto_jal_1
STATE cmd_2
TYPE DOIF
Readings:
2015-06-05 17:19:46 cmd_event twilight
2015-06-05 17:19:46 cmd_nr 2
2015-06-05 17:19:44 e_twilight_azimuth 258.52
2015-06-05 17:19:44 e_twilight_twilight_weather 100
2015-06-05 17:19:46 error set pushmsg message 'Jalousien an südlichen Fenstern auf Beschattung gesetzt.' 'room:Jalousien': POST https://pushitto-fhemapp.rhcloud.com/v10/send
Authorization: Basic KEYKEYKEYKEYKEYKEYKEY
User-Agent: libwww-perl/6.04
Content-Type: application/json
{"android":{"collapseKey":"optional","data":{"message":"No"}},"users":["APIKEYAPIKEYAPIKEYAPIKEYAPIKEY"],"ios":{"alert":{"body":"Jalousien an südlichen Fenstern auf Beschattung gesetzt."," content-available":"1","timestamp":1433517584,"url":"room:Jalousien"},"logging":"1","badge":"0","sound":"pop.caf"}}
2015-06-05 17:19:46 state cmd_2
2015-06-05 17:15:50 timer_1_c1 06.06.2015 08:00:00|8
2015-06-05 17:15:50 timer_2_c1 06.06.2015 08:30:00|7
2015-06-05 17:15:50 timer_3_c2 06.06.2015 08:30:00
2015-06-05 17:19:44 timer_4_c2 05.06.2015 21:58:57
2015-06-05 17:15:50 timer_5_c3 05.06.2015 21:00:00
2015-06-05 17:15:50 timer_6_c4 05.06.2015 21:30:00
Condition:
0 DOIF_time_once($hash->{timer}{0},$wday,"8") or DOIF_time_once($hash->{timer}{1},$wday,"7")
1 (ReadingValDoIf('twilight','azimuth','') > 120) and (ReadingValDoIf('twilight','azimuth','') < 270) and (ReadingValDoIf('twilight','twilight_weather','')>=40) and (ReadingValDoIf('Wetter','fc1_high_c','')>25) and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"")
2 DOIF_time_once($hash->{timer}{4},$wday,"")
3 DOIF_time_once($hash->{timer}{5},$wday,"")
Days:
0 8
1 7
Devices:
1 twilight Wetter
all twilight Wetter
Do:
0 IF ([auto_jal_open_mit_tueren] eq "ja") (set alle_jalousien_mit_tueren Hoch) ELSE (set alle_jalousien_ohne_tueren Hoch)
1 set jalousien_beschattung 40, set pushmsg message 'Jalousien an südlichen Fenstern auf Beschattung gesetzt.' 'room:Jalousien'
2 IF ([auto_jal_close_mit_tueren] eq "ja") (set alle_jalousien_mit_tueren [FILTER=level>50] 50) ELSE (set alle_jalousien_ohne_tueren [FILTER=level>50] 50)
3 IF ([auto_jal_close_mit_tueren] eq "ja") (set alle_jalousien_mit_tueren Runter) ELSE (set alle_jalousien_ohne_tueren Runter)
Helper:
last_timer 6
sleeptimer -1
Internals:
Itimer:
all auto_jal_time_workday auto_jal_time_weekend twilight
Readings:
1 twilight:azimuth twilight:twilight_weather Wetter:fc1_high_c
all twilight:azimuth twilight:twilight_weather Wetter:fc1_high_c
Realtime:
0 08:00:00
1 08:30:00
2 08:30:00
3 21:58:57
4 21:00:00
5 21:30:00
State:
Time:
0 [auto_jal_time_workday]
1 [auto_jal_time_weekend]
2 [auto_jal_time_weekend]
3 ([twilight:ss_civil]-[00:35])
4 ([{twilight("twilight","ss_civil","16:20","21:00")}]-[00:00])
5 ([{twilight("twilight","ss_civil","16:20","21:00")}]+[00:30])
Timecond:
0 0
1 0
2 1
3 1
4 2
5 3
Timer:
0 0
1 0
2 0
3 0
4 0
5 0
Timerfunc:
Timers:
0 0 1
1 2 3
2 4
3 5
Trigger:
Attributes:
alias Programmierung - Jalousienautomatik
disable 0
group Jalousien
icon time_timer
room Automation
sortby 90
hmmm,
das Ding ist ja etwas größer ...
was geht denn nicht?
Kommen Fehler?
Was sagt das LOG?
Wie ist Deine Erwartungshaltung für das Script?
Plangemäß ausgeführt wird:
(
set jalousien_beschattung 40,
set pushmsg message 'Jalousien an südlichen Fenstern auf Beschattung gesetzt.' 'room:Jalousien'
)
Daraufhin habe ich folgendes Reading:
2015-06-05 17:19:46 error set pushmsg message 'Jalousien an südlichen Fenstern auf Beschattung gesetzt.' 'room:Jalousien': POST https://pushitto-fhemapp.rhcloud.com/v10/send
Authorization: Basic KEYKEYKEYKEYKEYKEYKEY
User-Agent: libwww-perl/6.04
Content-Type: application/json
{"android":{"collapseKey":"optional","data":{"message":"No"}},"users":["APIKEYAPIKEYAPIKEYAPIKEYAPIKEY"],"ios":{"alert":{"body":"Jalousien an südlichen Fenstern auf Beschattung gesetzt."," content-available":"1","timestamp":1433517584,"url":"room:Jalousien"},"logging":"1","badge":"0","sound":"pop.caf"}}
Das Skript läuft perfekt. Push-Nachrichten laufen auch. Es geht hier rein um die Verkettung von zwei Befehlen im Ausführungsteil.
als Plan B sollte es so auf jeden Fall funktionieren
#Ausführungsteil !!!! für DOIF & Co
(
{fhem (Befehl1)},
{fhem (Befehl2)},
{fhem (Befehl3)},
{fhem (Befehl4)}
)
Hmm. Elegant finde ich das nicht. Ich bin kein Fan davon, auf Perl auszuweichen, um dann wieder zur normalen Syntax zurückzukehren. Ich finde, dass hat etwas von CDs kopieren, indem man das Mikrofon vor dem Lautsprecher hält. :-)
Nee, sorry. Danke für den Tipp. In der DOIF-Doku sieht es halt so aus, als könne man schlicht mit Komma trennen. Ich hatte erst vermutet, man müsse hier evtl. die Hochkommas maskieren oder ähnliches.
Ich mag es halt gerne sauber in der fhem.cfg. Sonst könnte man auch direkt alles in Perl machen. :-)
Zitat von: Funk.Odyssey am 05 Juni 2015, 19:30:05
Plangemäß ausgeführt wird:
(
set jalousien_beschattung 40,
set pushmsg message 'Jalousien an südlichen Fenstern auf Beschattung gesetzt.' 'room:Jalousien'
)
Daraufhin habe ich folgendes Reading:
2015-06-05 17:19:46 error set pushmsg message 'Jalousien an südlichen Fenstern auf Beschattung gesetzt.' 'room:Jalousien': POST https://pushitto-fhemapp.rhcloud.com/v10/send
Authorization: Basic KEYKEYKEYKEYKEYKEYKEY
User-Agent: libwww-perl/6.04
Content-Type: application/json
{"android":{"collapseKey":"optional","data":{"message":"No"}},"users":["APIKEYAPIKEYAPIKEYAPIKEYAPIKEY"],"ios":{"alert":{"body":"Jalousien an südlichen Fenstern auf Beschattung gesetzt."," content-available":"1","timestamp":1433517584,"url":"room:Jalousien"},"logging":"1","badge":"0","sound":"pop.caf"}}
Das Skript läuft perfekt. Push-Nachrichten laufen auch. Es geht hier rein um die Verkettung von zwei Befehlen im Ausführungsteil.
Die "Fehler"-Meldung kommt immer dann, wenn der FHEM-Befehl (hier set pushmsg...) keinen Returnwert Null zurückgibt. Der Befehl wird dennoch ausgeführt und das ausgeführte Kommando wird unter error protokolliert.
Dieses Verhalten ist unabhängig davon, ob man mehrere Befehle mit Komma trennt oder nicht.
Gruß
Damian
Das ist super. Danke für die Erklärung. Das erklärt auch, warum die Befehle ausgeführt werden. Und auch warum bei der nächsten zutreffenden Condition das Error-Reading wieder weg ist.
Danke. Ich frag mal das Team um die FHEM App, ob die ihr Skript evtl. anpassen könnten. Rein für die Optik.
Zitat von: Funk.Odyssey am 06 Juni 2015, 00:10:06
Hmm. Elegant finde ich das nicht. Ich bin kein Fan davon, auf Perl auszuweichen, um dann wieder zur normalen Syntax zurückzukehren. Ich finde, dass hat etwas von CDs kopieren, indem man das Mikrofon vor dem Lautsprecher hält. :-)
Nee, sorry. Danke für den Tipp. In der DOIF-Doku sieht es halt so aus, als könne man schlicht mit Komma trennen. Ich hatte erst vermutet, man müsse hier evtl. die Hochkommas maskieren oder ähnliches.
Ich mag es halt gerne sauber in der fhem.cfg. Sonst könnte man auch direkt alles in Perl machen. :-)
war ja auch nur ein Plan B :-) Nicht sauber, geht aber auf jeden Fall
Hallo
Hab die Fehlermeldung immer noch.
Gibt es hier noch keine Lösung?
Das hat sich relativ kurz hiernach bereits erledigt. Die Entwickler der FHEM APP haben eine neuen Fhemapppush.pm (oder ähnlich) rausgebracht. War nur eine Zeile, die auskommentiert werden musste.
Schau mal in die App oder hier: http://blog.fhemapp.com/push-notifications-in-der-app-nutzen/
Vielen Dank, hab es auch eingespielt.