Problem mit structure und DUOFERN

Begonnen von Joe9, 02 Oktober 2018, 16:05:35

Vorheriges Thema - Nächstes Thema

Joe9

Bei mir ergibt sich folgendes Problem:
Mehrere Geräte werden zu Strukturen zusammengefasst und dann weiterverarbeitet z.B. mit MQTT_GENERIC_BRIDGE.
Bei den meisten Geräten funktioniert das problemlos.

Das Problem entsteht bei Geräten vom Typ DUOFERN (Rolladen, Garagentor, etc.).
Diese senden Events und der Zustand von structure ändert sich auch korrekt. Nur leider wird von structure kein Event erzeugt, so dass weitere Geräte wie o.g. MQTT-Bridge nicht auf die Zustandsänderung reagieren.
Wie kann ich das Problem näher eingrenzen um herauszufinden, ob es an structure oder DUOFERN liegt?

rudolfkoenig

ZitatWie kann ich das Problem näher eingrenzen um herauszufinden, ob es an structure oder DUOFERN liegt?
"attr <structure> verbose 5" setzen, im Event Monitor "FHEM log" anhaken, und auf ein problematisches Event warten.

Joe9

#2
Zitat
"attr <structure> verbose 5" setzen, im Event Monitor "FHEM log" anhaken, und auf ein problematisches Event warten.

Getan (die Funktion des Hakens FHEM log ist mir nicht ganz klar, ein Logfile wird zumindest nicht angelegt)


2018.10.04 12:19:56 5 : Update structure 'stat_ga' to opened because device Garage_li has changed
2018-10-04 12:19:56 DUOFERN Garage_li opened
...
2018.10.04 12:21:00 5 : Update structure 'stat_ga' to closed because device Garage_li has changed
2018-10-04 12:21:00 DUOFERN Garage_li closed


Die Struktur setzt den Zustand korrekt, feuert aber leider kein Event.

Hier noch die Internals der Struktur:

Internals:
   ATTR       ga
   CHANGEDCNT 35
   DEF        ga Garage_li Garage_re
   NAME       stat_ga
   NR         862
   NTFY_ORDER 50-stat_ga
   STATE      closed
   TYPE       structure
   CHANGED:
     opened
     closed
     closed
     opened
     closed
   CHANGEDWITHSTATE:
   READINGS:
     2018-10-04 12:21:00   LastDevice      Garage_li
     2018-10-04 12:21:00   LastDevice_Abs  Garage_li
     2018-10-04 12:21:00   state           closed
Attributes:
   clientstate_behavior relative
   clientstate_priority opened closed
   mqttPublish *:topic={"$base"} state:expression={$value= $value eq "opened" ? "9,255,0,0" : "9,0,0,0"}
   room       System
   userattr   mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttPublish:textField-long mqttSubscribe:textField-long
   verbose    5


Geholfen habe ich mir bisher mit einem notify welches das Event künstlich erzeugt:

Garage.* trigger stat_ga


Aber das kann ja auch nicht die Lösung sein.
Mit anderen Geräten, wie z.B. FRM oder CUL_HM funktioniert übrigens alles bestens.

rudolfkoenig

Zitatdie Funktion des Hakens FHEM log ist mir nicht ganz klar
Es werden zusaetzlich zu den Events auch die Zeilen aus dem FHEM-Log angezeigt.

Sonst bin ich auch der Ansicht, dass ein structure Event fehlt, weiss aber nicht warum.
Bitte das Experiment mit "attr global verbose 5" wiederholen.

Joe9


-> Signal zum Öffnen
2018.10.04 17:49:04 4 : Rademacher: rx -> 0fff0f240030a0015a00005b11010b4e041dffffff01
2018.10.04 17:49:04 4 : Rademacher: snd -> 81000000000000000000000000000000000000000000
2018.10.04 17:49:04 5 : SW: 81000000000000000000000000000000000000000000
2018.10.04 17:49:04 5 : Rademacher: dispatch 0FFF0F240030A0015A00005B11010B4E041DFFFFFF01
2018.10.04 17:49:04 5 : Starting notify loop for Garage_li, 1 event(s), first is 91
2018.10.04 17:49:04 5 : Update structure 'stat_ga' to closed because device Garage_li has changed
2018-10-04 17:49:04 DUOFERN Garage_li 91
2018.10.04 17:49:04 5 : End notify loop for Garage_li
...
2018.10.04 17:49:15 4 : Rademacher: rx -> 0fff0f240030a0015a00000011010b4e041dffffff01
2018.10.04 17:49:15 4 : Rademacher: snd -> 81000000000000000000000000000000000000000000
2018.10.04 17:49:15 5 : SW: 81000000000000000000000000000000000000000000
2018.10.04 17:49:15 5 : Rademacher: dispatch 0FFF0F240030A0015A00000011010B4E041DFFFFFF01
2018.10.04 17:49:15 5 : Starting notify loop for Garage_li, 1 event(s), first is opened
2018.10.04 17:49:15 5 : Update structure 'stat_ga' to opened because device Garage_li has changed
2018-10-04 17:49:15 DUOFERN Garage_li opened
2018.10.04 17:49:15 5 : End notify loop for Garage_li
...
-> Signal zum Schließen
...
2018.10.04 17:49:59 4 : Rademacher: rx -> 0fff0f240030a0015a00006411010b4e041dffffff01
2018.10.04 17:49:59 4 : Rademacher: snd -> 81000000000000000000000000000000000000000000
2018.10.04 17:49:59 5 : SW: 81000000000000000000000000000000000000000000
2018.10.04 17:49:59 5 : Rademacher: dispatch 0FFF0F240030A0015A00006411010B4E041DFFFFFF01
2018.10.04 17:49:59 5 : Starting notify loop for Garage_li, 1 event(s), first is closed
2018.10.04 17:49:59 5 : Update structure 'stat_ga' to closed because device Garage_li has changed
2018-10-04 17:49:59 DUOFERN Garage_li closed
2018.10.04 17:49:59 5 : End notify loop for Garage_li


In diesem Fall wurden beim Öffnen zwei Events erzeugt, oft ist es aber auch nur ein Event. Das Ergebnis ist das Gleiche.

rudolfkoenig

Das war wohl aufwendiger, ich musste dummy DUOFERN Geraete anlegen.

Das DUOFERN Modul ruft unter anderem in der Zeile 1254 nach readingsEndUpdate leider DoTrigger auf, wodurch die Auswertung der Notifies innerhalb der ParseFn angestossen wird, was eigentlich untersagt ist, und spaetestens beim darauffolgenden structure verhindert wird. Nachdem ich diesen Aufruf entfernt habe, gab es ein structure Event, und die DUOFERN Events natuerlich auch.

readingsEndUpdate (bzw readingsSingleUpdate) ruft DoTrigger selbst auf, aber in einem koordinierten Form, DoTrigger sollte von Modulen, die readings*Update verwenden, nicht aufgerufen werden.

Sollte dem DUOFERN Maintainer im richtigen Forumsbereich (Sonstige Systeme) gemeldet werden.

Telekatz

Zitat von: rudolfkoenig am 05 Oktober 2018, 14:57:54
Das DUOFERN Modul ruft unter anderem in der Zeile 1254 nach readingsEndUpdate leider DoTrigger auf, wodurch die Auswertung der Notifies innerhalb der ParseFn angestossen wird, was eigentlich untersagt ist, und spaetestens beim darauffolgenden structure verhindert wird. Nachdem ich diesen Aufruf entfernt habe, gab es ein structure Event, und die DUOFERN Events natuerlich auch.
Wenn ich DoTrigger dort entferne, funktionieren die Events bei den meisten DUOFERN Geräten. Aber bei einem Aktor mit zwei Channels erzeugen die Channels dann keine Events mehr.

2018.10.07 14:12:51 4: DuofernStick: rx  -> 0fff0f22070800ff070880e4250000431422ffffff01
2018.10.07 14:12:51 4: DuofernStick: snd -> 81000000000000000000000000000000000000000000
2018.10.07 14:12:51 5: SW: 81000000000000000000000000000000000000000000
2018.10.07 14:12:51 5: DuofernStick: dispatch 0FFF0F22070800FF070880E4250000431422FFFFFF01

Es wird nur ein Event des übergeordneten Devices erzeugt:
2018-10-07 14:12:51 DUOFERN DUOFERN_431422 OK

Kann ich in solch einem Fall trotzdem DoTrigger verwenden oder hat dies dann auch negative Folgen für die structure Events?

rudolfkoenig

ZitatAber bei einem Aktor mit zwei Channels erzeugen die Channels dann keine Events mehr.
Vermutlich weil Parse nicht den Namen der beiden Instanzen zurueckliefert.
DoTrigger sollte von keinem Modul aufgerufen werden, das die (empfohlenen) readings*Update Funktionen verwendet.


Telekatz

Funktioniert Parse mit einem Array der Namen aller beteiligten Instanzen als Rückgabewert?

rudolfkoenig

So ist das gedacht. Wird bei FS20 seit den Anfaengen von FHEM praktiziert.

Telekatz


Joe9

Bei mir funktioniert es jetzt. Vielen Dank!