Xav-74 / myBMW

Plugin (PHP) to interact with BMW Connected Drive from Jeedom app
GNU General Public License v2.0
3 stars 2 forks source link

Homebridge #1

Open anthouny opened 2 years ago

anthouny commented 2 years ago

Bonjour, ce n'est pas une "issues" mais je ne sais pas où le mettre autrement.

Est-ce possible de rendre le plugin compatible homebridge ?

Xav-74 commented 2 years ago

Bonjour, Je ne suis pas sur que Homebridge gère les équipements type véhicule ! @NebzHB : tu confirmes ?

Sinon il est prévu que le plugin soit compatible avec Jeemate et Jeedom Connect (dev en cours)

anthouny commented 2 years ago

Effectivement, mais je pense que l'on pourrait faire remonter au minimum l'action verrouiller et déverrouiller comme ci c'était une serrure connectée ?

Le plugin Ford le fait comme ça

NebzHB commented 2 years ago

Non en effet mais il est possible de créer des équipements composés comme une ampoule pour les phares, une serrure, une fenêtre électrique, une batterie pour la recharge, etc (sauf pour par exemple le remplissage de diesel... ) mais y'a moyen de contourner :-) (pour autant qu'il y ait des états)

Xav-74 commented 2 years ago

En effet, c'est une excellente idée !

@anthouny : tu dois donc pouvoir le faire nativement depuis le plugin Homebridge en affectant le bon générique sur les commandes ! Ex pour le vérrouillage, déverrouillage :

Puis relancer le démon Homebridge et ca devrait fonctionner ! Attention toutefois au délai BMW (l'action peut mettre jusqu'à 2min) et donc voir comment cela réagi.

Je verrai ensuite comment intégrer nativement cela, sans que cela ne gène Jeemate et Jeedom Connect ;)

anthouny commented 2 years ago

Je vais retenter demain car j'avais essayé (sauf pour l'état de la serrure) mais ça n'apparaissait pas dans homekit même après avoir redémarré le demon

Xav-74 commented 2 years ago

Il faut bien les 3 pour que cela soit pris en compte ;) Tiens moi au courant !

Xav-74 commented 2 years ago

Par contre, en parcourant la doc Homebridge, je vois que l'état doit être à 0 ou 1. Ce n'est pas le cas de mon plugin. Il va donc falloir que tu passes par un virtuel :

image

anthouny commented 2 years ago

Là tu m'as perdu avec le virtuel :(

Xav-74 commented 2 years ago

en fait mon plugin récupère l'état du verrouillage qui peut être : -locked -unlocked -secured

Mais Homebridge a besoin d'avoir un binaire, 0 ou 1. IL faut donc créer un virtuel avec une commande info état qui va cherché ma commande info état verrouillage et la transforme en 0 ou 1. J'essaie de te montrer ca demain !

anthouny commented 2 years ago

J'attends ton tuto si tu peux :)

Xav-74 commented 2 years ago

Je viens de faire le test et ca fonctionne ;) Il faut que tu crées un virtuel et dans celui-ci 2 commandes actions et 1 commande info :

image

Dans la commande info tu rentres : #[Garage][BMW i3][Verrouillage]# == 'Unlocked'?0:1 En choisissant bien sur ton équipement correspondant à ta voiture ;) Juste pour expliquer cette formule : si la valeur de ta commande Verrouillage de ton véhicule est 'unlocked' il transforme et 0 sinon il transforme en 1 !

Il te reste ensuite à appliquer les génériques sur ce virtuel comme expliqué plus haut et ca devrait fonctionner dans Home ;)

anthouny commented 2 years ago

J'ai bien rajouter l'état de la serrure et c'est bien apparu dans HomeKit.

Je peux juste déverrouiller, mais comme tu le disais, il reste en "déverrouillage en cours" car il n'a pas de retour d'état.

J'ai regardé pour le virtuel, mais j'ai rien pigé.

Xav-74 commented 2 years ago

en fait Home attend en retour d'état en 0 ou 1 et il reçoit un texte c'est pour ca !

Pour le virtuel, il suffit d'utiliser le plugin du même nom et de "recopier" les commandes de ton véhicule sur l'équipement virtuel créé ! Puis d'appliquer la formule que je cite !

anthouny commented 2 years ago

Nos messages se sont croisés, j'ai fait comme toi, ça déverrouille bien, mais ça reste en déverrouillage image

Xav-74 commented 2 years ago

Même au bout de qq sec qd le statut de la commande est passée à EXECUTED ?

anthouny commented 2 years ago

Oui ça reste comme ça plusieurs minute et repasse en "verrouillé" mais si véhicule déverrouillé. Où je vois si executed?

Xav-74 commented 2 years ago

Il faut que tu passes les logs du plugin en debug, tu lances un déverrouillage et tu postes les logs ici 😜

anthouny commented 2 years ago

dans homebridge ou virtuel ?

Xav-74 commented 2 years ago

Dans Jeedom/Analyse/Logs et tu vas sur myBMW, tu vas avoir tous les logs du plugin

anthouny commented 2 years ago

[2022-05-03 20:26:46]DEBUG : | Result getToken OK at time 1651602406 and expires in : 3599 s [2022-05-03 20:26:47]DEBUG : | Result getRemoteServiceStatus() : [200 - OK] - {"eventStatus":"PENDING"} [2022-05-03 20:26:52]DEBUG : | Result getRemoteServiceStatus() : [200 - OK] - {"eventStatus":"PENDING"} [2022-05-03 20:26:57]DEBUG : | Result getRemoteServiceStatus() : [200 - OK] - {"eventStatus":"PENDING"} [2022-05-03 20:27:03]DEBUG : | Result getRemoteServiceStatus() : [200 - OK] - {"eventStatus":"EXECUTED"} [2022-05-03 20:27:08]DEBUG : └─End of car event doorUnlock : [200 - OK] - eventId : 023041fc-50f8-4e3b-96f6-28903b5d7800 - creationTime : 2022-05-03T18:26:46.748433Z`

Xav-74 commented 2 years ago

Ok donc l’action a bien été réalisée. Il faudrait maintenant s’assurer que la formule fonctionne. il faut que tu ailles sur ta commande « Verrouillage » de ton virtuel et que tu cliques sur tester ! Test à faire qd ton véhicule affiche bien verrouillé sur le plugin myBMW et tu dois avoir 1 Puis qd le plugin affiche déverrouillé, tu dois avoir 0.

anthouny commented 2 years ago

j'ai 1 dans les 2 cas

Xav-74 commented 2 years ago

Ok donc le souci vient de la ! est ce que tu peux tester la commande Verrouillage de ton véhicule (pas le virtuel) qd celui-ci est déverrouillé ? Il se peut que tu ais UNLOCKED en majuscule !

anthouny commented 2 years ago

unlocked pas en majuscule

Xav-74 commented 2 years ago

Même pas le U ? Ok dans ce cas modifie la formule de ton virtuel : #[Garage][BMW i3][Verrouillage]# == 'unlocked'?0:1

Et reteste ! Tu devrais avoir 0 !

anthouny commented 2 years ago

C'était bien "Unlocked" avec un U maj

anthouny commented 2 years ago

et j'ai toujours 1 dans les deux cas

Xav-74 commented 2 years ago

Tu peux me montrer les commandes de ton virtuel ?

anthouny commented 2 years ago

image

Xav-74 commented 2 years ago

Tu peux agrandir pour la formule ?

anthouny commented 2 years ago

image

Xav-74 commented 2 years ago

Remets le U en majuscule du coup ! Il y était avant ?

anthouny commented 2 years ago

C'est bon c'était ça, ça fonctionne, mais il y a un mais, je suis obligé de rafraichir manuellement sur le plugin pour qu'il récupère le bon état

anthouny commented 2 years ago

Je m'explique mieux, quand sur le plugin mybmw je clique sur déverrouiller, le plugin se rafraichi, mais pas assez longtemps pour récupérer le bon état, je suis donc obliger le forcer le rafraichissement pour qu'il récupére l'état que ce soit sur le plugin ou sur HomeKit (car une fois récupéré sur le plugin il le met à jour de suite sur HomeKit)

Xav-74 commented 2 years ago

Cool ! Oui c'est le souci ! Homekit a un délai d'attente du retour d'état qui est inférieur au temps mis par BMW pour valider l'action. Et malheureusement la dessus je ne peux pas faire grand chose. On va regarder avec @NebzHB pour intégrer nativement le plugin à Homebridge. On se tient au jus ! Je laisse le case ouvert en attendant !

anthouny commented 2 years ago

mais toi ça fonctionne sans rafraichir ?

anthouny commented 2 years ago

Tu peux pas forcer un rafraichissement auto de ton plugin mybmw 20/30 sec après l'action demandée ?

Xav-74 commented 2 years ago

En effet, je vais l'intégrer le refresh auto dans la prochaine version. En attendant, tu peux le faire toi-même. Dans les commandes Verrouiller et Déverrouiller de ton véhicule, tu vas sur configuration (roue crantée à côté de tester), sur l'onglet configuration, tu peux ajouter une action à exécuter après la commande. Choisis l'action rafraichir. Et ca devrait marcher ;) (à vérifier dans les logs que l'action se lance bien) Et ca devrait régler ton pb

anthouny commented 2 years ago

pas moyen d'y ajouter un délai ?

Xav-74 commented 2 years ago

Si ! Tu ajoutes au même endroit et juste avant une commande avec un sleep(20) Pour un délai de 20s

anthouny commented 2 years ago

[Appartement][BMW Série 1][Rafraichir]#sleep(20) ?

Xav-74 commented 2 years ago

Non il faut que tu cliques sur le + pour ajouter une seconde ligne. Tu mets le sleep sur la première et le rafraîchir sur la seconde

anthouny commented 2 years ago

Je regarde ça demain et je te dis

anthouny commented 2 years ago

salut, j'ai l'impression que le rafraichissement du plugin ne fonctionne pas super bien, je sais pas si c'est le cas ou si c'est juste une impression.

Et penses-tu que homekit/homebridge pourrait récupérer l'état du véhicule quand celui-ci est déverrouillé par la clé de manière classique ?

Xav-74 commented 2 years ago

Hello, Il faut bien distinguer 2 choses :

L'info qui est importante est la date de la dernière communication avec le véhicule (tout en bas du widget). Si celle-ci n'a pas bougé entre 2 refresh via cron, c'est que la voiture n'a pas communiqué avec le serveur BMW dans ce laps de temps

Xav-74 commented 2 years ago

Et pour info, le plugin sera automatiquement intégré dans Jeemate dans la prochaine beta du plugin ;) A suivre aussi l'intégration dans Jeedom Connect.