{"id":15524177,"url":"https://github.com/mdeweerd/meterstoha","last_synced_at":"2026-05-24T23:04:38.887Z","repository":{"id":68089572,"uuid":"594246571","full_name":"mdeweerd/MetersToHA","owner":"mdeweerd","description":"Get Meter Data into Home Automation systems","archived":false,"fork":false,"pushed_at":"2025-01-06T23:28:04.000Z","size":897,"stargazers_count":26,"open_issues_count":3,"forks_count":8,"subscribers_count":5,"default_branch":"meters-to-ha","last_synced_at":"2025-03-29T22:41:18.855Z","etag":null,"topics":["appdaemon","appdaemon-apps","domoticz","energy-consumption","energy-data","home-assistant","home-assistant-appdaemon","home-assistant-hacs","home-automation","mqtt","utilities"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mdeweerd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-28T00:13:48.000Z","updated_at":"2025-01-06T23:28:07.000Z","dependencies_parsed_at":"2023-09-29T06:50:11.086Z","dependency_job_id":"ab638c1a-5d89-4ab6-8901-a3b3204e1b07","html_url":"https://github.com/mdeweerd/MetersToHA","commit_stats":{"total_commits":335,"total_committers":8,"mean_commits":41.875,"dds":0.5283582089552239,"last_synced_commit":"5c9b26f69babffcce45cb84cf0b253e7881ddc4f"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdeweerd%2FMetersToHA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdeweerd%2FMetersToHA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdeweerd%2FMetersToHA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdeweerd%2FMetersToHA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mdeweerd","download_url":"https://codeload.github.com/mdeweerd/MetersToHA/tar.gz/refs/heads/meters-to-ha","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250390478,"owners_count":21422711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appdaemon","appdaemon-apps","domoticz","energy-consumption","energy-data","home-assistant","home-assistant-appdaemon","home-assistant-hacs","home-automation","mqtt","utilities"],"created_at":"2024-10-02T10:49:32.067Z","updated_at":"2026-05-24T23:04:38.878Z","avatar_url":"https://github.com/mdeweerd.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://github.com/hacs/integration)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\u0026logoColor=white)](https://github.com/pre-commit/pre-commit)\n\n**Mettez à jour automatiquement vos consommations d'eau et de gaz dans\nvotre système domotique**\n\n# Meters To Home Automation (MetersToHA / Meters2HA / M2HA)\n\nMetersToHA est un script qui permet de récupérer automatiquement les\ndonnées de consommation d'eau et de gaz de différents fournisseurs, et de\nles mettre à jour dans votre système domotique:\n\n- [Home Assistant](https://www.home-assistant.io/) et\n- [Domoticz](https://domoticz.com/), et\n- d'autres en MQTT.\n\nAvec MetersToHA, vous pouvez suivre votre consommation d'eau et de gaz, et\nen fonction prendre des mesures pour réduire vos dépenses.\n\nC'est un fork de [veolia-idf](https://github.com/s0nik42/veolia-idf) déjà\nconnu et accélérant le développement.\n\nL'idée est que MetersToHA s'enrichit d'autre collecteurs et systèmes\ndomotiques afin d'éviter la multiplication de modules à installer - à vous\nde jouer.\n\n## Fonctionnalités :\n\n- Récupération des valeurs de consommation au fil du temps;\n- Récupération des données historiques\n- Gestion multi-contrat (veolia-idf)\n- Gestion unicontrat (www.service.eau.veolia.fr)\n- Vérification de l'intégrité de l'environnement (prérequis / configuration\n  sur serveur domotique)\n- Mode débogue graphique\n- Possible intégration avec d'autre solution domotique (à vous de jouer)\n\n## Table des Matières\n\n\u003c!-- mdformat-toc start --slug=github --no-anchors --maxlevel=4 --minlevel=1 --\u003e\n\n- [Meters To Home Automation (MetersToHA / Meters2HA / M2HA)](#meters-to-home-automation-meterstoha--meters2ha--m2ha)\n  - [Fonctionnalités :](#fonctionnalit%C3%A9s-)\n  - [Table des Matières](#table-des-mati%C3%A8res)\n  - [:warning: Limitations](#warning-limitations)\n  - [Informations générales](#informations-g%C3%A9n%C3%A9rales)\n  - [Installation](#installation)\n    - [Installation sous Linux ou Windows](#installation-sous-linux-ou-windows)\n  - [Configuration](#configuration)\n    - [Le fichier de configuration (`config.json`)](#le-fichier-de-configuration-configjson)\n  - [Les paramètres du script](#les-param%C3%A8tres-du-script)\n  - [Installation avec Home Assistant OS](#installation-avec-home-assistant-os)\n    - [Add-on MetersToHA (Module complémentaire)](#add-on-meterstoha-module-compl%C3%A9mentaire)\n      - [Home Assistant Add-On - méthode manuelle](#home-assistant-add-on---m%C3%A9thode-manuelle)\n      - [Home Assistant Add-On - méthode aidé par lien spécial](#home-assistant-add-on---m%C3%A9thode-aid%C3%A9-par-lien-sp%C3%A9cial)\n    - [Configuration](#configuration-1)\n    - [AppDaemon](#appdaemon)\n      - [Installation AppDaemon](#installation-appdaemon)\n      - [Ajouter `MetersToHA` à l'AppDaemon avec HACS](#ajouter-meterstoha-%C3%A0-lappdaemon-avec-hacs)\n    - [(Optionel) pour la gestion des historiques pour Veolia](#optionel-pour-la-gestion-des-historiques-pour-veolia)\n      - [Configuration MetersToHA sous AppDaemon](#configuration-meterstoha-sous-appdaemon)\n      - [Débogue avec AppDaemon](#d%C3%A9bogue-avec-appdaemon)\n      - [Lancer un appel à Veolia (AppDaemon)](#lancer-un-appel-%C3%A0-veolia-appdaemon)\n      - [GRDF (AppDaemon)](#grdf-appdaemon)\n      - [Automatisation Home Assistant (AppDaemon)](#automatisation-home-assistant-appdaemon)\n    - [Ajout des informations au tableau \"Énergie\"](#ajout-des-informations-au-tableau-%C3%A9nergie)\n  - [Domoticz](#domoticz)\n    - [Création du \"Virtual Sensor\" sur Domoticz :](#cr%C3%A9ation-du-virtual-sensor-sur-domoticz-)\n    - [Spécificités de configuration](#sp%C3%A9cificit%C3%A9s-de-configuration)\n  - [MQTT](#mqtt)\n  - [Fournisseurs](#fournisseurs)\n    - [Veolia](#veolia)\n    - [GRDF](#grdf)\n  - [\"Serveurs\"](#serveurs)\n    - [Docker - \"configuration système incluse\"](#docker---configuration-syst%C3%A8me-incluse)\n    - [Installation \"direct\"](#installation-direct)\n    - [Installation avec le sous-système Windows pour Linux (WSL)](#installation-avec-le-sous-syst%C3%A8me-windows-pour-linux-wsl)\n    - [Installation native sous Windows](#installation-native-sous-windows)\n      - [Planification de tâche](#planification-de-t%C3%A2che)\n    - [Installation de MetersToHA](#installation-de-meterstoha)\n      - [Installation avec `git`](#installation-avec-git)\n      - [Installation avec une archive](#installation-avec-une-archive)\n    - [Automatisation :](#automatisation-)\n  - [Dépannage](#d%C3%A9pannage)\n    - [Première exécution :](#premi%C3%A8re-ex%C3%A9cution-)\n    - [Paramétrer votre système pour le mode débogue (optionnel, mais recommandé)](#param%C3%A9trer-votre-syst%C3%A8me-pour-le-mode-d%C3%A9bogue-optionnel-mais-recommand%C3%A9)\n  - [Principe de fonctionnement](#principe-de-fonctionnement)\n  - [Environnements testés:](#environnements-test%C3%A9s)\n  - [Dépannage:](#d%C3%A9pannage)\n  - [Remerciements/Contributeurs](#remerciementscontributeurs)\n\n\u003c!-- mdformat-toc end --\u003e\n\n## :warning: Limitations\n\n- GRDF n'est pas encore compatible avec Domoticz;\n- GRDF utilise un captcha. Il peut être validé \"tout seul\" dans certains\n  cas (si peu de requêtes par jour), ou nécessiter une résolution\n  interactive, ou un [service de résolution de captcha](#captcha).\n- Si vous migrez depuis\n  [frtz13/homeassistant_gazpar_cl_sensor](https://github.com/frtz13/homeassistant_gazpar_cl_sensor),\n  vous devez désactiver ces automatisations et vos \"sensors\" de type\n  template (dans `configuration.yaml`) - sinon les valeurs écrasent celles\n  de MetersToHA.\n- Dépendance externe avec spook pour le chargement des données historiques.\n\n## Informations générales\n\nMetersToHA peut récupérer les données de consommation d'eau et de gaz des\nfournisseurs suivants :\n\n- [Veolia IDF - https://www.vedif.eau.veolia.fr](https://www.vedif.eau.veolia.fr/)\n  valable pour Veolia en IDF.\\\n  Vous pouvez trouver votre portail en fonction de la ville en visitant\n  [https://www.eau.veolia.fr](https://www.eau.veolia.fr/)\u003e CONNECTEZ-VOUS.\n- [GRDF - https://monespace.grdf.fr](https://monespace.grdf.fr/client/particulier/accueil).\n\nIl y a différentes options pour mettre en place MetersToHA:\n\n- Installation directe sous Linux ou Windows;\n- Avec Home Assistant:\n  - Comme 'add-on'/Module Complémentaire - le plus simple;\n  - Avec 'AppDaemon', comme 'composant'.\n\nAprès l'installation proprement dit, il faudra configurer MetersToHA.\\\nCela implique soit la création d'un fichier de configuration JSON, soit -\navec le add-on MetersToHA sous Home Assistant OS - le remplissage de la\nconfiguration dans l'interface.\n\nEt \"enfin\", il faudra provoquer l'exécution de MetersToHA.\n\n- Soit en exécution directe du script `meters_to_ha.py` (Linux, Windows);\n- Soit en émettant un événement sous Home Assistant (méthode add-on ou\n  Appdaemon).\n\nUn peu de débogue peut être nécessaire lors les premières exécutions.\n\n## Installation\n\n### Installation sous Linux ou Windows\n\nSystèmes soutenus:\n\n- Distribution classique: Debian, Ubuntu, Alpine, etc. - physique ou\n  Machine Virtuelle (VM);\n- Docker - conteneurisation;\n- Debian/Ubuntu avec le sous-système Windows pour Linux (WSL);\n- Au sein/en parallèle de votre système domotique (AppDaemon pour Home\n  Assistant par exemple).\n- Utilisation sous Windows (hors Linux/WSL), avec navigation visible.\n\n2. Configuration de MetersToHA - Fichier `config.json` avec les logins,\n   etc.\n\n3. Mise au point (essais, correction de configuration).\n\n4. Automatisation (exécution régulière du script).\n\n## Configuration\n\nLe script `meters_to_ha.json` utilise un fichier de configuration au format\njson.\n\nQuand MetersToHA est mis en place sous Home Assistant OS (HAOS), vous devez\nremplir la configuration dans l'interface du Module Complémentaire\nMetersToHA. Le fichier de configuration json sera généré avec cette\nconfiguration.\n\nPour les autres méthodes, vous créez le fichier `config.json` manuellement.\n\nLa documentation du fichier de configuration ci-dessous peut vous aider\négalement à comprendre les options du module complémentaire MetersToHA sous\nHAOS.\n\n### Le fichier de configuration (`config.json`)\n\nPour Home Assistant, le point de départ peut être\n`config.json.exemple.home-assistant` que vous copiez en `config.json` par\nexemple.\n\nL'emplacement est libre, mais avec AppDaemon évitez le répertoire\n`MetersToHA` qui est supprimé lors de la mise à jour du composant\nMetersToHA.\n\nExemple de configuration:\n\n```json\n{\n  \"veolia_login\": \"MON_LOGIN_VEOLIA@mon.domaine\",\n  \"veolia_password\": \"MONPASSEVEOLIA\",\n  \"veolia_contract\": \"MONCONTRATVEOLIA\",\n  \"veolia_website\": \"IDF\",\n  \"veolia_load_historical_data\": false,\n  \"grdf_login\": \"MON_LOGIN_GRDF@mon.domaine\",\n  \"grdf_password\": \"XXXXXXXXXXXX\",\n  \"grdf_pce\": \"21546000000000\",\n  \"ha_server\": \"https://MONINSTANCEHA\",\n  \"ha_token\": \"MONTOKEN.XXXXXXX.XXXXX-XXXXXXX\",\n  \"2captcha_token\": \"XXXXXXXXXXX\",\n  \"type\": \"ha\",\n  \"timeout\": \"30\"\n}\n```\n\nLes fournisseurs consultables dépendent des paramètres renseignés.\\\nC.a.d. qu'il convient de supprimer les clefs inutiles, remplacer\n\"2captcha_token\" par \"capmonster_token\" ou \"captchaai_token\" en fonction de\nvotre service, modifiez la valeur de \"type\" en fonction de votre\nplateforme.\n\nExplication des champs:\n\n- `veolia_login`, `veolia_password`: `veolia_contract` :\\\n  Les informations de login sur le site de Veolia, et le numéro de votre\n  contrat.\n\n- `veolia_website` :\\\n  Le site web de veolia qui vous concerne.\\\n  Par défaut \"IDF\"\\\n  Valeurs acceptées : \"IDF\" ou \"service.eau.veolia.fr\".\n\n- `veolia_load_historical_data` :\\\n  Chargement des données historiques de Veolia\\\n  :warning: : dépendance avec spook.\n\n- `grdf_login`, `grdf_password`, `grdf_pce`: Les informations de login sur\n  le site de GRDF. L'identification du Point de Comptage et Estimation\n  (PCE) est optionnel (actuellement).\\\n  Seulement pour GRDF.\n\n- `ha_server`: le domaine + le port accessibles depuis là ou le script\n  tourne.\\\n  Cela peut être\n  [http://homeassistant.local:8123](http://homeassistant.local:8123) dans\n  le cas ou vous n'avez pas touché la configuration réseau.\n\n- `ha_token`: voir ci-dessous, permet d'accéder à Home Assistant depuis le\n  script.\\\n  Seulement pour Home Assistant\n\n- Paramètre pour résolution de captcha.\\\n  Seulement si vous souhaitez résoudre les captchas automatiquement (GRDF,\n  sinon vous devez utiliser --display qui nécessite un serveur X).\\\n  Un débat assez complet concernant ce type de service est dans\n  [cet issue d'un autre projet](https://github.com/iv-org/invidious/issues/1256).\n  Inutile d'ouvrir un issue de débat ici, sauf pour proposer une\n  alternative s'appuyant (moins) sur l'humain.\\\n  Pour Veolia, vous n'avez pas besoin de ce type de service.\\\n  1,07 captchas/jour ont du être résolus en moyenne dans une configuration\n  ou Meters2HA est exécuté jusqu'à deux fois par soir (au cas ou le premier\n  appel n'a pas donné de résultat). Pour 27% des jours, aucune résolution\n  n'était nécessaire, pour 55% une seule résolution, et pour 18%, 2\n  résolutions.\\\n  \u003ca id=\"captcha\"\u003e\u003c/a\u003eTrois services sont compatibles, ajouté le paramètre\n  du service choisi, les estimations sont sur la base des tarifs et\n  observations en aout 2023:\n\n  - \u003ca id=\"2captcha\"\u003e\u003c/a\u003e`2captcha_token`: 3€ - ±1000 captchas - environ\n    2.5 ans (choisir Paypal).\\\n    [2captcha.com](https://2captcha.com/?from=16639177).\\\n    2captcha indique que les captchas sont résolus par des personnes.\n  - \u003ca id=\"captchamonster\"\u003e\u003c/a\u003e`capmonster_token`: $6 - ±10000 captchas -\n    environ 25 ans.\\\n    [capmonster.cloud](https://capmonster.cloud/SelectPaymentType).\\\n    Montant minimum $6 pour environ 10000 captchas (paypal), soit 25 ans.\n    Zennolabs indique que les captchas sont résolus automatiquement (par\n    machine).\n  - \u003ca id=\"captchaai\"\u003e\u003c/a\u003e`captchaai_token`: Offert (demande mensuelle) ou\n    $15/mois soit $180/an.\\\n    [CaptchaAI](https://captchaai.com/?from=151169) vous permet de\n    [renouveler sur demande mensuel un token valable un mois après chaque activation](.github/miscdoc/CaptchaAI.md).\\\n    Cela semble contraignant mais vous permet de démarrer.\\\n    Bien suivre \u003ca href=\".github/miscdoc/CaptchaAI.md\" target=\"_blank\"\u003ela\n    procédure\u003c/a\u003e à chaque fois.\n\n- `type`: \"ha\" pour Home Assistant, \"domoticz\" pour Domoticz, \"url\" pour\n  écrire vers un fichier ou \"POST\"er vers une URL, \"mqtt\" pour MQTT.\n\n- `url`: Si type est 'url', url de type\n  \"file://chemin/vers/fichier/local.extension\" ou\n  \"https://domaine.url/pourPOST\"\n\n- `timeout`: Le délai en secondes que le script attend pour certaines\n  étapes.\n\n- `mqtt_server`, `mqtt_port`, `mqtt_login`, `mqtt_password`: Serveur, port\n  et identifiant pour MQTT.\n\nNe mettez que les valeurs utiles. Si vous consultez seulement Veolia IDF\navec Home Assistant, ceci suffit:\n\n```json\n{\n  \"veolia_login\": \"MON_LOGIN_VEOLIA@mon.domaine\",\n  \"veolia_password\": \"MONPASSEVEOLIA\",\n  \"veolia_contract\": \"MONCONTRATVEOLIA\",\n  \"veolia_website\": \"IDF\",\n  \"ha_server\": \"https://MONINSTANCEHA\",\n  \"ha_token\": \"MONTOKEN.XXXXXXX.XXXXX-XXXXXXX\",\n  \"type\": \"ha\",\n  \"timeout\": \"30\"\n}\n```\n\n## Les paramètres du script\n\nLes paramèters du script sont directement accessible avec l'installation\nsous Linux ou Windows, partiellement accessibles avec la configuration\nAppDaemon, et modifiables pour la plupart dans la configuration du Module\ncomplémentaire MetersToHA sous HAOS.\n\n| option(s)                                     | Description                                                                                                                                            |\n| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| -h, --help                                    | Affiche l'aide                                                                                                                                         |\n| -r, --run                                     | Exécute le script                                                                                                                                      |\n| --version                                     | Affiche la version du programme                                                                                                                        |\n| --version-check                               | Vérifie s'il y a une nouvelle version du script (inactif)                                                                                              |\n| --veolia                                      | Récupère les données de Veolia                                                                                                                         |\n| --grdf                                        | Récupère les données auprès de GRDF                                                                                                                    |\n| --display                                     | Active l'interface graphique interactif (Serveur X nécessaire)                                                                                         |\n| --screenshot                                  | Prend une ou plusieurs captures d'écran du navigateur (pour débogue)                                                                                   |\n| --local-config                                | Utilise un répertoire local pour la configuration navigateur                                                                                           |\n| -l `LOGS_FOLDER`, --logs-folder `LOGS_FOLDER` | Dossier pour les fichiers des traces                                                                                                                   |\n| -c `CONFIG`, --config `CONFIG`                | Fichier de configuration                                                                                                                               |\n| -k, --keep-output                             | Garde les fichiers récupérés                                                                                                                           |\n| --insecure                                    | Ignore les erreurs de certificat du système domotique (utile pour les certificats SSL auto-signés)                                                     |\n| --server-type `SERVER_TYPE`                   | Type de destination 'url', 'ha', 'dom', 'mqtt'. Si 'url', le paramètre '--url' est nécessaire                                                          |\n| --url URL                                     | Destination du fichier récupéré: Autre fichier (file://...) ou URL web pour une requête POST (http(s)://...)                                           |\n| --skip-download                               | Ne télécharge pas le fichier mais utilise le fichier déjà en place, utile pour utiliser un fichier téléchargé interactivement ou bien pour le débogue. |\n| --chrome-version CHROME_VERSION               | La version (principale) de chrome lorsque `undetected-chromedriver` est installé. Un nombre tel que 109, 110, ... .                                    |\n\nLorsqu'une option est à la fois disponible dans le fichier de configuration\nque comme option en ligne de commande, la ligne de commande prend la\npriorité.\\\nPar exemple, l'option `server-type` est la même que `type` dans le fichier\nde configuration. Ce qui permet par exemple d'effectuer un transfert vers\nun web service en spécifiant\n`--server-type url --url https://mon-service.web --skip-download`.\n\n## Installation avec Home Assistant OS\n\nEn sus des informations qui suivent,\n[Le forum HACF](https://forum.hacf.fr/t/veolia-idf-sedif-consommation-eau-potable-suivi-consommation/11492)\npeut également vous aider.\n\n### Add-on MetersToHA (Module complémentaire)\n\nDeux méthodes:\n\n- Ajout de l'Add-on \"à la main\"\n- Ajout aidé par un lien spécial.\n\nDans les 2 cas, il faudra configurer l'Add-on, le démarrer, et\n[définir un automatisme](#automatisation-home-assistant-appdaemon) pour\ndéclencher l'événement.\n\nNote: Les paramètres `ha_server` et `ha_token` ne sont pas nécessaires\nlorsque l'add-on doit alimenter le Home Assistant de la même installation\n(donc pas besoin de générer un token soi-même).\n\n#### Home Assistant Add-On - méthode manuelle\n\nAjouter https://github.com/mdeweerd/meterstoha comme Dépôt à travers le\nmenu:\n\n- Aller vers Modules Complémentaires\u003eBoutique des modules complémentaires\u003e⋮\n  (en haut à droite)\u003eDépôts ;\n- Puis Remplir \"Ajouter\", puis cliquer \"Ajouter\";\n- Ensuite: attendre un peu, recharger la page de la Boutique des modules;\n  complémentaires ou \"MetersToHA\" devrait apparaître;\n- Puis cliquer \"MetersToHA\";\n- Installer, Configurer et Démarrer. (Voir ci-dessous à partir de\n  [Installer](#install_addon);\n- [définir un automatisme](#automatisation-home-assistant-appdaemon) pour\n  le(s) événement(s) choisi(s).\n\n#### Home Assistant Add-On - méthode aidé par lien spécial\n\nUn clic sur le bouton suivant va vous ouvrir une page de redirection de HA.\n\n[![Ouvrir votre instance Home Assistant et afficher la page de configuration du add-on.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=9120b5c7_meterstoha\u0026repository_url=https%3A%2F%2Fgithub.com%2Fmdeweerd%2Fmeterstoha)\n\nEnsuite un click sur le crayon (si c'est la première fois) pour mettre\nvotre domaine (enregistré en local):\n\n![image|671x391](images/add_on_edit_instance.png)\n\nAprès cela cliquer sur \"Open Link\".\n\nEnsuite dans Home Assistant un clic sur \"Confirmer\" rediriga vers:\n\n\u003ca id=\"install_addon\"\u003e\u003c/a\u003e![image|400x356](images/add_on_click_install.png)\n\nEnsuite, cliquer \"Installer\":\n\nAprès cela, dans \"Configuration\", définir les champs nécessaires et puis\ndémarrer le Add-On. Vérifier dans l'onglet Journal de l'Add-on le\ndémarrage.\n\n![image|639x209](images/add_on_verify_journal.png)\n\nQuand il y a une ligne similaire à la suivante, l'Add-on a bien démarré.\nDans le journal il y a aussi les informations de configuration que vous\npouvez vérifier.\n\n```plaintext\n{\"message\":\"API running.\"}\"./haevent2exec.py\" --config-json \"//m2h_config.json\" --external-program \"//execEvent.sh\" --log-level=\"debug\"  call_veolia call_grdf\n```\n\nPour finir,\n[définir un automatisme comme pour la méthode AppDaemon](#automatisation-home-assistant-appdaemon)\npour le(s) événement(s) choisi(s). Et tester.\n\n### Configuration\n\nLa valeur pour `ha_token` est seulement nécessaire si on utilise pas la\nméthode \"Add-on MetersToHA\" et peut être obtenu dans\n[son profil Home Assistant](https://my.home-assistant.io/redirect/profile/).\nCette fonctionnalité est disponible tout en bas de la page en question ou\nil faut cliquer \"Créer un jeton\":\n\n![](images/ha_token.png)\n\n### AppDaemon\n\nL'installation avec\n[AppDaemon](https://appdaemon.readthedocs.io/en/latest/INSTALL.html) permet\nd'utiliser la même machine que celle de HomeAssistant OS (HAOS) et\nnécessite environ 500Mo pour l'installation de AppDaemon et les paquets.\\\nC'est un peu plus complexe à mettre en place que la methode \"Module\nComplémentaire\".\n\nUne fois AppDaemon installé, vous pourrez ajouter MetersToHA\n[HACS](https://hacs.xyz/) après\n[activation des applications AppDaemon dans HACS](https://hacs.xyz/docs/categories/appdaemon_apps/#enable-appdaemon-apps-in-hacs)\ncomme ceci en suivant \"Configuration\" pour HACS dans\n\"Paramètres\u003eAppareils et services\":\n![Activate AppDaemon Apps](images/hacs_discover_appdaemon.png).\n\nLes scripts sont placés dans le répertoire\n`../config/appdaemon/apps/meters-to-ha`. Le fichier\n`meters-to-ha-appdaemon.py` assure l'intégration sous AppDaemon.\n`meters_to_ha.py` est le script indépendant et commun à toute installation.\n\n#### Installation AppDaemon\n\n1. [Ajouter le AddON/Module complémentaire « Home Assistant Community Add-on: AppDaemon »](https://appdaemon.readthedocs.io/en/latest/INSTALL.html)\n   selon votre système, ou\n   [suivez ces instructions pour HAOS](https://github.com/hassio-addons/addon-appdaemon/blob/main/appdaemon/DOCS.md#installation)\n   ou aller directement vers le lien (en remplaçant 'VOTREINSTANCE'):\n   `VOTREINSTANCE/hassio/addon/a0d7b954_appdaemon/info` , puis « Install »\n2. Pour HAOS (et peut-être d’autres), configurer `AppDaemon` au moins avec\n   ces paquets (configuration au format `yaml` pour HAOS):\n\n:warning: Si vous aviez une installation d'avant 2023.11, le chemin\n`/config` a changé en `/homeassistant` - d'ou l'ajout des `init_commands`\net la modification de la configuration `apps.yaml`.\\\nLa configuration de appdaemon est sous `/addon_configs/a0d7b954_appdaemon`.\nSuite à ce déplacement de répertoire (/config -\u003e /homeassistant), il faut\nmettre le bon chemin vers les ssecrets dans\n`/addon_configs/a0d7b954_appdaemon/appdaemon.yaml`:\n`secrets: /homeassistant/secrets.yaml`.\n\n```yaml\ninit_commands:\n  - '[ -r /config ] || ln -s /homeassistant /config'\n  - mkdir -p /config/MetersToHA\npython_packages:\n  - selenium\n  - PyVirtualDisplay\nsystem_packages:\n  - py-urllib3\n  - py3-colorama\n  - xvfb\n  - py3-pip\n  - xorg-server-xephyr\n  - chromium-chromedriver\n  - chromium\n  - py3-openssl\n  - py3-pysocks\n  - py3-wsproto\n  - py3-sniffio\n  - py3-async_generator\n  - py3-sortedcontainers\n  - py3-attrs\n  - py3-outcome\n  - py3-trio\n  - py3-pyperclip\n  - xclip\n```\n\n- Activer le Watchdog du AddOn, Démarrer le AddOn\n\n#### Ajouter `MetersToHA` à l'AppDaemon avec HACS\n\nCette procédure suppose que HACS est déjà actif et configuré pour\n`AppDaemon`. Ainsi que `AppDaemon` soit activé.\n\n1. Ajouter\n   [GitHub - mdeweerd/meterstoha](https://github.com/mdeweerd/MetersToHA)\n   comme source de type AppDaemon:\n\n   ![](images/AjoutDepot.png)\n\n   Note : après l’ajout, le popup reste affiché. Le nouveau module est\n   disponible à la fin de la liste:\n\n   ![](images/ListeDepot.png)\n\n2. Ensuite « télécharger » ce dépôt avec HACS - chercher `meterstoha` parmi\n   les « AppDaemons » et cliquez Télécharger ou Download:\n\n   ![](images/HADownload.png)\n\nLes scripts sont ainsi disponibles pour AppDaemon.\n\n### (Optionel) pour la gestion des historiques pour Veolia\n\nDans HACS installer spook (https://github.com/frenck/spook) Sans cette\nintégration le chargement des historiques n'est pas fonctionnel.\n\n#### Configuration MetersToHA sous AppDaemon\n\nReste encore la configuration de `MetersToHA` sous AppDaemon. Plus haut la\ncréation du fichier `config.json` a été expliquée. Vous devez le déposer\nsur votre instance Home Assistant, de préférence dans un sous-répertoire de\n`.../config`.\n\nDans l'exemple ci-dessous il est supposé que ce fichier `config.json` est\ndisponible au chemin `/config/config.json`.\n\nCette configuration indique aussi que la trace `veolia.log` sera déposé\nsous `/config`. Le fichier `/config/veolia.log` pourra aider à identifier\ndes causes de dysfonctionnement.\n\nVoici un exemple d'une configuration minimale à ajouter à\n`/addon_configs/a0d7b954_appdaemon/apps/apps.yaml` - l'événement\ndéclencheur est par défaut `call_meters_to_ha`:\n\n```yaml\nmeters_to_ha:\n  module: meters_to_ha_appdaemon\n  class: MetersToHA\n  config_file: /config/config.json\n```\n\nL'exemple suivant montre l'ensemble des arguments disponibles, dont la\nprécision du chemin vers le script `meters_to_ha.py`, tout en spécialisant\npour un appel à Veolia seulement, et avec le débogue actif qui suppose un\nserveur X actif et disponible sur l'IP indiqué.\n\n```yaml\nveolia_idf:\n  module: meters_to_ha_appdaemon\n  class: MetersToHA\n  # optionnel - Par défaut \"call_meters_to_ha\".\n  #     Permet de définir plusieurs lancements distincts, par exemple\n  #     pour consulter Veolia à une certaine heure, et GRDF à une autre heure.\n  event_name: call_veolia\n  # optionnel - Par exemple --grdf     pour ne faire que la requête auprès de GRDF\n  #                         --veolia   pour ne faire la requête qu'auprès de Veolia\n  #                         --insecure pour accepter les certificats SSL non vérifiés\n  #                                    (par exemple autosigné).\n  extra_opts: [--veolia]\n  # optionnel\n  log_folder: /config\n  # optionnel (Par défaut: \"config.json\" dans le répertoire de `meters_to_ha.py`)\n  config_file: /config/meters_to_ha.json\n  # optionnel (Par défaut: \"\u003cREALMODULESCRIPTPATH\u003e/meters_to_ha.py\")\n  # script: /config/meters_to_ha/meters_to_ha.py\n  # optionnel (Par défaut: false) - add --keep-output option\n  keep_output: true\n  # optionnel (Par défaut: false) - add --display option - nécessite DISPLAY \u0026 serveur X!!\n  display: false\n  # optionnel (Par défaut: false) - Enable line by line trace output (also add outfile/errfile options to send the output to a file)\n  trace: true\n  # optionnel (Par défaut: None) - Set DISPLAY for GUI interface (when display is true)\n  DISPLAY: 192.1.0.52:0\n  # optionnel (Par défaut: None) - Fichier pour la sortie STDOUT du script\n  outfile: /config/MetersToHA/meters_to_ha_script.log\n  # optionnel (Par défaut: None) - Fichier pour la sortie STDERR du script\n  errfile: /config/MetersToHA/apps/meters_to_ha_err.log\n```\n\nL'option `--display` peut être intéressant lors de la mise en place en cas\nde diffucultés mais nécessite un serveur X, la bonne configuration de\nDISPLAY et l'autorisation d'accès depuis la machine.\\\nPar exemple avec\n\n- [Mobaxterm Portable](https://mobaxterm.mobatek.net/download-home-edition.html).\\\n  Recommandé car:\n  - \"Sans installation\";\n  - Lance un Serveur X automatiquement;\n  - Un popop pour demander l'autorisation lorsque le process tente de se\n    connecter;\n  - Il suffit alors de définir DISPLAY à `\u003cIP_OU_NOM_RESEAU_PC\u003e:0` après\n    avoir lancé ce logiciel et accepté l'accès aux réseaux privés.\n- [VcXsvr sous Windows](https://sourceforge.net/projects/vcxsrv/files/vcxsrv/)\n  vous devez cocher la case `Disable access control` si l'exécution se fait\n  depuis une autre machine (pas si c'est sur la même machine sous Docker).\n\n![](images/VcXsvr.png)\n\n#### Débogue avec AppDaemon\n\nPour info, il y a une interface web spécifique à AppDaemon (port 5050 par\ndéfaut) : [http://votreinstance:5050](http://votreinstance:5050/) qui donne\nentre outre accès à qqs traces et l’historique des appels de scripts.\n\nSur la page\n[http://votreinstance:5050/aui/index.html#/logs](http://votreinstance:5050/aui/index.html#/logs)\non peut trouver par exemple des traces. Exemple avec une erreur:\n\n```plaintext\n2022-12-10 13:29:13.182428 ERROR veolia_idf: Done MetersToHA\n2022-12-10 13:29:13.157362 ERROR veolia_idf: NameError(\"name 'sys' is not defined\")\n2022-12-10 13:29:13.140371 ERROR veolia_idf: Start MetersToHA\n2022-12-10 13:29:09.467062 INFO AppDaemon: Initializing app veolia_idf using class MetersToHA from module meters_to_ha\n```\n\n#### Lancer un appel à Veolia (AppDaemon)\n\nL’appel est lancé en déclenchant l’événement `call_meters_to_ha` (ou\nl'événement défini sous le paramètre `event_name`). Cela peut être fait\ndans une automatisation (ce qui permet de le lancer selon un planning par\nexemple), ou de façon interactive dans les outils de développement.\nL'exemple est avec `call_veolia` (2ième exemple de configuration plus\nhaut):\n\n![](images/call_veolia.png)\n\nUne trace est systématiquement créé comme `service.log`, soit à\nl’emplacement du script, soit dans le répertoire donné par `log_folder:` .\nCela peut déjà aider à identifier les causes, ou tout simplement suivre le\nbon déroulement du script.\n\nExtrait de la fin d'une trace:\n\n```plaintext\n2022-06-01 18:31:55,541 : -- :  Parsing csv file\n2022-06-01 18:31:55,813 : OK : update value for 2022-05-31\n2022-06-01 18:31:56,014 : OK : Close Browser\n2022-06-01 18:31:56,018 : OK : Close Display\n2022-06-01 18:31:56,019 : -- : Remove downloaded file historique_jours_litres.csv Finished on success\n```\n\n#### GRDF (AppDaemon)\n\nLa configuration c'est presque comme pour Veolia IDF. Comme la consommation\nGAZPAR est plutôt disponible en fin de journée, il est intéressant de\nconsulter GRDF vers 21h par exemple.\\\nJe recommande donc de personnaliser l'`event_name`.\n\nPour GRDF un captcha est présent sur la page et depuis Janvier 2023 les\nscripts \"simples\" ne suffisent plus.\n\nLa résolution du captcha se fait soit manuellement (avec débugue actif et\nconfiguration de DISPLAY), soit en s'appuyant sur un\n[service de résolution de captchas](#captcha).\n\n```yaml\ngrdf:\n  module: meters_to_ha\n  class: MetersToHA\n  # optionnel - Par défaut \"call_meters_to_ha\".\n  #     Permet de définir plusieurs lancements distincts, par exemple\n  #     pour consulter Veolia à une certaine heure, et GRDF à une autre heure.\n  event_name: call_grdf\n  # extra_opts - Paramètres complémentaires pour la ligne de commande (optionnel)\n  #   --grdf: Consulter GRDF\n  #   --veolia: Consulter Veolia IDF\n  #   --screenshot: Prendre une capture d'écran avant connexion.\n  extra_opts: [--grdf, --screenshot]\n  # optionnel - Emplacement des fichiers de trace, screenshot.\n  log_folder: /config\n  # optionnel (Par défaut: \"config.json\" dans le répertoire de `meters_to_ha.py`)\n  config_file: /config/meters_to_ha.json\n  # optionnel (Par défaut: \"\u003cREALMODULESCRIPTPATH\u003e/meters_to_ha.py\")\n  # script: /config/meters_to_ha/meters_to_ha.py\n  # optionnel (Par défaut: false) - add --keep-output option\n  keep_output: true\n  # optionnel (Par défaut: false) - add --display option - nécessite DISPLAY \u0026 serveur X!!\n  display: false\n  # optionnel (Par défaut: None) - Set DISPLAY for GUI interface (when display is true)\n  DISPLAY: 192.1.0.52:0\n  # optionnel (Par défaut: None) - Fichier pour la sortie STDOUT du script\n  outfile: /config/appdaemon/apps/meters_to_ha_script.log\n  # optionnel (Par défaut: None) - Fichier pour la sortie STDERR du script\n  errfile: /config/appdaemon/apps/meters_to_ha_err.log\n```\n\nConfiguration typique:\n\n```yaml\ngrdf:\n  module: meters_to_ha\n  class: MetersToHA\n  event_name: call_grdf\n  extra_opts: [--grdf, --screenshot]\n  log_folder: /config\n  config_file: /config/meters_to_ha.json\n  keep_output: true\n```\n\n#### Automatisation Home Assistant (AppDaemon)\n\nPour réaliser la tache de récupération une fois par jour, vous pouvez\najouter un automatisme à votre configuration Home Assistant comme ceci:\n\n```yaml\nalias: Veolia\ndescription: Déclencher l'événement qui démarre l'application MetersToHa sous \n  AppDaemon\ntrigger:\n  - platform: time_pattern\n    hours: '1'\n    minutes: '7'\n    alias: Déclenchement à partir de l'heure choisie\ncondition: []\naction:\n  - delay: '{{ range(0, 90*60+1) | random }}'\n    alias: Avec un délai variable pour ne pas charger le serveur tous en même \n      temps.\n  - event: call_meters_to_ha\n    event_data: {}\n    alias: Déclenche l'événement définit dans la configuration 'AppDaemon'\nmode: single\n```\n\nCela récupère la consommation dans les 90 minutes suivant 1h07 en émettant\nl'événement `call_meters_to_ha` ce qui déclenche le script sous AppDaemon.\nIl mettre en place une automatisation par fournisseur (avec événements\ndifférents) si vous souhaitez des horaires différents. Prenez en compte un\ndélai de minimum 5 minutes entre les 2 événements (pour limiter les\nressources utilisées sur votre système).\n\nExemple pour GRDF ou l'on tente de récupérer les données jusqu'à deux fois,\navec une condition qui vérifie que la dernière mise à jour était il y a\nplus de 17h.\n\n```yaml\nalias: Appel GRDF\ndescription: ''\ntrigger:\n  - platform: time_pattern\n    hours: '21'\n    minutes: '1'\n    seconds: '0'\n  - platform: time_pattern\n    hours: '23'\n    minutes: '1'\n    seconds: '0'\ncondition:\n  - condition: template\n    value_template: \u003e-\n      {{\n      (as_timestamp(now())-as_timestamp(states.sensor.gas_consumption_kwh.last_updated|default('1970-01-01')))\n      \u003e 17*3600 }}\naction:\n  - delay: '{{ range(0, 55*60+1) | random }}'\n    alias: Avec un délai variable pour ne pas charger le serveur tous en même \n      temps.\n  - event: call_grdf\n    event_data: {}\nmode: single\n```\n\n### Ajout des informations au tableau \"Énergie\"\n\nQuel que soit la méthode pour lancer le script, il convient de configurer\nvotre tableau \"Énergie\" pour le suivre dans Home Assistant.\n\nPour cela, accédez à la\n[page de configuration du tableau \"Énergie\"](https://my.home-assistant.io/redirect/config_energy/).\n\nAjouter les nouveaux compteurs (eau, gaz) dans les bonnes classes. Il\nconvient de choisir les totaux ici (pas les entités `daily`). Les compteurs\npermettent d'afficher la consommation journalière facilement sur d'autres\npages que le Tableau Énergie.\n\nLa documentation officielle indique qu'il faut attendre deux heures pour\nvoir apparaître la consommation sous le panneau Énergie. Mais ce sera plus\ncar la première valeur sert de référence.\n\n## Domoticz\n\nPrérequis :\n\n- \"Virtual Sensor\" sur Domoticz;\n- Une installation de type \"serveur\" ou Docker.\n\n### Création du \"Virtual Sensor\" sur Domoticz :\n\n- Créer un Matériel de Type \"Dummy\" depuis Domoticz\u003e Setup\u003e Hardware\n\n- Créer un \"Virtual Sensor\" de type : \"Managed Counter\".\\\n  Pour cela, depuis la ligne du Matériel Dummy, cliquer sur le bouton\n  dédié.\n\n- Configurer le sensor depuis Domoticz\u003e Utility. Utiliser le bouton \"Edit\"\n  de votre sensor dans l'onglet devices.\n\n  | \u003e                   | Sensor pour conso eau |\n  | ------------------- | --------------------- |\n  | __Type Counter__    | water                 |\n  | __Counter Divider__ | 1000                  |\n  | __Meter Offset__    | 0                     |\n\n### Spécificités de configuration\n\nOutre que la configuration des informations fournisseur et éventuelle clef\npour les captchas, vous devez définir les champs suivants:\n\n| Clef JSON             | Exemple                | Description                                                                                 |\n| --------------------- | ---------------------- | ------------------------------------------------------------------------------------------- |\n| __\"domoticz_server\"__ | http://127.0.0.1:8080/ | Url du serveur Domoticz                                                                     |\n| __\"domoticz_idx\"__    | 123                    | Le numero du \"virtual sensor\" Domoticz crée (se trouve dans : DomoticzDevices (Colonne Idx) |\n\n## MQTT\n\nNon testé.\n\n## Fournisseurs\n\n### Veolia\n\nIl semblerait que les données restituées par Veolia sont des fois un peu\n\"farfelues\". La meilleure méthode connue pour éviter cela est de\ncontournement c'est de réaliser l'appel entre 1h du matin et minuit.\n\nLe délai variable permet de repartir l'heure d'appel à Veolia entre les\nutilisateurs pour ne pas encombre le service. Vous pouvez aussi/en sus\ndéfinir une heure différente de 1h07 dans votre configuration Vous pouvez\nsûrement accepter de récupérer l'information un peu plus tard que cela vu\nqu'elle est de tout façon déjà décalé de qqs jours.\n\nVoici un exemple d'une récupération pour une journée partielle:\n\n![](images/PartialDay.png)\n\nEt voici un exemple de données \"farfelues\" (les 5400L de conso journalière\nsont inexactes).\n\n![](images/BadWaterDaily.png)\n\n### GRDF\n\nPour le moment pas compatible avec Domoticz (le \"connecteur\" nécessite un\ndéveloppement).\n\nLes données sont souvent à jour après 17h, mais régulièrement plus tard.\nPour éviter des appels API inutiles (sans nouvelles données), il semble\njudicieux de les programmer à partir de 21h seulement.\n\n## \"Serveurs\"\n\n### Docker - \"configuration système incluse\"\n\nLa mise en place le plus rapide est à priori avec Docker. Cela peut vous\naider à mettre au point votre fichier de configuration sans que cela soit\nun passage obligé.\n\nIl vous faudra environ 500Mo en sus de l'installation de\n[Docker](https://docker.com).\n\nVous pouvez vous passez de Docker et économiser des ressources en vous\nappuyant sur un serveur Linux que vous utilisez par ailleurs, ou encore\nvotre système Domotique (tel que AppDaemon avec Home Assistant).\n\nEn résumé, les fichier suivants donnent la configuration de Docker:\n\n- `docker-compose.yml` : plusieurs configurations de conteneurs\n  (environnements d'exécution) fonctionnelles, dont des configurations pour\n  le débogue.\n- `Dockerfile*`: Fichiers définissant \"l'installation\" de conteneurs.\n\nA cela vous devez \"juste\" ajouter votre fichier de configuration\n\"config.json\".\n\nEt puis vous exécutez l'une de ces commandes:\n\n```shell\ndocker compose run --rm meters-to-ha-veolia\ndocker compose run --rm meters-to-ha-grdf\n```\n\nOu en mode avec affichage (nécessite un serveur X local):\n\n```shell\ndocker compose run --rm meters-to-ha-display-veolia\ndocker compose run --rm meters-to-ha-display-grdf\n```\n\nDocker a parfois\n[un bogue (?)](https://github.com/docker/for-win/issues/13398) concernant\n`host.docker.internal` utilisé comme adresse pour le hôte sur lequel tourne\ndocker. Dans ce cas, vous pouvez fournir la configuration DISPLAY avec l'IP\nde votre PC directement avec `-eDISPLAY=`:\n\n```shell\ndocker compose run -eDISPLAY=10.33.2.69:0.0 --rm meters-to-ha-display-grdf\n```\n\nL'automatisation de l'exécution avec Docker dépendre de votre système - le\nconteneur Docker ne tourne pas en tache de fond - il n'est pas prévu pour\nautomatiser la tache par lui-même.\n\nSous Windows vous pourrez utiliser l'outil \"Planificateur de tâches\".\\\nSous Linux, vous utiliserez cron (crontab).\n\nPour mettre à jour une image docker, il faut recourir à 'build'. Exemple:\n\n```shell\ndocker compose build meters-to-ha-veolia\n```\n\n### Installation \"direct\"\n\nDe façon générale, le \"serveur\" nécessite l'installation des logiciels et\nbibliothèques prérequis:\n\n- Navigateur web + bibliothèque d'interface de contrôle:\n  - `firefox`+`geckodriver`, ou,\n  - `chromium`+`chromium-driver`\n- xvfb : Framebuffer (virtuel)\n- xephyr : Serveur X imbriqué (recommandé)\n- python3 : Interpréteur de scripts \"Python\"\n- Modules python3 (à installer) :\n  - selenium\n  - pyvirtualdisplay\n  - colorama\n  - urllib3\n  - requests\n  - paho-mqtt (en cas d'utilisation de MQTT)\n\nLes fichiers Dockerfile (Ubuntu 22.04), DockerfileDebian (Debian bullseye),\net DockerfileAlpine (Alpine 3.17) peuvent vous aider pour trouver les\ncommandes d'installation.\n\nLes modules python3 sont disponibles pour la plupart comme paquet système,\nsinon vous pourrez aussi les installer avec pip (avec le `requirements.txt`\nfournit dans ce dépôt):\n\n```shell\npython3 -m pip3 install -r requirements.txt\n```\n\n### Installation avec le sous-système Windows pour Linux (WSL)\n\nL'installation dans le sous-système Windows pour Linux (WSL) devrait être\négalement possible. Et à priori on peut même y configurer des tâches avec\ncron. Toutefois, l'évolution d'une installation système WSL à une autre\npeut nécessiter de tout réinstaller - pensez à gardez une copie de votre\nconfiguration et un script d'installation des outils.\n\nToutefois cette méthode n'a pas été testée.\n\n### Installation native sous Windows\n\nPour une solution n'utilisant aucune forme de Linux sous Windows (ni WSL,\nni Docker, ni une VM), vous devez installer Python sous Windows et les\nmodules nécessaires. La version testée est\n[3.10.9 obtenu depuis https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/).\n\nVous aurez également besoin de\n[ChromeDriver](https://chromedriver.chromium.org/downloads) pour Windows.\n\nVous pouvez extraire le fichier `ChromeDriver.exe` qui correspond à votre\nversion Chrome directement dans le dépôt que vous avez récupéré.\n\nUne autre méthode qui semble fonctionne c'est de laiser faire\n`undetected-chromedriver` à installer avec\n\n```shell\npip install undetected-chromedriver\n```\n\n`undetected-chromedriver` est un module qui se charge de récuperer le\nbinaire et de le patcher pour que la navigation soit moins détectable comme\nune navigation géré par un automatisme. Cela semble avoir une certaine\nefficacité pour la validation simple d'un captcha. Il faudra probablement\najouter l'option `--chrome-version` au lancement de `meterstoha.py` (voir\n[METERSTOHA.BAT](METERSTOHA.BAT) pour un exemple d'automatisation).\n\nEnsuite vous devez [installer MetersToHA](#installation-de-meterstoha).\n\nPour le lancement sous Windows, vous devez renseigner les chemins de\n`chrome` et `chromedriver` (absolu ou relatifs depuis là ou vous lancez le\nscript).\\\nVous pouvez omettre `chromedriver` si vous avez installé le module\n`undetected-chromedriver`.\n\nUn exemple d'un fichier de configuration est:\n\n```json\n{\n  \"veolia_login\": \"monm\\u00e9l@mon.domaine\",\n  \"veolia_password\": \"mot de passe\",\n  \"veolia_contract\": \"5453325\",\n  \"veolia_website\": \"IDF\",\n  \"veolia_load_historical_data\": false,\n  \"grdf_login\": \"monm\\u00e9l@mon.domaine\",\n  \"grdf_password\": \"mot de passe\",\n  \"grdf_pce\": \"21546000000000\",\n  \"ha_server\": \"http://homeassistant.local:8123\",\n  \"ha_token\": \"XXXXXXXXXXXXXXXXXXXXXX\",\n  \"chromium\": \"c:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\",\n  \"chromedriver\": \".\\\\chromedriver.exe\",\n  \"type\": \"ha\",\n  \"timeout\": \"30\"\n}\n```\n\nSans l'option `--display` le déroulement sera visible. Dans ce cas s'il y a\nun captcha à résoudre, le login ne sera pas réussi. L'option `--screenshot`\npermet d'enregister le ontenu du navigateur (caché) dans\n`screen_before_connection.png` ou vous pouvez vérifier s'il y avait un\ncaptcha ou pas.\n\nSinon, pour la résolution du captcha sous Windows en mode interactif,\nl'option `--display` est nécessaire. Lorsque le popup apparait, vous\\\ndevez le captcha et le valider. Cliquez le bouton \"Connexion\" également. Si\nle captcha est validé automatiquement, le script avance automatiquement\ncomme en mode caché et vous n'aurez pas à résoudre de captcha.\n\nExemple de lancement, avec un fichier de configuration appelée\n`winconfig.json`, avec une capture d'écran avant connexion.\n\n```shell\npython apps/meters_to_ha/meters_to_ha.py -c winconfig.json --grdf -r --display --screenshot\n```\n\nLe fichier [METERSTOHA.BAT](METERSTOHA.BAT) montre plus de variantes sur le\nlancement (interactif ou pas, avec trace ou pas).\n\nPour plus d'information concernant le contenu du fichier de configuration,\nvérifiez\n[le paragraphe correspondant](#le-fichier-de-configuration-configjson) dans\nle présent document.\n\n#### Planification de tâche\n\nVous pouvez planifier l'exécution de la tâche sous Windows.\n\nPour y parvenir, cherchez `Planificateur de tâches` dans la zone de\nrecherche windows.\\\nChoissez \"Créer une tâche de base\" et suivre le processus. Choississez\n\"Tous les jours\" et \"Démarrez le\" à une heure qui sera celle de tous les\njours. Puis \"Démarrer un programme\".\\\nIl est ensuite important de choisir votre `pythonw.exe` comme programme,\nles paramètres et \"Commencez dans\" qui doit correspondre au chemin de\nMetersToHA (contenant le sous-répertoire apps).\n\n![](images/Win11PlanificationTache.png)\n\nAvant de \"Terminer\", choisissez d'ouvrir les propriétés de la tâche afin de\npouvoir activer l'exécution même si l'utilisateur n'est pas connecté. Vous\npourrez y ajuster également d'autres paramètres (voir les onglets).\n\nTrouvez la tache dans \"Bibliothèque du Planificateur de tâches\" et faites\n\"Exécuter\" (dans le menu accessible par clique droit de la tâche) afin de\nvérifier que cela fonctionne (vérifiez les fichiers de sortie).\\\nQuand cela ne fonctionne pas, assurez-vous que tous les chemins sont\ncorrects.\n\n### Installation de MetersToHA\n\nVous pouvez extraire les fichiers de ce dépôt ou vous voulez.\n\nLe script `apps/meters_to_ha/meters_to_ha.py` et son fichier de\nconfiguration `config.json` suffisent (en sus des prérequis).\\\nLe fichier `config.json.exemple` peut servir comme base pour réaliser votre\nfichier de configuration.\n\nEn utilisant git, vous facilitez la mise à jour, sinon téléchargez\nl'archive.\n\n#### Installation avec `git`\n\nRécupération initiale:\n\n```shell\ncd REPERTOIRE_DE_DESTIONATION\ngit clone https://github.com/mdeweerd/meterstoha\ncd meterstoha\n\npip3 install -r requirements.txt\n# ou\npython -m pip install -r requirements.txt\n```\n\nMise à jour:\n\n```shell\ngit pull\n```\n\n#### Installation avec une archive\n\nExtraire l'archive, puis s'assurer que le script est exécutable (\\*nix):\n\n```shell\nchmod ugo+x apps/meters_to_ha/meters_to_ha.py\n```\n\n### Automatisation :\n\nUne automatisation permettra de lancer la récupération une fois par jour.\nIl est bien sûr préférable de d'abord valider le fonctionnement sans\nautomatisation.\n\nVous pouvez faire cela avec `cron` et un de ses fichiers de configuration\n`crontab`. Pour cela, ajoutez la ligne suivante à votre planificateur de\ntâches :\n\n```shell\n./apps/meters_to_ha/meters_to_ha.py --run\n```\n\nExemple ici avec `crontab` que l'on peut éditer avec :\n\n```shell\ncrontab -e\n```\n\nPour y ajouter le contenu qui suivent tout en:\n\n- Modifiant les chemins selon votre installation;\n- Garder que les lignes utiles (Veolia et/ou GRDF)\n\n```crontab\nSHELL=/bin/bash\nM2HA_PATH=/opt/MetersToHA/apps/meters_to_ha/\nM2HA_SCRIPT=${M2HA_PATH}apps/meters_to_ha/meters_to_ha.py\nM2HA_CONFIG=${M2HA_PATH}config.json\nM2HA_LOG=${M2HA_PATH}meters_to_ha.log\n# Veolia\n0  1 * * *   sleep ${RANDOM:0:2}m \u0026\u0026 ${M2HA_SCRIPT} --veolia -c ${M2HA_CONFIG} -log ${M2HA_LOG}.veolia\n# GRDF\n0 20 * * *   sleep ${RANDOM:0:2}m \u0026\u0026 ${M2HA_SCRIPT} --grdf   -c ${M2HA_CONFIG} -log ${M2HA_LOG}.grdf\n```\n\n## Dépannage\n\n### Première exécution :\n\nPar défaut le script est muet (il n'affiche rien sur la console et ne lance\npas la version graphique de Firefox). Il enregistre toutes les actions dans\nle fichier `INSTALL_DIR/veolia.log`. Je vous recommande pour la première\nutilisation d'activer le mode débogue. Cela permet d'avoir une sortie\nvisuelle de l'exécution du script sur la console et un suivi des actions\ndans Firefox.\n\nDéroulement de l'exécution :\n\n1. Chargement de tous les modules python --\u003e si erreur installer les\n   modules manquants (pip3 install ...)\n2. \"Sanity check\" de l'environnement :\n\n- Version\n- Prérequis logiciel externe --\u003e si erreur installer le logiciel manquant\n- Configuration Domoticz --\u003e si erreur configurer correctement Domoticz\n\n3. Connection au site Veolia et téléchargement de l'historique\n4. Téléversement des données dans Domoticz\n\n```shell\n./apps/meters_to_ha/meters_to_ha.py --run --keep-output --display\n```\n\nAfficher toutes les options disponibles :\n\n```shell\n./apps/meters_to_ha/meters_to_ha.py --help\n```\n\nLorque la récupération des données a déjà fonctionné (avec\n`--keep-output`), vous pouvez pendant les essais réutiliser le fichier déjà\ntéléchargé avec l'option `--skip-download`. Cela permettra la mise au point\nla configuration de l'envoi des données vers votre système domotique.\n\nExemple:\n\n```shell\n./apps/meters_to_ha/meters_to_ha.py --grdf -r --keep-output --skip-download\n```\n\n### Paramétrer votre système pour le mode débogue (optionnel, mais recommandé)\n\nSi vous rencontrez des problèmes à l'exécution, regardez dans un premier\ntemps le fichier \"veolia.log\".\n\nSi cela ne suffit pas, pour aller plus loin il sera utile d'utiliser le\nmode débogue (option `--display`).\n\nDans ce dernier cas il y a 3 scenarios :\n\n1. Le script est exécuté en locale par l'utilisateur avec lequel vous êtes\n   logués ==\u003e ca devrait fonctionner tout seul, mais vous devez utiliser\n   une machine de type \"Linux\" avec interface graphique ;\n2. Vous exécutez le script sur une machine distante Linux. Il convient\n   alors de vérifier que la commande suivante fonctionne après être\n   connecté sur la machine Linux distante (via `ssh` probablement) :\n   `xlogo`;\n3. Vous êtes sous Windows, vous pouvez par exemple utiliser la solution\n   [Docker](https://www.docker.com/) un serveur X (p.e.\n   [VcXsvr](https://sourceforge.net/projects/vcxsrv/)) et le lancer (!)\n   avec l'option \"Disable Access Control\", puis lancer l'un des scripts\n   `docker\\*Run.BAT` après avoir ajouté l'option '--display' à la ligne de\n   lancement du script.\n\nSi vous voyez bien une fenêtre X s'afficher à l'écran c'est que\nl'environnement X11 est correctement configuré. Le mode débogue du script\ndevrait fonctionner.\n\nSi par contre rien ne s'affiche, il convient de chercher sur internet\ncomment le faire fonctionner, il y a pleins de tutos pour cela. Ensuite\nvous pourrez utiliser le mode débogue.\n\n## Principe de fonctionnement\n\nL'outil simule la visite du site a grâce à l'outil `selenium`.\\\nIl procède alors aux étapes d'identification, parcourt les pages autant que\nnécessaire, et télécharge un fichier d'historique adéquat.\\\nCe fichier est alors décortiqué pour en extraire les informations utiles.\\\nCes données sont ensuite envoyés au système domotique choisi à travers son\nAPI.\n\n`Selenium` exécute un navigateur Firefox ou Chromium en mode \"Headless\".\n\nLe mode Headless indique que le système n'a pas d'écran.\n\nLe système Graphique (GUI) existe, mais l'affichage n'existe que dans une\nzone mémoire.\n\nIl est néanmoins possible de voir le déroulement en temps réel avec\nl'option `--display`. L'affichage n'est alors plus \"Headless\" et il vous\nfaudra un serveur X attaché à un écran physique.\n\n## Environnements testés:\n\nActuels (à travers Docker):\n\n- Debian Bullseye - Chromium - (Docker 1.2GB)\n- Alpine 3.17 - Chromium - (Docker 540MB)\n- Ubuntu 22.04 - Firefox - (Docker 1.2GB)\n- Home Assistant/AppDaemon - Alpine Linux v3.17 - Chromium\n\nAnciens (plus testés avec les versions récentes):\n\n- Debian Buster - Chromium\n- Ubuntu 20.04 - Firefox\n- Ubuntu 21.04 - Firefox\n\nA noter qu'Ubuntu supporte probablement aussi la solution avec Chromium.\n\n## Dépannage:\n\n- #9 NoSuchElementException pour `find_element(By.TAG_NAME, \"pre\")`. Le\n  processus pense avoir atteînt l'étape du résultat.\n  - Vérifiez que la résulution du captcha se fait correctement. Cette\n    erreur a été constaté lorsque cet autre message apparaissait:\n    `capmonster status 402{\"errorId\":1,\"errorCode\":\"ERROR_ZERO_BALANCE\",\"errorDescription\":\"Account has zero balance\"}`\n- #13 \"int is not subscriptable\". Constaté lorsque GRDF retourne\n  `{\"code\":500,\"message\":\"Internal Server Error\"}` (visible dans\n  `historique_gazpar.json`).\n  - Que faire?\\\n    Vérifiez `historique_gazpar.json` et si le problème n'est pas ponctuel,\n    vérifiez d'abord sur votre compte GRDF. Sinon ouvrir un ticket avec les\n    informations.\n- Absence de données (GRDF) :\n  - Parfois c'est le message interne trouvé dans `historique_gazpar.json`.\n    Du coup, les données ultérieures ne sont pas interprétées car il a été\n    observé qu'un rattrapage a lieux chez GRDF, rendant ces informations\n    disponibles ultérieurement.\n  - Peut aussi être dû à une erreur dans les données restituées (comme pour\n    le #13). Vérifiez dans les traces si cela perdure.\n  - Que faire?\\\n    Patienter/vérifier le contenu de `historique_gazpar.json`. Vérifier que\n    c'est cohérent avec votre compte GRDF.\n\n## Remerciements/Contributeurs\n\n- [s0nik42](https://github.com/s0nik42)\n- [k20human](https://github.com/k20human)\n- [guillaumezin](https://github.com/guillaumezin)\n- [rbalmes](https://github.com/rbalmes)\n- [mdeweerd](https://github.com/mdeweerd)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdeweerd%2Fmeterstoha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmdeweerd%2Fmeterstoha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdeweerd%2Fmeterstoha/lists"}