BMW MQTT Schnittstelle für CarData

  • Hallo Zusammen,


    BMW hat eine Änderung am Connected Drive Backend vorgenommen.

    Damit wurden die bisherigen Wege für eine Smart Home Integration geschlossen und BMW bietet nun eine offizielle Schnittstelle an.

    Die zuvor genutzte Schnittstelle war nicht offiziell und wurde mittels Reverse Engineering entwickelt.


    Die neue Schnittstelle basiert auf MQTT und liefert, im Gegensatz zur vorherigen Schnittstelle, nahezu Livedaten.

    In einem Test habe ich fast jeden gefahrenen Kilometer ein Update über MQTT erhalten.


    Jetzt gibt es noch ein Problem...

    Man muss erst einen Car Client erstellen, diesen autorisieren und anschließend Tokens abfragen.

    Diese Tokens haben unterschiedliche Gültigkeiten und müssen vor Ablauf erneuert werden.

    Access und ID Token sind lediglich eine Stunde gültig, während der Refresh Token 14 Tage gültig ist.

    Soweit ich es verstehe, werden alle drei Tokens beim refresh aktualisiert und starten mit einer frischen Gültigkeit.


    Ich bin grade noch dabei das ganze in meiner openHAB Installation einzurichten.

    Manuell bekomme ich das hin und auch die Aktualisierung vor Ablauf der Gültigkeit funktioniert.

    Gestern wurde der Zugang trotzdem nach ein paar Stunden geschlossen, wobei es heute problemlos funktioniert und die Tokens verlängert werden.


    Wer sich für sowas interessiert kann mal in die Doku schauen:

    CarData Customer Portal


    Zur Einrichtung sind folgende Schritte nötig, dabei dürfen die Tabs NICHT geschlossen werden!


    1. Öffnen der Fahrzeugübersicht und Auswahl "BMW CarData"

    https://www.bmw.de/de-de/mybmw/vehicle-overview

    2. Unter "Technischer Zugang zu BMW CarData" die Option "CarData Client erstellen" wählen

    Hier die Client_ID kopieren und beide Schalter aktivieren, wobei man einen Moment warten muss, bevor man den zweiten Schalter aktiviert.

    Sollte man eine Fehlermeldung erhalten, muss man den Tab schließen und die Seite neu laden.

    3. Öffnen des "CarData Customer Portals" und Auswahl der "Device Code Flow API"

    CarData Customer Portal

    4. "Device Flow with PKCE" aufklappen und "gcdm/oauth/device/code" (Starts the device code flow) aufklappen

    5. "Try it out" anklicken, die Client_ID aus 2 einfügen und auf Execute klicken.

    6. Weiter unten sollte die Antwort unter Responses mit Code 200 angezeigt werden.

    Hier findet ihr zwei weitere Informationen: Den User_Code und den Device_Code, beide müssen erneut kopiert werden.

    Diese Daten benötigt ihr zur Autorisierung und der Anfrage des MQTT Passworts.

    7. Im Tab aus Schritt 2 klickt ihr nun auf "Gerät authentifizieren", loggt euch mit eurem Connected Drive Account ein und gebt im neuen Tab den User_Code aus 6 ein.

    Die Eingabe sollte mit "Gerät autorisiert" bestätigt werden.

    8. Geht zurück auf die BMW CarData Seite, scrollt runter zu "CarData Streaming" und erstellt einen Stream.

    9. Klappt die Verbindungsdetails auf und kopiert euch den Benutzernamen (gcid)

    10. Unter "Datenauswahl ändern" könnt ihr nun alle nötigen Daten auswählen.

    Hinweis: Es gibt über 200 Datenpunkte, wobei nicht alle von jedem Fahrzeug unterstützt werden.

    Wer möchte, kann das per Console des Browsers automatisieren, siehe Skript am Ende des Beitrags.

    11. Geht zurück zum "CarData Customer Portal" und klappt "/gcdm/oauth/token" (Request a token for the device) auf.

    12. Klickt auf "Try it out", fügt eure Client_ID und den Device_Code ein. Bestätigt die Eingabe mit "Execute".

    Ihr solltet erneut eine Antwort mit Response Code 200 sehen.

    13. In der Antwort findet ihr nun mehrere IDs und Tokens.

    gcid = Benutzername, identisch zu Schritt 9

    access_token = Wird zur Verwendung der CarData API genutzt

    refresh_token = Token mit dem alle Tokens erneuert werden können

    id_token = Das Passwort für MQTT


    Abschließend könnt ihr die Daten mit dem MQTTX Client testen.

    Hier eine Anleitung:

    CarData Customer Portal

    Für den Subscriber verwendet man seine gcid/VIN, also "12345678-1234-1234-123456789012/WBA1AB23456CD78901".

    Anschließend kann man ein Update per MyBMW App anstoßen, z.B. das Fahrzeug abschließen.
    Nur sollte man die Datenpakete erhalten.


    Im zweiten Post füge ich noch eine Liste der verfügbaren Datenpunkte ein.

    Edit: Leider ist die Gesamtliste aller verfügbaren Punkte zu lang, daher nur die Daten welche mein Auto bisher sendet.


    Quelle Skript:

    BMW G21 ///M340i xDrive Touring MildHybrid [05/2022] - Individual Verde Ermes - das grüne Biest - Instagram: @VM340 & @MOcode_nrw


    Ich biete weder Diagnose noch Codierungen im Raum Dortmund / NRW an, daher bitte nicht melden.

    3 Mal editiert, zuletzt von MichaelNRW ()

  • Leider passt die gesamte Tabelle mit allen verfügbaren Funktionen nicht in einen Post.

    Ebenso unterstützt mein Fahrzeug aktuell nur einen Bruchteil der Funktionen.

    Keine Ahnung, ob das evtl. auch an meiner iStufe liegt (11.2022) oder generell an OS7.


    vehicle.cabin.climate.timers.weekdaysTimer2.action = "deactive"

    vehicle.vehicle.travelledDistance = 0 (km)

    vehicle.chassis.axle.row2.wheel.right.tire.pressure = 250 (kpa)

    vehicle.cabin.climate.timers.weekdaysTimer1.action = "deactive"

    vehicle.cabin.door.status = "SECURED"

    vehicle.cabin.infotainment.navigation.currentLocation.heading = 360 (degrees)

    vehicle.drivetrain.fuelSystem.level = 0 (percent)

    vehicle.cabin.window.row1.driver.status = "CLOSED"

    vehicle.cabin.door.row1.driver.isOpen = false

    vehicle.vehicle.preConditioning.isRemoteEngineRunning = false

    vehicle.body.hood.isOpen = false

    vehicle.body.trunk.isOpen = false

    vehicle.cabin.door.row2.driver.isOpen = false

    vehicle.chassis.axle.row1.wheel.left.tire.pressure = 240 (kpa)

    vehicle.cabin.sunroof.status = "CLOSED"

    vehicle.chassis.axle.row2.wheel.left.tire.pressure = 250 (kpa)

    vehicle.vehicle.preConditioning.activity = "INACTIVE"

    vehicle.cabin.climate.timers.overwriteTimer.action = "deactive"

    vehicle.cabin.climate.timers.weekdaysTimer2.minute = 0 (min)

    vehicle.cabin.door.row2.passenger.isOpen = false

    vehicle.vehicle.preConditioning.isRemoteEngineStartAllowed = true

    vehicle.cabin.door.row1.passenger.isOpen = false

    vehicle.vehicle.preConditioning.error = "OK"

    vehicle.cabin.window.row2.driver.status = "CLOSED"

    vehicle.drivetrain.lastRemainingRange = 999 (km)

    vehicle.drivetrain.fuelSystem.remainingFuel = 40 (l)

    vehicle.chassis.axle.row1.wheel.right.tire.pressure = 240 (kpa)

    vehicle.cabin.sunroof.overallStatus = "CLOSED"

    vehicle.vehicle.preConditioning.remainingTime = 0 (min)

    vehicle.cabin.climate.timers.weekdaysTimer2.hour = 7 (h)

    vehicle.cabin.infotainment.navigation.currentLocation.longitude = 7.xyz (degrees)

    vehicle.cabin.climate.timers.overwriteTimer.minute = 30 (h) ← wirkt inkonsistent; evtl. sollte das „min“ sein

    vehicle.cabin.infotainment.navigation.currentLocation.latitude = 51.xyz (degrees)

    vehicle.cabin.climate.timers.overwriteTimer.hour = 21 (h)

    vehicle.cabin.sunroof.tiltStatus = "CLOSED"

    vehicle.cabin.window.row2.passenger.status = "CLOSED"

    vehicle.vehicle.timeSetting = "utc"

    vehicle.body.trunk.window.isOpen = false

    vehicle.body.trunk.door.isOpen = false

    vehicle.cabin.window.row1.passenger.status = "CLOSED"

    vehicle.cabin.climate.timers.weekdaysTimer1.hour = 7 (h)

    vehicle.cabin.climate.timers.weekdaysTimer1.minute = 0 (min)

    vehicle.chassis.axle.row2.wheel.right.tire.pressureTarget = 270 (kpa)

    vehicle.chassis.axle.row1.wheel.right.tire.pressureTarget = 270 (kpa)

    vehicle.chassis.axle.row2.wheel.left.tire.pressureTarget = 270 (kpa)

    vehicle.chassis.axle.row1.wheel.left.tire.pressureTarget = 270 (kpa)

    vehicle.vehicle.deepSleepModeActive = false

    BMW G21 ///M340i xDrive Touring MildHybrid [05/2022] - Individual Verde Ermes - das grüne Biest - Instagram: @VM340 & @MOcode_nrw


    Ich biete weder Diagnose noch Codierungen im Raum Dortmund / NRW an, daher bitte nicht melden.

    Einmal editiert, zuletzt von MichaelNRW ()

  • Sehr cool, ich nutze auch OpenHab und bin für neue Integrationen immer zu begeistern! :thumbsup:


    Bin mal gespannt welche Daten du anzapfen wirst. Oft läuft so etwas darauf raus, dass man sich die native App in OpenHab oder sonst wo nachbaut und der Nutzen hält sich damit in Grenzen, aber ich lasse mich überraschen.

    Gut, man könnte vielleicht im Wohnzimmer die Farbe Beleuchtung mit der Drehzahl des Motors synchronisieren, aber sonst fällt mir auf die Schnelle nichts ein. :P

  • Bisher habe ich mir die Daten wie Kilometerstand, Standort und Tankinhalt in eine InfluxDB schreiben lassen.

    So kann ich nachträglich den Kilometerstand von Service oder sonstigen Änderungen erfassen, weil ich das gerne vergesse.


    Ebenso habe ich mir eine Benachrichtigung gebaut, die mir Nachrichten per Telegram sendet, wenn sich das Fahrzeug bewegt.

    Diese Benachrichtigungen nutze ich dann z.B. wenn das Fahrzeug in der Werkstatt ist.

    Ich sag nur Probefahrt zur Mittagspause...

    BMW G21 ///M340i xDrive Touring MildHybrid [05/2022] - Individual Verde Ermes - das grüne Biest - Instagram: @VM340 & @MOcode_nrw


    Ich biete weder Diagnose noch Codierungen im Raum Dortmund / NRW an, daher bitte nicht melden.

  • Für homeassistant gibts bereits ein addon welches von Michael als Quelle verlinkt wurde.


    Leider per cardata api keine aktionen mehr.

    BMW G21 320d xDrive M Sport - Nachrüstungen: 02NH - M Sportbremse, 0319 - Innenspiegel mit integriertem Garagentoröffner, 03DN - M Performance Frontziergitter Iconic Glow, 0459 - Sitzverstellung elektrisch mit Memory, 05DN - Parking Assistant Plus, 06DR - BMW Drive Recorder, 07M9 - BMW Individual Hochglanz Shadow Line mit erweiterten Umfängen, K235 - Anhängerkupplung abnehmbar


    BMW U11 X1 25e xDrive xLine

  • Geil, muss ich direkt ausprobieren. Dann müsste ich irgendwie auch hinbekommen, dass sich meine Tiefgarage öffnet, wenn mein Fahrzeug im GeoFence ankommt (länger als 2s 10m Radius um Garage, solotrigger, rücksetzen erst nach verlassen 100m Radius für länger als 100s)

    Danke für den Beitrag.

  • Gerne mal mitteilen, welche Daten ihr so erfassen könnt.

    Im besten Fall liegt es nur an der iStufe...
    Dann würde ich mal über ein Update nachdenken.

    BMW G21 ///M340i xDrive Touring MildHybrid [05/2022] - Individual Verde Ermes - das grüne Biest - Instagram: @VM340 & @MOcode_nrw


    Ich biete weder Diagnose noch Codierungen im Raum Dortmund / NRW an, daher bitte nicht melden.

  • Piwi87 weißt wovon die unterstützten Daten abhängig sind?

    Modell und iStufe?

    Laut Spezifikation gibt es folgende Werte, allerdings bekomme ich füt mein Fahrzeug keine Daten…

    Mit der alten inoffiziellen Schnittstelle hat es noch geklappt, was bedeutet, dass mein Fahrzeug die Daten grundsätzlich liefert…


    vehicle.isMoving = Ob das Fahrzeug in Bewegung ist
    vehicle.channel.ngtp.timeVehicle = Zeitstempel wann das letzte Datenpaket vom Auto versendet wurde
    vehicle.status.serviceDistance.next = Kilometer bis zum nächsten Service
    Was der nächste Service ist -> Kein Datenpunkt dokumentiert





    Ich habe die Integration für openHAB mal dokumentiert:

    Connect to new BMW CarData service through MQTT
    Hi there, based on the discussion in the topic of the now deprecated MyBMW binding, i created a solution to receive data through the new MQTT datastream. 0.…
    community.openhab.org

    BMW G21 ///M340i xDrive Touring MildHybrid [05/2022] - Individual Verde Ermes - das grüne Biest - Instagram: @VM340 & @MOcode_nrw


    Ich biete weder Diagnose noch Codierungen im Raum Dortmund / NRW an, daher bitte nicht melden.

  • also ich hab jetzt leider den 3 ned mehr, hat mei sis.


    Allerdings hab ich am anfang beim x1 nur 20 werte bekommen, dann ca 70 und jetzt schon bei 81. wird immer mehr.

    also für ha funzt es.


    es wird anscheinend auch nun mit bimmerconnected zusammen gearbeitet, siehe issue auf github.

    BMW G21 320d xDrive M Sport - Nachrüstungen: 02NH - M Sportbremse, 0319 - Innenspiegel mit integriertem Garagentoröffner, 03DN - M Performance Frontziergitter Iconic Glow, 0459 - Sitzverstellung elektrisch mit Memory, 05DN - Parking Assistant Plus, 06DR - BMW Drive Recorder, 07M9 - BMW Individual Hochglanz Shadow Line mit erweiterten Umfängen, K235 - Anhängerkupplung abnehmbar


    BMW U11 X1 25e xDrive xLine

  • Allerdings hab ich am anfang beim x1 nur 20 werte bekommen, dann ca 70 und jetzt schon bei 81. wird immer mehr.

    Gut zu wissen, danke.

    Wahrscheinlich muss ich nochmal fahren und vorher einen Logger starten.

    BMW G21 ///M340i xDrive Touring MildHybrid [05/2022] - Individual Verde Ermes - das grüne Biest - Instagram: @VM340 & @MOcode_nrw


    Ich biete weder Diagnose noch Codierungen im Raum Dortmund / NRW an, daher bitte nicht melden.