DOIF - DOELSEIF vs. DOELSE Problem

Begonnen von Morgennebel, 27 Dezember 2015, 14:36:49

Vorheriges Thema - Nächstes Thema

Morgennebel

Schöne Weihnachten,


ich habe folgenden Ausschnitt aus einer größeren DOIF-Struktur:


...
DOELSEIF ([EG.Arbeitszimmer.FensterLinks] eq "closed")
    (set D_AirReq.EG.Arbeitszimmer 5)  ## Icon grau offen
DOELSEIF ([EG.Arbeitszimmer.FensterLinks] eq "open")
    (set D_AirReq.EG.Arbeitszimmer 6)
DOELSE
    (set D_AirReq.EG.Arbeitszimmer 7) ## Catchall Error


D.h. das linke Fenster des Arbeitszimmers wird auf closed oder open geprüft und in dessen Abhängigkeit der Dummy D_AirReq.EG.Arbeitszimmer wird dem Wert 5 oder 6 belegt.

Die Readings des DOIFs zeigen das Fenster geschlossen:


e_EG.Arbeitszimmer.FensterLinks_STATE                          closed                        2015-12-27 14:27:51


(und ja, die Variante mit :STATE habe ich auch getestet). DOIF spring jedoch immer in den DOELSE-Zeig:

state      cmd_7

und der Dummy D_AirReq.EG.Arbeitszimmer nimmt nie den Wert 5 oder 6 an.

Der Fensterkontakt ist ein Homematic http://www.fhemwiki.de/wiki/HM-SEC-SC_T%C3%BCr-Fensterkontakt.

Eine Variante mit attr DOIF-Name do always brachte keine Lösung.

Was mache ich denn wohl falsch?

Danke, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

maxritti

Nicht, dass ich die Lösung hätte.  ;)

Aber ein "list" auf Deinem DOIF Device um 2015-12-27 14:27:51 wäre hilfreich.
Denn dann wäre alles zu sehen, was das DOIF betrifft.

cmd_7 ist so zumindest ein wenig aus dem Zusammenhang gerissen.

Morgennebel

Hallo,


Danke für die Hilfe. Hier ist der list-Befehl, cmd_7 ist immer noch aktiv. Das ganze soll eine Lüftungsempfehlung für einzelne Räume mit Icons auf einem Floorplan-Modul realisieren - klappt auch beinahe alles (und die Taupunkt-Temperatur fehlt noch):


Internals:
   DEF        ([EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte] > [Scheune.Aussensensor:absFeuchte] and
[EG.Arbeitszimmer.Wandthermostat_Weather:humidity] > 60 and
[EG.Arbeitszimmer.FensterLinks] eq "closed")
    (set D_AirReq.EG.Arbeitszimmer 1) ## Lueften notwendig, Fenster zu. Icon ROT/ZU
DOELSEIF ([EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte] > [Scheune.Aussensensor:absFeuchte] and
          [EG.Arbeitszimmer.Wandthermostat_Weather:humidity] > 60 and
          [EG.Arbeitszimmer.FensterLinks] eq "open")
    (set D_AirReq.EG.Arbeitszimmer 2) ## Lueften notwendig, Fenster offen. Icon GELB/OFFEN
DOELSEIF ([EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte] < [Scheune.Aussensensor:absFeuchte] and
          [EG.Arbeitszimmer.FensterLinks] eq "open")
    (set D_AirReq.EG.Arbeitszimmer 3) ## Fenster offen, muss aber zu. Icon ROT/OFFEN
DOELSEIF ([EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte] < [Scheune.Aussensensor:absFeuchte] and
          [EG.Arbeitszimmer.FensterLinks] eq "closed")
    (set D_AirReq.EG.Arbeitszimmer 4) ## Fenster zu, muss zu bleiben. ICON GELB/ZU
DOELSEIF ([EG.Arbeitszimmer.FensterLinks] eq "closed")
    (set D_AirReq.EG.Arbeitszimmer 5)  ## Icon gruen zu
DOELSEIF ([EG.Arbeitszimmer.FensterLinks] eq "open")
    (set D_AirReq.EG.Arbeitszimmer 6)  ## Icon gruen offen
DOELSE
    (set D_AirReq.EG.Arbeitszimmer 7) ## Catchall Error
   NAME       DI_AirReq.EG.Arbeitszimmer
   NR         953
   NTFY_ORDER 50-DI_AirReq.EG.Arbeitszimmer
   STATE      cmd_7
   TYPE       DOIF
   Readings:
     2015-12-27 15:53:07   Device          Scheune.Aussensensor
     2015-12-27 15:53:07   cmd_event       Scheune.Aussensensor
     2015-12-27 15:53:07   cmd_nr          7
     2015-12-27 15:53:07   e_Scheune.Aussensensor_absFeuchte 8.5
     2015-12-27 15:53:07   state           cmd_7
   Condition:
     0          ReadingValDoIf('EG.Arbeitszimmer.Wandthermostat_Weather','absFeuchte','') > ReadingValDoIf('Scheune.Aussensensor','absFeuchte','') and  ReadingValDoIf('EG.Arbeitszimmer.Wandthermostat_Weather','humidity','') > 60 and  InternalDoIf('EG.Arbeitszimmer.FensterLinks','STATE','') eq "closed"
     1          ReadingValDoIf('EG.Arbeitszimmer.Wandthermostat_Weather','absFeuchte','') > ReadingValDoIf('Scheune.Aussensensor','absFeuchte','') and           ReadingValDoIf('EG.Arbeitszimmer.Wandthermostat_Weather','humidity','') > 60 and           InternalDoIf('EG.Arbeitszimmer.FensterLinks','STATE','') eq "open"
     2          ReadingValDoIf('EG.Arbeitszimmer.Wandthermostat_Weather','absFeuchte','') < ReadingValDoIf('Scheune.Aussensensor','absFeuchte','') and           InternalDoIf('EG.Arbeitszimmer.FensterLinks','STATE','') eq "open"
     3          ReadingValDoIf('EG.Arbeitszimmer.Wandthermostat_Weather','absFeuchte','') < ReadingValDoIf('Scheune.Aussensensor','absFeuchte','') and           InternalDoIf('EG.Arbeitszimmer.FensterLinks','STATE','') eq "closed"
     4          InternalDoIf('EG.Arbeitszimmer.FensterLinks','STATE','') eq "closed"
     5          InternalDoIf('EG.Arbeitszimmer.FensterLinks','STATE','') eq "open"
   Devices:
     0           EG.Arbeitszimmer.Wandthermostat_Weather Scheune.Aussensensor EG.Arbeitszimmer.FensterLinks
     1           EG.Arbeitszimmer.Wandthermostat_Weather Scheune.Aussensensor EG.Arbeitszimmer.FensterLinks
     2           EG.Arbeitszimmer.Wandthermostat_Weather Scheune.Aussensensor EG.Arbeitszimmer.FensterLinks
     3           EG.Arbeitszimmer.Wandthermostat_Weather Scheune.Aussensensor EG.Arbeitszimmer.FensterLinks
     4           EG.Arbeitszimmer.FensterLinks
     5           EG.Arbeitszimmer.FensterLinks
     all         EG.Arbeitszimmer.Wandthermostat_Weather Scheune.Aussensensor EG.Arbeitszimmer.FensterLinks
   Do:
     0:
       0          set D_AirReq.EG.Arbeitszimmer 1
     1:
       0          set D_AirReq.EG.Arbeitszimmer 2
     2:
       0          set D_AirReq.EG.Arbeitszimmer 3
     3:
       0          set D_AirReq.EG.Arbeitszimmer 4
     4:
       0          set D_AirReq.EG.Arbeitszimmer 5
     5:
       0          set D_AirReq.EG.Arbeitszimmer 6
     6:
       0          set D_AirReq.EG.Arbeitszimmer 7
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Internals:
     0           EG.Arbeitszimmer.FensterLinks:STATE
     1           EG.Arbeitszimmer.FensterLinks:STATE
     2           EG.Arbeitszimmer.FensterLinks:STATE
     3           EG.Arbeitszimmer.FensterLinks:STATE
     4           EG.Arbeitszimmer.FensterLinks:STATE
     5           EG.Arbeitszimmer.FensterLinks:STATE
     all         EG.Arbeitszimmer.FensterLinks:STATE
   Itimer:
   Readings:
     0           EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte Scheune.Aussensensor:absFeuchte EG.Arbeitszimmer.Wandthermostat_Weather:humidity
     1           EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte Scheune.Aussensensor:absFeuchte EG.Arbeitszimmer.Wandthermostat_Weather:humidity
     2           EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte Scheune.Aussensensor:absFeuchte
     3           EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte Scheune.Aussensensor:absFeuchte
     all         EG.Arbeitszimmer.Wandthermostat_Weather:absFeuchte Scheune.Aussensensor:absFeuchte EG.Arbeitszimmer.Wandthermostat_Weather:humidity
   State:
   Timerfunc:
   Trigger:
Attributes:
   room       EG.Arbeitszimmer


Ein einfaches DI_TEST DOIF auf den Fensterzustand klappt einwandfrei, das komplexere mit DOELSEIF nicht.

Ich bin ratlos...

Danke, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Ellert

Versuch mal die Events deines DOIF und des Sensors zu loggen, etwa so:
define notify (<dein doif name>|EG.Arbeitszimmer.FensterLinks).* {Log 1, $NAME.": ".$EVENT.", Device: ".ReadingsVal($NAME,"Device","none"))}
Dann kommst Du dem Fehler, ggf. auf die Spur.

Vermutlich gibt es Ereignisse, die ungleich "closed" oder "open" sind und den DOELSE Fall ergeben.

maxritti

Mach bitte mal Dein EG.Arbeitszimmer.FensterLinks auf bzw zu, so dass sich der State ändert und dann noch mal ein List davon.
Denn bei deinem List ist dieses Device bei den Readings nicht aufgeführt.

BTW:

Verschiebe Dein Posting besser nach http://forum.fhem.de/index.php/board,20.0.html
Da passt das laut http://fhem.de/MAINTAINER.txt besser hin. Da liest Damian auch eher mit, was das DOIF Problem angeht.