mdeweerd / MetersToHA

Get Meter Data into Home Automation systems
GNU General Public License v3.0
26 stars 8 forks source link

Problème avec Xephyr dans appdaemon #13

Closed fl0wfr closed 1 year ago

fl0wfr commented 1 year ago

Bonjour à tous,

Tout d'abord merci pour le travail sur cette app, très pratique de pouvoir à nouveau collecter l'index de gaz :)

Je rencontre depuis une semaine un souci lors de la collecte GRDF (pas de souci pour Veolia), je n'ai plus aucune valeur qui remonte dans HA. Dans les logs je voyais ceci: 2023-10-18 23:26:53,185 : -- : Previous 9990 m3 10 kWh 2023-10-11 06:00:00+02:00 from None 2023-10-18 23:26:53,185 : EE : 'int' object is not subscriptable 2023-10-18 23:26:53,242 : OK : Close Browser 2023-10-18 23:26:53,244 : OK : Close Display 2023-10-18 23:26:53,245 : EE : Ended with error : // re-run the program with '--debug' option Du coup j'ai relancé le call en mode debug, je vois ça dans les logs: pyvirtualdisplay.abstractdisplay.XStartError: Xephyr program closed. command: ['Xephyr', '-br', '-screen', '1280x1024x24', '-displayfd', '4', '-resizeable'] stderr: b'\nXephyr cannot open host display. Is DISPLAY set? J'ai vérifié que les pré-requis étaient bien installés dans appdaemon ce qui est le cas, et j'avoue sécher sur la cause de cette nouvelle erreur. Quelqu'un aurait une idée d'où viendrait le souci?

Merci!

mdeweerd commented 1 year ago

'--debug' nécessite que 'DISPLAY' soit définit à une adresse qui correspond à un Serveur X accessible depuis l'AppDaemon. Donc l'erreur que le "host display" ne peut être ouvert vient sûrement de là en mode débogue.

Personnellement j'ai "Nous rencontrons actuellement un problème de restitution de vos dernières consommations journalières. Nous mettons tout en oeuvre pour corriger cela rapidement." dans mon interface et je n'ai pas de nouvelles consommations depuis le 14 oct.

Dans le cas présent ce qui m'importe dans un premier temps c'est le "None" dans: Previous 9990 m3 10 kWh 2023-10-11 06:00:00+02:00 from None.

Mais cela veut simplement dire que la valeur précédente n'a pas été trouvée.

Donc il ne reste plus que "int is not subscriptable". Ce message n'est pas donnée avec la ligne ou cela était détectée et c'est étrange.

Je suggère de modifier localement le 'meters_to_ha_appdaemon.py':

            script_args = ["python3", script, "-r"]

en

            script_args = ["python3",  "-m", "trace", "--ignore-dir=/usr/lib", "-t", script, "-r"]

Cela va lancer le script avec une trace ligne par ligne de l'éxecution ce qui permet de trouver le déroulement précis et normalement ce qui cause cette exception.

Dans la configuration, ajoutez également des fichiers que vous pourrez retrouver:

  # optional (Default: None) - Set file for stdout of script call
  outfile: /config/grdftest.log
  # optional (Default: None) - Set file for stderr of script call
  errfile: /config/grdferr.log

Je pense que ce sera grdferr.log qui contiendra la trace précise. Dans la trace il faut retrouver ce qui fait afficher ce "EE", et les lignes précédentes dont une a amené l'exception.

A partir de la on pourra remonter ce qui est juste un int et non une liste, puis proteger le code de ce cas.

fl0wfr commented 1 year ago

Bonjour @mdeweerd ,

En effet je n'avais pas eu le réflexe d'aller vérifier dans mon espace GRDF et j'ai le même message que vous. J'ai tout de même fait les modifications, mais grdferr.log reste vide. Si besoin j'ai toute la trace dans grdftest.log, je peux vous la communiquer.

Merci pour le coup de main :)

mdeweerd commented 1 year ago
  1. J'évite de mettre mon email disponible sur internet. Une méthode de m'envoyer la trace c'est un message direct sur https://forum.hacf.fr/u/le_top/summary . Ou bien d'y laisse une adresse mél. et j'y communiques le mien. (Les spammers vont jusqu'a récupérer les adresses mél dans les dépôts!).

  2. J'ai ajouté une option "trace: true" pour AppDaemon ce qui permet de déclencher la trace ligne par ligne - c'est bien dans le fichier du "stdout" et non "stderr".

fl0wfr commented 1 year ago

C'était effectivement un souci côté GRDF, je ferme l'issue. Merci pour le coup de main :)

mdeweerd commented 1 year ago

Pour trace et info, j'ai désormais la même chose.

Le fichier récupéré du serveur a le contenu suivant dans ce cas:

{"code":500,"message":"Internal Server Error"}

Soit aucune donnée de compteur et un serveur qui indique une erreur interne...

A voir si je peux y faire qqchse - l'erreur interne ne semble pas apparaître tout le temps mais très fréquemment au moins.

mdeweerd commented 1 year ago

Bonne nouvelle: j'ai trouvé ce qu'il fallait évoluer pour être à nouveau compatible avec le service.

A mettre à jour dans votre instance!

fl0wfr commented 1 year ago

Merci beaucoup pour le fix!