[gelöst] MQTT_GENERIC_BRIDGE mit MQTT2_DEVICE funktioniert nicht

Begonnen von Romoker, 16 November 2024, 15:47:41

Vorheriges Thema - Nächstes Thema

Romoker

Ich möchte ein Reading als MQTT-Topic openWB/set/evu/W an meine openWB-Wallbox schicken. Das hat schon ein paar Jahre funktioniert, allerdings mit einem Nicht-MQTT2_DEVICE-Objekt. Nun möchte ich ein Reading von einem MQTT2_DEVICE (hier ein Shelly-SmartPlug, den ich zu Testzwecken ausgewählt habe) mit dem Topic openWB/set/evu/W an die openWB schicken und stelle fest, dass das Topic dort nicht ankommt. Der MQTT-Explorer zeigt immer openWB/evu/W=0 an.

Meine Struktur sieht wie folgt aus:
openWB <---> openWB_Client <---> mqttGenericBridge <---> SmartPlug08

List openWB_Client:
Internals:
   BUF       
   Clients    :MQTT_GENERIC_BRIDGE:MQTT2_DEVICE:
   ClientsKeepOrder 1
   DEF        192.168.66.81:1883
   DeviceName 192.168.66.81:1883
   FD         106
   FUUID      61489169-f33f-df6c-57fe-0d7a2ce7d0a51502
   NAME       openWB_Client
   NR         542
   PARTIAL   
   STATE      opened
   TYPE       MQTT2_CLIENT
   WBCallback
   clientId   openWB_Client
   eventCount 288
   lastMsgTime 1731767384.48816
   nextOpenDelay 10
   nrConnects 187579
   MatchList:
     1:MQTT_GENERIC_BRIDGE ^.
     2:MQTT2_DEVICE ^.
   READINGS:
     2024-11-16 14:51:04   state           opened
Attributes:
   autocreate no
   clientOrder MQTT_GENERIC_BRIDGE MQTT2_DEVICE
   subscriptions openWB/set/evu/#
   verbose    3

List von der Bridge:
nternals:
   DEF        mqtt VM_Counter_Strom_Bezug,VM_Counter_Strom_Einspeisung,SmartPlug08
   FUUID      63b5ba80-f33f-df6c-9483-d9a3b32e6fef500b
   IODev      openWB_Client
   NAME       mqttGenericBridge
   NR         594
   NTFY_ORDER 70-mqttGenericBridge
   STATE      dev: 3 in: 0 out: 50014
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    VM_Counter_Strom_Bezug,VM_Counter_Strom_Einspeisung,SmartPlug08
   eventCount 50144
   prefix     mqtt
   READINGS:
     2024-11-16 14:44:23   IODev           openWB_Client
     2023-01-04 21:35:45   attrTemplateVersion 20211208_MGB_M2D
     2024-11-16 14:51:03   device-count    3
     2024-11-16 14:44:22   incoming-count  0
     2024-11-16 15:31:26   outgoing-count  50014
     2024-11-16 15:31:26   transmission-state outgoing publish sent
     2024-11-16 14:44:22   updated-reading-count 0
     2024-11-16 14:44:22   updated-set-count 0
   devices:
     :global:
       :alias:
       :defaults:
         pub:base   mqttGenericBridge
         sub:base   mqttGenericBridge/set
     SmartPlug08:
       :alias:
       :publish:
         relay_0_power:
           last       1731767440.96803
           mode       R
           topic      openWB/set/evu/W
     VM_Counter_Strom_Bezug:
       :alias:
       :publish:
         energyWh:
           last       1731767486.91759
           mode       R
           topic      openWB/set/evu/WhImported
     VM_Counter_Strom_Einspeisung:
       :publish:
         energyWh:
           mode       R
           topic      openWB/set/evu/WhExported
   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     *
Attributes:
   IODev      openWB_Client
   comment    openWB Überschussladen
Dokumentation: Wallbox OpenWB.docx
   debug      1
   disable    0
   globalDefaults sub:base=mqttGenericBridge/set pub:base=mqttGenericBridge
   stateFormat dev: device-count in: incoming-count out: outgoing-count

List vom MQTT2_DEVICE:
Internals:
   CID        shellyplug_s_801B67
   DEF        shellyplug_s_801B67
   FUUID      5ef65ed2-f33f-df6c-118f-8cf7a1e2434cdf18
   IODev      myMQTT2
   LASTInputDev myMQTT2
   MSGCNT     605615
   NAME       SmartPlug08
   NR         447
   STATE      on
   TYPE       MQTT2_DEVICE
   eventCount 131834
   myMQTT2_CONN myMQTT2_192.168.66.68_11001
   myMQTT2_MSGCNT 605615
   myMQTT2_TIME 2024-11-16 15:36:41
   READINGS:
     2024-10-16 20:34:32   IODev           myMQTT2
     2024-11-16 13:16:10   actions_stats_skipped 0
     2020-06-26 22:51:03   attrTemplateVersion 20200522 or prior
     2024-11-16 13:16:10   cfg_changed_cnt 0
     2024-11-16 13:16:10   cloud_connected false
     2024-11-16 13:16:10   cloud_enabled   false
     2024-11-16 13:16:10   fs_free         164656
     2024-11-16 13:16:10   fs_size         233681
     2024-11-16 13:16:10   fw_ver          20230913-113421/v1.14.0-gcb84623
     2024-11-16 13:16:10   has_update      false
     2024-11-16 13:16:10   id              shellyplug-s-801B67
     2024-11-16 13:16:10   ip              192.168.66.68
     2024-11-16 13:16:10   mac             FCF5C4801B67
     2024-11-16 13:16:10   meters_1_counters_1 16.762
     2024-11-16 13:16:10   meters_1_counters_2 16.688
     2024-11-16 13:16:10   meters_1_counters_3 16.753
     2024-11-16 13:16:10   meters_1_is_valid true
     2024-11-16 13:16:10   meters_1_overpower 0.00
     2024-11-16 13:16:10   meters_1_power  16.96
     2024-11-16 13:16:10   meters_1_timestamp 1731762969
     2024-11-16 13:16:10   meters_1_total  166610
     2024-11-16 13:16:10   model           SHPLG-S
     2024-11-16 13:16:10   mqtt_connected  true
     2024-11-16 13:16:10   new_fw          false
     2024-11-16 13:16:10   online          true
     2024-11-16 15:36:41   overtemperature 0
     2024-11-16 13:16:10   ram_free        39932
     2024-11-16 13:16:10   ram_total       52056
     2024-11-16 15:36:41   relay0          on
     2024-11-16 15:36:41   relay_0_energy  169008
     2020-12-20 09:19:03   relay_0_energy_total 0.1759
     2024-11-16 15:36:40   relay_0_power   16.63
     2024-11-16 13:16:10   relays_1_has_timer false
     2024-11-16 13:16:10   relays_1_ison   true
     2024-11-16 13:16:10   relays_1_overpower false
     2024-11-16 13:16:10   relays_1_source input
     2024-11-16 13:16:10   relays_1_timer_duration 0
     2024-11-16 13:16:10   relays_1_timer_remaining 0
     2024-11-16 13:16:10   relays_1_timer_started 0
     2024-11-16 13:16:10   serial          5717
     2024-11-16 15:36:41   state           on
     2024-11-16 15:36:41   temperature     33.67
     2024-11-16 13:16:10   time            13:16
     2024-11-16 13:16:10   tmp_is_valid    true
     2024-11-16 13:16:10   tmp_tC          34.21
     2024-11-16 13:16:10   tmp_tF          93.58
     2024-11-16 15:36:03   u_energy_total_kWh 12.5823999999906
     2024-11-16 13:16:10   unixtime        1731759369
     2024-11-16 13:16:10   update_beta_version 20231107-164219/v1.14.1-rc1-g0617c15
     2024-11-16 13:16:10   update_has_update false
     2024-11-16 13:16:10   update_new_version 20230913-113421/v1.14.0-gcb84623
     2024-11-16 13:16:10   update_old_version 20230913-113421/v1.14.0-gcb84623
     2024-11-16 13:16:10   update_status   idle
     2024-11-16 13:16:10   uptime          587915
     2024-11-16 13:16:10   wifi_sta_connected true
     ...
   helper:
     _98_statistics st_smartPlugs
Attributes:
   IODev      myMQTT2
   alias      TNAS
   autocreate 1
   devStateIcon {my $amp=ReadingsVal($name,"online","false") eq "false"?"rot":ReadingsVal($name,"new_fw","false") eq "true"?"gelb":"gruen";
my $con=ReadingsVal($name,"state","unknown");
my $pic=$con eq "off"?'ios-off':'ios-on-green';
my $cons=sprintf("%.1f",ReadingsVal($name,'relay_0_power','unknown'));
my $total=sprintf("%.2f",ReadingsVal($name,'u_energy_total_kWh',-1));
my $temp=sprintf("%.1f",ReadingsVal($name,'temperature','-100'));
my $show="$amp" eq "gelb"?"<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>":"<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$amp)."</a>";
"<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($pic)."</a><div>$cons W / $total kWh / $temp °C</div>"}
   event-on-change-reading relay_0_power:.1,.*
   genericDeviceType switch
   getList    power:noArg shellies/shellyplug-s-801B67/relay/power power
   icon       black_Steckdose.on
   model      shellyplug
   mqttPublish relay_0_power:topic=openWB/set/evu/W
   readingList shellies/shellyplug-s-801B67/relay/0:.* state
shellies/shellyplug-s-801B67/relay/0:.* relay0
shellies/shellyplug-s-801B67/input/0:.* input0
shellies/shellyplug-s-801B67/online:.* online
shellies/shellyplug-s-801B67/announce:.* { json2nameValue($EVENT) }
shellies/announce:.* { $EVENT =~ m,..id...shellyplug-s-801B67...mac.*, ? json2nameValue($EVENT) : return }
shellyplug_s_801B67:shellies/shellyplug-s-801B67/relay/0/power:.* relay_0_power
shellyplug_s_801B67:shellies/shellyplug-s-801B67/relay/0/energy:.* relay_0_energy
shellyplug_s_801B67:shellies/shellyplug-s-801B67/temperature:.* temperature
shellyplug_s_801B67:shellies/shellyplug-s-801B67/overtemperature:.* overtemperature
shellyplug_s_801B67:shellies/shellyplug-s-801B67/temperature_f:.* {}
shellyplug_s_801B67:shellies/shellyplug-s-801B67/info:.* { json2nameValue($EVENT) }
   room       Administration->MQTT2
   setList    off:noArg shellies/shellyplug-s-801B67/relay/0/command off
on:noArg shellies/shellyplug-s-801B67/relay/0/command on
x_update:noArg shellies/shellyplug-s-801B67/command update_fw
x_mqttcom shellies/shellyplug-s-801B67/command $EVTPART1
   userReadings u_energy_total_kWh:relay_0_energy:.* monotonic {sprintf("%.4f",ReadingsVal($name,'relay_0_energy',0)/60000)}
   userattr   mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
   verbose    2

Wie gesagt, ersetzte ich das MQTT2_DEVICE durch ein anderes Nicht-MQTT2_DEVICE, wird das Topic an die openWB übermittelt und ich sehe den Wert im MQTT-Explorer. Entweder ist das ein Bug, oder meine Implementierung ist nicht korrekt. Ich hoffe, jemand hat eine Idee.

Viele Grüße
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Beta-User

Passen die Topics? Du lauschst nach dem, was du geschrieben hast mit dem MQTT-Explorer auf einem anderen Topic wie du als publish konfiguriert hast. Handelt es sich da um den "Rückweg" von der openWB?

Nach deinem list von der MGB hat diese "irgendwann" das gewünschte Reading von deinem Plug an den angegebenen Topic versendet.

Prinzipiell ist es jedenfalls kein Problem, mit der MGB Readings von einem MQTT2_DEVICE weiterzuleiten.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Romoker

#2
Korrekt. Mit dem MQTT-Explorer verbinde ich mich mit der OpenWB und horche, was so da kommt. Die FHEM-publizierten Topics kommen dann, wenn alles richtig funktioniert, wie ein Echo zurück. Das Topic openWB/set/evu/W ist von openWB für die aktuelle Netzbezugsleistung in Watt vorgegeben.
Im openWB_Client sieht der MQTT-Traffic vollkommen normal aus:
20:18:33.305 SENT openWB/set/evu/W 16.83
20:18:33.356 RCVD openWB/set/evu/W 16.83
20:18:33.364 RCVD openWB/set/evu/W

In der openWB-Anzeige bleibt der Wert wie im MQTT-Explorer aber immer 0. Das ändert sich erst, wenn ich das Topic auf ein Nicht-MQTT2_Device umhänge.
Es ist zumindest beruhigend zu wissen, dass die Bridge auch mit MQTT2_DEVICES funktionieren soll.
Ich habe leider keine Idee, wie ich dem Problem weiter auf die Schliche kommen soll.

Ich hänge hier die Debug Info der Bridge an:
initialized: 1

device data records: $VAR1 = {
          'VM_Counter_Strom_Bezug' => {
                                        ':publish' => {
                                                        'energyWh' => {
                                                                        'last' => '1731785383.09289',
                                                                        'topic' => 'openWB/set/evu/WhImported',
                                                                        'mode' => 'R'
                                                                      }
                                                      },
                                        ':alias' => {}
                                      },
          'VM_Counter_Strom_Einspeisung' => {
                                              ':publish' => {
                                                              'energyWh' => {
                                                                              'topic' => 'openWB/set/evu/WhExported',
                                                                              'mode' => 'R'
                                                                            }
                                                            }
                                            },
          ':global' => {
                         ':defaults' => {
                                          'sub:base' => 'mqttGenericBridge/set',
                                          'pub:base' => 'mqttGenericBridge'
                                        },
                         ':alias' => {},
                         ':publish' => {}
                       },
          'SmartPlug08' => {
                             ':publish' => {
                                             'relay_0_power' => {
                                                                  'last' => '1731785435.63631',
                                                                  'topic' => 'openWB/set/evu/W',
                                                                  'mode' => 'R'
                                                                }
                                           },
                             ':alias' => {}
                           }
        };


subscriptionTab: $VAR1 = undef;


subscription helper array: $VAR1 = undef;


exclude type map: $VAR1 = {
          'sub' => {
                     'Global' => '*',
                     'MQTT' => 'transmission-state',
                     'telnet' => '*',
                     'MQTT_DEVICE' => 'transmission-state',
                     'MQTT_GENERIC_BRIDGE' => '*',
                     'FHEMWEB' => '*',
                     'MQTT_BRIDGE' => 'transmission-state'
                   },
          'pub' => {
                     'Global' => '*',
                     'MQTT_DEVICE' => 'transmission-state',
                     'telnet' => '*',
                     'MQTT' => 'transmission-state',
                     'FHEMWEB' => '*',
                     'MQTT_GENERIC_BRIDGE' => '*',
                     'MQTT_BRIDGE' => 'transmission-state'
                   }
        };


exclude reading map: $VAR1 = {};


exclude device map: $VAR1 = {};

Die scheint mir auch nicht ganz korrekt zu sein. Das 'last' => '1731785435.63631' für das Topic openWB/set/evu/W ist jenseits von Gut und Böse, soweit ich das interpretieren kann.
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Beta-User

Wo kommt die 3. Zeile her?
Das 2. RCVD ist komisch und scheint auch nicht von außen (FHEM) zu kommen
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Romoker

Gute Frage. Das Muster sieht aber bei dem Nicht-MQTT2-DEVICE genauso aus. Dort kommen wie gesagt die Daten an. Dann muss in meiner Implementierung etwas nicht stimmen. Ich bin zurzeit etwas ratlos.
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Beta-User

Steht was im Log der openWB?

Vielleicht wird das, was offenkundig von FHEM gesendet wurde, nicht als gültige Zahl erkannt?
Dann müsste man ggf. Mal auf Ganzzahl runden o.ä..
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Romoker

Mein funktionierendes Nicht-MQTT2_DEVICE liefert den Wert als Ganzzahl! Das ist eine heisse Spur. Teste ich sofort.
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Romoker

Lieber Beta-User, mein Retter in der Not. Das wars. Es muss Ganzzahl sein. Jetzt funktioniert es. Manchmal ist die Lösung so einfach! Leider hat die opeWB-Spezifikation dieses Detail unterschlagen.

Ich schaue mir jetzt das Fußballländerspiel an, schon zwei Tore verpasst.

Viele Grüße und noch einen schönen Abend.
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Romoker

Trotz Fußball, noch eine Korrektur zu meiner Spezifikationsaussage. Die openWB-Spezifikation war doch korrekt. Dort steht int für Integer. Habe ich glatt übersehen.
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT