Hallo,
Kann mir jemand auf die Sprünge helfen warum mein doif auf cmd5 steht und nicht auf cmd2?
Luefter_state auto
Luefter_stufe 2
Manuelles checkall bewirkt nichts
Internals:
DEF ([Luefter:state] ne "off" and [Luefter:stufe] eq "1") (set MQTT2_DVES_A19F5D POWER1 on)
DOELSEIF ([Luefter:state] ne "off" and [Luefter:stufe] eq "2") (set MQTT2_DVES_A19F5D POWER2 on)
DOELSEIF ([Luefter:state] ne "off" and [Luefter:stufe] eq "3") (set MQTT2_DVES_A19F5D POWER3 on)
DOELSEIF ([Luefter:state] ne "off" and [Luefter:stufe] eq "4") (set MQTT2_DVES_A19F5D POWER4 on)
DOELSE (set MQTT2_DVES_A19F5D POWER1 off;set MQTT2_DVES_A19F5D POWER2 off;set MQTT2_DVES_A19F5D POWER3 off;set MQTT2_DVES_A19F5D POWER4 off;setreading Luefter stufe 0)
FUUID 5c4c60c0-f33f-8e5f-8f83-71bfebe6efff7d64
FVERSION 98_DOIF.pm:0.209290/2020-01-10
MODEL FHEM
NAME Program.Luefter
NOTIFYDEV global,Luefter
NR 449
NTFY_ORDER 50-Program.Luefter
STATE cmd_5
TYPE DOIF
VERSION 20929 2020-01-10 09:44:35
READINGS:
2020-01-18 13:09:29 Device Luefter
2020-01-18 12:48:10 cmd 5
2020-01-18 12:48:10 cmd_event Luefter
2020-01-18 12:48:10 cmd_nr 5
2020-01-18 13:09:29 e_Luefter_state auto
2020-01-18 05:24:53 e_Luefter_stufe 2
2020-01-18 12:48:10 state cmd_5
Regex:
accu:
cond:
Luefter:
0:
state ^Luefter$:^state:
stufe ^Luefter$:^stufe:
1:
state ^Luefter$:^state:
stufe ^Luefter$:^stufe:
2:
state ^Luefter$:^state:
stufe ^Luefter$:^stufe:
3:
state ^Luefter$:^state:
stufe ^Luefter$:^stufe:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "1"
1 ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "2"
2 ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "3"
3 ::ReadingValDoIf($hash,'Luefter','state') ne "off" and ::ReadingValDoIf($hash,'Luefter','stufe') eq "4"
do:
0:
0 set MQTT2_DVES_A19F5D POWER1 on
1:
0 set MQTT2_DVES_A19F5D POWER2 on
2:
0 set MQTT2_DVES_A19F5D POWER3 on
3:
0 set MQTT2_DVES_A19F5D POWER4 on
4:
0 set MQTT2_DVES_A19F5D POWER1 off;set MQTT2_DVES_A19F5D POWER2 off;set MQTT2_DVES_A19F5D POWER3 off;set MQTT2_DVES_A19F5D POWER4 off;setreading Luefter stufe 0
helper:
DEVFILTER ^global$|^Luefter$
NOTIFYDEV global|Luefter
event auto
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent auto
timerevents
timereventsState
triggerDev
internals:
perlblock:
readings:
all Luefter:state Luefter:stufe
trigger:
uiState:
uiTable:
Attributes:
room Luefter
Gruß
Eisix
Hallo Eisix,
nur eine Vermutung von mir, kann es sein, dass die Bedingungen 1 bis 4 nicht erfüllt sind? Dann würde bedingungslos cmd_5 gesetzt.
Viele Grüße Gisbert
Zitat von: Gisbert am 19 Januar 2020, 09:44:08
Hallo Eisix,
nur eine Vermutung von mir, kann es sein, dass die Bedingungen 1 bis 4 nicht erfüllt sind? Dann würde bedingungslos cmd_5 gesetzt.
Viele Grüße Gisbert
stufe ist aber seit 05:24 auf 2, und state wurde um 12:48 auf "auto" gesetzt...
@Eisix: ich verstehe das auch nicht. Kannst Du bitte ein "list" von Luefter posten?
Hallo,
Hier das list vom Luefter Dummy, allerdings Zustand jetzt.
Internals:
FUUID 5c4996ee-f33f-8e5f-07c3-7d60c6912bc18543
FVERSION 98_dummy.pm:0.206650/2019-12-06
NAME Luefter
NR 447
STATE auto
TYPE dummy
READINGS:
2020-01-19 08:34:38 state auto
2020-01-19 08:35:38 stufe 2
Attributes:
room Luefter
setList stufe:0,1,2,3,4 off auto man
useSetExtensions 1
webCmd stufe: auto man off
Und ein darüber liegendes doif das da auch mitspielt.
Internals:
DEF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] > 65) (setreading Luefter stufe 4, set Program.Luefter checkall)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 60 and [myHOMEMODE:season] eq "winter" and [Wetter:windchill] <= 10 and [Wetter:wind] >= 20 and [Wetter:wind] <= 30) (setreading Luefter stufe 1)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 60 and [myHOMEMODE:season] eq "winter" and [Wetter:windchill] > 5 and [Wetter:wind] > 30) (setreading Luefter stufe 1)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 60 and [myHOMEMODE:season] eq "winter" and [Wetter:windchill] <= 5 and [Wetter:wind] > 30) (setreading Luefter stufe 0)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 65 and [myHOMEMODE:season] ne "winter" and [EnO_4BS_018C3E20:CleanTemp] >= 23.5 and ([Sensor_aussen:CleanTemp]) <= [EnO_4BS_018C3E20:CleanTemp]) (setreading Luefter stufe 3)
DOELSEIF ([Luefter:state] eq "auto" and [Sensor_BAD_OG:humidity:dd] <= 65 and [myHOMEMODE:season] ne "winter" and [EnO_4BS_018C3E20:CleanTemp] >= 23.5 and ([Sensor_aussen:CleanTemp]) > [EnO_4BS_018C3E20:CleanTemp]) (setreading Luefter stufe 0)
DOELSEIF ([Luefter:state] eq "man") (setreading Luefter stufe [Luefter:stufe])
DOELSE (setreading Luefter stufe 2)
FUUID 5c4dfa50-f33f-8e5f-9f30-a4b0969a7cc7cc54
FVERSION 98_DOIF.pm:0.209290/2020-01-10
MODEL FHEM
NAME Steuerung.Luefter
NOTIFYDEV Sensor_aussen,EnO_4BS_018C3E20,myHOMEMODE,Sensor_BAD_OG,global,Luefter,Wetter
NR 450
NTFY_ORDER 50-Steuerung.Luefter
STATE cmd_8
TYPE DOIF
VERSION 20929 2020-01-10 09:44:35
READINGS:
2020-01-19 18:41:16 Device Sensor_aussen
2020-01-19 08:35:38 cmd 8
2020-01-19 08:35:38 cmd_event Luefter
2020-01-19 08:35:38 cmd_nr 8
2020-01-19 18:33:08 e_EnO_4BS_018C3E20_CleanTemp 22.2
2020-01-19 08:34:38 e_Luefter_state auto
2020-01-19 18:31:58 e_Sensor_BAD_OG_humidity 55 %
2020-01-19 18:41:16 e_Sensor_aussen_CleanTemp 3.0
2020-01-19 18:02:58 e_Wetter_wind 7.2
2020-01-19 18:02:58 e_Wetter_windchill 0.6
2020-01-18 01:16:16 mode enabled
2020-01-19 08:35:38 state cmd_8
2020-01-19 08:35:38 wait_timer no timer
Regex:
accu:
cond:
EnO_4BS_018C3E21:
0:
1:
2:
3:
4:
CleanTemp ^EnO_4BS_018C3E21$:^CleanTemp:
5:
CleanTemp ^EnO_4BS_018C3E21$:^CleanTemp:
6:
Luefter:
0:
state ^Luefter$:^state:
1:
state ^Luefter$:^state:
2:
state ^Luefter$:^state:
3:
state ^Luefter$:^state:
4:
state ^Luefter$:^state:
5:
state ^Luefter$:^state:
6:
state ^Luefter$:^state:
Sensor_BAD_OG:
0:
humidity ^Sensor_BAD_OG$:^humidity:
1:
humidity ^Sensor_BAD_OG$:^humidity:
2:
humidity ^Sensor_BAD_OG$:^humidity:
3:
humidity ^Sensor_BAD_OG$:^humidity:
4:
humidity ^Sensor_BAD_OG$:^humidity:
5:
humidity ^Sensor_BAD_OG$:^humidity:
6:
Sensor_aussen:
0:
1:
2:
3:
4:
CleanTemp ^Sensor_aussen$:^CleanTemp:
5:
CleanTemp ^Sensor_aussen$:^CleanTemp:
6:
Wetter:
0:
1:
wind ^Wetter$:^wind:
windchill ^Wetter$:^windchill:
2:
wind ^Wetter$:^wind:
windchill ^Wetter$:^windchill:
3:
wind ^Wetter$:^wind:
windchill ^Wetter$:^windchill:
4:
5:
6:
myHOMEMODE:
1:
season ^myHOMEMODE$:^season:
2:
season ^myHOMEMODE$:^season:
3:
season ^myHOMEMODE$:^season:
4:
season ^myHOMEMODE$:^season:
5:
season ^myHOMEMODE$:^season:
attr:
cmdState:
wait:
0:
0
1:
0
2:
0
3:
0
4:
0
5:
0
6:
0
7:
60
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') > 65
1 ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 60 and ::ReadingValDoIf($hash,'myHOMEMODE','season') eq "winter" and ::ReadingValDoIf($hash,'Wetter','windchill') <= 10 and ::ReadingValDoIf($hash,'Wetter','wind') >= 20 and ::ReadingValDoIf($hash,'Wetter','wind') <= 30
2 ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 60 and ::ReadingValDoIf($hash,'myHOMEMODE','season') eq "winter" and ::ReadingValDoIf($hash,'Wetter','windchill') > 5 and ::ReadingValDoIf($hash,'Wetter','wind') > 30
3 ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 60 and ::ReadingValDoIf($hash,'myHOMEMODE','season') eq "winter" and ::ReadingValDoIf($hash,'Wetter','windchill') <= 5 and ::ReadingValDoIf($hash,'Wetter','wind') > 30
4 ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 65 and ::ReadingValDoIf($hash,'myHOMEMODE','season') ne "winter" and ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp') >= 23.5 and (::ReadingValDoIf($hash,'Sensor_aussen','CleanTemp')) <= ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp')
5 ::ReadingValDoIf($hash,'Luefter','state') eq "auto" and ::ReadingValDoIf($hash,'Sensor_BAD_OG','humidity','','dd') <= 65 and ::ReadingValDoIf($hash,'myHOMEMODE','season') ne "winter" and ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp') >= 23.5 and (::ReadingValDoIf($hash,'Sensor_aussen','CleanTemp')) > ::ReadingValDoIf($hash,'EnO_4BS_018C3E21','CleanTemp')
6 ::ReadingValDoIf($hash,'Luefter','state') eq "man"
do:
0:
0 setreading Luefter stufe 4, set Program.Luefter checkall
1:
0 setreading Luefter stufe 1
2:
0 setreading Luefter stufe 1
3:
0 setreading Luefter stufe 0
4:
0 setreading Luefter stufe 3
5:
0 setreading Luefter stufe 0
6:
0 setreading Luefter stufe [Luefter:stufe]
7:
0 setreading Luefter stufe 2
helper:
DEVFILTER ^global$|^Luefter$|^Wetter$|^Sensor_BAD_OG$|^myHOMEMODE$|^Sensor_aussen$|^EnO_4BS_018C3E21$
NOTIFYDEV global|Luefter|Wetter|Sensor_BAD_OG|myHOMEMODE|Sensor_aussen|EnO_4BS_018C3E21
event temperature: 3.0 C,motion: closed,CleanTemp: 3.0
globalinit 1
last_timer 0
sleepdevice Luefter
sleepsubtimer -1
sleeptimer -1
timerdev Sensor_aussen
timerevent temperature: 3.0 C,motion: closed,CleanTemp: 3.0
triggerDev Sensor_aussen
timerevents:
temperature: 3.0 C
motion: closed
CleanTemp: 3.0
timereventsState:
temperature: 3.0 C
motion: closed
CleanTemp: 3.0
triggerEvents:
temperature: 3.0 C
motion: closed
CleanTemp: 3.0
triggerEventsState:
temperature: 3.0 C
motion: closed
CleanTemp: 3.0
internals:
powerMap:
readings:
all Luefter:state Sensor_BAD_OG:humidity myHOMEMODE:season Wetter:windchill Wetter:wind EnO_4BS_018C3E21:CleanTemp Sensor_aussen:CleanTemp
readingsDesc:
energy:
rtype whr
power:
rtype w
trigger:
uiState:
uiTable:
Attributes:
event-on-change-reading 1
event-on-update-reading 1
room Luefter
wait 0:0:0:0:0:0:0:60
Gruß
Eisix
Hast Du schon
... and [Luefter:stufe] = 2) ...
probiert?
Zitat von: rih am 19 Januar 2020, 19:28:36
Hast Du schon
... and [Luefter:stufe] = 2) ...
probiert?
Dann mit ==
Hallo,
beide Schreibweisen verändern nichts an dem Problem.
Es tritt auf wenn ich ausschalte (Lüfter geht dann auf off uns Stufe auf 0) und dann wieder auf Automatik wechsele.
Gruß
Eisix
Hmmm zwei DOIFs, die stufe schalten...
Luefter auf off bedeutet
- laut Steuerung.Luefter stufe 2
- laut Program.Luefter stufe 0
Es wäre interessant, die Reihenfolge von den Events aus dem Eventmonitor zu sehen
Hallo,
Schalten von FTUI aus auf off und dann zurück auf auto
2020-01-21 07:57:33.560 DOIF Program.Luefter cmd_nr: 5
2020-01-21 07:57:33.560 DOIF Program.Luefter cmd: 5
2020-01-21 07:57:33.560 DOIF Program.Luefter cmd_event: Luefter
2020-01-21 07:57:33.560 DOIF Program.Luefter cmd_5
2020-01-21 07:57:33.570 dummy Luefter off
2020-01-21 07:57:33.570 dummy Luefter stufe: 0
2020-01-21 07:58:08.637 dummy Luefter auto
2020-01-21 07:58:08.652 DOIF Steuerung.Luefter checkall
Hier die Kommandos von FTUI
<li><div data-type="push" data-fhem-cmd="set Luefter off" data-icon="fa-power-off" data-off-color="#21a000" data-off-background-color="blue"></div></li>
<li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 1" data-icon="" data-off-background-color="blue"><font color="#21a000">1</font></div></li>
<li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 2" data-icon="" data-off-background-color="blue"><font color="#21a000">2</font></div></li>
<li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 3" data-icon="" data-off-background-color="blue"><font color="#21a000">3</font></div></li>
<li><div data-type="push" data-fhem-cmd="set Luefter man;setreading Luefter stufe 4" data-icon="" data-off-background-color="blue"><font color="#21a000">4</font></div></li>
<li><div data-type="push" data-fhem-cmd="set Luefter auto; set Steuerung.Luefter checkall" data-icon="oa-vent_ventilation_level_automatic" data-off-color="#21a000" data-off-background-color="blue"></div></li>
Erst wenn ich im manuellen Modus auf stufe 1-4 schalte und dann wieder auf Automatik gehe funktioniert es wieder. Also Modus auto und stufe 0 triggert nicht Steuerung.Luefter welches zu stufe 2 (doelse) führen sollte wenn keine der doif Bedingungen erfüllt ist.
Und das obwohl in FTUI ein checkall ausgeführt wird (data-fhem-cmd="set Luefter auto; set Steuerung.Luefter checkall" )
Gruß
Eisix
Auf Grund von
event-on-change-reading 1
event-on-update-reading 1
sieht man kein Event von Steuerung.Luefter im Eventmonitor.
Also, machen wir es anders. Kannst Du wieder ein "list" von beiden DOIFs und vom Luefter posten, wenn Modus auto und stufe 0 Steuerung.Luefter nicht geschaltet haben? Also... wenn es deiner Meinung nach falsch ist.
Und ich glaube, ich habe verstanden, was nicht geht. Wenn Du auf off schaltest, geht Steurung.Luefter auf cmd_8 und Program.Luefter auf cmd_5
Luefter ist jetzt off und stufe 0
Wenn Du jetzt wieder auf auto schaltest, machst Du set Luefter auto; set Steuerung.Luefter checkall
und es passiert nichts:
- Steuerung.Luefter ist schon auf cmd_8 und sieht keinen Grund, es zu ändern (ich gehe davon aus, dass die andere Bedingungen winter, wind usw falsch sind). Es bleibt auf cmd_8 und kein Befehl wird ausgeführt
- Program.Luefter sieht immer noch stufe 0 und bleibt deswegen auf cmd_5
Hallo,
ja das von dir beschrieben Verhalten ist korrekt.
Zitat
- Steuerung.Luefter ist schon auf cmd_8 und sieht keinen Grund, es zu ändern (ich gehe davon aus, dass die andere Bedingungen winter, wind usw falsch sind). Es bleibt auf cmd_8 und kein Befehl wird ausgeführt
Das bedeutet also das checkall Steuerung.Luefter nicht das komplette doif durchläuft und dann somit wenn nichts anderes passt cmd_8 ausführt und stufe auf 2 setzt, was wiederum Program.Luefter zum einschalten des Lüfters auf Stufe 2 führt.!?
Meine Erwartung/Verständnis ist das beim checkall der komplette doif Entscheidungsbaum durchlaufen wird und eine Stufe gesetzt wird. Wo liegt da mein Fehler und wie kann ich ihn beheben?
Gruß
Eisix
Zitat von: Eisix am 22 Januar 2020, 13:52:41
.Das bedeutet also das checkall Steuerung.Luefter nicht das komplette doif durchläuft und dann somit wenn nichts anderes passt cmd_8 ausführt und stufe auf 2 setzt, was wiederum Program.Luefter zum einschalten des Lüfters auf Stufe 2 führt.!?
Er geht schon duch das komplette DOIF, prüft alle Bedingungen, egal ob die Device getriggert haben oder nicht. Aber wenn der Zustand schon cmd_8 war, und er feststellt, dass die Bedingungen wiederum auf cmd_8 landen, dann wird kein neuer Befehl ausgeführt. Es sei denn, Du hast "do always" gesetzt.
event-on-change-reading 1
event-on-update-reading 1
Gibt nur Events, wenn es beim Reading "1" eine Änderung/Update gibt. Gibt es ein Reading Namens "1"?
Hallo,
danke an alle für die Tips. Es funktioniert jetzt wie es soll.
Wenn es jemanden interessiert kann ich den code einstellen.
Gruß
Eisix