MQTT_GENERIC_BRIDGE: Aktionen werden nach Neustart von FHEM nicht ausgeführt

Begonnen von Grobwiefein, 12 Januar 2020, 19:04:00

Vorheriges Thema - Nächstes Thema

Grobwiefein

Hallo zusammen,

ich bin gerade dabei, einige Devices mit MQTT_GENERIC_BRIDGE an einen Mosquitto-Broker anzubinden. Hierfür verwende ich einen MQTT2_CLIENT mit folgender Definition:


Internals:
   BUF       
   DEF        127.0.0.1:1883
   DeviceName 127.0.0.1:1883
   FD         12
   FUUID      5e19cd15-f33f-e8bf-ccf3-7b1fb7e7edec986c
   NAME       MOSQUITTO_BROKER
   NR         40
   PARTIAL   
   SSL        1
   STATE      opened
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   fhem
   lastMsgTime 1578850172.17745
   nextOpenDelay 5
   Helper:
     DBLOG:
       state:
         System.DbLog:
           TIME       1578849714.01531
           VALUE      publish fhem/light/group/wohnzimmer/scene/set 9H5d7SbWoq1u3CT
   READINGS:
     2020-01-12 18:21:23   state           opened
Attributes:
   SSL        1
   clientId   fhem
   room       System
   username   fhem


Für meine Hue Devices habe ich eine entsprechende MQTT_GENERIC_BRIDGE eingerichtet (aufgrund der Menge der Devices habe ich sie gekürzt):


Internals:
   DEF        mqtt Light\.(?!Plot).*
   FUUID      5e1a1e14-f33f-e8bf-2875-7501ff174fba0b98
   IODev      MOSQUITTO_BROKER
   NAME       MQTT.Lights
   NR         357
   NTFY_ORDER 50-MQTT.Lights
   STATE      ???
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    Light\.(?!Plot).*
   prefix     mqtt
   Helper:
     DBLOG:
       outgoing-count:
         System.DbLog:
           TIME       1578850314.78772
           VALUE      18
       transmission-state:
         System.DbLog:
           TIME       1578850314.78232
           VALUE      outgoing publish sent
   READINGS:
     2020-01-12 18:21:06   device-count    45
     2020-01-12 18:21:05   incoming-count  0
     2020-01-12 18:31:54   outgoing-count  18
     2020-01-12 18:31:54   transmission-state outgoing publish sent
     2020-01-12 18:21:05   updated-reading-count 0
     2020-01-12 18:21:05   updated-set-count 0
   devices:
     :global:
       :defaults:
         pub:base   {"fhem/" . lc($device)}
         pub:qos    0
         pub:retain 1
         sub:base   {"fhem/" . lc($device)}
         sub:qos    2
         sub:retain 1
       :publish:
         *:
           mode       R
           resendOnConnect last
           topic      {"$base/$name/value"}
     Light.Bad.Deckenleuchte1:
       :subscribe:
         HASH(0x4db27c0)
     Light.Bad.Deckenleuchte2:
       :subscribe:
         HASH(0x4db3320)
     Light.Bad.Deckenleuchte3:
       :subscribe:
         HASH(0x4d8ea28)
...
   globalDeviceExcludes:
   globalReadingExcludes:
   globalTypeExcludes:
     pub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
     sub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
   subscribe:
Attributes:
   IODev      MOSQUITTO_BROKER
   debug      1
   globalDefaults base={"fhem/" . lc($device)} retain=1 pub:qos=0 sub:qos=2
   globalPublish *:topic={"$base/$name/value"} *:resendOnConnect=last
   room       Test


In jedem dieser Devices habe ich ein entsprechendes mqttSubscribe definiert, um die Geräte steuern zu können:


Internals:
   CFGFN      ./FHEM/devices_light.cfg
   CHANGED   
   DEF        3  IODev=HUE_BRIDGE
   FUUID      5c91108d-f33f-e8bf-d429-21ef8ceac4dc38a3
   FVERSION   31_HUEDevice.pm:0.209360/2020-01-10
   ID         3
   INTERVAL   
   IODev      HUE_BRIDGE
   NAME       Light.Wohnzimmer.Deckenleuchte
   NR         173
   STATE      off
   TYPE       HUEDevice
   manufacturername Philips
   modelid    LTW010
   name       Deckenleuchte
   productid  Philips-LTW010-1-A19CTv2
   swconfigid 7A2E82CC
   swversion  1.46.13_r26312
   type       Color temperature light
   uniqueid   00:17:88:01:04:56:62:cc-0b
   READINGS:
     2020-01-12 18:21:21   alert           select
     2020-01-12 18:21:21   bri             254
     2020-01-12 18:21:21   colormode       ct
     2020-01-12 18:21:21   ct              156 (6410K)
     2020-01-10 12:44:32   mode            homeautomation
     2020-01-12 18:21:21   onoff           0
     2020-01-12 18:21:21   pct             0
     2020-01-12 18:21:21   reachable       1
     2020-01-12 18:21:21   rgb             e8ecff
     2020-01-12 18:21:21   state           off
   helper:
     alert      select
     battery    -1
     bri        254
     colormode  ct
     ct         156
     devtype   
     effect     
     hue        -1
     mode       
     on         0
     pct        0
     reachable  1
     rgb        e8ecff
     sat        -1
     update_timeout -1
     xy         
     json:
       manufacturername Philips
       modelid    LTW010
       name       Deckenleuchte
       productid  Philips-LTW010-1-A19CTv2
       productname Hue ambiance lamp
       swconfigid 7A2E82CC
       swversion  1.46.13_r26312
       type       Color temperature light
       uniqueid   00:17:88:01:04:56:62:cc-0b
       capabilities:
         control:
           maxlumen   806
           mindimlevel 1000
           ct:
             max        454
             min        153
         streaming:
       config:
         archetype  sultanbulb
         direction  omnidirectional
         function   functional
         startup:
           mode       powerfail
       state:
         alert      select
         bri        254
         colormode  ct
         ct         156
         mode       homeautomation
       swupdate:
         lastinstall 2019-03-19T18:38:16
         state      noupdates
Attributes:
   IODev      HUE_BRIDGE
   alias      Deckenleuchte Wohnzimmer
   color-icons 2
   devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
   event-on-change-reading .*
   genericDeviceType light
   group      Licht
   homebridgeMapping ColorTemperature=ct::ct,minValue=154,maxValue=454
   model      LTW010
   mqttSubscribe *:stopic={"fhem/" . join("/", split(/\./, lc($device))) . "/$name/set"} *:qos=2
   room       Wohnzimmer,HomeKit
   siriName   Deckenleuchte
   subType    ctdimmer
   userattr   lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
   webCmd     on:off


Änderungen der Readings werden einwandfrei an den MQTT-Broker gesendet. Allerdings funktioniert ein set über MQTT nicht nach einem Neustart von FHEM. Wenn ich mqttSubscribe erneut manuell setze, funktioniert es bis zu einem weiteren Neustart. Die set-Events werden die ganze Zeit an FHEM zugestellt (kann ich im Mosquitto Logfile sehen), verursachen aber keine Aktion im Device, bis ich das Attribut (auch auf den alten Wert) wieder neu setze.

Meine erste Idee war, dass es an dem Perl-Statement, das das Topic zusammenbaut, liegt, jedoch besteht das Problem auch, wenn ich mqttSubscribe auf einen festen Wert für ein Device setze, zum Beispiel:

scene:stopic=fhem/light/group/wohnzimmer/scene/set scene:qos=2

Hat jemand von euch eine Idee, woran das liegen könnte?

Vielen Dank und viele Grüße
Manuel

rudolfkoenig

Ich kann das Problem nachvollziehen, falls dabei sich um ein MQTT-Server Neustart handelt.
Bist Du sicher, dass der MQTT-Server bei der FHEM-Start erreichbar ist?

Grobwiefein

Ja, der MQTT-Server läuft die ganze Zeit. Das Problem tritt bei einem Neustart von FHEM auf. Ich habe auch schon mit der Reihenfolge der Devices in der fhem.cfg rumgespielt, was aber leider auch keine Änderung gebracht hat.

Grobwiefein

Ich konnte die Fehlerursache herausfinden: Das Problem tritt auf, wenn man mehrere MQTT_GENERIC_BRIDGE Devices mit unterschiedlichen devspecs anlegt. Ich habe jetzt testweise nur eine MQTT_GENERIC_BRIDGE angelegt und das Problem trat auch nach mehreren Neustarts von Fhem nicht auf.

Ich weiß nicht, ob es gedacht war, mehrere MQTT_GENERIC_BRIDGE Devices anzulegen, zumindest konnte ich in der commandref und im Wiki nichts dazu finden. Mit mehreren Devices wollte ich eine Trennung der globalDefaults etc. für die verschiedenen Devicetypen meines Systems erreichen.