Ich hatte ein MQTT2 device mit bimmerconnected laufen, um die Daten meines Fahrzeugs in FHEM auszulesen. Seit Ende September geht das nicht mehr, weil von BMW deaktiviert. Jetzt versuche ich seit einiger Zeit diese Funktion über dieses Projekt bmw-mqtt-bridge (https://github.com/dj0abr/bmw-mqtt-bridge) zu ersetzen, was mir aber nur teilweise gelungen ist. Die Daten kommen via MQTT2_CLIENT von einem mosquitto-broker und werden im MQTT2_DEVICE als Readings angezeigt, jedoch scheitere ich an der Extraktion des json-strings.
define MQTT2_bmw MQTT2_DEVICE mybmw
attr MQTT2_bmw DbLogExclude .*
attr MQTT2_bmw IODev myBroker4
attr MQTT2_bmw alias MyBMW
attr MQTT2_bmw autocreate 1
attr MQTT2_bmw devicetopic mybmw/vehicles/ABCDE12345KL67890/vehicle
attr MQTT2_bmw icon car
attr MQTT2_bmw readingList $DEVICETOPIC.cabin.window.row1.passenger.status:.* FensterRV\
$DEVICETOPIC.cabin.window.row2.passenger.status:.* FensterRH\
$DEVICETOPIC.cabin.window.row1.driver.status:.* FensterLV\
$DEVICETOPIC.cabin.window.row2.driver.status:.* FensterLH\
$DEVICETOPIC.cabin.door.row1.passenger.isOpen:.* TuereRV\
$DEVICETOPIC.cabin.door.row2.passenger.isOpen:.* TuereRH\
$DEVICETOPIC.cabin.door.row1.driver.isOpen:.* TuereLV\
$DEVICETOPIC.cabin.door.row2.driver.isOpen:.* TuereLH\
$DEVICETOPIC.cabin.infotainment.navigation.currentLocation.longitude:.* longitude\
$DEVICETOPIC.cabin.infotainment.navigation.currentLocation.latitude:.* latitude\
$DEVICETOPIC.cabin.infotainment.navigation.currentLocation.altitude:.* altitude\
$DEVICETOPIC.drivetrain.lastRemainingRange:.* range\
$DEVICETOPIC.vehicle.travelledDistance:.* mileage\
$DEVICETOPIC.body.trunk.door.isOpen:.* trunkopen\
$DEVICETOPIC.body.hood.isOpen.* hoodopen
attr MQTT2_bmw room BMW
# CID bmw
# DEF bmw
# FUUID 65995ed4-f33f-58e3-dfd0-bc21e67a83688103
# IODev myBroker4
# LASTInputDev myBroker4
# MSGCNT 89
# NAME MQTT2_bmw
# NR 352
# STATE state
# TYPE MQTT2_DEVICE
# eventCount 85
# myBroker4_MSGCNT 89
# myBroker4_TIME 2025-12-20 11:40:49
# READINGS:
# 2025-12-20 11:40:49 FensterLH {"timestamp":"2025-12-20T10:40:44Z","value":"CLOSED"}
# 2025-12-20 11:40:49 FensterLV {"timestamp":"2025-12-20T10:40:44Z","value":"CLOSED"}
# 2025-12-20 11:40:49 FensterRH {"timestamp":"2025-12-20T10:40:44Z","value":"CLOSED"}
# 2025-12-20 11:40:49 FensterRV {"timestamp":"2025-12-20T10:40:44Z","value":"CLOSED"}
# 2025-12-19 22:37:52 IODev myBroker4
# 2025-12-20 11:40:49 TuereLH {"timestamp":"2025-12-20T10:40:44Z","value":false}
# 2025-12-20 11:40:49 TuereLV {"timestamp":"2025-12-20T10:40:44Z","value":false}
# 2025-12-20 11:40:49 TuereRH {"timestamp":"2025-12-20T10:40:44Z","value":false}
# 2025-12-20 11:40:49 TuereRV {"timestamp":"2025-12-20T10:40:44Z","value":false}
# 2025-12-20 11:40:49 altitude {"timestamp":"2025-12-20T10:40:44Z","unit":"m","value":188}
# 2025-12-16 14:29:30 connected true
# 2025-12-20 11:40:49 hoodopen {"timestamp":"2025-12-20T10:40:44Z","value":false}
# 2025-12-20 11:40:49 latitude {"timestamp":"2025-12-20T10:40:44Z","unit":"degrees","value":58.3832713889}
# 2025-12-20 11:40:49 longitude {"timestamp":"2025-12-20T10:40:44Z","unit":"degrees","value":26.2470238889}
# 2025-12-20 11:40:49 mileage {"timestamp":"2025-12-20T10:40:44Z","unit":"km","value":95047}
# 2025-12-20 11:40:49 range {"timestamp":"2025-12-20T10:40:44Z","unit":"km","value":579}
# 2025-12-20 11:40:49 trunkopen {"timestamp":"2025-12-20T10:40:44Z","value":false}
#
Was muß ich tun um nur value zu bekommen?
Danke für die Hilfe!
Gibt vermutlich viele Varianten, das zu lösen.
Der Workshop im Forum und "Schritt für Schritt" im Wiki sind bekannt?
Insbesondere https://forum.fhem.de/index.php?msg=1303037?
Würde alle Topics per regexp zusammenfassen und dann etwas Perlcode anflanschen, der $TOPIC und $JSONMAP mit nutzt.
Hoffe, das reicht erst mal als Baustein?
Zitat von: Beta-User am 20 Dezember 2025, 18:36:01Hoffe, das reicht erst mal als Baustein?
Schön wär's, aber leider bin ich, was Perl und Regex betrifft, ziemlich nackt :(
War schon froh, daß ich überhaupt Readings bekomme
Trotzdem Danke für den Versuch.