Connected drive BMW: disponibilité sur le Market?

Les appels de l’API se font en https, il serait étonnant que sur iOS cela ne soit pas ainsi.

En effet !

Les données sont cryptées mais pas forcément les appels API. Et donc on arrive à trouver les adresses URLs
C’est ce que j’ai fait sur mon plugin Verisure :stuck_out_tongue_winking_eye:
Sur Android, tout est crypté !

Oui en effet mais pour les actions l’API utilisait une adresse unique (POST), l’action se trouvant dans le formulaire.

voici le json pour l’I3 de ma femme

object(stdClass)#28 (2) {
  ["attributesMap"]=>
  object(stdClass)#27 (57) {
    ["unitOfLength"]=>
    string(2) "km"
    ["remaining_range"]=>
    string(1) "0"
    ["vehicle_tracking"]=>
    string(4) "true"
    ["updateTime_converted"]=>
    string(16) "01.03.2022 07:49"
    ["door_driver_rear"]=>
    string(6) "CLOSED"
    ["beMaxRangeElectricKm"]=>
    string(3) "203"
    ["door_passenger_rear"]=>
    string(6) "CLOSED"
    ["beRemainingRangeFuelKm"]=>
    string(1) "0"
    ["Segment_LastTrip_time_segment_end_formatted_date"]=>
    string(10) "01.03.2022"
    ["door_driver_front"]=>
    string(6) "CLOSED"
    ["hood_state"]=>
    string(6) "CLOSED"
    ["charging_status"]=>
    string(10) "NOCHARGING"
    ["kombi_current_remaining_range_fuel"]=>
    string(1) "0"
    ["beMaxRangeElectric"]=>
    string(3) "203"
    ["beRemainingRangeElectricKm"]=>
    string(2) "95"
    ["mileage"]=>
    string(5) "00000"
    ["Segment_LastTrip_time_segment_end_formatted_time"]=>
    string(5) "00:00"
    ["Segment_LastTrip_time_segment_end_formatted"]=>
    string(16) "01.03.2022 00:00"
    ["unitOfEnergy"]=>
    string(3) "kWh"
    ["overall_energy_consumption"]=>
    string(6) "17.686"
    ["beRemainingRangeElectric"]=>
    string(2) "95"
    ["soc_hv_percent"]=>
    string(2) "50"
    ["single_immediate_charging"]=>
    string(5) "false"
    ["updateTime_converted_time"]=>
    string(5) "07:49"
    ["connectorStatus"]=>
    string(12) "DISCONNECTED"
    ["chargingHVStatus"]=>
    string(7) "INVALID"
    ["chargingLevelHv"]=>
    string(2) "50"
    ["unitOfCombustionConsumption"]=>
    string(7) "l/100km"
    ["DCS_CCH_Ongoing"]=>
    string(5) "false"
    ["gps_lat"]=>
    string(9) "00.000000"
    ["DCS_CCH_Activation"]=>
    string(4) "true"
    ["window_driver_front"]=>
    string(6) "CLOSED"
    ["Segment_LastTrip_ratio_electric_driven_distance"]=>
    string(3) "100"
    ["gps_lng"]=>
    string(8) "0.000000"
    ["condition_based_services"]=>
    string(30) "3,OK,2023-05,;100,OK,2023-05,;"
    ["window_passenger_front"]=>
    string(6) "CLOSED"
    ["lastChargingEndReason"]=>
    string(21) "CHARGING_GOAL_REACHED"
    ["updateTime_converted_date"]=>
    string(10) "01.03.2022"
    ["beRemainingRangeFuelMile"]=>
    string(1) "0"
    ["beRemainingRangeFuel"]=>
    string(1) "0"
    ["door_passenger_front"]=>
    string(6) "CLOSED"
    ["beChargingLevelHv"]=>
    string(2) "50"
    ["updateTime_converted_timestamp"]=>
    string(13) "1646120993000"
    ["remaining_fuel"]=>
    string(1) "0"
    ["heading"]=>
    string(3) "321"
    ["lsc_trigger"]=>
    string(12) "VEHCSHUTDOWN"
    ["door_lock_state"]=>
    string(7) "SECURED"
    ["updateTime"]=>
    string(23) "01.03.2022 07:49:53 UTC"
    ["beEnergyLevelHv"]=>
    string(6) "17.686"
    ["remaining_charging_time_minutes"]=>
    string(1) "0"
    ["trunk_state"]=>
    string(6) "CLOSED"
    ["battery_size_max"]=>
    string(4) "36.7"
    ["beRemainingRangeElectricMile"]=>
    string(2) "95"
    ["charging_connection_type"]=>
    string(10) "conductive"
    ["unitOfElectricConsumption"]=>
    string(9) "kWh/100km"
    ["lastUpdateReason"]=>
    string(12) "VEHCSHUTDOWN"
    ["Segment_LastTrip_time_segment_end"]=>
    string(23) "01.03.2022 00:00:00 UTC"
  }
  ["vehicleMessages"]=>
  object(stdClass)#26 (2) {
    ["ccmMessages"]=>
    array(0) {
    }
    ["cbsMessages"]=>
    array(2) {
      [0]=>
      object(stdClass)#25 (6) {
        ["date"]=>
        string(7) "2023-05"
        ["description"]=>
        string(56) "Prochain remplacement au plus tard à la date indiquée."
        ["id"]=>
        int(3)
        ["messageType"]=>
        string(3) "CBS"
        ["status"]=>
        string(2) "OK"
        ["text"]=>
        string(16) "Liquide de frein"
      }
      [1]=>
      object(stdClass)#24 (6) {
        ["date"]=>
        string(7) "2023-05"
        ["description"]=>
        string(109) "Prochain contrôle véhicule au plus tard au bout de la distance indiquée/au plus tard à la date indiquée."
        ["id"]=>
        int(100)
        ["messageType"]=>
        string(3) "CBS"
        ["status"]=>
        string(2) "OK"
        ["text"]=>
        string(19) "Contrôle véhicule"
      }
    }
  }
}

Regardez du coté du github de bimmerconnected cité au dessus.
Il y a toutes les actions (appel de phare, verrouillage…), la demande de position, les images (coté, face …), l’envoi de poi, l’envoi de message.

1 « J'aime »

Bonne idée !

Merci @shinjo

Du coup si tu as maintenant la possibilité de mettre à jour avec les infos ci-dessus, cela nous permettra de finaliser les remontées d’infos avec la partie électrique :wink:
Merci d’avance

Xav

Je regarde ce soir et je mets à jour le fichier API pour test !

Voici la version de plugins/BMWConnectedDrive/3rparty/ConnectedDrive.php qui gère les actions :

NewAPIConnectedDrive.txt (11,7 Ko)

Pour le moment je n’ai testé que Vérrouiller/Déverrouiller.

Et voici le plugin complet (à renommer en .zip) :

BMWConnectedDrive-master.zip.txt (3,7 Mo)

:+1: good job

J’ai pingué @geqr pour prendre la suite ! On avisera ensuite

Xav

1 « J'aime »

Merci de reprendre ce plugin.
Je pensais essayer de m’y mettre mais je n’aurais pas pu le faire avant mai ou juin.

J’ai déjà tenté de contacter @geqr via ce site et via github mais sans succès
https://community.jeedom.com/t/plugin-bmwconnecteddrive/41799

Je pense qu’il sera préférable que tu contactes Jeedom pour qu’ils te transmettent la propriété de ce plugin.

Merci pour l’info !
Je l’ai à minima contacté par principe, c’est la moindre des choses.
Et comme le plugin sera gratuit…
Pour Jeedom, pas besoin à priori car le plugin n’a jamais été publié sur le market. (mais je vais leur poser la question qd même) Je vais vais donc repartir d’une page quasi blanche en m’appuyant sur ce qu’à déjà fait @geqr
Ca devrait donc aller assez vite.
Ma seule difficulté est que je n’ai pas encore de compte BMW donc pour les tests il faudra que je trouve une âme charitable qui me laisse accès de temps en temps à son compte.
Je vais essayer de démarrer ce weekend pour la structure du plugin

Xav

1 « J'aime »

Le plugin est bien sur le market en beta :

https://market.jeedom.com/index.php?v=d&p=market_display&id=4068

mais l’installation ne fonctionne pas je crois.

Il semble qu’il existe aussi une interface mqtt qui utilise le projet bimmer_connected :

https://github.com/MrJanD/bimmer2mqtt

Ah yes en beta sur le market mais en effet non fonctionnel !
Au pire je changerai l’ID du plugin !

Un intérêt à ton avis de passer par l’interface mqtt ? Plus de fonctionnalité ?
Parce que pour le coup ca va dépasser mes compétences en dev :slight_smile: (python, docker,…)

Je pense que l’avenir va être de plus en plus à passer par MQTT. De plus en plus de système domotique passe par cette interface commune et l’équipe Jeedom s’y prépare je pense comme annoncé en début d’année. Les plugins Docket Management et MQTT Manager annoncent la suite.

Pour ma part j’ai déjà basculé sur MQTT pour mes équipements Zigbee.

L’intérêt est surtout d’avoir accès à un développement commun pour l’ensemble des systèmes domotiques et à un nombre de développeurs bien plus nombreux.

Mais cependant le plugin BMW Connected Drive est déjà là et nécessite peux de travail pour être proposé sur le market dans un état fonctionnel !

1 « J'aime »

On est en phase sur l’avenir !
Mais pour avoir une version exploitable rapidement (compte tenu de mes connaissances en dev :stuck_out_tongue_winking_eye:), je vais rester sur les API php.
Je vous donnerai un état de l’avancement du plugin régulièrement ! Je vais démarrer ce soir.

Xav

5 « J'aime »

J’ai une BMW 225XE (hybride, plugin) et suis partant pour faire le bêta.

1 « J'aime »

Merci pour cette version.
En l’utilisant, j’y vois quelques petits pbs:

  • Le token est redemandé chaque fois alors qu’il a une durée de vie de 1h:
    log du plugin:
0032|[2022-03-01 18:24:19][DEBUG] : result getToken OK at time 1646155459 and expires_in : i:3599;
... A la seconde suivante:
0035|[2022-03-01 18:24:20][DEBUG] : result getToken OK at time 1646155460 and expires_in : i:3599;

Dans le log http.error, il y a les messages correspondants:

0121|[01-Mar-2022 18:24:20 Europe/Brussels] PHP Warning:  file_put_contents(/var/www/html/plugins/BMWConnectedDrive/3rparty/../core/config/devices/auth.json): failed to open stream: No such file or directory in /var/www/html/plugins/BMWConnectedDrive/3rparty/ConnectedDrive.php on line 156

Le chemin du fichier utilisé pour stocker le token n’existe pas. ( core/config/devices )

  • Le retour d’état des actions est immédiat. Ce n’est que le retour du serveur BMW qui a reçu la requête.
    Dans l’appli c’est beaucoup plus lent parce que c’est le retour que l’action a été exécutée par la voiture. C’est le pb de la lib utilisée qui ne vérifie pas que l’action est terminée et a été exécutée.
  • Dans le log http.error, il y a quelques PHP warning et notice.
0000|[Tue Mar 01 23:26:19.568120 2022] [php7:notice] [pid 12106] [client 192.168.1.149:60631] PHP Notice:  Undefined offset: 302 in /var/www/html/plugins/BMWConnectedDrive/3rparty/ConnectedDrive.php on line 285, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19
0001|[Tue Mar 01 23:26:19.724447 2022] [php7:warn] [pid 12106] [client 192.168.1.149:60631] PHP Warning:  file_put_contents(/var/www/html/plugins/BMWConnectedDrive/3rparty/../core/config/devices/auth.json): failed to open stream: No such file or directory in /var/www/html/plugins/BMWConnectedDrive/3rparty/ConnectedDrive.php on line 156, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19
0002|[Tue Mar 01 23:26:20.532797 2022] [php7:notice] [pid 12106] [client 192.168.1.149:60631] PHP Notice:  Undefined property: stdClass::$remoteServiceEvent in /var/www/html/plugins/BMWConnectedDrive/core/class/BMWConnectedDrive.class.php on line 145, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19
0003|[Tue Mar 01 23:26:20.532938 2022] [php7:notice] [pid 12106] [client 192.168.1.149:60631] PHP Notice:  Trying to get property 'remoteServiceType' of non-object in /var/www/html/plugins/BMWConnectedDrive/core/class/BMWConnectedDrive.class.php on line 145, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19
0004|[Tue Mar 01 23:26:20.532970 2022] [php7:notice] [pid 12106] [client 192.168.1.149:60631] PHP Notice:  Undefined property: stdClass::$remoteServiceEvent in /var/www/html/plugins/BMWConnectedDrive/core/class/BMWConnectedDrive.class.php on line 145, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19
0005|[Tue Mar 01 23:26:20.533012 2022] [php7:notice] [pid 12106] [client 192.168.1.149:60631] PHP Notice:  Trying to get property 'remoteServiceStatus' of non-object in /var/www/html/plugins/BMWConnectedDrive/core/class/BMWConnectedDrive.class.php on line 145, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19
0006|[Tue Mar 01 23:26:20.533041 2022] [php7:notice] [pid 12106] [client 192.168.1.149:60631] PHP Notice:  Undefined property: stdClass::$remoteServiceEvent in /var/www/html/plugins/BMWConnectedDrive/core/class/BMWConnectedDrive.class.php on line 145, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19
0007|[Tue Mar 01 23:26:20.533068 2022] [php7:notice] [pid 12106] [client 192.168.1.149:60631] PHP Notice:  Trying to get property 'lastUpdate' of non-object in /var/www/html/plugins/BMWConnectedDrive/core/class/BMWConnectedDrive.class.php on line 145, referer: http://jeedom/index.php?v=d&p=dashboard&object_id=19