BMW connected drive in IPS?

Ok war etwas komplizierter ist aber jetzt gemerged.

Nach einem bestimmten Update vom Modul, ist mein Verlauf nicht mehr in Tabellenform?

Gibt es ne Möglichkeit das wieder herzustellen?

Das Problem gab es nicht nur bei mir, auch in diesem Beitrag:


![bmw6.jpg|1586x547](upload://zDwZrYmdZJCisSK1ZxVhiLZNdyz.jpeg)

Was auch nicht funktioniert ist die korrekte Status Anzeige  Verschluss und  Verriegelung. Das wäre mir wichtig weil ich vorhabe diesen Status in meine Alarmanlage einzubinden.[/QUOTE]

Sodele. Ich kann jetzt mit einem 530e bzgl. der PHEV helfen. Tank etc. ist ja da. Jetzt wären infos bzgl. der Batterien hilfreich :wink:

Kannst ja mal sagen was in der Interface Variable so an Infos steht, dann kann man das ja entsprechend in Variablen ablegen.

Hallo zusammen.

Jetzt hab ich doch endlich auch einer und bekomme nur das als Antwort:


TXT: 12.04.2018 19:18:05.00 |                  BMW | hybrid selected
TXT: 12.04.2018 19:18:25.00 |                  BMW | use server location Switzerland
TXT: 12.04.2018 19:18:25.00 |                  BMW | server url: https://www.bmw-connecteddrive.ch
TXT: 12.04.2018 19:18:25.00 |                  BMW | Send to url: https://www.bmw-connecteddrive.ch/api/vehicle/dynamic/v1/WBJA91020B032177?offset=-120
TXT: 12.04.2018 19:18:25.00 |                  BMW | 'Content-Type: application/json' , 'Authorization: Bearer ' B4G2KiZiPdxT315s9Spt6pGUnT7HuF3C
TXT: 12.04.2018 19:18:25.00 |         BMW Response | got http-code 400
TXT: 12.04.2018 19:18:25.00 |         BMW Response | <US>?<BS><NUL><NUL><NUL><NUL><NUL><NUL><ETX><ETX><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL>

Hat mir jemanden einen Tip. Habe mich ja sooo gefreut auf das Modul (ist ja etwas meine Schuld).
Danke
Danny

Welches Modell bzw. Baujahr? Kann sein das die V2 API benötigt wird, dann wird es etwas kompliziert zumindest den i Remote API Key und das i Remote API Secret raus zu bekommen.

Hier wird z.B. beschrieben wie man an Auth string kommt, dies ist aber viel Gebastel. Wer eine einfacher Idee hat ist gerne für einen Input willkommen.

http-code 400 ist ja ‚bad request‘, von daher würde ich kein Authentifizierungs-Problem vermuten.

Der http-request sieht aber normal aus, allerdings ist das ein Schweizer BMW-Server (@richimaint: ist das richtig, wohnst Du in der Schweiz?).

@demel42…Nein ich wohne nicht in der Schweiz
Warum?

weil in dem Mitschnitt der http-Requests steht, das ein Schweizer Server verwendet wird. Stell doch in dem Konfigurationsformular der Instanz das Gebiet mal auf Deutschland.
Keine Ahnung, ob das was hilft, aber richtiger ist es auf jeden Fall.

du meinst bestimmt dmeyer8803, bei ihm steht im Mitschnitt der CH Server drin, ich hatte ein anderes Problem geschrieben

Gruß Marco

ups, da hab ich wohl den überblick verloren :banghead:

@dmeyer8803: dann die Frage an dich: wohnst du in der Schweiz?

Bei dem Hybrid stehen alle notwendigen Daten in der „Interface Dynamic“ Variablen des Moduls. Elektrische Reichweite, Akkustand, Anschlußstatus, usw…
Aktuell hole ich mir mit einem Skript die Daten in eigene Variablen. Wäre natürlich nett, wenn das Modul standardmäßig für Hybride/i-Modelle hier Variablen anlegen würde (habe eine PN an Fonzo mit den Daten geschickt).

So noch einmal…wie bekomme ich im Verlauf die Tabellenform wieder hin?
Das Bild von meinem BMW wird auch nicht mehr eingelesen.
Gruß
Marco

Mal eine Frage am Rande, das Grundgerüst des Moduls steht ja. Wenn dann geht es jetzt am Ergänzungen von Variablen bzw. Anpassungen in der Visualisierung. Es müssen also nur Dinge im Modul ergänzt werden. Da ich selber keinen BMW mehr fahre ist es für mich selber nicht möglich das auch immer in der Praxis zu testen.

Wer von Euch hätte den Lust, der ein bisschen mit PHP Modulen umgehen kann, das Modul weiter zuführen? Ist sicher für jemand einfacher der einen BMW besitzt. Ansonsten kann ich auch mein Senf dazu geben nur ohne dies selbst testen zu können gestaltet sich das schwierig.

Ja, ich wohn in der Schweiz. Hört man halt nicht im Forum. :slight_smile:
Ich probiert mal mit dem Deutschen Server.
Das Modell ist recht neu (Dez 2017/530e).

Gruss
Danny

Der HTTP Error 400 kommt bei mir mit jedem Server, egal ob CH, DE oder EUR.

Danny

noch eine, sicherlich dumme Frage, aber der Zugriff mit der BMW-App geht? Wenn nicht wären ggfs. die Remote-Dienste nicht oder nicht vollständig freigeschaltet. Macht man (meiner Erinnerung nach) im Auto bzw. über die BMW-Webseite.

Was steht eigentlich im Debug der Instanz, wenn Du einen neuen Access-Token holst (Button auf der Config-Seite)?

Ja, via App und Web geht alles, muss also freigeschaltet sein. Ich kann so alles ausführen.

Der Request Token scheint auch zu gehen:


TXT: 14.04.2018 21:38:16.00 |       BMW Postfields | username=danny%4xxx.ch&password=xxxxx&client_id=dbf0a542-ebd1-4ff0-a9a7-55172fbfce35&redirect_uri=https%3A%2F%2Fwww.bmw-connecteddrive.com%2Fapp%2Fdefault%2Fstatic%2Fexternal-dispatch.html&response_type=token&locale=DE-de
TXT: 14.04.2018 21:38:16.00 |                  BMW | access_token: PiozRIg4yE07HX7PkItGUHp7kROLVvcd
TXT: 14.04.2018 21:38:16.00 |                  BMW | Bearer expires in: 7199s
TXT: 14.04.2018 21:38:16.00 |                  BMW | set access_token: PiozRIg4yE07HX7PkItGUHp7kROLVvcd
TXT: 14.04.2018 21:38:16.00 |                  BMW | set token expiration: 1523741835
TXT: 14.04.2018 21:38:16.00 |                  BMW | hybrid selected

Danke euch für alle Tips
Danny

Hallo,

ja, sieht so aus.

Es ist etwas schwierig, aus der Ferne zu Debuggen (da bräuchte ich ja Deine Zugangsdaten) …

Die BMW-API ist keine offizielle API sondern durch reverse-engennering entstanden (also viel Ausprobieren), Fonzo hat ja schon auf Seiten verwiesen, wo das gemacht wurde.

Um auszuschliessen, das es irgendwie mit den Abläufen im Modul zu tun hätte, könntest Du folgendes machen: ich habe die wesentlichen Aufrufe (Token holen und Kommandos) in ein Script gepackt.


<?php

// siehe auch:
//   https://github.com/edent/BMW-i-Remote
//   https://github.com/frankjoke/ioBroker.bmw
//   https://shkspr.mobi/blog/2015/11/reverse-engineering-the-bmw-i3-api

// Zugangsdaten BMW
$user       = '<username>';
$password   = '<password>';
$vin        = '<vin>';

// Token anfordern
$auth_host  = "customer.bmwgroup.com";
$auth_url = 'https://' . $auth_host . '/gcdm/oauth/authenticate';
$auth_postfields = [
        'username'      =>  $user,
        'password'      =>  $password,
        'client_id'     =>  'dbf0a542-ebd1-4ff0-a9a7-55172fbfce35',
        'redirect_uri'  =>  'https://www.bmw-connecteddrive.com/app/default/static/external-dispatch.html',
        'response_type' =>  'token',
        'locale'        =>  'DE-de'
    ];
$auth_header = [
        'Content-Type: application/x-www-form-urlencoded'
    ];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $auth_url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $auth_header);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($auth_postfields));
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "httpcode=$httpcode
";
if ($httpconde != 200) {
    return;
}

echo "response=$response
";

preg_match('/access_token=([\w\d]+).*token_type=(\w+).*expires_in=(\d+)/', $response, $matches);
$accesstoken = $matches[1];

echo "accesstoken=$accesstoken
";

// Abfrage
//$qry_host = "b2vapi.bmwgroup.com";
//$qry_host = "www.bmw-connecteddrive.com";
$qry_host = 'www.bmw-connecteddrive.de';
$qry_url = '/api/me/vehicles/v2';
//$qry_url = '/api/vehicle/v2/' . $vin . '/state';
//$qry_url = '/api/vehicle/remoteservices/v1/' . $vin . '/history';
//$qry_url = '/api/vehicle/remoteservices/v1/' . $vin . '/state/execution';
//$qry_url = '/api/vehicle/dynamic/v1/' . $vin . `?offset=-120';
//$qry_url = '/api/vehicles/efficiency/v1/' . $vin . `?offset=-120';

$qry_url = 'https://' . $qry_host . $qry_url;
$qry_postfields = [
    ];
$qry_header = [
        'Authorization: Bearer ' . $accesstoken,
        'Content-Type: application/json;charset=utf-8',
    ];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $qry_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $qry_header);
if ($qry_postfields != []) {
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($qry_postfields));
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

echo "httpcode=$httpcode
";
if ($httpconde != 200) {
    return;
}
echo "response=$response
";

Das könntest Du mal als Script anlegen und ausführen, wobei du auch die paar Kommandos ($qry_url) probieren könntest. In den Seiten, die ich in dem Script angegeben habe, sind noch ein paar Kommandos enthalten.

Es ist wie gesagt, viel zu testen, ob es auf eine Anfrage ein brauchbare Antwort gibt.

Wenn Du Lust hast, dann probier es aus und melde Dich, wenn du ein Ergebnis hast. Das kann man dann weiter verfolgen und in einem 2. Schritt dann in das Modul integrieren.

Gruß
Christian

Hallo Coyote,

hast Du deine BMW mit dem Modul verheiraten können? dmeyer8803 hat anscheinend das gleiche Modell und Probleme mit der Anbindung …
Kannst Du irgendwas Erhellendes beisteuern?

Ich habe leider keinen Hybrid-BMW, nur ganze „normale“, die mit dem Modul auch soweit funktionieren.

Gruß
Christian