Closed julienc23 closed 6 months ago
Salut,
Malheureusement il n'y a pas d'alternative au système d'add-ons pour installer HA Linky
Bonne journée
En général l'alternative c'est une méthode d'installation "manuelle", ça existe pour pas mal d'add-on.
T'as des exemples ?
Pour MQTT par exemple : https://www.youtube.com/watch?v=7bJnzKhEZbA
Oui effectivement, ça pourrait être un conteneur Docker qui tourne à côté de Home Assistant et qui communique avec l'API websocket de Home Assistant, mais ça nécessiterait un peu de travail car il faudrait gérer:
En effet, je ne connais pas bien cette interaction configuration et authentification et j'imagine que c'est le gros avantage de l'add-on. Mais ça serait vraiment bien de pouvoir offrir ce mode d'installation pour tous les gens qui ont HA installé sur autre chose que la version packagée. Si je peux aider en quoi que ce soit, n'hésite pas.
Si tu veux, tu peux déjà essayer de lancer l'image Docker en mode standalone à partir du Dockerfile existant et voir ce qui se passe !
Je ne sais pas si le run.sh
va se lancer à cause de la première ligne, mais dans le cas contraire tu devrais pouvoir override la commande par défaut (le CMD du Dockerfile) avec un docker run
j'ai tenté mais j'ai une erreur au build :
Step 10/14 : RUN npm ci --ignore-scripts
---> Running in 1e0ab0ed68d2
npm ERR! Cannot read property 'chalk' of undefined
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-12-20T09_05_55_748Z-debug.log
The command '/bin/sh -c npm ci --ignore-scripts' returned a non-zero code: 1
C'est peut-être la version de npm qui est trop vieille, tu peux rajouter ça dans le Dockerfile
juste avant le npm run ci
?
node --version
npm --version
v12.22.12 6.14.16
Oula c'est incroyablement vieux ! Il faudrait idéalement node 18 (et npm 9 qui logiquement sera installé avec)
Selon l'image Docker de base que tu as choisi les instructions vont varier donc je ne peux pas te donner de commande magique
Si ça peut t'aider, voilà les commandes de build en mode "add-on": https://developers.home-assistant.io/docs/add-ons/testing/
My bad, j'ai fait ça sur une vieille machine sans update les images... ça passe mieux avec la dernière Alpine.
Effectivement j'ai dû remplacer la 1ère ligne du path du shell, et ça se lance. Par contre, j'ai une erreur liée à configuration, j'imagine que c'est "normal".
HA Linky is starting
Error: Cannot read user configuration: Error: ENOENT: no such file or directory, open '/data/options.json'
Effectivement, ce fichier est fourni par Home Assistant. C'est censé être une représentation JSON de la config définie ici: https://github.com/bokub/ha-linky/blob/master/config.yaml
En gros ça devrait être un fichier dans ce genre pour une récupération de la consommation:
{
"consumption PRM": "123456789",
"consumption token": "xxx.yyy.zzz",
"consumption name": "Linky consumption",
"consumption action": "sync",
"production PRM": "",
"production token": "",
"production name": "Linky production",
"production action": "sync"
}
Tu devrais pouvoir lui donner le ficher avec un volume, non ?
J'y suis arrivé mais maintenant il demande à se connecter à HA j'imagine et il n'a pas la configuration. Je ne sais pas du tout comment ça fonctionne, c'est HA qui poll régulièrement via la connexion web-socket ? ou c'est le docker qui push ?
Trop bonne nouvelle !
Alors HA met à disposition une API websocket, et mon add-on s'y connecte quand il a besoin d'une info (ou pousser des données), puis ferme la connexion.
La l’authentification est codée ici: https://github.com/bokub/ha-linky/blob/master/src/ha.ts#L33-L69
Et ça suit ces étapes (Server states): https://developers.home-assistant.io/docs/api/websocket/
En gros:
ws://supervisor/core/websocket
puis ça attend le premier message de HAauth_required
SUPERVISOR_TOKEN
(fourni par le système d'add-ons)auth_ok
, alors tout est prêt pour communiquer !Tu pourrais essayer de modifier WS_URL
ligne 7 voir déjà si tu arrives à établir une connexion (il parait que le path c'est /api/websocket
), et ensuite mettre un token dans la variable d'env SUPERVISOR_TOKEN
pour que Home Assistant te laisse passer
J'ai tenté, je pense que j'arrive à me connecter mais j'ai maintenant une 400 :
HA Linky is starting
Connection with Home Assistant failed : Error: Server responded with a non-101 status: 400 Bad Request
C'est bizarre... Je me demande si on pourrait avoir plus de détails sur l'erreur.
Tu peux essayer de rajouter des logs comme ceci (entre les lignes 37 et 39 )?
client.addListener('connectFailed', function (error) {
console.log(error);
console.log(Object.keys(error));
console.log(JSON.stringify(error));
reject('Connection with Home Assistant failed : ' + error.toString());
});
Et d'ailleurs ta WS_URL
ressemble à quoi ?
Alors j'avais indiqué mon URL "publique" qui passe par un nginx et visiblement c'était en partie le problème
: HA Linky is starting Error: Server responded with a non-101 status: 400 Bad Request Response Headers Follow: server: nginx date: Fri, 22 Dec 2023 17:16:31 GMT content-type: text/html content-length: 248 connection: close
at WebSocketClient.failHandshake (/linky/node_modules/websocket/lib/WebSocketClient.js:339:32) at ClientRequest.<anonymous> (/linky/node_modules/websocket/lib/WebSocketClient.js:278:18) at ClientRequest.emit (node:events:514:28) at HTTPParser.parserOnIncomingClient [as onIncoming] (node:_http_client:693:27) at HTTPParser.parserOnHeadersComplete (node:_http_common:119:17) at Socket.socketOnData (node:_http_client:535:22) at Socket.emit (node:events:514:28) at addChunk (node:internal/streams/readable:545:12) at readableAddChunkPushByteMode (node:internal/streams/readable:495:3) at Readable.push (node:internal/streams/readable:375:5)
[] {} Connection with Home Assistant failed : Error: Server responded with a non-101 status: 400 Bad Request Response Headers Follow: server: nginx date: Fri, 22 Dec 2023 17:16:31 GMT content-type: text/html content-length: 248 connection: close `
En modifiant la WS_URL et en mettant directement l'IP:PORT du HA sans passer par nginx en front, ça fonctionne parfaitement :
HA Linky is starting Connection with Home Assistant established PRM *** found in configuration for consumption [22/12 17:33] New PRM detected, importing as much historical consumption data as possible Successfully retrieved consumption load curve from 2023-12-15 to 2023-12-22 Successfully retrieved daily consumption data from 2023-07-18 to 2023-12-15 Successfully retrieved daily consumption data from 2023-02-18 to 2023-07-18 Successfully retrieved daily consumption data from 2022-09-21 to 2023-02-18 Successfully retrieved daily consumption data from 2022-04-24 to 2022-09-21 Successfully retrieved daily consumption data from 2021-11-25 to 2022-04-24 Successfully retrieved daily consumption data from 2021-06-28 to 2021-11-25 Successfully retrieved daily consumption data from 2021-01-29 to 2021-06-28 Cannot fetch daily consumption data from 2020-09-01 to 2021-01-29, here is the error: Conso API a répondu avec une erreur Code: 400 Réponse : { "status": 400, "message": "The Enedis API returned an error", "error": { "error": "ADAM-ERR0125", "error_description": "The start date must be greater than the history deadline." } } Data import returned 1218 data points from 29/01/2021 to 21/12/2023 Data synchronization planned every day at 06:50:07 and 09:50:07 Connection with Home Assistant closed
Je vais voir si j'ai des données dans HA mais c'est encourageant !!
Je ne vois pas de nouvelles entités dans HA, je dois déclarer quelque-chose ?
Non ça devrait être bon ! Félicitations 🎊
Tu peux suivre le README pour ajouter les statistiques au tableau de bord Énergie
En effet, je n'avais pas vu le "Linky consumption" , ça fonctionne du coup! Merci pour l'aide, je vais réfléchir comment on pourrait packager/documenter ça!
Si tu veux me partager comment tu as fait je peux commencer une pull request que tu pourras review ensuite
Si tu le sens tu peux aussi commencer la pull request !
Je vais détailler les étapes car c'est un peu délicat pour une PR, il faudrait rajouter des variables, là j'ai modifié en dur deux choses :
$ git diff
diff --git a/run.sh b/run.sh
index 559dbd0..03152ec 100644
--- a/run.sh
+++ b/run.sh
@@ -1,3 +1,3 @@
-#!/usr/bin/with-contenv bashio
+#!/bin/sh
node --experimental-modules dist/index.js
diff --git a/src/ha.ts b/src/ha.ts
index aa913f7..8bdc571 100644
--- a/src/ha.ts
+++ b/src/ha.ts
@@ -4,7 +4,7 @@ import { auth } from 'home-assistant-js-websocket/dist/messages.js';
import { debug, warn } from './log.js';
import dayjs from 'dayjs';
-const WS_URL = 'ws://supervisor/core/websocket';
+const WS_URL = 'ws://<IP HA>/api/websocket';
export type SuccessMessage = {
id: string;
Ensuite j'ai build de la manière suivante :
docker build . --build-arg="BUILD_FROM=alpine:latest"
J'ai créé le fichier options.json :
{
"consumption PRM": "<ID PRM>",
"consumption token": "<MON TOKEN>",
"consumption name": "Linky consumption",
"consumption action": "sync",
"production PRM": "",
"production token": "",
"production name": "Linky production",
"production action": "sync"
}
Et j'ai monté le volume dans le docker, par exemple avec compose et j'ai passé le token HA :
ha-linky:
image: d0dc6ce885ab
container_name: ha-linky
environment:
- SUPERVISOR_TOKEN=<MON TOKEN HA>
volumes:
- <MON PATH>/ha-linky/data:/data
restart: unless-stopped
Et ça roule :+1:
Hello ! J'ai commencé à rajouter une étape de build / deploy pour une image docker "standalone".
De plus, j'ai fait en sorte que l'URL de l'API websocket puisse être définie en variable d'env.
Est-ce que tu pourrais essayer de lancer ton docker-compose comme ça et me confirmer que ça fonctionne ?
ha-linky:
image: ghcr.io/bokub/ha-linky
environment:
- SUPERVISOR_TOKEN=<ton token HA>
- WS_URL=ws://<ton IP HA>/api/websocket
volumes:
- <ton dossier>/ha-linky/data:/data
restart: unless-stopped
Merci !
no matching manifest for linux/arm64/v8 in the manifest list entries
Hello à vous deux, je viens de suivre votre discussion pour activer moi aussi ha-linky sur mon install docker (sur rpi 5).
J'ai voulu mettre à jour mon fichier compose mais j'ai pas accès à l'image ghcr.io/bokub/ha-linky
il semblerait ou alors elle n'existe plus (?). Du coup j'ai essayé avec ghcr.io/bokub/ha-linky-aarch64
mais vu la date de build il semble qu'elle ait pas été rebuildée depuis l'ajout dans le code des variables d'env WS_URL.
Ça serait possible de me donner accès à l'image standalone également ou alors mettre à jour l'image existante ?
Merci beaucoup pour le boulot !
Hello ! Je suis en train d'écrire un README, j'essaie de te donner des instructions demain comme ça tu pourras me confirmer que tout fonctionne bien !
@iciantoine En fait pas besoin d'attendre demain, tu peux builder l'image ha-linky
avec la commande suivante. Pour le reste tu devrais t'en sortir avec les messages précédents, et une documentation plus détaillée arrive bientôt
docker build https://github.com/bokub/ha-linky.git -f standalone.Dockerfile -t ha-linky
Fais moi signe si ça ne fonctionne pas !
Hello @julienc23 , je viens d'ajouter un peu de documentation à la fin du README.
N'hésite pas à me faire signe si tu la trouves incomplète ou pas assez précise, ou si j'ai fait une erreur
Bonne soirée !
Salut @bokub, la doc me semble OK. Par contre tu as abandonné l'idée de l'image Docker ? Ca aurait été bien pratique!
Oui, trop galère de builder une image pour chaque architecture de processeur, et ça ne couvrera jamais 100% des utilisateurs
Et finalement, c'est pas très long pour les utilisateurs finaux de construire leur propre image, surtout que ça peut être fait en une seule ligne sans même passer par un git clone, et que ces utilisateurs ont déjà docker d'installé
Ok je comprends. Si tu fais arm pour Raspberry, tu couvriras pas mal d'utilisateurs mais normalement les gens qui ont une install non-HAOS devraient s'en sortir avec la doc! Merci en tout cas.
Merci, c’est parfait ! 😃
Merci beaucoup à vous, c'est parfait !
Est-ce qu'il y a des plans concernant l'import de données (via le CSV d'Enedis) en utilisant le container ha-linky ? Du genre, dans le même volume que options.json, chercher un fichier <linky_import>.csv
?
Yes, tu mets ton fichier CSV dans un dossier sur ta machine, puis tu fais un volume vers un dossier /config
dans le conteneur
Par exemple: -v ~/mon-dossier:/config
Bonjour et merci pour ce travail!
Nous sommes nombreux à utiliser Home Assistant sur des installations "custom" donc en dehors de HAOS ou Home Assistant Supervised donc il est impossible d'utiliser les add-ons.
Est-il possible de documenter l'installation sur ce type de déploiement ?
Merci