DOIF zur Lichsteuerung triggert ungewollt

Begonnen von bmwfan, 30 Oktober 2020, 20:16:19

Vorheriges Thema - Nächstes Thema

bmwfan

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
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

amenomade

Das ist eher du_Gara_Lueften, der triggert. Zumindest ist es laut deinem "list", was letztens getriggert hat
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

bmwfan

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.
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

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.
Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

   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.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

bmwfan

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

Synology DS720+ mit Docker-Container und Haupt-FHEM, HW-LAN, Jalousienaktoren; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

amenomade

#8
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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus