Bonsoir je vous présente ici, en juste retour des choses car c’est en partie grâce à ce forum que j’ai pu la développer, une intégration pour faire communiquer le routeur solaire MsunPv de Ard-tek et Home Assistant. Je ne suis pas le créateur du routeur, juste un utilisateur.
Les fichiers sont disponibles sur mon GitHub créé pour l’occasion. Vous trouverez dessus les fichiers pour les versions MsunPv_2_2b et MsunPv_4_4b, facilement déclinable pour d’autre versions.
MsunPv to HA
Introduction
Une intégration par le biais d’un fichier .yaml pour faire communiquer le routeur solaire MsunPv de Ard-tek et Home Assistant.
Précision préalable, le code de ce fichier a été écrit à la base pour une version 2 entrées, 2 sorties du MsunPv avec PowPV en négatif et les compteurs EnConso, EnInj, EnPV_J, EnPV_P en négatifs également (Projet MS_PV2_2b). Je l’ai décliné (par déduction) en une version 4 entrées, 4 sorties avec les compteurs en négatifs également (Projet MS_PV4_4b). Tout cela est bien sur facilement adaptable si vous êtes sur une configuration différente sur votre MsunPv (ex. compteurs en positifs).
Fonctionnalités
- Récupére les infos fournies par le MsunPv (Puissances, % de routage, températures, tension …)
- Récupére les valeurs des compteurs interne du MsunPv
- Permet d’intégrer les compteurs de consommation, de production et d’injection du MsunPv au ‹ dashboard energie › de Home Assistant
- Permet d’envoyer des ordres au MsunPv (ex. activer manubal pour forcer la chauffe du cumulus)
Installation
-
Télécharger les fichiers ‹ msunpv_2_2.yaml ›, ‹ msunpv_scripts_2_2.yaml › et ‹ msunpv_addons_2_2.yaml › ou les fichiers ‹ msunpv_4_4.yaml ›, ‹ msunpv_scripts_4_4.yaml › et ‹ msunpv_addons_4_4.yaml › selon que vous disposez d’une version 2 sorties ou 4 sorties et selon vos besoins.
Le fichier ‹ msunpv_x_x.yaml › récupère toutes les infos nécessaires au fonctionnement et crée les sensors pour Home Assistant.
Le fichier ‹ msunpv_scripts_x_x.yaml › contient tous les scripts pour commander le MsunPv depuis Home Assistant (Il est inutile si vous ne souhaitez pas le faire).
Le fichier ‹ msunpv_addons_x_x.yaml › contient les sensors permettant de visualiser les programmations horaires du MsunPv depuis Home Assistant (Il est inutile si vous ne souhaitez pas les afficher). -
Ajouter dans le fichier ‹ configuration.yaml › de Home Assistant les lignes suivantes
homeassistant: packages: !include_dir_named packages
Si la ligne ‹ homeassistant: › n’existe pas déja sinon ajouter simplement
packages: !include_dir_named packages
En dessous de celles-ci pour obtenir (par ex.)
homeassistant: customize: !include customize.yaml packages: !include_dir_named packages
-
Créer un dossier nommé ‹ packages › à la racine du dossier ‹ config › de Home Assistant.
-
Créer dans le dossier nommé ‹ packages › que vous venez de créer un dossier nommé ‹ msunpv ›.
-
Copier les fichiers téléchargés ‹ msunpv_x_x.yaml › et ‹ msunpv_scripts_x_x.yaml › dans le dossier ‹ msunpv › créé précédemment.
La création du dossier ‹ msunpv › n’est pas obligatoire et on pourrait très bien mettre les fichiers directement dans le dossier ‹ packages ›. C’est juste une question d’organisation pour que tous les fichiers concernant le MsunPv se retrouvent tous au même endroit, ce qui me parait plus simple pour les retrouver.
-
Ouvrir le fichier ‹ msunpv_x_x.yaml › et remplacer dans celui-ci ‹ IP_DU_MSUNPV › par l’adresse ip de votre MsunPv partout où cela est nécessaire dans le fichier puis sauvegarder.
- resource: http://IP_DU_MSUNPV/status.xml
Devient, si l’adresse ip de votre MsunPv est ‹ 192.168.0.111 ›
- resource: http://192.168.0.111/status.xml
-
Sauvegarder et redémarrer complétement Home Assistant.
-
Après le redémarrage vous devriez voir apparaitre de nouveaux sensors dans Home Assistant
Une vidéo youtube montant toute la manip est dispo: Comment installer msunpv.yaml.
- A partir de là on peut créer des cartes dans Home Assistant pour afficher les valeurs que l’on souhaite :
- Intégrer les compteurs dans le dashboard energy de Home Assistant :
- Envoyer des ordres au routeur à l’aide des services :
- Ou encore Par le biais d’automatisations :
- Intégrer les compteurs dans le dashboard energy de Home Assistant :
Comment ça fonctionne ?
Le but est de récupérer les infos fournit par le MsunPv à l’adresse http://IP_DU_MSUNPV/status.xml
<xml>
<rtcc>20:05:56 DI</rtcc>
<paramSys>20:05:57;22/10/2023;On;01:00;0,0;MS_PV2_2b;5.0.1;0000220;104a;104a;00:00;00:00</paramSys>
<inAns>326,4;75,5; 0; 0;233,3;0,0;0,0;0,0; 0; 0; 0; 0; 0; 0; 0; 0;</inAns>
<survMm>0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;</survMm>
<cmdPos>0;0;0;0;0;0;0;2;</cmdPos>
<outStat>0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;</outStat>
<cptVals>7e5c;ffffc2f3;fffea838;fdd3ef99;0;0;0;0;</cptVals>
<chOutVal>0;0;0;ff;:0,0;0,0;0,0;0,0;</chOutVal>
</xml>
Les infos qui nous interressent sont les dans lignes ‹ inAns ›, ‹ cmdPos › et ‹ cptVals › et à partir de celles-ci on crée des sensors Home Assistant afin de pouvoir soit les afficher soit les exploiter dans des automatisations ou scripts.
La partie du code permettant de les récupérer est la suivante :
rest:
#Récupération des données
- resource: http://IP_DU_MSUNPV/status.xml
scan_interval: 30 #Temps de récupération des données ici fixé à 30 secondes
method: GET
sensor:
- name: "msunpv_xml"
json_attributes_path: "$.xml"
value_template: "OK"
json_attributes:
- "inAns"
- "cmdPos"
- "cptVals"
La ligne :
scan_interval: 30 #Temps de récupération des données ici fixé à 30 secondes
Permet de faire cette récupération toutes les 30 secondes. Vous pouvez la modifier pour récupérer plus ou moins souvent les infos.
Une fois les infos récupérées on les traite pour créer les différents sensors.
template:
- sensor:
#Les entrées
- name: msunpv_powreso #Puissance réseau
unique_id: "msunpv_powreso"
state: >-
{{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[0] |float }}
device_class: power
unit_of_measurement: "W"
- name: msunpv_powpv #Puissance panneaux
unique_id: "msunpv_powpv"
state: >-
{{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[1] |float }}
device_class: power
unit_of_measurement: "W"
- name: msunpv_outbal #% routage cumulus
unique_id: "msunpv_outbal"
state: >-
{{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[2] |int }}
unit_of_measurement: "%"
etc...
Si par exemple vous n’avez pas de sonde de température branchée sur le MsunPv vous pouvez commenter les lignes les concernant comme ceci :
- name: msunpv_voltres #Tension réseau
unique_id: "msunpv_voltres"
state: >-
{{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[4] |float }}
unit_of_measurement: "V"
# - name: msunpv_t_bal1 #Température cumulus
# unique_id: "msunpv_t_bal1"
# state: >-
# {{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[5] |float }}
# unit_of_measurement: "°C"
#
# - name: msunpv_t_sdb #Température salle de bain
# unique_id: "msunpv_t_sdb"
# state: >-
# {{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[6] |float }}
# unit_of_measurement: "°C"
#
# - name: msunpv_t_amb #Température ambiante
# unique_id: "msunpv_t_amb"
# state: >-
# {{ (state_attr('sensor.msunpv_xml', 'inAns')|replace(" ","")|replace(",",".")).split(";")[7] |float }}
# unit_of_measurement: "°C"
Vous pouvez bien sur faire de même pour tous les capteurs qui ne vous interressent pas. Je vous encourage d’ailleurs à le faire car il n’y a rien de plus chiant que de devoir parcourir toute une liste de sensors inutiles quand on en cherche un en particulier.
Pour faciliter la lecture du code (fichier ‹ msunpv_x_x.yaml ›) j’ai regroupé les sensors en 3 catégories :
- Les ‹ entrées › qui concernent les différentes sondes branchées sur le MsunPv.
- Les ‹ compteurs › qui remontent les valeurs des compteurs internes du MsunPv.
- Les ‹ commandes › qui permettent d’envoyer des ordres au MsunPv.
Exemple du résultat dans mon dashboard Home Assistant
Même si encore incomplète, une FAQ est présente sur le GitHub. N’hésitez pas à poser vos questions. Pas mal d’infos sont déjà disponible sur la page dédiée dans le forum ArdTek.