Hallo,
ich habe folgendes DOIF:
Internals:
DEF ([Kaltwasser:presence] eq "absent")()(set teleBot message 🆘️ Fühler/Modul Heizung AUSFALL)(set HeizungFuehler off)
DOELSEIF ([Kaltwasser:presence] eq "present")() (set HeizungFuehler on)(set teleBot message Fühler/Modul Heizung OK)
DOELSE ## nothing
FUUID 5c44780f-f33f-8efe-3aaa-1c28c8b6e430bbfb
MODEL FHEM
NAME HeizungFuehlerd1
NOTIFYDEV Kaltwasser,global
NR 1497
NTFY_ORDER 50-HeizungFuehlerd1
STATE cmd_2_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-12-11 11:50:25 Device Kaltwasser
2021-12-11 11:50:41 cmd 2.1
2021-12-11 11:50:41 cmd_event Kaltwasser
2021-12-11 11:50:41 cmd_nr 2
2021-12-11 11:50:41 cmd_seqnr 1
2021-12-11 11:50:25 e_Kaltwasser_presence present
2021-12-10 13:59:16 mode enabled
2021-12-11 11:50:41 state cmd_2_1
2021-12-11 11:50:41 wait_timer 11.12.2021 11:54:41 cmd_2_2 Kaltwasser
Regex:
accu:
collect:
cond:
Kaltwasser:
0:
presence ^Kaltwasser$:^presence:
1:
presence ^Kaltwasser$:^presence:
attr:
cmdState:
wait:
0:
15
600
30
1:
15
240
5
2:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Kaltwasser','presence') eq "absent"
1 ::ReadingValDoIf($hash,'Kaltwasser','presence') eq "present"
do:
0:
0
1 set teleBot message 🆘️ Fühler/Modul Heizung AUSFALL
2 set HeizungFuehler off
1:
0
1 set HeizungFuehler on
2 set teleBot message Fühler/Modul Heizung OK
2:
0
helper:
DEVFILTER ^global$|^Kaltwasser$
NOTIFYDEV global|Kaltwasser
event presence: present
globalinit 1
last_timer 0
sleepdevice Kaltwasser
sleepsubtimer 1
sleeptimer 1
timerdev Kaltwasser
timerevent presence: present
triggerDev Kaltwasser
DOIF_eventa:
cmd_nr: 2
cmd_seqnr: 1
cmd_event: Kaltwasser
cmd_2_1
DOIF_eventas:
cmd_nr: 2
cmd_seqnr: 1
cmd_event: Kaltwasser
state: cmd_2_1
timerevents:
presence: present
timereventsState:
presence: present
triggerEvents:
presence: present
triggerEventsState:
presence: present
internals:
readings:
all Kaltwasser:presence
trigger:
uiState:
uiTable:
Attributes:
alias Störmeldung absent
wait 15,600,30:15,240,5:0
Doch anscheinend funktioniert das wait da nicht wie ich es gerne hätte.
Hier mal ein Auszug aus dem log:
2021-12-11_11:42:23 Kaltwasser presence: absent
2021-12-11_11:42:24 Kaltwasser absent
2021-12-11_11:43:13 Hz_Vorlauf Tem: 34.50
2021-12-11_11:47:28 Brauchwasser presence: absent
2021-12-11_11:47:28 Brauchwasser absent
2021-12-11_11:47:47 FB_Heizung presence: present
2021-12-11_11:47:47 FB_Heizung Tem: 33.50
2021-12-11_11:50:25 Kaltwasser Temperature: 20.00
2021-12-11_11:50:25 Kaltwasser presence: present
Demnach kommt die Meldung:
2021-12-11_11:42:23 Kaltwasser presence: absent
um 11:42 Uhr.
Zum selben Zeítpunkt geht die Meldung auch per Telegram raus (siehe Anhang). Wenn ich DOIF und wait richtig verstehe dürfte die Meldung aber erst nach exakt 615 Sekunden (15+600) rausgehen. Gleiches gilt für die Meldung bei zurücksetzen.
Das ist nicht mein einziges DOIF und auch nicht mein einziges wait, aber es ist das Einzige, das nicht so läuft wie gewollt. Wahrscheinlich sitzt das Problem wieder vor dem Rechner, aber ich komme momentan nicht darauf.
PS. Das () in dem cmd´s habe ich nur eingebaut, weil ich festgestellt habe, dass es keine Verzögerung gibt und es war ein Versuch doch noch eine Verzögerung hinzukriegen. Das war vorher nicht drin, hat aber auch nicht funktioniert.
Für Tipps bin ich dankbar.
Zitat von: Jogi am 11 Dezember 2021, 12:03:45
Hallo,
ich habe folgendes DOIF:
Internals:
DEF ([Kaltwasser:presence] eq "absent")()(set teleBot message 🆘️ Fühler/Modul Heizung AUSFALL)(set HeizungFuehler off)
DOELSEIF ([Kaltwasser:presence] eq "present")() (set HeizungFuehler on)(set teleBot message Fühler/Modul Heizung OK)
DOELSE ## nothing
FUUID 5c44780f-f33f-8efe-3aaa-1c28c8b6e430bbfb
MODEL FHEM
NAME HeizungFuehlerd1
NOTIFYDEV Kaltwasser,global
NR 1497
NTFY_ORDER 50-HeizungFuehlerd1
STATE cmd_2_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-12-11 11:50:25 Device Kaltwasser
2021-12-11 11:50:41 cmd 2.1
2021-12-11 11:50:41 cmd_event Kaltwasser
2021-12-11 11:50:41 cmd_nr 2
2021-12-11 11:50:41 cmd_seqnr 1
2021-12-11 11:50:25 e_Kaltwasser_presence present
2021-12-10 13:59:16 mode enabled
2021-12-11 11:50:41 state cmd_2_1
2021-12-11 11:50:41 wait_timer 11.12.2021 11:54:41 cmd_2_2 Kaltwasser
Regex:
accu:
collect:
cond:
Kaltwasser:
0:
presence ^Kaltwasser$:^presence:
1:
presence ^Kaltwasser$:^presence:
attr:
cmdState:
wait:
0:
15
600
30
1:
15
240
5
2:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Kaltwasser','presence') eq "absent"
1 ::ReadingValDoIf($hash,'Kaltwasser','presence') eq "present"
do:
0:
0
1 set teleBot message 🆘️ Fühler/Modul Heizung AUSFALL
2 set HeizungFuehler off
1:
0
1 set HeizungFuehler on
2 set teleBot message Fühler/Modul Heizung OK
2:
0
helper:
DEVFILTER ^global$|^Kaltwasser$
NOTIFYDEV global|Kaltwasser
event presence: present
globalinit 1
last_timer 0
sleepdevice Kaltwasser
sleepsubtimer 1
sleeptimer 1
timerdev Kaltwasser
timerevent presence: present
triggerDev Kaltwasser
DOIF_eventa:
cmd_nr: 2
cmd_seqnr: 1
cmd_event: Kaltwasser
cmd_2_1
DOIF_eventas:
cmd_nr: 2
cmd_seqnr: 1
cmd_event: Kaltwasser
state: cmd_2_1
timerevents:
presence: present
timereventsState:
presence: present
triggerEvents:
presence: present
triggerEventsState:
presence: present
internals:
readings:
all Kaltwasser:presence
trigger:
uiState:
uiTable:
Attributes:
alias Störmeldung absent
wait 15,600,30:15,240,5:0
Doch anscheinend funktioniert das wait da nicht wie ich es gerne hätte.
Hier mal ein Auszug aus dem log:
2021-12-11_11:42:23 Kaltwasser presence: absent
2021-12-11_11:42:24 Kaltwasser absent
2021-12-11_11:43:13 Hz_Vorlauf Tem: 34.50
2021-12-11_11:47:28 Brauchwasser presence: absent
2021-12-11_11:47:28 Brauchwasser absent
2021-12-11_11:47:47 FB_Heizung presence: present
2021-12-11_11:47:47 FB_Heizung Tem: 33.50
2021-12-11_11:50:25 Kaltwasser Temperature: 20.00
2021-12-11_11:50:25 Kaltwasser presence: present
Demnach kommt die Meldung:
2021-12-11_11:42:23 Kaltwasser presence: absent
um 11:42 Uhr.
Zum selben Zeítpunkt geht die Meldung auch per Telegram raus (siehe Anhang). Wenn ich DOIF und wait richtig verstehe dürfte die Meldung aber erst nach exakt 615 Sekunden (15+600) rausgehen. Gleiches gilt für die Meldung bei zurücksetzen.
Das ist nicht mein einziges DOIF und auch nicht mein einziges wait, aber es ist das Einzige, das nicht so läuft wie gewollt. Wahrscheinlich sitzt das Problem wieder vor dem Rechner, aber ich komme momentan nicht darauf.
PS. Das () in dem cmd´s habe ich nur eingebaut, weil ich festgestellt habe, dass es keine Verzögerung gibt und es war ein Versuch doch noch eine Verzögerung hinzukriegen. Das war vorher nicht drin, hat aber auch nicht funktioniert.
Für Tipps bin ich dankbar.
Man sieht ja die Timer, die gerade laufen in den Readings, die werden wohl funktionieren. Ein wait-Timer wird nicht zurückgesetzt beim erneutem Event, womöglich ist der Auslöser ein Event zuvor und nicht das, was du sieht.
Hallo Damian,
das verstehe ich nicht ganz.
Man sieht doch z.B. auch an
2021-12-11_11:50:25 Kaltwasser presence: present
dass die Telegram-Meldung sofort kommt, ohne wait (DOIF geht auf cmd2). Dazwischen war doch kein Event mehr.
Oder verstehe ich da etwas falsch?
Hier funktioniert alles wie programmiert:
Zitat2021-12-11 11:50:25 Device Kaltwasser
2021-12-11 11:50:41 cmd 2.1
2021-12-11 11:50:41 cmd_event Kaltwasser
2021-12-11 11:50:41 cmd_nr 2
2021-12-11 11:50:41 cmd_seqnr 1
2021-12-11 11:50:25 e_Kaltwasser_presence present
2021-12-10 13:59:16 mode enabled
2021-12-11 11:50:41 state cmd_2_1
2021-12-11 11:50:41 wait_timer 11.12.2021 11:54:41 cmd_2_2 Kaltwasser
Um 11:50:25 kam das auslösende Event
Um 11:50:41 wurde der erste Befehl ausgelöst cmd_2_1 (16 Sekunden später)
und um 11:54:41 kommt der zweite (240 Sekunden später)
Vielen Dank für Deine Erklärung.
Ich habe nie daran gezweifelt das DOIF richtig funktioniert, aber ich bin erst jetzt durch Deine Erklärung darauf gekommen, dass die Meldung irgendwo anders herkommen muss.
Und, Asche auf mein Haupt, ich schäme mich :-[
Ich habe den Fehler lokalisiert und die Ursache saß -natürlich :-\- mal wieder vor dem Rechner.
Ich hatte dasselbe DOIF zweimal in meiner fhem.cfg, unter unterschiedlichen Namen. Das eine hat das wait-Attribut, das andere nicht.
Bei welcher Bastelei das passiert ist weiß ich nicht mehr.
So sind die Meldungen immer von den DOIF gekommen, das nicht verzögert und das ich nicht auf dem Schirm hatte.
Eigene Doofheit.
Sorry für den Aufwand und Danke für den Schubser,
Jogi