Correction, je viens de voir qu’Aozhan ná pas mis une horaire…je vais voir avex lui car le mien (discontinué en faveur d’Aohzan) a eu l’option…j’ai besoin d’un maj intrajour
EDIT: sur son github c’est déjà marqué comme ‹ issue ›
Une solution partielle est aussi donné, une automation:
alias: UPDATE - Prix carburant
trigger:
- platform: time
at: "08:00:00"
- platform: time
at: "11:45:00"
- platform: time
at: "17:45:00"
action:
- service: homeassistant.reload_config_entry
target:
entity_id: sensor.station_XXX
mode: single
Du coup mon idée a été d’utiliser MQTT, et tout spécialement MQTT discovery, ce qui a en plus l’avantage de rassembler toutes les entités sous un même « appareil » appelé « Carburant ». Autre avantage: les entités peuvent être renommées et éditées dans l’UI de Home Assistant comme des entités classiques avec unique_id. On peut aussi décider de masquer ou désactiver une entité, encore une fois avec le système intégré à Home Assistant.
Le truc intéressant c’est que je n’ai pas à maintenir à la main dans une config YAML la liste des points de vente que je veux ajouter.
J’ai ajouté les coordonnées GPS dans le JSON des attributs; l’API renvoie déjà l’info donc c’est juste une ligne à rajouter. J’ai aussi mis l’indication de distance, mais attention c’est par rapport au centre de la requête. S’il y a plusieurs requêtes de position comme dans mon exemple, les distances ne seront pas cohérentes entre les deux groupes renvoyés. Et si une même station est dans plusieurs zones, c’est la dernière zone dans laquelle elle est qui « gagne ».
L’idée est de mettre ça dans un fichier python, et de périodiquement l’appeler avec un shell_command et une automatisation time_pattern par exemple. Moi je mets à jour tous les quarts d’heure. L’API réagit vraiment vite.
C’est certain que je n’ai pas cassé trois pattes à un canard.
Au prix d’une configuration « dans le script » (pour les centres/distances et les carburants) et de moins de flexibilité (pour le moment le script récupère tous les carburants pour toutes les zones) j’ai quand même 7 fois moins de lignes de code, et pas de complications pour recharger la config non plus (normal vu que je profite des fonctionnalités de l’intégration MQTT).
Ça reste hyper simple, sans récupération des noms (mais de toutes façons j’ai renommé à la main les 20 entités qui m’intéressaient avec un descriptif qui me parle plus que le nom officiel). C’était l’idée: un truc très basique mais pas non plus aussi statique et pénible à configurer que les solutions à base de multiscrape.
Cela dit, la plupart des intégrations que j’ai vu se tapent le parsing et le filtrage des données brutes en XML, et l’existence d’une API qui contourne toute cette difficulté pourrait permettre de simplifier sacrément une solution à base de custom_component. Si j’ai pu aider à ça tant mieux.
Je n’ai plus aucune entité MQTT configurée manuellement. Je fais tout en publiant des messages destinés au MQTT discovery, qui a plus de fonctionnalités, et n’a pas de problème de changement de syntaxe inopiné lors d’une mise à jour
@JeromeB
Le script ne fonctionne pas avec un command line sensor car il crée lui même les sensors. Il lui faut juste un shell_command comme montré ici:
Ensuite, si tu ne mets pas le chemin complet vers carburant.py je ne sais pas trop où Home Assistant va chercher le fichier (je dirais à la racine du dossier config mais je ne suis pas certain de mémoire).
Enfin, il est impératif d’avoir un serveur MQTT, et de renseigner correctement les identifiants en haut du fichier. Et aussi de changer les positions avec les zones qui t’intéressent.
Je me demande aussi si les dépendances Python (la librairie PAHO qui permet de communiquer avec MQTT) ne sont pas installées uniquement si l’intégration MQTT est ajoutée ou si c’est de base dans le HA core.
Si ça ne marche toujours pas il va me falloir des informations plus détaillées sur l’erreur parce que là on ne sait pas vraiment ce qui la cause.
Ah, et j’ai opéré des changements donc il faut s’assurer d’avoir la dernière version. En particulier dans mon coin certaines stations disparaissent de la base de donnée périodiquement (je pense quand il y a pénurie) et ma version initiale laissait la vieille valeur; j’ai ajouté un délai d’obsolescence dans MQTT du coup au bout d’un moment le capteur passe à «indisponible» dans ce cas.
Je suis repassé via shell_command (déjà essayé sans succès)
Citation Logger: homeassistant.components.sensor
Source: helpers/entity_platform.py:796
Integration: Capteur (documentation, issues)
First occurred: 21:50:03 (2 occurrences)
Last logged: 21:53:40
Updating command_line sensor took longer than the scheduled update interval 0:00:02
Updating command_line sensor took longer than the scheduled update interval 0:00:01
Je n’arrive pas à avoir plus de logs. J’ai bien paramétré le loggin de mon mqtt. Je n’ai pas modifié les coordonnés pour être sûr d’avoir des stations qui remontent.
Utiliser le module complémentaire « SSH & Web Terminal » pour « entrer » dans l’environnement d’exécution de Home Assistant (auquel on n’a pas accès normalement, et pas avec l’add-on SSH classique).
Une fois ce module installé et démarré, ouvrir un terminal en cliquant « Ouvrir l’interface utilisateur Web » dans les réglages du module, ou en choisissant le terminal dans le menu de gauche si l’option est activée. On doit obtenir
Alors il faut taper: docker exec -it homeassistant /bin/bash ce qui donne accès à Home Assistant lui même (attention, là tu as les mains dans le moteur).
Et dans l’invite qui s’affiche, taper python3 /chemin/vers/carburant.py et voir ce qu’il se passe.
Pour avoir accès à docker dans l’add-on il faut sans doute décocher le « mode protégé ». Après vu que tu as une VM tu peux peut-être avoir accès au système de l’hôte HA sans l’add-on du coup (c’est seulement à ça qu’il me sert). C’est dans ce système que tu utilises docker
Perso quand je remet le mode protégé et que je tape docker j’obtiens
PROTECTION MODE ENABLED!
To be able to use this command, you'll need to disable
protection mode on this add-on. Without it, the add-on
is unable to access Docker.
Steps:
- Go to the Configuration Panel.
- Enter the 'Add-ons, Backups & Supervisor' menu.
- Click on the SSH & Web Terminal add-on.
- Set the 'Protection mode' switch to off.
- Restart the add-on.
Access to Docker allows you to do really powerful things
including complete destruction of your system.
Please, be sure you know what you are doing before enabling
this feature!
Es-tu certain que tu utilises l’add-on « SSH & Web Terminal » des community add-ons ou plutôt l’add-on « SSH » de base ? Parce que ce dernier n’a pas docker ni python.
L’add-on « SSH & Web Terminal » a python préinstallé, mais n’a pas les bibliothèques supplémentaires de HA du coup pas possibilité de tester correctement mon script.
Le script fait une requête pour chaque position et chaque carburant, donc avec les réglages en l’état ça fait 4. Personnellement je le lance tous les 1/4 d’heure. prix_nom prend successivement les valeurs "Gazole" et "E10" et est remplacé dans la requête grâce à l’écriture f"...{prix_nom}...".
Le script a l’air de démarrer normalement, donc pas de souci de dépendance c’est déjà ça. On verra les résultats quand la limite de requêtes est réinitialisée.
Ah, et le coup du blocage c’est peut-être le read() qui bloque s’il n’y a qu’une erreur et pas de contenu ? Peut-être qu’il faut mettre un timeout explicite…
« Fonctionne » c’est un bien grand mot car les valeurs sont unavailable et pas des montants… Ce qui est intéressant c’est que ça bloque au niveau de la publication MQTT et pas de la récupération des données dans l’API.
Sorry, j’ai changé les coordonnées, c’est pour cela qu’ils sont passé unavialable. Sur ceux dans ma zone ils sont biens renseigné. J’utilise Mosquitto broker.