Integration My BMW Daten mittels BMW CarData Stream und bmw-mqtt-bridge in fhem

Begonnen von Hadl, 16 April 2026, 12:40:26

Vorheriges Thema - Nächstes Thema

Hadl

Hallo zusammen,
ich habe nun einen BMW i4 und lade den über eine go-e Charger Gemini Wallbox.
Die Wallbox habe ich wie hier beschrieben an fhem angebunden: https://forum.fhem.de/index.php?topic=136856.0

Dabei hat mir aber der Ladezustand der Batterie gefehlt, den ich gerne ich meine Ladestrategie mit aufnehmen würde.
Also hab ich gesucht wie ich die Daten bekommen kann und bin auf die bmw-mqtt-bridge von hier gestoßen: https://github.com/dj0abr/bmw-mqtt-bridge

Nach der Anleitung dort und dem Freigeben von vielen Daten in der CarData Stream configuration vom BMW bekomme ich nun die Daten von der BMW cloud in die bmw-mqtt-bridge und von dort weiter in meinen MQTT Broker.

in fhem hab ich nun folgende Geräte definiert:
defmod BMW_i4_mqtt2 MQTT2_DEVICE
attr BMW_i4_mqtt2 IODev MosquitoMqtt2Client
attr BMW_i4_mqtt2 autocreate 1
attr BMW_i4_mqtt2 devStateStyle style="text-align:right"
attr BMW_i4_mqtt2 devicetopic bmw/<VIN>
attr BMW_i4_mqtt2 event-min-interval .*:3600
attr BMW_i4_mqtt2 event-on-change-reading .*
attr BMW_i4_mqtt2 icon car
attr BMW_i4_mqtt2 readingList $DEVICETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP,'', '_timestamp') }
attr BMW_i4_mqtt2 room Auto
attr BMW_i4_mqtt2 stateFormat { my $var= "<pre>" .\
 sprintf("Battery Ladezustand: %7.1f  %%", ReadingsVal($name,"data_vehicle.drivetrain.batteryManagement.header_value",0)) . "</br>" .\
 sprintf("Lade Leistung: %7.1f  W", ReadingsVal($name,"data_vehicle.powertrain.electric.battery.charging.power_value",0)) . "</br>" .\
 sprintf("KM Stand: %7.1f  W", ReadingsVal($name,"data_vehicle.vehicle.travelledDistance_value",0)) . "</br>" .\
 sprintf("Reichweite: %7.1f km", ReadingsVal($name,"data_vehicle.drivetrain.electricEngine.kombiRemainingElectricRange_value",0)) . "</pre>";;;;\
 $var;;;;\
}
und weil die Ladeleistung nie zu 0 gesetzt wird, sondern sich das nur der Status ändert, noch diesen Workaround um die Ladeleistung richtig angezeigt zu bekommen:
defmod BMW_i4_charging_power_notify notify (BMW_i4_mqtt2:data_vehicle\.drivetrain\.electricEngine\.charging\.status_value):.*\
{ \
  my $status = ReadingsVal('BMW_i4_mqtt2', 'data_vehicle.drivetrain.electricEngine.charging.status_value', '');;\
  if ($status ne "CHARGINGACTIVE")\
  {\
    fhem("setreading BMW_i4_mqtt2 data_vehicle.powertrain.electric.battery.charging.power_value 0");;\
  } \
}
attr BMW_i4_charging_power_notify room Auto

Damit hab ich nun viele Daten in fhem über mein Auto!
Es ist schon echt erschreckend wieviele Daten BMW alles von einem hat, wenn man die Cloud nutzt... und das sind nur die, die man als Kunde sehen darf!
BMW schickt auch soweit ich das nach einigen Stunden beurteilen kann recht zuverlässig und zeitnah MQTT Nachrichten wenn irgendein Event auftritt.

Mit Ladeleistung (hatte ich auch schon in besserer Auflösung von der Wallbox) und Akkuzustand kann ich nun gut meine Energie im Haus von PV Anlage zu Heizung und Auto priorisieren.

Ich hoffe das hilft manchen von euch auch.

Viele Grüße

Christian
FHEM: Rpi 5 + SSD / WR: Fronius Symo Gen24 10.0 Plus + BYD HVS 7.7, Fronius Symo Gen24 12.0 SC (60%) PV: (Ost=3.5 West=6.6 Nord=9.9 Ost=4.5) / Homematic BidCoS / Shelly / Viessmann

satprofi

hallo.
das geht doch schon länger nur mehr so. aber was hast du eingestellt das du soviele daten erhältst? ich habe bei bmw alles angewählt, bekomme aber gerademal 7 readings.
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

Hadl

Ich habe bei BMW ca. 100 Werte angehakt, bei denen ich dachte das mein Auto sie auch liefern kann, und sie irgendwie in fhem interessant sind.
Damit habe ich nun 45 "value" Readings und bei einigen auch noch "unit". Hier mal nur die values
data_vehicle.body.chargingPort.isHospitalityActive_value
data_vehicle.body.chargingPort.plugEventId_value
data_vehicle.body.chargingPort.status_value
data_vehicle.body.flap.isLocked_value
data_vehicle.cabin.infotainment.navigation.currentLocation.altitude_value
data_vehicle.cabin.infotainment.navigation.currentLocation.heading_value
data_vehicle.cabin.infotainment.navigation.currentLocation.latitude_value
data_vehicle.cabin.infotainment.navigation.currentLocation.longitude_value
data_vehicle.chassis.axle.row1.wheel.left.tire.pressure_value
data_vehicle.chassis.axle.row1.wheel.right.tire.pressure_value
data_vehicle.chassis.axle.row2.wheel.left.tire.pressure_value
data_vehicle.chassis.axle.row2.wheel.right.tire.pressure_value
data_vehicle.drivetrain.avgElectricRangeConsumption_value
data_vehicle.drivetrain.batteryManagement.batterySizeMax_value
data_vehicle.drivetrain.batteryManagement.header_value
data_vehicle.drivetrain.batteryManagement.maxEnergy_value
data_vehicle.drivetrain.electricEngine.charging.chargingMode_value
data_vehicle.drivetrain.electricEngine.charging.connectionType_value
data_vehicle.drivetrain.electricEngine.charging.hvpmFinishReason_value
data_vehicle.drivetrain.electricEngine.charging.isSingleImmediateCharging_value
data_vehicle.drivetrain.electricEngine.charging.method_value
data_vehicle.drivetrain.electricEngine.charging.phaseNumber_value
data_vehicle.drivetrain.electricEngine.charging.profile.climatizationActive_value
data_vehicle.drivetrain.electricEngine.charging.profile.timerType_value
data_vehicle.drivetrain.electricEngine.charging.smeEnergyDeltaFullyCharged_value
data_vehicle.drivetrain.electricEngine.charging.status_value
data_vehicle.drivetrain.electricEngine.charging.timeToFullyCharged_value
data_vehicle.drivetrain.electricEngine.kombiRemainingElectricRange_value
data_vehicle.drivetrain.lastRemainingRange_value
data_vehicle.powertrain.electric.battery.charging.acLimit.isActive_value
data_vehicle.powertrain.electric.battery.charging.acLimit.max_value
data_vehicle.powertrain.electric.battery.charging.acLimit.min_value
data_vehicle.powertrain.electric.battery.charging.acLimit.selected_value
data_vehicle.powertrain.electric.battery.charging.acousticLimit_value
data_vehicle.powertrain.electric.battery.charging.power_value
data_vehicle.powertrain.electric.battery.charging.preferenceSmartCharging_value
data_vehicle.powertrain.electric.battery.stateOfCharge.target_value
data_vehicle.powertrain.electric.chargingDuration.displayControl_value
data_vehicle.trip.segment.end.drivetrain.batteryManagement.hvSoc_value
data_vehicle.vehicle.antiTheftAlarmSystem.alarm.armStatus_value
data_vehicle.vehicle.antiTheftAlarmSystem.alarm.isOn_value
data_vehicle.vehicle.avgAuxPower_value
data_vehicle.vehicle.avgSpeed_value
data_vehicle.vehicle.preConditioning.error_value
data_vehicle.vehicle.travelledDistance_value


Es sind also auch einige dabei die nicht gesendet werden.

VG

Hadl
FHEM: Rpi 5 + SSD / WR: Fronius Symo Gen24 10.0 Plus + BYD HVS 7.7, Fronius Symo Gen24 12.0 SC (60%) PV: (Ost=3.5 West=6.6 Nord=9.9 Ost=4.5) / Homematic BidCoS / Shelly / Viessmann

satprofi

bei meinem i3 gibts fast 200, alle angehakt. es kommen nur diese daher.

data_vehicle.body.chargingPort.status_value
   
data_vehicle.drivetrain.batteryManagement.batterySizeMax_value
   
data_vehicle.drivetrain.batteryManagement.header_value

data_vehicle.drivetrain.batteryManagement.maxEnergy_value

data_vehicle.drivetrain.electricEngine.charging.acAmpere_value

data_vehicle.drivetrain.electricEngine.charging.acVoltage_value
   
data_vehicle.drivetrain.electricEngine.charging.chargingMode_value
   
data_vehicle.drivetrain.electricEngine.charging.method_value
   
data_vehicle.drivetrain.electricEngine.charging.phaseNumber_value
   
data_vehicle.drivetrain.electricEngine.charging.smeEnergyDeltaFullyCharged_value

data_vehicle.drivetrain.electricEngine.charging.status_value
   
data_vehicle.drivetrain.electricEngine.kombiRemainingElectricRange_value
   
data_vehicle.vehicle.travelledDistance_unit
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram