Hallo,
ich habe ein DOIF, das in Abhängigkeit von der Garagentorstellung bei Nacht das Hoflicht ein/ausschaltet. Um das Hoflicht auch auszuschalten, wenn das Garagentor manuell geschlossen wurde, frage ich einen dummy, der die Stellung des Garagentors abbildet, ab. Diese Abfrage löst ca. alle 2 Minuten einen Log-Eintrag aus, obwohl sich der Zustand des Garagentors nicht ändert. Ich bin ratlos, warum im dummy keine Statusänderung zu sehen ist, das DOIF aber trotzdem triggert.
Das ist der dummy:
Internals:
FUUID 5c4c3931-f33f-6b6f-61a9-808de9601a57e3be
NAME du_Garagentor_Stellung
NR 1611
STATE Geschlossen
TYPE dummy
READINGS:
2020-10-30 18:26:10 state Geschlossen
Attributes:
devStateIcon Geschlossen:Geschlossen Offen:Auf Lueften:back Fehler:Wecker
event-on-change-reading 1
group Türen und Fenster
room 1.8_Garage,9.8.2_Dummys
userReadings Torstellung { if (ReadingsVal("du_Garagentor_Stellung","state",0) eq "Geschlossen") {"0"} else {"10"} } ## 0 und 10 wegen Plot des Status
webCmd Offen:Geschlossen:Lueften:Fehler
und das das DOIF, das ständig triggert (list ist leider etwas lang):
Internals:
DEF ([Gara_Em8_TA2_TorGeschlossen:state] ne "closed" and [du_Gara_Lueften:state] ne "Ja" and [?du_Tageslicht] eq "dunkel") (set Licht_Gart_Hof on) ## Garagentor nicht zu UND nicht auf Lüften UND dunkel => Licht einschalten.
DOELSEIF ([du_Garagentor_Stellung] eq "Geschlossen") (set Licht_Gart_Hof off, set du_Licht_Gart_Hof off) ## Garagentor zu => Licht ausschalten
DOELSEIF ([du_Licht_Gart_Hof] eq "on") (set Licht_Gart_Hof on) (set Licht_Gart_Hof off, set du_Licht_Gart_Hof off) ## Lampe wurde am Tablet eingeschalten => Leuchtet eine eingestellte Zeit
DOELSEIF ([du_Licht_Gart_Hof] eq "off") (set Licht_Gart_Hof off) ## Lampe wurde am Tablet ausgeschalten
FUUID 5c4c3932-f33f-6b6f-1ea1-0157e3f7379aa8d6
MODEL FHEM
NAME di_Licht_Gart_Hof
NOTIFYDEV du_Licht_Gart_Hof,global,du_Gara_Lueften,Gara_Em8_TA2_TorGeschlossen,du_Garagentor_Stellung
NR 1692
NTFY_ORDER 50-di_Licht_Gart_Hof
STATE Aus
TYPE DOIF
VERSION 22913 2020-10-04 21:46:02
READINGS:
2020-10-30 20:08:04 Device du_Gara_Lueften
2020-10-30 20:08:39 cmd 2
2020-10-30 20:08:39 cmd_event du_Gara_Lueften
2020-10-30 20:08:39 cmd_nr 2
2020-10-30 20:08:04 e_du_Gara_Lueften_state Nein
2020-10-30 19:56:48 mode enabled
2020-10-30 20:08:39 state Aus
2020-10-30 20:08:39 wait_timer no timer
Regex:
accu:
cond:
Gara_Em8_TA2_TorGeschlossen:
0:
state ^Gara_Em8_TA2_TorGeschlossen$:^state:
du_Gara_Lueften:
0:
state ^du_Gara_Lueften$:^state:
du_Garagentor_Stellung:
1:
&STATE ^du_Garagentor_Stellung$
du_Licht_Gart_Hof:
2:
&STATE ^du_Licht_Gart_Hof$
3:
&STATE ^du_Licht_Gart_Hof$
attr:
cmdState:
0:
An
1:
Aus
2:
Tablet An
3:
Tablet Aus
repeatsame:
wait:
0:
0
1:
60
2:
0
600
3:
30
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Gara_Em8_TA2_TorGeschlossen','state') ne "closed" and ::ReadingValDoIf($hash,'du_Gara_Lueften','state') ne "Ja" and ::InternalDoIf($hash,'du_Tageslicht','STATE') eq "dunkel"
1 ::InternalDoIf($hash,'du_Garagentor_Stellung','STATE') eq "Geschlossen"
2 ::InternalDoIf($hash,'du_Licht_Gart_Hof','STATE') eq "on"
3 ::InternalDoIf($hash,'du_Licht_Gart_Hof','STATE') eq "off"
do:
0:
0 set Licht_Gart_Hof on
1:
0 set Licht_Gart_Hof off, set du_Licht_Gart_Hof off
2:
0 set Licht_Gart_Hof on
1 set Licht_Gart_Hof off, set du_Licht_Gart_Hof off
3:
0 set Licht_Gart_Hof off
4:
helper:
DEVFILTER ^global$|^du_Garagentor_Stellung$|^du_Gara_Lueften$|^du_Licht_Gart_Hof$|^Gara_Em8_TA2_TorGeschlossen$
NOTIFYDEV global|du_Garagentor_Stellung|du_Gara_Lueften|du_Licht_Gart_Hof|Gara_Em8_TA2_TorGeschlossen
event Nein
globalinit 1
last_timer 0
sleepdevice du_Gara_Lueften
sleepsubtimer -1
sleeptimer -1
timerdev du_Gara_Lueften
timerevent Nein
triggerDev du_Gara_Lueften
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: du_Gara_Lueften
Aus
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: du_Gara_Lueften
state: Aus
timerevents:
Nein
timereventsState:
state: Nein
triggerEvents:
Nein
triggerEventsState:
state: Nein
internals:
all du_Tageslicht:STATE du_Garagentor_Stellung:STATE du_Licht_Gart_Hof:STATE
readings:
all Gara_Em8_TA2_TorGeschlossen:state du_Gara_Lueften:state
trigger:
uiState:
uiTable:
Attributes:
checkReadingEvent 0
cmdState An | Aus | Tablet An | Tablet Aus
do always
group Licht
initialize off
room 1.9_Garten,9.8.1_DOIF
wait 0:60:0,600:30
Das sind die logfile-Einträge:
2020.10.30 19:43:19.250 3: CUL_HM set Licht_Gart_Hof off noArg
2020.10.30 19:45:45.788 3: CUL_HM set Licht_Gart_Hof off noArg
2020.10.30 19:47:57.770 3: CUL_HM set Licht_Gart_Hof off noArg
2020.10.30 19:50:59.527 3: CUL_HM set Licht_Gart_Hof off noArg
2020.10.30 19:53:46.777 3: CUL_HM set Licht_Gart_Hof off noArg
2020.10.30 19:56:19.508 3: CUL_HM set Licht_Gart_Hof off noArg
2020.10.30 19:58:38.022 3: CUL_HM set Licht_Gart_Hof off noArg
Hat jemand eine Idee, woher der Trigger kommt und wie ich das verhindern kann?
Grüße Jürgen
Das ist eher du_Gara_Lueften, der triggert. Zumindest ist es laut deinem "list", was letztens getriggert hat
Das kann ich nicht nachvollziehen.
du_Gara_Lueften wird nur im cmd1 abgefragt und da wird das Licht eingeschalten. Das Log zeigt ein Licht OFF.
Das List sagt aber, dass du_gara_Lueften im cmd2 getriggert hat, wo es aber gar nicht vorkommt. Da kommt nur du_Garagentor_Stellung vor und im cmd 2 wird das Licht auch ausgeschalten, was das List ja auch zeigt.
Aber vielleicht ist meine Interpretation der List und cmd auch falsch.
Warum hast du checkReadingEvent 0 gesetzt?
Ich würde auf state abfragen:
[du_Garagentor_Stellung:state] eq "Geschlossen")
und checkReadingEvent 0 löschen, sonst wird getriggert, wenn sich irgendein Reading von du_Garagentor_Stellung ändert.
Habe ich jetzt umgesetzt und schaue einmal, ob die ungewollten Trigger damit erledigt sind.
checkReadingEvent auf 0: Nachdem ich aufgrund Fehlfunktionen (in einem Zimmer ging das Licht nicht mehr an, in einem anderen nicht mehr aus, der Receiver schaltete sich nicht mehr ab...) erkannt habe, dass im DOIF (allerdings schon vor längerer Zeit) die Logik zur Auslösung von Triggern geändert worden ist habe ich den Workaround (alte Funktionsweise wieder herstellen) von Setzen des CheckReadingEvent auf 0 überall dort eingetragen, wo ich diese Fehlfunktionen hatte.
Dürfte doch hier aber keine Auswirkung haben, da in du_Garagentor_Stellung nur ein Reading (state) vorkommt.
Zitat von: bmwfan am 01 November 2020, 13:37:56
Dürfte doch hier aber keine Auswirkung haben, da in du_Garagentor_Stellung nur ein Reading (state) vorkommt.
ja, dann dürfte es an dieser Stelle egal sein.
event-on-change-reading 1
ist auch wurscht. Somit generiert du_Garagentor_Stellung überhaupt kein Event.
Deswegen bin ich immer noch der Meinung, dass du_Gara_Lueften - in Kombination mit checkReadingEvents 0 - die Problemen macht, und da state auf Nein ist, der DOIF zu cmd2 kommt.
Ich würde doch checkReadingEvent löschen.
Wenn das nicht reicht, zeig bitte ein "list" vom DOIF kurz nachdem Du ein "set Licht_Gart_Hof off" Event gesehen hast,
und / oder kreiere eine FileLog mit allen Events von Gara_Em8_TA2_TorGeschlossen, du_Gara_Lueften, du_Garagentor_Stellung und du_Licht_Gart_Hof zur Analyse.
Funktioniert leider nicht. :-(
Ich habe das Garagentor manuell geöffnet (dummy zeigte auch "Offen") und dann wieder manuell geschlossen. Licht im Hof ging nach dem Öffnen an (cmd 1 wurde auch ausgeführt), aber als ich das Garagentor manuell (Taster in der Garage) geschlossen habe, löste cmd 2 nicht aus. Der dummy setzt scheinbar kein Event beim Wechsel in den Zustand "Geschlossen" ab.
Internals:
DEF ([Gara_Em8_TA2_TorGeschlossen:state] ne "closed" and [du_Gara_Lueften:state] ne "Ja" and [?du_Tageslicht] eq "dunkel") (set Licht_Gart_Hof on) ## Garagentor nicht zu UND nicht auf Lüften UND dunkel => Licht einschalten. Bis 23.12.19: ([du_Garagentor_Stellung] ne "Geschlossen" and [du_Tageslicht] eq "dunkel") (set Licht_Gart_Hof on)
DOELSEIF ([du_Garagentor_Stellung:state] eq "Geschlossen") (set Licht_Gart_Hof off, set du_Licht_Gart_Hof off) ## Garagentor zu => Licht ausschalten
DOELSEIF ([du_Licht_Gart_Hof] eq "on") (set Licht_Gart_Hof on) (set Licht_Gart_Hof off, set du_Licht_Gart_Hof off) ## Lampe wurde am Tablet eingeschalten => Leuchtet eine eingestellte Zeit
DOELSEIF ([du_Licht_Gart_Hof] eq "off") (set Licht_Gart_Hof off) ## Lampe wurde am Tablet ausgeschalten
FUUID 5c4c3932-f33f-6b6f-1ea1-0157e3f7379aa8d6
MODEL FHEM
NAME di_Licht_Gart_Hof
NOTIFYDEV du_Gara_Lueften,global,du_Licht_Gart_Hof,du_Garagentor_Stellung,Gara_Em8_TA2_TorGeschlossen
NR 1692
NTFY_ORDER 50-di_Licht_Gart_Hof
STATE An
TYPE DOIF
VERSION 22913 2020-10-04 21:46:02
READINGS:
2020-11-01 19:19:17 Device du_Gara_Lueften
2020-11-01 19:16:52 cmd 1
2020-11-01 19:16:52 cmd_event du_Gara_Lueften
2020-11-01 19:16:52 cmd_nr 1
2020-11-01 19:18:44 e_Gara_Em8_TA2_TorGeschlossen_state closed
2020-11-01 19:19:17 e_du_Gara_Lueften_state Nein
2020-11-01 19:13:58 e_du_Licht_Gart_Hof_STATE off
2020-11-01 13:31:44 mode enabled
2020-11-01 19:16:52 state An
2020-11-01 19:14:28 wait_timer no timer
Regex:
accu:
cond:
Gara_Em8_TA2_TorGeschlossen:
0:
state ^Gara_Em8_TA2_TorGeschlossen$:^state:
1:
2:
3:
du_Gara_Lueften:
0:
state ^du_Gara_Lueften$:^state:
1:
2:
3:
du_Garagentor_Stellung:
1:
state ^du_Garagentor_Stellung$:^state:
du_Licht_Gart_Hof:
0:
1:
2:
&STATE ^du_Licht_Gart_Hof$
3:
&STATE ^du_Licht_Gart_Hof$
attr:
cmdState:
0:
An
1:
Aus
2:
Tablet An
3:
Tablet Aus
repeatsame:
wait:
0:
0
1:
60
2:
0
600
3:
30
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Gara_Em8_TA2_TorGeschlossen','state') ne "closed" and ::ReadingValDoIf($hash,'du_Gara_Lueften','state') ne "Ja" and ::InternalDoIf($hash,'du_Tageslicht','STATE') eq "dunkel"
1 ::ReadingValDoIf($hash,'du_Garagentor_Stellung','state') eq "Geschlossen"
2 ::InternalDoIf($hash,'du_Licht_Gart_Hof','STATE') eq "on"
3 ::InternalDoIf($hash,'du_Licht_Gart_Hof','STATE') eq "off"
do:
0:
0 set Licht_Gart_Hof on
1:
0 set Licht_Gart_Hof off, set du_Licht_Gart_Hof off
2:
0 set Licht_Gart_Hof on
1 set Licht_Gart_Hof off, set du_Licht_Gart_Hof off
3:
0 set Licht_Gart_Hof off
4:
helper:
DEVFILTER ^global$|^du_Gara_Lueften$|^du_Garagentor_Stellung$|^du_Licht_Gart_Hof$|^Gara_Em8_TA2_TorGeschlossen$
NOTIFYDEV global|du_Gara_Lueften|du_Garagentor_Stellung|du_Licht_Gart_Hof|Gara_Em8_TA2_TorGeschlossen
event Nein
globalinit 1
last_timer 0
sleepdevice du_Licht_Gart_Hof
sleepsubtimer -1
sleeptimer -1
timerdev du_Gara_Lueften
timerevent Reset
triggerDev du_Gara_Lueften
timerevents:
Reset
timereventsState:
state: Reset
triggerEvents:
Nein
triggerEventsState:
state: Nein
internals:
all du_Tageslicht:STATE du_Licht_Gart_Hof:STATE
readings:
all Gara_Em8_TA2_TorGeschlossen:state du_Gara_Lueften:state du_Garagentor_Stellung:state
trigger:
uiState:
uiTable:
Attributes:
checkReadingEvent 1
cmdState An | Aus | Tablet An | Tablet Aus
do always
group Licht
initialize off
room 1.9_Garten,9.8.1_DOIF
wait 0:60:0,600:30
und so das List des Dummy:
Internals:
FUUID 5c4c3931-f33f-6b6f-61a9-808de9601a57e3be
NAME du_Garagentor_Stellung
NR 1611
STATE Geschlossen
TYPE dummy
READINGS:
2020-11-01 19:18:45 state Geschlossen
Attributes:
devStateIcon Geschlossen:Geschlossen Offen:Auf Lueften:back Fehler:Wecker
event-on-change-reading 1
group Türen und Fenster
room 1.8_Garage,9.8.2_Dummys
webCmd Offen:Geschlossen:Lueften:Fehler
@amenomade: Deinem Ansatz mit du_Gara_Lueften bin ich auch nachgegangen. Der triggert tatsächlich ständig, da in der Erstellungslogik Temperaturen abgefragt werden und jedesmal bei einer neuen Temperatur ein Event ausgelöst wird. Ich bin mir immer noch nicht über Abarbeitung von Events und Zuständen klar, aber ich denke meine Abfrage [du_Gara_Lueften:state] ne "Ja"
fragt das Event ab und somit wird ständig getriggert. Würde die Abfrage [du_Gara_Lueften] ne "Ja"
nicht nur den Zustand abfragen? Der ändert sich je in der Regel bei eienr Tmeperaturänderung nicht (nur wenn die Schwelle über/unterschritten ist.
Gruß Jürgen
Zitat von: bmwfan am 01 November 2020, 19:37:56
Der dummy setzt scheinbar kein Event beim Wechsel in den Zustand "Geschlossen" ab.
Klar. Hab dir auch schon geschrieben warum.
Zitat von: amenomade am 01 November 2020, 18:15:08
event-on-change-reading 1
ist auch wurscht. Somit generiert du_Garagentor_Stellung überhaupt kein Event.
Zitatich denke meine Abfrage
Code: [Auswählen]
[du_Gara_Lueften:state] ne "Ja"
fragt das Event ab und somit wird ständig getriggert. Würde die Abfrage
Code: [Auswählen]
[du_Gara_Lueften] ne "Ja"
nicht nur den Zustand abfragen? Der ändert sich je in der Regel bei eienr Tmeperaturänderung nicht (nur wenn die Schwelle über/unterschritten ist.
[du_Gara_Lueften] ne "Ja" und [du_Gara_Lueften:state] ne "Ja" frage beide den Zustand. Die Triggerung (wie oft, das bewertet wird) ist abhängig von checkReadingEvent.
Um ein Event zu bewerten muss man [du_Gara_Lueften:"Ja"] z.B. schreiben.
Siehe
https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
und
https://fhem.de/commandref_DE.html#DOIF_checkReadingEvent