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
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.
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
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.
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.
Dieses Thema geht hier weiter: http://forum.fhem.de/index.php/topic,46272.0.html