NEWS
Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten
-
@lemonbiter
Danke dir.
Du hast aber nur ein Fahrzeug im Connected Drive Portal oder?Die CBS Daten in deiner Log sind die Abfragen für den Servicebedarf, in dem Fall das Datum cbsDueDate.
Warum es die Daten in deinem Fall nicht gibt, verstehe ich leider auch nicht.
Ich hab keine Ahnung wie viele unterschiedliche Antworten es von BMW auf diese Abfragen gibt. -
-
Es gibt vier API Endpunkte
- Token abfrage - geht bei dir
- Fahrzeugdaten abfragen - geht bei dir
- Befehle senden - geht bei dir
- Status inkl Standort, Servicebedarf abfragen - geht bei dir nicht.
Frag mich jetzt nicht warum das nicht geht.. ist auf jeden Fall seltsam.
Ich müsste mir dazu mal die JSON Antwort ansehen.Magst mal bitte das Script starten und schauen was da im log zurück kommt?
var https = require("https"); var request = require("request"); var options = { url: 'https://b2vapi.bmwgroup.com/webapi/v1/user/vehicles/'+(getState("0_userdata.0.BMW.Fahrzeug.Fahrgestellnummer").val)+'/status', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, auth: { bearer: (getState("0_userdata.0.BMW.Token").val)} }; function callback(error,response,body){ var result = JSON.parse(body); console.log(body); }; request.get(options, callback);
-
-
@lemonbiter
probiers bitte mit dem JS das ich oben ausgetauscht habe.
Dürfte zwar keinen Unterschied machen, aber da frag ich direkt den Body ab und nicht das JSON result -
Mist, jetzt hast Du mich leider verloren... Ich weiss leider nicht was Du meinst... Welches JSON?? WO? WIE? WAS?
MEA CULPA
-
nimm das script, kopiere es in ein leeres Javascript (kein Blockly) und starte es.
Dann sollte hoffenltich mehr kommen als nur der cbs Fehlervar https = require("https"); var request = require("request"); var options = { url: 'https://b2vapi.bmwgroup.com/webapi/v1/user/vehicles/'+(getState("0_userdata.0.BMW.Fahrzeug.Fahrgestellnummer").val)+'/status', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, auth: { bearer: (getState("0_userdata.0.BMW.Token").val)} }; function callback(error,response,body){ var result = JSON.parse(body); console.log(body); }; request.get(options, callback);
-
NÜX...
-
für mal unter
console.log(body);
noch hinzu:
console.log(response);
console.log(error);ach ja.. und schalte mal das BMW Blocky vorher aus. Sonst kommen die Fehlermeldungen ja von dem
-
Jetzt bin ich ganz weg...MANNOOOOOH
-
so?
Falls so richtig... Ich habe das Blockly aus und dieses Java gestartet... KEIN EINTRAG im Log
Danke für Dein Engagement!!
-
ja genau
-
Ich habe das Blockly aus und dieses Java neu gestartet... KEIN EINTRAG im Log
Danke für Dein Engagement!!
-
Bei mir kommen auch 2 Fehler im Log...
javascript.0 2021-02-08 16:50:00.199 error (15744) Error in request callback: SyntaxError: Unexpected end of JSON input javascript.0 2021-02-08 16:50:00.164 error (15744) Error in request callback: SyntaxError: Unexpected end of JSON input
Im Status ist so gut wie nichts gefüllt...
mit der letzen Version , ging das alles noch..
-
Danke für den Hinweis
Ich schau es mir an -
@strobelix
Saugeil ! Vielen Dank für das Script ! Endlich kann die bessere Hälfte wieder mit Siri die Klima starten !Klappt bei meinem i3 jedoch erst nachdem ich cbsDueDate auskommentiert habe.
cbsDueDate hat bei mir auch die Fehlermeldung geworfen und alle folgenden Abfragen abgebrochen: (888) Error in request callback: TypeError: Cannot read property 'cbsDueDate' of undefined -
@qwertz
Danke für den Hinweis mit dem cbsDueDate.
Welches hast du denn auskommentiert? Gibt ja mehrere.Dann kann ich den Fehler vielleicht nachvollziehen. Bei mir läuft es nämlich
-
Hi !
Diese beiden Zeilen mag mein i3 (ohne Range Extender) nicht und habe ich auskommentieren müssen:
//setState("0_userdata.0.BMW.Servicebedarf.Hauptuntersuchung.Datum", ''+result.cbsData[3].cbsDueDate, true); //setState("0_userdata.0.BMW.Servicebedarf.Hauptuntersuchung.Status", ''+result.cbsData[3].cbsState, true);
So sieht der komplette Dump aus, wenn ich dein o.g. JS-Script (ohne Blockly) laufen lasse (Der BMW denkt TÜV sei abgelaufen, weil die beim letzten TÜV den Zähler nicht zurückgesetzt haben)
{"vehicleStatus": {"vin":"xxxxxxxxxxxxxxxxxxx", "mileage":34106, "updateReason":"CHARGING_DONE", "updateTime":"2021-02-11T08:27:34+0000", "doorDriverFront":"CLOSED", "doorDriverRear":"CLOSED", "doorPassengerFront":"CLOSED", "doorPassengerRear":"CLOSED", "windowDriverFront":"CLOSED", "windowDriverRear":"CLOSED", "windowPassengerFront":"CLOSED", "windowPassengerRear":"CLOSED", "trunk":"CLOSED", "rearWindow":"INVALID", "hood":"CLOSED", "doorLockState":"SECURED", "parkingLight":"OFF", "positionLight":"OFF", "remainingFuel":0, "remainingRangeElectric":80, "remainingRangeElectricMls":49, "maxRangeElectric":80, "maxRangeElectricMls":49, "connectionStatus":"CONNECTED", "chargingStatus":"FINISHED_FULLY_CHARGED", "chargingLevelHv":100, "lastChargingEndReason":"CHARGING_GOAL_REACHED", "lastChargingEndResult":"SUCCESS", "position":{"status":"DRIVER_DISABLED"}, "internalDataTimeUTC":"2021-02-11T08:27:34", "singleImmediateCharging":false, "chargingConnectionType":"CONDUCTIVE", "chargingInductivePositioning":"NOT_POSITIONED", "vehicleCountry":"DE", "checkControlMessages":[], "cbsData":[ {"cbsType":"VEHICLE_TUV", "cbsState":"OVERDUE", "cbsDueDate":"2020-11", "cbsDescription":"Statutory vehicle inspection overdue!"}, {"cbsType":"BRAKE_FLUID", "cbsState":"OK", "cbsDueDate":"2021-08", "cbsDescription":"Next change due at the latest by the stated date."}, {"cbsType":"VEHICLE_CHECK", "cbsState":"OK", "cbsDueDate":"2021-08", "cbsDescription":"Next visual inspection due when the stated distance has been covered or by the stated date."} ], "DCS_CCH_Activation":"NA", "DCS_CCH_Ongoing":false}}
Besten Dank nochmal !
-
@qwertz
Danke dir. Bei dir sind die CBSDaten anders angeordnet als bei mir.
Bei mir kommt erst Öl, Bremsflüssigkeit, Fahrzeucheck und dann TÜV.
Da ich beim ÖL (also dem cbsData[0]) die Restkilometer abfrage, und das bei dir der TÜV ist, welcher keine Restkilometer hat, ist der Fehler natürlich nachvollziehbar.Du müsstest also die Zahlen in "cbsData[X]" umsortieren
Bei
Hauptuntersuchung statt cbsData[3] muss das bei dir [0] sein
und Ölservice [0]auskommentieren, gibt es wohl bei dir nicht.Mein CBS ist so sortiert:
"cbsData": [ { "cbsType": "OIL", "cbsState": "OK", "cbsRemainingMileage": 16000, "cbsDueDate": "2022-02", "cbsDescription": "Next service due when the stated distance has been covered or by the specified date." }, { "cbsType": "BRAKE_FLUID", "cbsState": "OK", "cbsDueDate": "2023-02", "cbsDescription": "Next change due at the latest by the stated date." }, { "cbsType": "VEHICLE_CHECK", "cbsState": "OK", "cbsRemainingMileage": 47000, "cbsDueDate": "2024-02", "cbsDescription": "Next visual inspection due when the stated distance has been covered or by the stated date." }, { "cbsType": "VEHICLE_TUV", "cbsState": "OK", "cbsDueDate": "2023-05", "cbsDescription": "Next statutory vehicle inspection due by the stated date." } ],
-
@strobelix
Ach so. Ja Öl gibts beim Elektroauto nicht. Dann weiß ich jetzt woran es liegt.Ich hoffe mal, dass BMW zukünftig nicht zu viel an der API bastelt. Auf jeden Fall kann ich als Script-Kiddy mit deiner Lösung flexibler auf Änderungen reagieren, als mit dem bisherigen Adapter.
Besten Dank !
P.S. Ich nutze ansonsten die iOS "BMW Connected" App. Hat jemand die neue "MyBMW" App. Ändert sich durch die Nutzung der neuen App die API ?