BMW connected drive in IPS?

Oh mann, und ich dachte ich wäre fertig :smiley:

Fonzo, da hast Du Dich ja auch ganz schön ins Zeug gelegt! Das Modul ist eine Kopie vom Doorbird, oder? Kommt an manchen Stellen noch durch :smiley: Aber auf den ersten Blick sieht es verdammt gut aus.

Vielleicht schaffe ich es heute noch zu testen - gebe Dir Bescheid!

Danke & Ciao
Pitti

Heißt, jetzt geht’s?

Hi Fonzo,

habe es jetzt doch gleich mal getestet - die Neugier :eek:

Folgende Meldung bekomme ich beim Fahrzeugdaten abholen …

Beim Token abholen kam nix, kann also auch nicht sagen ob erfolgreich oder nicht!

Ciao Pitti

Ja scheint so…jedenfalls habe ich einen Token.

Was ist denn der obere Teil mit dem Bild eine HTMLBox oder ein Medienelemen? Wie bekommt man denn das Bild geliefert als url oder base64?

Es ist eine HTMLBox. Das Bild ist eine url. Hier mal das JSON dazu (Ausschnitt):


string(28467) "{
  "vin" : "Wxxxxxxxxxxxxxx1",
  "angleUrls" : [ {
    "url" : "https://cosy.bmwgroup.com/cdp/cosySec?COSY-EU-100-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "angle" : 0
  },

Kannste damit was anfangen?

Lustiges Unterfangen wenn man selber nicht richtig testen kann ;), habe ich korrigiert.

Probiere mal


BMW_GetToken($instanceid);


<?
$token = BMW_GetToken(12618 /*[Systeme\ConnectedDrive\BMW X5]*/);
var_dump($token);			
			
?>

liefert => bool(false)

Jetzt kommt der Fehler nicht mehr, aber die Daten werden auch nur auf „0“ gesetzt.

Wahrscheinlich muss ich doch ein Fork machen, aber eigentlich muss ich gerade mit den Kindern Hausaufgaben machen :frowning:

Testen nebenher geht :smiley:

Kannst ja mal schauen ob


$angle = 30;
BMW_GetCarPictureForAngle($instanceid, $angle);

was sinnvolles zurück gibt?


<?
$token = BMW_GetToken(12618 /*[Systeme\ConnectedDrive\BMW X5]*/);
var_dump($token);

$angle = 30; 
$url = BMW_GetCarPictureForAngle(12618 /*[Systeme\ConnectedDrive\BMW X5]*/, $angle);
var_dump($url);  			
			
?>

liefert …


bool(false)

Notice:  Undefined property: stdClass::$vin in /var/lib/symcon/modules/IPSymconBMWConnectedDrive/BMW/module.php on line 425

Notice:  Undefined property: stdClass::$angleUrls in /var/lib/symcon/modules/IPSymconBMWConnectedDrive/BMW/module.php on line 428

Warning:  Invalid argument supplied for foreach() in /var/lib/symcon/modules/IPSymconBMWConnectedDrive/BMW/module.php on line 430

Notice:  Undefined variable: picture_url in /var/lib/symcon/modules/IPSymconBMWConnectedDrive/BMW/module.php on line 446
NULL

Bist Dir sicher das dass mit dem Token schon funzt? Debug Fenster liefert nicht sehr viel :frowning:

Anscheinend funktioniert es noch nicht sonst käme nicht false beim Token bei var_dump, muss mal noch mehr Debug Messages ergänzen. Bin jetzt erst mal unterwegs vielleicht komme ich heute Abend mal dazu mir das noch mal anzuschauen. Ansonsten kannst Du ja vielleicht mal schauen ob Du einen Fehler findest bzw. was Du anders machst um der Token zu holen.

Die Implementierung der CURLOPT_POSTFIELDS ist bei mir anders gelöst. Ich bin aber da nicht der größte PHP Fachmann. Du machst das über ein ARRAY und ich über einen String der die einzelnen Wertepare mit & verknüpft.
Wird ein Array automatisch so konvertiert?

Ich bin mir nicht sicher, eventuell verändert das den Header und es sollte durch als String mit & übergeben werden. Bin noch unterwegs kannst Du mal die Funktion isoliert in IPS testen und den Array vorher durch
PHP: http_build_query - Manual
jagen. Ich schaue mir das heute Abend noch mal näher an.

Voilà, und schon funzt es :wink:

Bei mir im Code war Username & password noch urlencoded, lief aber im Test mit „http_build_query“ auch ohne durch :wink:

Hallo Fonzo,

coole Sache.
Mit Deinem Modul bekomme ich, bei der Tokenabfrage, im Debug folgende Rückmeldung:

No remote token received - username or password might be wrong: HTTP/1.1 100 Continue<CR><LF><CR><LF>HTTP/1.1 401 Unauthorized<CR><LF>Date: Sun, 21 Jan 2018 15:32:24 GMT<CR><LF>Server: BMW Group API Gateway<CR><LF>Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, HEAD<CR><LF>Access-Control-Allow-Credentials: true<CR><LF>Access-Control-Allow-Headers: Authorization, Origin, X-c2b-Authorization, X-c2b-mTAN, X-Requested-With, X-c2b-Sender-Id, Content-Type, Accept, Cache-Control, KeyId<CR><LF>X-CorrelationID: Id-88b2645a6eff1502000000003d157a25 0<CR><LF>Client-Remote-IP: 93.242.194.30<CR><LF>X-NodeID: 02<CR><LF>X-Powered-By: JOY<CR><LF>Content-Type: application/json<CR><LF>Transfer-Encoding: chunked<CR><LF><CR><LF>{"error":"invalid_client","error_description":"Client authentication failed (unknown client)"}<LF>

Mit folgender Änderung sieht es schon besser aus:

		$data = array(
            'username' => $user,
            'password' => $password,
            'client_id' => $app_id,
            'redirect_uri' => 'https://www.bmw-connecteddrive.com/app/default/static/external-dispatch.html',
            'response_type' => 'token',
            'locale' => 'DE-de');
		$data = http_build_query($data) . "
";
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

Antwort ist:

standard, no electric selected

Bei der Abfrage der Werte habe ich dann aber:

curl error: 

Gruß
Attain

Ich habe mal die Türen ergänzt und die Änderung für den Token übernommen. Was versuchst Du für eine Funktion aufzurufen? Wo kommt da genau die Meldung? Bin da auf realitiv genaue Infos angewiesen, da ich selber nicht mit echten Daten testen kann.

var_dump (BMW_GetVehicleData(10049 /*[BMW Modul Test\BMW]*/));

Ergibt:

object(stdClass)#2 (2) {
  ["error"]=>
  string(13) "invalid_token"
  ["error_description"]=>
  string(87) "The access token provided is expired, revoked, malformed, or invalid for other reasons."
}

Attain

Ich habe mal noch ein Update hochgeladen.

Wenn Du


$bmw_id = 12345; // ObjectID BMW
$token = BMW_GetToken($bmw_id); 
var_dump($token); 

ausführst, kommt da ein Ergebnis?

Wenn da ein Token kommt kannst Du dann anschließend schauen ob dieser auch abgelegt wurde


$bmw_id = 12345; // ObjectID BMW
$savedtoken = IPS_GetProperty($bmw_id, "token");
var_dump($savedtoken);

$token_expiration = IPS_GetProperty($bmw_id, "token_expiration");
var_dump($token_expiration);

Sollst Du nicht posten, es geht nur darum ob Du was angezeigt bekommst.
Ansonsten hatte ich vergessen die Fahrgestellnummer (VIN) im Konfigurationsformular sichtbar zu machen, dafür gibt es jetzt ein Eingabefeld und dieses muss zwingend ausgefüllt werden.

Hi,

funktioniert beides:

script2

<?
$bmw_id = 10049 /*[BMW Modul Test\BMW]*/; // ObjectID BMW
$savedtoken = IPS_GetProperty($bmw_id, "token");
var_dump($savedtoken);

$token_expiration = IPS_GetProperty($bmw_id, "token_expiration");
var_dump($token_expiration);  

var_dump (BMW_GetVehicleData($bmw_id));
?>

gibt:

string(32) "32 BYTE TOKEN STRING"
int(1516578859)
object(stdClass)#2 (2) {
  ["error"]=>
  string(13) "invalid_token"
  ["error_description"]=>
  string(87) "The access token provided is expired, revoked, malformed, or invalid for other reasons."
}