Anzeige von BMW-Fahrzeugdaten mit Hilfe von bimmer_connected

Begonnen von Jmr008, 22 Mai 2023, 13:39:50

Vorheriges Thema - Nächstes Thema

satprofi

Zitat von: isy am 17 September 2025, 15:08:22Bin damit zu HA gewechselt

dort klappts ohne cardata? verbindung steht schon, nur daten kommen keine noch
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram

isy

Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

Nachtrag:
Abfrage von Änderungen aktivieren
Ob Home Assistant Entitäten von BMW Connected Drive automatisch auf Zustandsänderungen abfragen soll.


Habe ich aktiviert
Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

HA geht jetzt auch nicht mehr.
Siehe Git. Vermutung: Das Modul muss auf die neue API umgestellt werden. Bei BMW gibt es dazu entsprechende Hinweise.  Die Nutzung wird wohl unentgeltlich sein.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Prof. Dr. Peter Henning

Bitte diesen Thread verschieben in den Forumsbereich "Wallboxen und E-Fahrzeuge"

LG

pah

pldemon

Hallo,

man kann die neue API recht einfach in Fhem einbinden. Man muss sich dazu bei BMW anmelden und CarData einschalten. Danach der Anleitung auf der Seite von BMW folgen: https://bmw-cardata.bmwgroup.com/customer/public/api-documentation/Id-CarData-API. Im Grunde muss man folgendes machen:

1.) CarData API einschalten unter https://www.bmw.de/de-de/mybmw/vehicle-overview
- Zugang zur CarData beantragen
- CarData Stream

2.) Token holen
DEIN_CHALLENGE und DEIN_VERIFIER könnt ihr so erstellen:
python3 - << 'PY'
import os, base64, hashlib
ver = base64.urlsafe_b64encode(os.urandom(32)).rstrip(b'=').decode()
chal = base64.urlsafe_b64encode(hashlib.sha256(ver.encode()).digest()).rstrip(b'=').decode()
print("VERIFIER="+ver)
print("CHALLENGE="+chal)
PY

danach

curl --request POST \
--url https://customer.bmwgroup.com/gcdm/oauth/device/code \
--header 'Accept: application/json' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data client_id=CLIENT_ID_AUS_DEM_PORTAL \
--data response_type=device_code \
--data 'scope=authenticate_user openid cardata:streaming:read cardata:api:read' \
--data code_challenge=DEIN_CHALLENGE \
--data code_challenge_method=S256

3.) In der Antwort befindet sich ein Link mit einer ID. Diesen Link klicken. Alternativ die Daten manuell unter "Gerät athentifizieren" im BMW-Portal eintragen

4.) Tokens abrufen
curl --request POST \
--url https://customer.bmwgroup.com/gcdm/oauth/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data client_id=CLIENT_ID_AUS_DEM_PORTAL \
--data device_code=DEVICE_CODE_AUS_SCHRITT2 \
--data grant_type=urn:ietf:params:oauth:grant-type:device_code \
--data code_verifier=DEIN_VERIFIER

5.) Stream konfigurieren unter "CarData Streaming" -> "Datenauswahl ändern"
6.) Verbindungsdetails anzeigen und Topic sowie Benutzername merken

5.) Device in Fhem einlegen
define BMW_MQTT MQTT2_CLIENT customer.streaming-cardata.bmwgroup.com:9000
attr BMW_MQTT SSL 1
attr BMW_MQTT autocreate simple
attr BMW_MQTT clientId fhem_mqtt
attr BMW_MQTT qosMaxQueueLength 0
attr BMW_MQTT subscriptions BENUTZERNAME_AUS_DEM_PORTAL/TOPIC_AUS_DEM_PORTAL
attr BMW_MQTT username MQTT_BMW_USERNAME

6.) Passwort setzen
set BMW_MQTT password ID_TOKEN_AUS_SCHRITT4
Fhem erstellt beim erfolgreichen "open" ein neues MQTT-Davice unter dem Namen "fhem_mqtt". Sofern alles funktioniert, solltet ihr in "fhem_mqtt" eure ausgewählten  Streaming-Optionen sehen. Bitte beachtet, dass der Token nur eine Stunde gültig ist. Um ihn zu verlängern müsst ihr folgendes machen:

curl --request POST \
--url https://customer.bmwgroup.com/gcdm/oauth/token \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data grant_type=refresh_token \
--data refresh_token=REFRESH_TOKEN_AUS_SCHRITT4 \
--data client_id=CLIENT_ID_AUS_DEM_PORTAL

Gruß

Max123476


Das ist alles sehr klar, aber wie Sie erwähnt haben, ist das Token nur eine Stunde gültig. Wie haben Sie die automatische Token-Erneuerung in FHEM implementiert?

pldemon

Zitat von: Max123476 am 29 September 2025, 16:44:48Das ist alles sehr klar, aber wie Sie erwähnt haben, ist das Token nur eine Stunde gültig. Wie haben Sie die automatische Token-Erneuerung in FHEM implementiert?

Habe mir schnell ein Script zusammengebaut, welches ich via Cron jede 50Minuten aufrufe. Leider ist es sehr zusammen gehackt und enthält meine lokalen IDs, weshalb ich es erst aufräumen müsste, damit ich es teilen kann...

satprofi

auch sind nur 20 abfragen täglich erlaubt. wie steuert man das?
gruss
-----------------------------------------------------------------------
beelink miniPC - Fhem 6.x CUL 868, FS20, NetIO230 CUL 433
HMLAN, HM-CC-RT-DN,Homematic Actoren,LD382A,Telegram