FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: americanium am 08 Dezember 2021, 11:52:22

Titel: Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 11:52:22
Hallo,

leider muss ich hier nochmal eine Frage stellen, bis jetzt konnte mir gut geholfen werden:

Ich habe eine WMBUS Devices (WMBUS_DME_XXXXXXX_YYY_Z) mit diversen Readings. Einige dieser Readings möchte ich per MQTT senden. z.B.: "02_value" was dem aktuellen Wasserzählerwert entspricht. Dieser Wert wird alle 10 Sekunden vom Zähler abgegriffen und upgedated.

Ich habe zudem bis jetzt den MQTT2_CLIENT aktiviert und die MQTT_GENERIC_BRIDGE.

Wie greife ich jetzt diese aktuellen Werte bei jeder Änderung ab und sende sie an meinen Broker (auf localhost).

Danke!

VG
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 11:54:55
Indem du das entsprechende mqttPublish-Attribut an deinem WMBUS-Device (WMBUS_DME_XXXXXXX_YYY_Z) passend füllst.

Es ist sinnvoll, dafür ein paar Defaults in der MGB selbst zu setzen. Vielleicht zeigst du mal die MGB und das betreffende Device, dann ist einfacher helfen...
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 12:25:59
Ok, ich stelle gerne rein was notwendig ist.
Was ist MGB ?
Was genau vom Device braucht ihr ? einen Screenshot des Devices in FHEM ?

Danke!
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 12:28:55
Allgemein: https://forum.fhem.de/index.php/topic,71806.0.html (=> KEINE screenshots, wenn vermeidbar!)
Zu MQTT speziell: https://forum.fhem.de/index.php/topic,112327.0.html

MGB = kurz für MQTT_GENERIC_BRIDGE. Du kannst auch mal das Basis-attrTemplate für die MGB anschauen, das sollte dann eigentlich schon ein guter Start sein... (und es gibt einen Thread zu attrTemplate@MGB, da kannst du mehr erfahren über die "Philosophie" dahinter).
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 12:46:34
Okay, ich denke mir ist klar was bereit zu stellen ist:

DeviceOverview
WMBUS_DME_68908588_112_6


Internals
DEF
DME 68908588 112 6
DeviceMedium
Warm Water (30 °C ... 90 °C)
DeviceType
6
FUUID
61afe55e-f33f-1a60-0e10-169a3b74eecc3254
IODev
traxCUL
IdentNumber
68908588
LASTInputDev
traxCUL
MSGCNT
893
Manufacturer
DME
MessageEncoding
CUL
NAME
WMBUS_DME_68908588_112_6
NR
16
STATE
no errors
TYPE
WMBUS
Version
112
addr
DME_68908588_112_6
model
DME_6_112
traxCUL_MSGCNT
893
traxCUL_RAWMSG
b3E44A511888590687006C7547A2C00300553FE90F955CC341F0D2A021705D14D1D702343C5519ABA236080013AB3B4DFDE721259D0B4B50EAC1C10AD9374DD268AC01983318012280A80::-35.5
traxCUL_RSSI
-35.5
traxCUL_TIME
2021-12-08 12:44:46


Readings
1_storage_no
0
2021-12-08 12:45:14
1_type
VIF_ACCESS_NO
2021-12-08 12:45:14
1_unit
2021-12-08 12:45:14
1_value
-82
2021-12-08 12:45:14
1_value_type
Instantaneous value
2021-12-08 12:45:14
2_storage_no
0
2021-12-08 12:45:14
2_type
VIF_VOLUME
2021-12-08 12:45:14
2_unit

2021-12-08 12:45:14
2_value
156.27
2021-12-08 12:45:14
2_value_type
Instantaneous value
2021-12-08 12:45:14
3_storage_no
0
2021-12-08 12:45:14
3_type
VIF_FLOW_TEMP
2021-12-08 12:45:14
3_unit
°C
2021-12-08 12:45:14
3_value
12.7
2021-12-08 12:45:14
3_value_type
Instantaneous value
2021-12-08 12:45:14
4_storage_no
0
2021-12-08 12:45:14
4_type
VIF_ERROR_FLAGS
2021-12-08 12:45:14
4_unit
2021-12-08 12:45:14
4_value
30
2021-12-08 12:45:14
4_value_type
Instantaneous value
2021-12-08 12:45:14
5_storage_no
0
2021-12-08 12:45:14
5_type
VIF_FD_RESERVED
2021-12-08 12:45:14
5_unit
Reserved
2021-12-08 12:45:14
5_value
4669
2021-12-08 12:45:14
5_value_type
Instantaneous value
2021-12-08 12:45:14
6_storage_no
33
2021-12-08 12:45:14
6_type
VIF_TIME_POINT_DATE_TIME
2021-12-08 12:45:14
6_unit
2021-12-08 12:45:14
6_value
2021-11-30 23:59
2021-12-08 12:45:14
6_value_type
Instantaneous value
2021-12-08 12:45:14
7_storage_no
33
2021-12-08 12:45:14
7_type
VIF_VOLUME
2021-12-08 12:45:14
7_unit

2021-12-08 12:45:14
7_value
154.106
2021-12-08 12:45:14
7_value_type
Instantaneous value
2021-12-08 12:45:14
IODev
traxCUL
2021-12-08 09:49:50
LQI
128
2021-12-08 12:45:14
RSSI
-35.5
2021-12-08 12:45:14
batteryState
ok
2021-12-08 12:45:14
decryption_ok
1
2021-12-08 12:45:14
is_encrypted
1
2021-12-08 12:45:14
state
no errors
2021-12-08 12:45:14


MQTT DEVICE

DeviceOverview
test
???


Internals
CFGFN
DEF
WMBUS_DME_68908154_112_6
FUUID
61b08502-f33f-1a60-2e55-ccbc7fb112f7b1cc
IODev
myBroker
NAME
test
NR
143
NTFY_ORDER
70-test
STATE
???
TYPE
MQTT_GENERIC_BRIDGE
devspec
.*
prefix
WMBUS_DME_68908154_112_6


Readings
IODev
myBroker
2021-12-08 11:12:18
device-count
0
2021-12-08 11:12:18
incoming-count
0
2021-12-08 11:12:18
outgoing-count
0
2021-12-08 11:12:18
transmission-state
IO device initialized (mqtt2)
2021-12-08 11:12:18
updated-reading-count
0
2021-12-08 11:12:18
updated-set-count
0
2021-12-08 11:12:18


Probably associated with
WMBUS_DME_68908154_112_6
no errors
WMBUS


Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 12:59:00
Puh...

Das ist kaum lesbar, auch wenn wenigstens code-Tags genutzt wurden. Für MQTT-Geräte ist es in der Regel einfacher, RAW-listings zu nehmen.

Das sähe dann eher so aus:

defmod mgb1 MQTT_GENERIC_BRIDGE
attr mgb1 globalDefaults sub:base=mgb1/set pub:base=mgb1

setstate mgb1 2021-12-08 10:11:09 IODev m2client
setstate mgb1 2021-12-08 12:03:56 attrTemplateVersion 20210222_MQTT
setstate mgb1 2021-12-08 12:03:56 device-count 3
setstate mgb1 2021-12-08 10:11:00 incoming-count 0
setstate mgb1 2021-12-08 10:11:00 outgoing-count 0
setstate mgb1 2021-12-08 10:11:09 transmission-state IO device initialized (mqtt2)
setstate mgb1 2021-12-08 10:11:00 updated-reading-count 0
setstate mgb1 2021-12-08 10:11:00 updated-set-count 0


Mach mal
set test attrTemplate base_settings_to_MQTT_GENERIC_BRIDGE
undattr WMBUS_DME_68908588_112_6 mqttPublish 02_value:topic=$base/watermeter
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 13:02:38
Also bei

set test attrTemplate base_settings_to_MQTT_GENERIC_BRIDGE

kommt
"Specify the unknown parameters for test/base_settings_to_MQTT_GENERIC_BRIDGE:"

Name of the IO-Device: EINGABEFELD
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 13:03:39
Hmm, da muss ich mir noch was überlegen, aber es sollte mit "myBroker" erst mal durchlaufen.
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 13:08:47
Hab an den Befehl

set test attrTemplate base_settings_to_MQTT_GENERIC_BRIDGE nun "myBroker" angehängt.

Es kam die Meldung, dass die Einrichtung nun erfolgreich war und man MQTT Befehle empfangen / senden kann.

Den zweiten Befehl hab ich auch eingetragen. Weiß jetzt nur nicht, was passieren solle :-)
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 13:17:21
Nun ja, jetzt schaust du mal eine Weile zu und checkst, ob sich die "transmission"-Zahl an der MGB ändert...

Du kannst auch mit einem der üblichen (externen) Hilfsmittel schauen, was auf deinem MQTT-Server so an Nachrichten ankommt, und erweiterst/ergänzt dann deine MGB-spezifischen Attribute an deinem Device entsprechend...
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 13:19:29
Ich weiß jetzt nicht wie oft der Wert gesendet werden würde aber ich kann sagen, dass am Broker nichts neues ankommt...
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 13:22:29
Hmm, jo. Hatte aus deinem Ausgangspost den Reading-Namen kopiert mit 02_.... Tatsächlich gibt es aber keine führende "0". Mach die mal weg in mqttPublish...
Nachtrag: evtl. muss man auch evaluieren, also dann sicherheitshalber mal
attr WMBUS_DME_68908588_112_6 mqttPublish 2_value:topic={"$base/$device/watermeter"}
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 13:30:00
Hmm, hab hier mal einen Log Auszug. Beim MQTT Broker kommt noch nichts an.

2021.12.08 13:27:20 5: MQTT_GENERIC_BRIDGE:DEBUG:> [mqttGenericBridge] publish: $base/watermeter => 156.274 (qos: 0, retain: 0
2021.12.08 13:27:20 5: Starting notify loop for mqttGenericBridge, 2 event(s), first is transmission-state: outgoing publish sent
2021.12.08 13:27:20 5: End notify loop for mqttGenericBridge
2021.12.08 13:27:20 5: End notify loop for WMBUS_DME_68908588_112_6
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 13:31:01
Meinen Edit hattest du gesehen?
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 13:41:55
Jap,

muss einen Erfolg berichten. Hab den Wert jetzt im Broker :-)

So nun meine große Frage um das auch zu verstehen und wieder umsetzen zu können.

1.) Ich benötige MQTT2_CLIENT zwingend um den FHEM internen "Brokernamen" zu definieren und mich mit dem Broker zu veribnden
2.) Ich brauche die MQTT_GENERIC_BRIDGE zwingend mit einem "Bridgenamen" in dem Fall jetzt "test"
3.) Mit "set test attrTemplate base_settings_to_MQTT_GENERIC_BRIDGE myBroker" passiert nun was genau ?
2.) Ich muss im jeweiligen "Gerät" ein Attritbut hinzufügen mit "attr DEVICEBEZEICHNUNG mqttPublish READINGNAME:topic={$base/$device/BEZEICHNUNG"}
(EDIT: Nein scheinbar nicht, nach meiner Änderung hatte ich den 3er Value wert gesendet und der vorherige ist nun weg. Mit
2_value:topic={"$base/$device/watermeter"} 3_value:topic={"$base/$device/watermeter_temperature"} werden nun beide gleichzeitig übertragen)


MQTT_GENERIC_BRIDGE
mqttGenericBridge ???
test ???

Benötige ich das "mqttGenericBridge" nun oder ist das eigentlich überflüssig weil das selbe wie "test".
Ich könnte jetzt also "Test" umbenennen und müsste die befehle oben mit dem neuen Namen neu durchführen?

Sehe ich es richtig, dass die Bridge nur dazu da ist, die MQTT Telegramme an den Client zu übergeben und der sendet diese dann an den Broker ?

Danke!

Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 13:57:55
Zitat von: americanium am 08 Dezember 2021, 13:41:55
muss einen Erfolg berichten. Hab den Wert jetzt im Broker :-)
:) Soweit, so gut.

Zitat
So nun meine große Frage um das auch zu verstehen und wieder umsetzen zu können.

1.) Ich benötige MQTT2_CLIENT zwingend um den FHEM internen "Brokernamen" zu definieren und mich mit dem Broker zu veribnden
Jein. Du kannst auch MQTT2_SERVER als IO-Modul verwenden oder das "alte" Interface-Modul "00_MQTT.pm". Kommt ganz darauf an, wie das Gesamtsetup ist...

Zitat
2.) Ich brauche die MQTT_GENERIC_BRIDGE zwingend mit einem "Bridgenamen" in dem Fall jetzt "test"
Jein. MQTT_GENERIC_BRIDGE ist ein zweckmäßiges Hilfsmittel, wenn man einige FHEM-Devices "an MQTT" anbinden will. Es gibt aber noch weitere Varianten (nein, ich werde es nicht erläutern).

"test" war halt der von dir gewählte Name. Du kannst die MGB umbenennen, und/oder du kannst die $base-Variablen auch in der MGB anpassen. Wichtig ist auf der MQTT-Seite nur zweierlei: Es muss je in Sende- und Empfangsrichtung eindeutig sein.

Zitat3.) Mit "set test attrTemplate base_settings_to_MQTT_GENERIC_BRIDGE myBroker" passiert nun was genau ?
Es werden ein paar Vorbelegungen generiert, und eigentlich sollten auch die subscriptions und clientOrder für MQTT2_CLIENT passend gesetzt werden. Das hat vermutlich nicht funktioniert, update für das attrTemplate kommt demnächst... Das ist beides aber nur relevant, wenn du Befehle von MQTT-Seite empfangen willst!
(Dann bräuchte ich ein RAW-list, um zu sehen, was da ist!)

Zitat
2.) Ich muss im jeweiligen "Gerät" ein Attritbut hinzufügen mit "attr DEVICEBEZEICHNUNG mqttPublish READINGNAME:topic={$base/$device/BEZEICHNUNG"}
Ja, so ähnlich. Es gibt eine commandref zu MQTT_GENERIC_BRIDGE, da sind ein paar Beispiele drin und das Zusammenspiel mit ein paar anderen Attributen wird etwas erläutert...

Zitat
Benötige ich das "mqttGenericBridge" nun oder ist das eigentlich überflüssig weil das selbe wie "test".
Ich könnte jetzt also "Test" umbenennen und müsste die befehle oben mit dem neuen Namen neu durchführen?
Kapiere ich nicht, vermutlich: s.o..

Zitat
Sehe ich es richtig, dass die Bridge nur dazu da ist, die MQTT Telegramme an den Client zu übergeben und der sendet diese dann an den Broker ?
Jein. MGB hat eine Doppelfunktion:
Zum einen überwacht es die "untergeordneten Geräte" und schaut (als Event-Handler), ob was relevantes dabei ist, ermittelt Topic und Payload und schiebt es dann an das IO-Gerät (hier: MQTT2_CLIENT). Das ist der Teil, den du bisher (ansatzweise) kennengelernt hast.
Zum anderen nimmt es passende Topic-Payload-Kombinationen vom IO-Gerät entgegen und schaltet ggf. die "untergeordneten Geräte" entsprechend oder setzt Readings.
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: americanium am 08 Dezember 2021, 14:38:36
Danke für die recht ausführliche Erklärung.

Jetzt habe ich noch eine Frage. Dieses "test" habe ich gelöscht weil ich es mit richtigen Namen neu anlegen wollte.... leider weiß ich den Befehl nicht mehr. Kannst du mir da nochmal auf die Sprünge helfen ?
Titel: Antw:Werte aus WMBUS Readings per MQTT senden
Beitrag von: Beta-User am 08 Dezember 2021, 14:56:49
Ersetze "mgb1" durch "test" oder irgendwas anderes?
Zitat von: Beta-User am 08 Dezember 2021, 12:59:00
Das ist kaum lesbar, auch wenn wenigstens code-Tags genutzt wurden. Für MQTT-Geräte ist es in der Regel einfacher, RAW-listings zu nehmen.

Das sähe dann eher so aus:

defmod mgb1 MQTT_GENERIC_BRIDGE
attr mgb1 globalDefaults sub:base=mgb1/set pub:base=mgb1


Deine Brösel sahen etwas "komisch" aus, daher mag ich das nicht rekonstruieren. Danach schauen, ob die Bridge auf das richtige IO "zielt" und ggf. dort clientOrder und/oder subscriptions fixen, wenn du auch empfangen willst!