[GELÖST] Events werden von DOIF nicht richtig übernommen.

Begonnen von Burny4600, 12 Juni 2018, 13:17:58

Vorheriges Thema - Nächstes Thema

Burny4600

Seit kurzem habe ich den Fehler das DIOF die Rollläden Positionen nicht mehr richtig übernimmt bzw. gar nicht mehr übernimmt.
ZB. Die Markise weist die Position 100 auf
list M_OG1_BAL_P
Internals:
   CFGFN      /media/hdd/fhem/myprogram/rolllaeden_rasp01_ROLLO.pm
   NAME       M_OG1_BAL_P
   NR         5837
   STATE      closed
   TYPE       ROLLO
   stoptime   1528801249
   READINGS:
     2018-06-12 13:00:38   command         position-100
     2018-06-12 13:00:38   desired_position 100
     2018-06-12 13:00:38   drive-type      modul
     2018-06-12 13:00:38   last_drive      drive-down
     2018-06-12 13:00:49   position        100
     2018-06-12 13:00:49   state           closed
Attributes:
   alias      OG1 Balkon - Markise
   autoStop   0
   automatic-enabled off
   blockMode  none
   cmdIcon    half:remotecontrol/black_btn_MENUDroid open:remotecontrol/black_btn_CHUP closed:remotecontrol/black_btn_CHDOWN stop:remotecontrol/black_btn_STOP
   commandDown set M_OG1_BAL off
   commandStopDown set M_OG1_BAL off
   commandStopUp set M_OG1_BAL on
   commandUp  set M_OG1_BAL on
   devStateIcon open:fts_sunblind_10:closed closed:fts_sunblind:open half:fts_sunblind_50:closed drive-up:control_arrow_up@yellow:stop drive-down:control_arrow_down@yellow:stop position-100:fts_sunblind:open position-90:fts_sunblind_90:closed position-80:fts_sunblind_80:closed position-70:fts_sunblind_70:closed position-60:fts_sunblind_60:closed position-50:fts_sunblind_50:closed position-40:fts_sunblind_40:open position-30:fts_sunblind_30:open position-20:fts_sunblind_20:open position-10:fts_sunblind_10:open position-0:fts_sunblind_0:closed
   excessBottom 0
   excessTop  0
   group      OG1 Balkon - Markise
   icon       fts_sunblind
   reactionTime 1
   resetTime  1
   room       OG1,OG1-Balkon,OG1-Kueche,Rolllaeden
   secondsDown 30
   secondsUp  30
   sortby     09
   switchTime 1
   type       normal
   webCmd     position:half:open:closed:stop


DOIF übernimmt aber die Position nicht.
list OG1_BK_MAST
Internals:
   CFGFN      /media/hdd/fhem/myprogram/markise_rasp01.pm
   DEF        ([M_OG1_BAL_P:position] != 100 and [OG1_BK_MA_LOCK] eq "UNLOCK" and
[OG1_BK_SSSS_MD] eq "HELL" and
[ZOBRMD] eq "TROCKEN" and [ZOBWM100D] eq "WINDSTILL" and [bmp180:temperatureof] > 18)
(set OG1_BK_MA_LOCK LOCK)(set M_OG1_BAL_P position 100)(set OG1_BK_MA_LOCK UNLOCK)
DOELSEIF
([M_OG1_BAL_P:position] != 0 and [OG1_BK_MA_LOCK] eq "UNLOCK" and
([ZOBRMD] eq "REGEN" or [ZOBWM100D] eq "WIND"))
(set OG1_BK_MA_LOCK LOCK)(set M_OG1_BAL_P position 0)(set OG1_BK_MA_LOCK UNLOCK)
DOELSEIF
([M_OG1_BAL_P:position] != 0 and [OG1_BK_MA_LOCK] eq "UNLOCK" and
[OG1_BK_SSSS_MD] eq "DUNKEL")
(set OG1_BK_MA_LOCK LOCK)(set M_OG1_BAL_P position 0)(set OG1_BK_MA_LOCK UNLOCK)
   MODEL      FHEM
   NAME       OG1_BK_MAST
   NR         5625
   NTFY_ORDER 50-OG1_BK_MAST
   STATE      P100
   TYPE       DOIF
   READINGS:
     2018-06-12 13:00:49   Device          M_OG1_BAL_P
     2018-06-12 13:01:14   cmd             1.3
     2018-06-12 13:01:14   cmd_event       set_cmd_1
     2018-06-12 13:01:14   cmd_nr          1
     2018-06-12 13:01:14   cmd_seqnr       3
     2018-06-12 13:00:38   e_M_OG1_BAL_P_position 70
     2018-06-12 13:00:38   e_OG1_BK_MA_LOCK_STATE LOCK
     2018-06-12 13:00:25   e_OG1_BK_SSSS_MD_STATE HELL
     2018-06-12 13:00:24   e_bmp180_temperatureof 25.7
     2018-06-12 13:00:02   mode            enabled
     2018-06-12 13:01:14   state           cmd_1
     2018-06-12 13:01:14   wait_timer      no timer
   Regex:
   condition:
     0          ReadingValDoIf($hash,'M_OG1_BAL_P','position') != 100 and InternalDoIf($hash,'OG1_BK_MA_LOCK','STATE') eq "UNLOCK" and  InternalDoIf($hash,'OG1_BK_SSSS_MD','STATE') eq "HELL" and  InternalDoIf($hash,'ZOBRMD','STATE') eq "TROCKEN" and InternalDoIf($hash,'ZOBWM100D','STATE') eq "WINDSTILL" and ReadingValDoIf($hash,'bmp180','temperatureof') > 18
     1          ReadingValDoIf($hash,'M_OG1_BAL_P','position') != 0 and InternalDoIf($hash,'OG1_BK_MA_LOCK','STATE') eq "UNLOCK" and (InternalDoIf($hash,'ZOBRMD','STATE') eq "REGEN" or InternalDoIf($hash,'ZOBWM100D','STATE') eq "WIND")
     2          ReadingValDoIf($hash,'M_OG1_BAL_P','position') != 0 and InternalDoIf($hash,'OG1_BK_MA_LOCK','STATE') eq "UNLOCK" and  InternalDoIf($hash,'OG1_BK_SSSS_MD','STATE') eq "DUNKEL"
   devices:
     0           M_OG1_BAL_P OG1_BK_MA_LOCK OG1_BK_SSSS_MD ZOBRMD ZOBWM100D bmp180
     1           M_OG1_BAL_P OG1_BK_MA_LOCK ZOBRMD ZOBWM100D
     2           M_OG1_BAL_P OG1_BK_MA_LOCK OG1_BK_SSSS_MD
     all         M_OG1_BAL_P OG1_BK_MA_LOCK OG1_BK_SSSS_MD ZOBRMD ZOBWM100D bmp180
   do:
     0:
       0          set OG1_BK_MA_LOCK LOCK
       1          set M_OG1_BAL_P position 100
       2          set OG1_BK_MA_LOCK UNLOCK
     1:
       0          set OG1_BK_MA_LOCK LOCK
       1          set M_OG1_BAL_P position 0
       2          set OG1_BK_MA_LOCK UNLOCK
     2:
       0          set OG1_BK_MA_LOCK LOCK
       1          set M_OG1_BAL_P position 0
       2          set OG1_BK_MA_LOCK UNLOCK
     3:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event     
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
     triggerEvents
     triggerEventsState
   internals:
     0           OG1_BK_MA_LOCK:STATE OG1_BK_SSSS_MD:STATE ZOBRMD:STATE ZOBWM100D:STATE
     1           OG1_BK_MA_LOCK:STATE ZOBRMD:STATE ZOBWM100D:STATE
     2           OG1_BK_MA_LOCK:STATE OG1_BK_SSSS_MD:STATE
     all         OG1_BK_MA_LOCK:STATE OG1_BK_SSSS_MD:STATE ZOBRMD:STATE ZOBWM100D:STATE
   itimer:
   readings:
     0           M_OG1_BAL_P:position bmp180:temperatureof
     1           M_OG1_BAL_P:position
     2           M_OG1_BAL_P:position
     all         M_OG1_BAL_P:position bmp180:temperatureof
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      OG1 Balkon - Markise - Automatic
   devStateIcon initialize.*:control_minus P100:fts_sunblind P0:fts_sunblind_0
   eventMap   cmd_1:P100 cmd_1_1:P100 cmd_1_2:P100 cmd_1_3:P100
cmd_2:P0 cmd_2_1:P0 cmd_2_2:P0 cmd_2_3:P0
cmd_3:P0 cmd_3_1:P0 cmd_3_2:P0 cmd_3_3:P0
   group      OG1 Balkon - Markise
   icon       fts_sunblind
   room       OG1-Balkon,OG1-Kueche,Rolllaeden
   sortby     08
   wait       0,0,35:0,0,35:600,0,35

Mir ist das vor einigen Tagen schon aufgefallen das manche Rollläden nicht die Position angefahren sind diese haben sollten.
Bei der heutigen Funktionsüberprüfung musste ich feststellen das die Position nach dem Speichern des DIOF 1 mal übernommen wird und bei den darauffolgenden Positionswechseln nicht mehr.
Das gleiche trifft auf ein DUMMY Device zu wo ebenfalls das Reading nicht aktualisiert wird bzw. von DOIF verarbeitet wird.
list OG1_BK_MA_LOCK
Internals:
   CFGFN      /media/hdd/fhem/myprogram/markise_rasp01.pm
   NAME       OG1_BK_MA_LOCK
   NR         5623
   STATE      UNLOCK
   TYPE       dummy
   READINGS:
     2018-06-12 13:01:14   state           off
Attributes:
   alias      OG1 Balkon - Markise - Automatic Sperre
   devStateIcon LOCK:time_manual_mode@red UNLOCK:time_manual_mode@0CFB0C
   eventMap   on:LOCK off:UNLOCK
   group      OG1 Balkon - Markise
   icon       fts_sunblind
   room       OG1-Balkon,OG1-Kueche,Rolllaeden
   sortby     07
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Damian

Die Frage ist, ob Position ein Event liefert. Wenn nicht, dann muss du im abfragenden DOIF auf alle Events des Rollladen triggern. Dazu musst du das Attribut checkReadingEvent 0 im betreffenden DOIF setzen (früher was es der Defaultwert).
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

#2
Was wäre da falsch? Ich sehe es so:

Um 13:00:38 triggert M_OG1_BAL_P wegen command / desired-position
Zitat2018-06-12 13:00:38   command         position-100
     2018-06-12 13:00:38   desired_position 100
Reading position ist dabei 70
     2018-06-12 13:00:38   e_M_OG1_BAL_P_position 70

> cmd_1.1 => LOCK
> cmd_1.2 => set M_OG1_BAL_P position 100 (kein Einfluss, er ist schon am fahren)
> start timer cmd_1.3  (+35s = 13:01:14)

Um 13:00:49 triggert M_OG1_BAL_P (position 100 erreicht). Da LOCK, ist keine Bedingung wahr => passiert nix
Um 13:01:14, end timer cmd_1.3 => UNLOCK... oder gar nichts (position ist nicht mehr != 100)




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

Burny4600

#3
@amenomade
Da hast du zum Teil Recht, aber wie auch das Reading position des Rollo Moduls wird auch der Dummy im Reading des DOIFs nicht mehr aktualisiert obwohl EVENTS geliefert werden.
Zitattriggert M_OG1_BAL_P (position 100 erreicht). Da LOCK, ist keine Bedingung wahr => passiert nix
Wenn du das Lock Dummy ansiehst wirst du bemerken das sich das EVENT auf UNLOCK geändert hat, nur bei den DOIF Readings hat sich das EVENT nicht geändert.
Es ist leider bei sehr vielen DOIFs jetzt der Fall das die geänderten Bedingungen und generierten EVENTs in den Readings der DOIFs nicht mehr aktualisiert werden.
Und das ist bei 80 % der definierten DOIFs seit einigen Tagen.
Am Device, Dummy usw. werden nach wie vor alle EVENTs erfasst. DOIF übernimmt nur das erste EVENT des Device, Dummy usw. aber die darauffolgenden EVENTs erfasst DOIF nicht.

@Damian
ZitatDazu musst du das Attribut checkReadingEvent 0 im betreffenden DOIF setzen (früher was es der Defaultwert)
Gut das ist vielleicht die Ursache der ich nachgehen werde.
Dieses Attribut ist nur von der Bezeichnung her irgendwie verwirrend, wenn ich jetzt das Attribut checkReadingEvent 0 definieren muß damit die Events übernommen werden. 0 heißt für mich in diesem Fall genau das Gegenteil um auf einen Event zu prüfen.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Burny4600

Im Eventmonitor ist position nicht ersichtlich sondern nur
2018-06-14 07:42:15.677 ROLLO R_OG1_WZ_P command: position-50
2018-06-14 07:42:15.677 ROLLO R_OG1_WZ_P desired_position: 50

Das leuchtet mir noch ein, aber warum reagierte DOIF nicht auf die EVENT Änderung des LOCK.
Im Eventmonitor sind LOCK und UNLOCK ersichtlich.

Gibt es eine Such-Möglichkeit um DOIF zu überprüfen ob alle Einträge ein EVENT liefern?
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Damian

Zitat von: Burny4600 am 14 Juni 2018, 07:50:42
Im Eventmonitor ist position nicht ersichtlich sondern nur
2018-06-14 07:42:15.677 ROLLO R_OG1_WZ_P command: position-50
2018-06-14 07:42:15.677 ROLLO R_OG1_WZ_P desired_position: 50

Das leuchtet mir noch ein, aber warum reagierte DOIF nicht auf die EVENT Änderung des LOCK.
Im Eventmonitor sind LOCK und UNLOCK ersichtlich.

Gibt es eine Such-Möglichkeit um DOIF zu überprüfen ob alle Einträge ein EVENT liefern?

Wenn du in den Readings

2018-06-12 13:00:38   e_OG1_BK_MA_LOCK_STATE LOCK

siehst, dann kannst du davon ausgehen, dass DOIF darauf reagiert hat.

Insbesondere bei STATUS-Abfragen der Art [<Device>] reagiert DOIF auf alle Events des Devices. Bei der Readingangaben [<Device>:state] reagiert DOIF neuerdings nur auf Events des Readings state, es sei denn man setzt das Attribut checkReadingEvent 0.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

@Damian für mein Verständnis: wenn ein Device:Reading triggert, aber keine Bedingung wahr ist, schreibt er auch ein Reading e_device_reading?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

Zitat von: amenomade am 14 Juni 2018, 09:30:51
@Damian für mein Verständnis: wenn ein Device:Reading triggert, aber keine Bedingung wahr ist, schreibt er auch ein Reading e_device_reading?

Ja.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Zitat von: Burny4600 am 13 Juni 2018, 12:28:08
@amenomade
Da hast du zum Teil Recht, aber wie auch das Reading position des Rollo Moduls wird auch der Dummy im Reading des DOIFs nicht mehr aktuallisiert obwohl EVENTS geliefert werden.Wenn du das Lock Dummy ansiehst weirst du bemerken das sich das EVENT auf UNLOCK geändert hat, nur bei den DOIF Readings hat sich das EVENT nicht geändert.

Folgendes ist dir aber klar?
Zitat von: CommandRef
Standardmäßig unterbindet das DOIF-Modul Selbsttriggerung. D. h. das Modul reagiert nicht auf Events, die es selbst direkt oder indirekt auslöst. Dadurch werden Endlosschleifen verhindert.
https://fhem.de/commandref_DE.html#DOIF_selftrigger
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Burny4600

Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT