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
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.
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.
Wo kommt die 3. Zeile her?
Das 2. RCVD ist komisch und scheint auch nicht von außen (FHEM) zu kommen
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.
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.ä..
Mein funktionierendes Nicht-MQTT2_DEVICE liefert den Wert als Ganzzahl! Das ist eine heisse Spur. Teste ich sofort.
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.
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.