(Geklärt) DOIF: Probleme beim Trennen mehrerer Befehle im Ausführungsteil

Begonnen von FunkOdyssey, 05 Juni 2015, 17:54:32

Vorheriges Thema - Nächstes Thema

FunkOdyssey

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

Wuppi68

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?
FHEM unter Proxmox als VM

FunkOdyssey

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.

Wuppi68

als Plan B sollte es so auf jeden Fall funktionieren

#Ausführungsteil !!!! für DOIF & Co
(
  {fhem (Befehl1)},
  {fhem (Befehl2)},
  {fhem (Befehl3)},
  {fhem (Befehl4)}
)
FHEM unter Proxmox als VM

FunkOdyssey

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. :-)

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FunkOdyssey

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.

Wuppi68

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
FHEM unter Proxmox als VM

Damu

Hallo

Hab die Fehlermeldung immer noch.
Gibt es hier noch keine Lösung?


FunkOdyssey

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/

Damu