Hallo zusammen,
ich habe das Problem, dass ich zwei (fast) identische DOIFs habe, von denen eins tadellos funktioniert, das andere aber nicht.
Funktionierendes DOIF für die Heizkörperpumpe (dihzgctr):
([tmpsshkk:temperature] > 52 and ([myccu:HeizwasserHK] eq "true"))
(set owswitch output hkp on)
DOELSEIF
([tmpsshkk:temperature] < 48 or ([myccu:HeizwasserHK] eq "false"))
(set owswitch output hkp off)
DOIF für die Fußbodenheizungspumpe (difbhctr) funktioniert nicht:
([tmpsshkk:temperature] > 54 and ([myccu:HeizwasserFB] eq "true"))
(set owswitch output fbp on)
DOELSEIF
([tmpsshkk:temperature] < 50 or ([myccu:HeizwasserFB] eq "false"))
(set owswitch output fbp off)
- Die Temperatur ist die Kesseltemperatur für den Heizkreis.
- hkp und fbp sind die Ausgänge eines DS2408-Relais
- HeizwasserXX sind Variablen aus meiner Raspberrymatic
Das kuriose für mich ist, dass die Fußbodenheizung korrekt schält, wenn ich sie mit
set difbhctr cmd01
ein-, btw. mit
set difbhctr cmd02
ausschalte.
Der automatische Wechsel des Status führt aber zu keiner Aktion.
Kann mir hier jemand weiterhelfen? Ich seh' wohl den Wald vor lauter Bäumen nicht...
Vielen Dank für jeden Hinweis!
Du musst ein list vom vermeintlich falschen Verhalten/Zustand des DOIF-Devices posten, dann kann man erst was dazu sagen.
Hallo Damian,
hier das List mit automatischem Statuswechsel:
Internals:
DEF ([tmpsshkk:temperature] > 54 and ([myccu:HeizwasserFB] eq "true"))
(set owswitch output fbp on)
DOELSEIF
([tmpsshkk:temperature] < 50 or ([myccu:HeizwasserFB] eq "false"))
(set owswitch output fbp off)
FUUID 5dbc446b-f33f-5d70-f79c-627849b5cc7b16c7
MODEL FHEM
NAME difbhctr
NOTIFYDEV global,myccu,tmpsshkk
NR 69
NTFY_ORDER 50-difbhctr
STATE cmd_1
TYPE DOIF
VERSION 26703 2022-11-14 16:43:41
eventCount 131
READINGS:
2023-03-07 22:35:40 Device myccu
2023-03-07 22:35:40 cmd 1
2023-03-07 22:35:40 cmd_event myccu
2023-03-07 22:35:40 cmd_nr 1
2023-03-07 22:35:40 e_myccu_HeizwasserFB true
2023-03-07 22:35:38 e_tmpsshkk_temperature 60.687
2023-03-07 21:58:01 mode enabled
2023-03-07 22:35:40 state cmd_1
Regex:
accu:
collect:
cond:
myccu:
0:
HeizwasserFB ^myccu$:^HeizwasserFB:
1:
HeizwasserFB ^myccu$:^HeizwasserFB:
tmpsshkk:
0:
temperature ^tmpsshkk$:^temperature:
1:
temperature ^tmpsshkk$:^temperature:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'tmpsshkk','temperature') > 54 and (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "true")
1 ::ReadingValDoIf($hash,'tmpsshkk','temperature') < 50 or (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "false")
do:
0:
0 set owswitch output fbp on
1:
0 set owswitch output fbp off
2:
helper:
NOTIFYDEV global,myccu,tmpsshkk
event HeizwasserHK: true,Heizwasser: 60.7,HeizwasserFB: true
globalinit 1
last_timer 0
sleeptimer -1
timerdev myccu
timerevent HeizwasserHK: true,Heizwasser: 60.7,HeizwasserFB: true
triggerDev myccu
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: myccu
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: myccu
state: cmd_1
timerevents:
HeizwasserHK: true
Heizwasser: 60.7
HeizwasserFB: true
timereventsState:
HeizwasserHK: true
Heizwasser: 60.7
HeizwasserFB: true
triggerEvents:
HeizwasserHK: true
Heizwasser: 60.7
HeizwasserFB: true
triggerEventsState:
HeizwasserHK: true
Heizwasser: 60.7
HeizwasserFB: true
hmccu:
internals:
readings:
all tmpsshkk:temperature myccu:HeizwasserFB
trigger:
uiState:
uiTable:
Attributes:
do always
room Heizung
verbose 0
Und hier noch nach manuellem Wechsel über "set ... cmd1"
Internals:
DEF ([tmpsshkk:temperature] > 54 and ([myccu:HeizwasserFB] eq "true"))
(set owswitch output fbp on)
DOELSEIF
([tmpsshkk:temperature] < 50 or ([myccu:HeizwasserFB] eq "false"))
(set owswitch output fbp off)
FUUID 5dbc446b-f33f-5d70-f79c-627849b5cc7b16c7
MODEL FHEM
NAME difbhctr
NOTIFYDEV global,myccu,tmpsshkk
NR 69
NTFY_ORDER 50-difbhctr
STATE cmd_1
TYPE DOIF
VERSION 26703 2022-11-14 16:43:41
eventCount 134
READINGS:
2023-03-07 22:37:38 Device tmpsshkk
2023-03-07 22:37:42 cmd 1
2023-03-07 22:37:42 cmd_event set_cmd_1
2023-03-07 22:37:42 cmd_nr 1
2023-03-07 22:35:40 e_myccu_HeizwasserFB true
2023-03-07 22:37:38 e_tmpsshkk_temperature 60.625
2023-03-07 21:58:01 mode enabled
2023-03-07 22:37:42 state cmd_1
Regex:
accu:
collect:
cond:
myccu:
0:
HeizwasserFB ^myccu$:^HeizwasserFB:
1:
HeizwasserFB ^myccu$:^HeizwasserFB:
tmpsshkk:
0:
temperature ^tmpsshkk$:^temperature:
1:
temperature ^tmpsshkk$:^temperature:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'tmpsshkk','temperature') > 54 and (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "true")
1 ::ReadingValDoIf($hash,'tmpsshkk','temperature') < 50 or (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "false")
do:
0:
0 set owswitch output fbp on
1:
0 set owswitch output fbp off
2:
helper:
NOTIFYDEV global,myccu,tmpsshkk
event T: 60.625,temperature: 60.625
globalinit 1
last_timer 0
sleeptimer -1
timerdev tmpsshkk
timerevent T: 60.625,temperature: 60.625
triggerDev tmpsshkk
timerevents:
T: 60.625
temperature: 60.625
timereventsState:
state: T: 60.625
temperature: 60.625
triggerEvents:
T: 60.625
temperature: 60.625
triggerEventsState:
state: T: 60.625
temperature: 60.625
hmccu:
internals:
readings:
all tmpsshkk:temperature myccu:HeizwasserFB
trigger:
uiState:
uiTable:
Attributes:
do always
room Heizung
verbose 0
Das ist kein vermeintlich falscher Zustand.
Mit:
Zitat2023-03-07 22:35:40 e_myccu_HeizwasserFB true
2023-03-07 22:35:38 e_tmpsshkk_temperature 60.687
ist ja die erste Bedingung erfüllt und nicht die zweite.
Du musst zeigen, dass trotz wahrer zweiter Bedingung nicht in cmd2 geschaltet wurde.
Bei List 1 wurde nach erreichen der wahren Bedingung der Status auf cmd1 gewechselt aber der Befehl "set owswitch output fbp on" wurde nicht ausgeführt. Bei einem manuellen "set difbhctr cmd1" wird der Befehl dann ausgeführt (List2).
Die beiden Bedingungen, die du zitierst sind wahr, das DOIF wechselt den Zustand von cmd2 nach cmd1 (was es ja dann soll) aber der Set-Befehl wird nicht ausgeführt.
OK. Also nach:
2023-03-07 22:35:40 cmd 1
wurde der cmd1 ausgeführt. Damit sollte der Befehl um diese Zeit ausgeführt worden sein. Im List kann ich den korrekten Befehl für cmd1 sehen. Du kannst davor per Log3-Befehl die Ausführung loggen, um sicher zu gehen oder einen Test-Dummy schalten.
Ohne do always wird der cmd-Befehl nur einmal ausgeführt und dann erst wieder nachdem cmd2 ausgeführt worden ist.
Und genau da liegt mein Problem. Ich dachte zuerst meine Kommandozeile hätte einen Fehler. Wenn ich aber "Set difbhctr cmd1" eingebe, funktioniert alles :o
Das "baugleiche" dihzgctr funktioniert vollautomatisch...
Das mit dem Test-Dummy versuche ich am Wochenende mal. Danke.