Récupérer registres Modbus dans HA

Bonjour,
Je désire remonter quelques variables Modbus (pour l’instant 7 variables INT16) a partir de node-red et les récupérer dans HA.

J’ai lu quelques post a ce sujet mais cela me parait trop complexe pour mon utilisation.

Quelle Docker ou transport faut-il utiliser pour faire ce boulot, je pensais a « mqtt » mais je n’ai aucune pratique, pouvez-vous me guider dans ce choix ou autre.

PS : les variables sont déjà dans Node-red récupérée avec le module LECT-MDB,
mon tableau avec ses valeurs : [62,0,1406,9,48,28,27] .

Bav,

Ma configuration


[center]## System Health

version core-2021.11.3
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.75
arch x86_64
timezone Europe/Brussels
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 6.6
update_channel stable
supervisor_version supervisor-2021.10.8
docker_version 20.10.8
disk_total 228.5 GB
disk_used 9.1 GB
healthy true
supported true
board generic-x86-64
supervisor_api ok
version_api ok
installed_addons Samba share (9.5.1), MariaDB (2.4.0), AirSonos (3.2.0), File editor (5.3.3), NGINX Home Assistant SSL proxy (3.0.2), SSH & Web Terminal (9.1.0), Mosquitto broker (6.0.1), Node-RED (10.1.0), AdGuard Home (4.2.0), eWeLink Smart Home (1.2.3), Zigbee2mqtt (1.22.0-2), deCONZ (6.10.0)
Lovelace
dashboards 2
resources 0
views 2
mode storage
[/center] ___

Alors j’avance doucement, voici ma config actuelle pour la remontée des info :


Le retour du debug :
image
Apparemment le tableau se trouve bien dans de msg:payload.
Je continue de chercher une solution
:slight_smile:

Vu que tu as installé NodeRed via l’addon, tu as une palette préinstallée node-red-contrib-home-assistant-websocket qui permet de faire le lien entre HA et NodeRed.
La communication est possible dans le sens HA → NR (il se passe un « truc » dans HA, je déclenche un flot NR par exemple) et dans le sens NR → HA (mettre à jour un sensor ou déclencher une action dans HA).
Une excellente documentation est disponible là node-red-contrib-home-assistant-websocket

Bonjour Golfvert et merci pour ta réponse,
J’ai bien suivis ton lien et le serveur est ok, par contre je ne sais pas si je dois créer une entité ou autre pour la récupération des infos dans HA.
J’ai encore un peut de mal a me retrouver dans les différentes options (entités, appareils, intégrations et leurs fonctions … :slight_smile: ).
Donc pour mes data est-il préférable de créer une « entité ou autre … » avec le tableau complet ou faut-il d’abord isoler et créer une « entité ou autre … » pour chaque valeurs?
Et cette « entité … » doit-elle être construite dans HA ou dans NodeRed ?
Bat,

Je ne peux pas me prononcer sur le « préférable ». Il faut comprendre les alternatives en lisant les docs et en faisant des tests. Après, une fois ça « digéré » tu peux choisir ce qui te sembles la « bonne » solution pour toi.
J’ai choisi par exemple de créer des entités du côté NodeRed et d’avoir des attributs de cette entité pour des informations complémentaires. On peut avoir N entités à la place…
Je crains qu’il n’y a pas une bonne solution et X mauvaises.

Bonjour Golfvert,
Ca y est Je suis parvenu a faire remonter mes données dans HA via websocket comme tu me la suggéré.

Comme je débarque dans cet environnement j’ai passé quelques heures a essayer de comprendre le fonctionnement global de la bête (pas évident pour moi car je viens du monde de l’automation industrielle et les réactions des automates programmables sont quelques peut différentes au niveau de la gestion des mises a jour des valeurs et variables en générales "fonctionnement cyclique et répétitif " …).

Voici donc en image les blocs utilisés ;

Détails des blocs :

Lecture MDB :

  • lecture de 7 variables Int16 a partir de l’adresse « 3500 » a fréquence de 300 sec
  • Visualisation de la réponse dans le bloc « Modbus Réponse »

Extraction de chaque valeurs :

  • bloc fonction avec comme code dans l’onglet « On Message »
msg.payload = (msg.payload[0] + " °C")

         return msg;
  • création de chaque entité vers HA avec les blocs « Entity » de Node Red
    Je me suis aperçu après coup que les champs optionnels vers HA étaient accessibles car en apparence il sont comme grisés et je ne me suis pas attardé dessus, mais au contraire ils sont bien accessibles la seule question c’est pour la sortie vers HA, je ne sais pas quel niveau je doit positionner entre (msg, flow, global,).

Je pense que ce serait plus « propre » de les utiliser ! :thinking:

Encore merci pour ton aide,

Pour l’injection toutes les 300 secondes (et pour bien d’autres choses), j’utiliserais le noeud cron plus node-red-contrib-cron-plus (node) - Node-RED c’est le couteau suisse des exécutions répétées et/ou programmée.
Effectivement, le noeud entité de la palette home-assistant-websocket tu peux aussi mettre des attributs.
Ca donne un truc comme ça:

Pas besoin d’avoir un noeud fonction avant. Tu peux directement accéder à l’info dans le noeud entité.
Et même de deux manières :slight_smile:
Avec msg.payload[0] comme tu l’as fait et avec jsonata (le genre de S:) dans l’exemple.
Le jsonata permettrait (par exemple) de faire des calculs directement (là ça n’a sans doute pas de sens, mais c’est pour l’exemple).

Ceci dit, il n’y a pas de « bonne » et de « mauvaise » solution. Je pense qu’il faut faire quelque chose que l’on comprend. Donc même si « esthétiquement » c’est moins beau ou moins efficace, on s’en fout. On n’est pas à un pouillème de seconde :wink:

Salut Golfvert,
Et oui cron est implémenté dans HA je ne savais pas merci pour l’info, j’ai modifié comme tu me la suggéré ça fonctionne en partie.
Je retrouve bien ma variable « entité » dans HA avec comme « valeur » « msg.payload » quand je l’insère dans une lovelace/carte « entite » voici le résultat quand je clic sur la variable ;
Capture du 2021-11-24 12-12-31
Donc je retrouve bien mes attributs avec leurs valeurs, par contre j’ai tenté de créer dans cette carte l’affichage des entités, voici le résultat ;


Presque tout est ok … sauf la valeur qui n’apparaît pas ??? Je ne comprend pas il n’y a pas d’erreurs de syntaxe et pourtant la valeur s’affiche bien dans le popup de la variable ci-avant !
Je te met les config de Node Red pour info;

prog_node_red_chaudiere

Voila et merci pour tes conseils très précieux, :slight_smile:

Deux pistes:

  • dans le noeud entité, quand tu mets du jsonata, il ne faut pas de msg. c’est juste payload[1] et ainsi de suite. Je suis surpris que dans l’affichage de l’entité dans le debug ça marche
  • un mélange de minuscule/majuscule/underscore ( le _ ) dans les noms d’entités. Je n’ai jamais compris si ça avait une importance. Mais, par principe, j’évite les incohérences.

Et détail, tu ne peut pas mettre un tableau comme valeur d’une entité. Donc, msg.payload pour « State » c’est pas bon.
Donc, il faut prendre une des valeurs du tableau ou ce que tu veux comme nombre mais pas un tableau…

Bien vu deux choses modifiées ;
1 - comme tu l’a signalé j’ai enlevé le « msg » du Jsonata au niveau de la déclaration des attributs.
2 - une majuscule était dans la visu alors que dans la déclaration il fallait une minuscule, donc ça a de l’importance a priori, c’est comme dans la ligne de cde de linux c’est différencié aussi.
ps : pour le « underscore » il est accepté contrairement au tiret qui lui ne passe pas.
Super merci encore une foi,
Bonne soirée,