Plugin Home Connect et Jeedom 4.2

Ca me donne déjà des boutons :face_with_head_bandage: :joy:

En testant rapidement, j’ai réussi à récupérer les évènements de mon four sans être blacklisté.
Je regarde pour implémenter le démon dans le plugin.

J’ai poussé en beta une PR pour la gestion des évenements par un deamon.
Ca fonctionne de mon côté, je pense qu’il reste un peu de debug à faire.
En gros, y a qu’un seul appel sur l’url events et une fonction callback de la réponse.

Capture d’écran 2022-03-10 à 18.25.28

1 « J'aime »

C’est dans la beta du plugin, merci @vedrine
Si quelqu’un pouvait faire un retour : sur son appareil, jouer avec les touches et regarder les logs/commandes que les valeurs évoluent bien (comme le post plus haut)

Bonjour Flobul. Tout d’abord merci d’avoir repris le plugin et merci pour la gestion des événements. Je vois des choses qui se mettent à jour dans le dashboard pour ma taque de cuisson, sans refresh manuel et c’est un plaisir !
Il y a un setting qui ne semble pas se mettre à jour. C’est celui-ci:
[2022-03-12 08:00:25][DEBUG] : Mise à jour setting : GET::BSH.Common.Setting.AlarmClock - Valeur :147
C’est pourtant un de ceux les plus intéressants car il s’agit d’une minuterie (et, c’est intéressant de suivre son évolution sans devoir faire de refresh).

un grand merci d’avoir repris le plugin
sur mon four neff ca marche, j’arrive à voir les infos de cuisson. Top

Merci a tous, belle collaboration !!!

apres la maj beta, tout a correctement redemarré et j’au pu voir ceci dans le log homeconnect :

[2022-03-12 07:48:26][DEBUG] : MAJ du programme actif
[2022-03-12 07:48:26][DEBUG] : La requête GET	: /api/homeappliances/xxxxxxxxxxxxxxx/programs/active a retourné un code d'erreur 429 résultat = {   "error": {     "key": "429",     "description": "The rate limit \"1000 calls in 1 day\" was reached. Requests are blocked during the remaining period of 85839 seconds."   } }
[2022-03-12 07:48:26][ERROR] : Erreur exécution de la commande [Electro][Lave-vaisselle ][Rafraichir] : Vous avez dépassé le nombre de requêtes permises au serveur. Réessayez dans 24h
[2022-03-12 07:49:06][DEBUG] : Mise à jour setting : GET::BSH.Common.Option.ProgramProgress - Valeur :7
[2022-03-12 07:49:06][DEBUG] : Mise à jour setting : GET::BSH.Common.Option.RemainingProgramTime - Valeur :840
[2022-03-12 07:50:06][DEBUG] : Mise à jour setting : GET::BSH.Common.Option.ProgramProgress - Valeur :13
[2022-03-12 07:50:06][DEBUG] : Mise à jour setting : GET::BSH.Common.Option.RemainingProgramTime - Valeur :780
[2022-03-12 07:51:06][DEBUG] : Mise à jour setting : GET::BSH.Common.Option.ProgramProgress - Valeur :20

dans le log homeconnectd je vois ceci :


[2022-03-12 07:39:05]INFO : Lancement du démon homeconnect
[2022-03-12 07:39:06]INFO : Démon homeconnectd lancé
PHP Notice:  Undefined offset: 1 in /var/www/html/plugins/homeconnect/core/class/homeconnect.class.php on line 762
PHP Notice:  Undefined offset: 1 in /var/www/html/plugins/homeconnect/core/class/homeconnect.class.php on line 762

peut on en conclure que :

  1. la remontée des events vers le daemon semblent fonctionner. Cependant les updates se font toutes les minutes et le Cron est toujours coche, donc est-ce vraiment un push des events depuis le cloud ou un refresh periodique du plugin par le Cron ?
  2. le test sur $match[1] de la ligne 762 pose probleme, 1 n’est pas un index valide
  3. la limite de 1000 requetes par jour semble atteinte ???
  4. comme le rapporte fabrice.catherine03 certaines commandes info sur l’état d’avancement du programme ne sont pas créées lors de la découverte initiale de l’appareil (lorsque l’on ‹ synchronize › le plugin). Dès lors quand les events correspondants sont remontés, le plugin ne peut pas les traiter, ils ne correspondent a aucune commande info créée. D’ailleurs chez moi les infos ProgramProgress et RemainingProgramTime qui sont mises a jour d’apres le log ci-dessus sont des commandes info que j’ai du définir manuellement dans le fichier core/config/types/dishwasher.json. J’ai d’ailleurs cree un PR sur la beta avec un fichier dishwasher.json amélioré
1 « J'aime »

Merci pour reprendre ces évolutions attendues.
Bon, sur mon four bosch, j’ai testé vite fait 2 ou 3 trucs du genre deverouillage enfant, ouverture porte, marche arret qui remontent bien dans l’appli officelle bosch.
Rien ne bouge dans les log. Si je fais une refrech sur le widget là les log bougent et les infos se mettent à jour. Mais rien sans faire de refresh.
Je retesterai d’avantage à la prochaine utilistaion du four pour la detection des programmes en cours.

PS : bêta installée et cron réglé à jamais. Est ce un mauvais reglage de ma part ?


INFO : Début d'activation du plugin
INFO : Info sur le démon : {"launchable_message":"","launchable":"nok","state":"nok","log":"nok","auto":0}
DEBUG : Lancement de : /var/www/html/core/class/../../core/php/jeePlugin.php  plugin_id=homeconnect function=install callInstallFunction=1

Bon apriori un souci lors de l’installation de la version beta hier soir.
Je viens de relancer l’installation et maintenant je voie la statut du deamon dans la plugin et les remontées ouvertures portes verrouillages enfant marche arret fonctionnent dbas le widget avec une trace correspondante dans les logs :slight_smile:

Donc ça marche. A finir de tester lors du prochain usage du four.

En tout cas un GRAND merci car cela est une belle grande évolution pour ce plug in déjà bien pratique.

Quelques éléments de réponse :

  1. Pour le moment si votre cron était actif avant la mise à jour, il reste actif après. Mais vous pouvez dans la configuration du plugin le mettre sur une grande valeur ou même sur « jamais » pour être sûr de ne pas vous faire blacklister. Peut-être quand le traitement des événements sera bien au point Flobul pourra envisager de modifier ce point.

  2. La remontée des événements semble bien marcher (Bravo Flobul) mais il y a un problème : les docs donnent maintenant un grand nombre d’événements suivant les appareils et ma procédure de synchronisation ne semble pas les détecter, si je regarde les données retournées par le serveur, ils n’y sont pas. Il faudra donc voir ce point et si on n’arrive pas à avoir cette info par le serveur il y aura toujours la possibilité de rajouter ces commandes info dans les fichiers json de config qui sont dans core/config/types. Ce sera fastidieux mais supprimera tout problème de commandes info manquantes.
    Par exemple là moi j’ai une lessive en train et j’ai une foule de

[2022-03-12 15:40:20][DEBUG] : Dans updateInfoCmdValue la commande : GET::BSH.Common.Option.ProgramProgress n'existe pas
[2022-03-12 15:41:21][DEBUG] : Dans updateInfoCmdValue la commande : GET::BSH.Common.Option.RemainingProgramTime n'existe pas
[2022-03-12 15:42:21][DEBUG] : Dans updateInfoCmdValue la commande : GET::BSH.Common.Option.ProgramProgress n'existe pas
[2022-03-12 15:43:20][DEBUG] : Dans updateInfoCmdValue la commande : GET::BSH.Common.Option.ProgramProgress n'existe pas

Donc c’est un point à traiter mais çà ne me semble pas trop difficile.

Pour ce qui est de la non mise à jour du widget, c’est normal, il faudra ajouter une ligne dans la fonction getEvents après le $eqLogic->updateInfoCmdValue pour appeler $eqLogic->refreshWidget(); donc là aussi pas de problème.
Je suis super content car le plugin (auquel j’avais consacré quand même pas mal d’heures) a fait un grand bond en avant avec les événements un grand merci Flobul. J’aurais dû appeler à l’aide plus tôt quand j’ai commencé à avoir des ennuis pour maintenir certains de mes plugins.
PS la doc sur les événements supportés par chaque type d’appareil est là : https://api-docs.home-connect.com/events?#availability-matrix

1 « J'aime »

Concernant les commandes info manquantes, cela vient du fait que les commandes info sont créées au moment de la découverte de l’appareil, découverte qui exige qu’aucun programme ne soit en cours d’exécution.
Donc aucune info concernant le déroulement d’un programme n’est remontée à ce moment la, donc rien n’est créé.
deux solutions je crois :

  1. créer les commandes info de façon dynamique et permanente, dès qu’une nouvelle info est remontée, créer la commande correspondante si elle n’existe pas. Certains plugin tel espeasy et jmqqt le font je pense.
  2. créer des entrées manuelles dans les fichiers json de core/config/types.
    c’est ce que j’ai fait pour mon lave-vaisselle (voir le PR sur la beta) et ca marche
    bien, mais c’est un plus fastidieux effectivement.
    @vedrine : ce sont les 2 memes info que celles que tu vois, donc les définitions du lave-vaisselle devraient marcher aussi pour la machine à laver…

Je ne peux plus rien tester car je suis blacklisté depuis ce matin. c’est apparu au moment ou j’ai installe la beta, j’espere que ce n’est pas lié.

Encore merci a tous

Le problème avec cette méthode c’est que dans l’événement tu n’as pas toutes les infos pour créer la commande par exemple

event: NOTIFY
data: {"items":[{"key":"BSH.Common.Option.RemainingProgramTime","timestamp":1479994067,"level":"hint","handling":"none","value":39,"unit":"seconds"}]}
id: BOSCH-HCS01OVN1-7F930F92AD1403

Tu n’as pas les valeurs min et max, et tu es obligé de déduire le type (numeric) de la valeur de la commande.
C’est possible (et il y a déjà du code pour çà dans le plugin) mais moins facile que de mettre la commande dans le fichier json comme tu l’as fait.
Par contre le désavantage du fichier json c’est que tu crée la commande par type d’appareil même si ton appareil à toi ne la supporte pas (mais tu peux toujours cocher de ne pas l’afficher)

Si tu as bien cette ligne suite aux évenements, c’est qu’il se met à jour.
Pour les minuteries, j’ai 2 nouvelles commandes qui doivent être créés, liées aux events, que j’ai repéré.

Mais pour les rajouter faut soit supprimer l’appariel et resynchroniser, soit revoir la gestion de création des commandes.

Merci, ce sera corrigé.

Pour les events, il n’y a qu’un seul appel bouffé. Et ca ne dépend d’aucun cron.

Oui, il faudrait les créer en dynamique et les compléter dynamiquement au fur et à mesure que les infos remontent (y a du taff là).

Faudrait un mega dictionnaire des capabilities homeconnect, mais je crains que ça n’existe pas en publique.
Edit: quitte à créer le dictionnaire et le compléter au fur et à mesure, je vois que c’est ce qu’ils font pour home assistant. Mais il est pas complet leur dico.

Ah super pour progress et remaining, j’ai vu qu’elles etaient dans l’API, j’essayais de les récupérer avec mon four mais ca sortait pas.

1 « J'aime »

En fait, il faudrait simplement rajouter les commandes dans le json config de l’appareil qui n’existent pas encore (non synchronisées) et qui sont dans l’api.
Ensuite permettre de rajouter les commandes via la synchro si elles ne sont pas présente (une fonction qui liste des commandes et compare au json).

Le problème c’est que pour le moment les commandes qui sont dans le json sont ajoutées au moment de la création de l’appareil (ou la synchro, je ne sais plus je vais regarder) car ce sont des commandes qui ne dépendent que du type et sont communes à tous les appareils d’un même type. Si on veut les ajouter au vol lors de la réception d’un event il faudrait modifier çà. Peut être un deuxième json par appareil ?
Ceci dit j’essaie de voir si dans le cas ou la commande n’existe pas un simple appel à createInfoCmd pourrait marcher (il faudrait modifier createInfoCmd pour traiter unit, min et max) mais j’ai un peu de mal avec les arguments path et category.
EDIT: en fait path et category ne jouent que pour les programmes donc ici çà ne doit pas avoir trop d’importance.

J’arrive assez bien à créer une commande à la volée à réception d’un événement mais il y a un truc à éclaircir à propos des 2 événements BSH.Common.Root.SelectedProgram et BSH.Common.Root.ActiveProgram car quand on faisait des requêtes pour connaître les programmes sélectionné et actif on avait des GET sur /homeappliances/{haId}/programs/selected et /homeappliances/{haId}/programs/active et j’avais donc donné les logicalId programActive et programSelected ce qui maintenant à la lumière des key des événements correspondants apparait comme un mauvais choix donc il faudra modifier çà.

De nouvelles commandes (« zone intensive » par ex) sont apparues chez moi aujourd’hui en cours de programme de lavage. ca marche donc

l’erreur PHP Notice: Undefined offset: 1 in /var/www/ n’apparait plus dans le log homeconnected

super merci

Oui grâce à @Flobul le plugin a bien progressé ces derniers temps, il reste encore des ajustements à faire mais le mécanisme de création des commandes « au vol » lors de la réception des événements marche et cela m’a permis de découvrir plein de choses.
Ce matin au petit déjeuner j’ai découvert que ma hotte avait des programmes puisque le plugin recevait des événements « programme actif », j’ai donc poussé une mise à jour (en béta) pour tenir compte de ce point.

la maj beta de ce matin a tout cassé :sleepy:

le demon a disparu, toutes les commandes de mon lave-vaisselle aussi.

j’ai supprimé et reinstallé le plugin, le demon ne tourne toujours pas, et la synchronisation ne marche pas non plus, internal error 500 et class homeconnect does not exist :

log homeconnect:

[2022-03-17 08:24:13]INFO : Début d'activation du plugin
[2022-03-17 08:24:14]INFO : Info sur le démon : {"launchable_message":"","launchable":"nok","state":"nok","log":"nok","auto":0}
[2022-03-17 08:24:14]DEBUG : Lancement de : /var/www/html/core/class/../../core/php/jeePlugin.php  plugin_id=homeconnect function=install callInstallFunction=1

log homeconnectd :
vide

log http.error :

4996|[Thu Mar 17 08:28:46.067056 2022] [php7:error] [pid 24116] [client 109.143.70.221:0] PHP Fatal error:  Uncaught Error: Class 'homeconnect' not found in /var/www/html/plugins/homeconnect/core/ajax/homeconnect.ajax.php:37
4997|Stack trace:
4998|#0 {main}
4999|thrown in /var/www/html/plugins/homeconnect/core/ajax/homeconnect.ajax.php on line 37, referer: https://xxxxxxxxxxxxxxxx/index.php?=d&p=plugin&id=homeconnect

Vu et corrigé, merci.
La mise à jour devrait arriver.
Il manque une virgule l.380.

Je viens de pousser la correction sur le market.
Il suffit de refaire une mise à jour pas besoin de supprimer les appareils.

1 « J'aime »