Routeur solaire MsunPv et HA

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).


:face_with_monocle: 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)

:hammer_and_wrench: 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 :

:technologist:t2: 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.



3 « J'aime »

Salut,
un grand merci pour ce tuto et explications détaillé.
Ca tombe super bien, j’ai installé semaine dernière ce routeur solaire qui au passage est vraiment excellent…

Salut @Dujack
N’hésite pas à venir poser des questions si il y’a des choses que tu ne comprends pas.

Petits conseils :

  • Il faut éviter dans le mesure du possible de modifier les noms et uniques_id des entités directement dans les fichiers car certaines sont liées à d’autres. Les noms peuvent se modifier par l’UI de home assistant par la suite.
  • En cas de modifications dans les fichiers je conseille fortement de commenter les lignes que vous modifiez car en cas de nouvelle version des fichiers il faudra refaire ces modifications. (Normalement les fichiers ‹ msunpv_x_x.yaml › et ‹ msunpv_scripts_x_x.yaml › ne devraient plus être modifiés sauf grosse erreur dedans)

Salut @Tochy ,
Quand tu parles de « avec PowPV en négatif et les compteurs EnConso, EnInj, EnPV_J, EnPV_P en négatifs » tu veux dire quoi? Comment savoir si c’est mon cas sur mon routeur (j’ai pas touché la config usine de Patrick)
J’ai reçu mon MsunPV semaine dernière, j’arrive à monitorer toutes les valeurs mais par contre je n’arrive pas à commander le routeur comme par exemple forcer la mise en marche du cumulus.
J’avais récupéré un fichier (je crois sur le site ard-tek ou bien forum photovoltaique) qui est légèrement différent du tiens alors avant de tout modifier je voudrais etre sûr qu’il sera compatible.
Merci…
Jacques

Bonsoir

Pour le positif et négatif, sur l’interface web du routeur tu as soit powpv (quand il y,a du soleil bien sûr) et les compteurs qui s’affichent en positif, soit en négatif.


On voit sur la photo ci dessus que c’est en négatif dans mon cas.

Logiquement si tu l’as reçu la semaine dernière tu devrais avoir les valeurs en positif car depuis la mise a jour 104a c’est le cas par défaut mais vérifie tout de même dans l’interface du routeur.

Pour les fichiers le mieux c’est de les récupérer sur le github c’est là que se trouvent les dernières versions. Il faut que tu aies le fichier msunpv_2_2.yaml et msunpv_scripts_2_2.yaml pour pouvoir utiliser les commandes (ou les versions _4_4 des fichiers si tu as un MsunPv 4 entrées 4 sorties)
Il y’a aussi sur le github une page dédiée aux commandes avec des exemples pour utiliser des boutons.

1 « J'aime »

j’ai bien des valeurs positives. Tes fichiers .yaml sont uniquement pour du négatif?
Il me faudrait changer quoi pour du positif?

Tout est expliqué sur le github

Lien vers la FAQ

1 « J'aime »

@Dujack

J’ai rajouté le calcul pour la partie % vers W dans le fichier ‹ msunpv_addons_moresensonrs.yaml ›. Tu peux l’installer comme les autres si tu le désires. Les lignes du sensor sont commentées dans le code, il faudra enlever les # en début de ligne pour que le sensor remonte comme expliqué ici

Il ne faut pas perdre de vu que ce calcul n’est qu’une estimation et que de plus quand ton cumulus sera chaud il affichera en permanence 2880 W puisque le % restera à 400% dans ce cas là.

Concernant les scripts de commandes, vu qu’ils sont présents dans les paramètres/automatisations et scènes/scripts. Si sur le script ‹ msunpv_routage_on_off › tu cliques sur les 3 point à droite et tu fais exécuter que se passe t’il ? Si cela fonctionne ton routeur devrait se mettre en position inject sur sa page web (n’oublie pas de le remettre sur zéro ensuite).
Si cela fonctionne c’est qu’il y’a un problème dans la façon dont tu appelles les scripts.
N’hésites pas à faire un retour ici.

Salut @Tochy ,
J’ai tout réinstallé, tous les capteurs et autres fonctionnent hormis les scripts. J’ai exécuté un script comme tu m’as dit et voilà (en bas) le message d’erreur. Pourtant comme tu peux voir dans la liste, le script soit disant absent est bien là…

Je crois que j’ai trouvé. une coquille de ma part.
Dans le fichier msunpv_scripts_x_x.yaml en bas le dernier script est


  msunpv_commandes_routeur: #Envoi des commandes au MsunPv
    alias: msunpv_commande_routeur
    sequence:
      - service: shell_command.msunpv_commandes
        data: {}
      - delay:
          hours: 0
          minutes: 0
          seconds: 1
          milliseconds: 0
      - service: homeassistant.update_entity
        data: {}
        target:
          entity_id: sensor.msunpv_xml
    mode: single

Essaye de remplacer sur la première ligne msunpv_commandes_routeur par msunpv_commande_routeur

J’ai du coup aussi corrigé les fichiers sur le GitHub, merci pour le retour

:grin: :grin:
Ca marche nickel maintenant… Félicitation
Par contre avec ton fichier de capteur, il n’y a pas la valeur de l’injection totale dans le réseau?
Je l’avais sur le premier fichier que j’avais mis. Tu l’as supprimé de ton côté ou bien j’ai zappé un truc?

Dans le fichier msunpv_addons_moresensors.yaml ?

Parce que logiquement l’injection reseau est toujours dans le fichier msunpv_x_x.yaml ‹ sensor.msunpv_eninj › qui est la production injectée journalièrement.

Il y’a aussi le ‹ sensor.energie_msunpv_eninj › qui lui une fois intégré au dashboard energie te fais le total sur la période choisie.

Le fichier moresensors ne contient que des sensors calculés en supplément des sensors de base pour facilité la création des cartes.

Sur l’interface du msunpv, le eninj indique -1.2w (normal j’ai tout consommé).
Dans HA ca m’indique des kilowatt… … :scream:
Donc je ne comprends pas pourquoi.

sensor.msunpv_eninj a toujours été en Wh par contre sensor.energie_msunpv_eninj est lui en kWh.

Peut être est ce lui que tu affichais. Tu peux aussi dans l’UI de HA modifié l’unité peut être l’avais tu changé.

Salut @Tochy ,
Je ne voulais pas parler de w ou Kw mais plus que via HA je n’ai pas les mêmes valeurs que dans le routeur, par exemple:


image

Pour en enpv_J on est d’accord, c’est bien la même valeur (w vs kw)
Par contre celle de enpvj est différente. Tu as une idée?

Je ne peux que confirmer que @Tochy a fait un excellent travail sur cette intégration qui fonctionne chez moi sans aucun soucis :slight_smile:

1 « J'aime »

Quelles valeurs affichent ‹ energie_msunpv_eninj › et ‹ msunpv_eninj › ? As tu les mêmes valeurs sur les 2 a l’unité de mesure près bien sur vu qu’une est en kWh et l’autre en Wh ?

Si c’est bien le cas je pense que tu as juste oublié de faire la conversion en positif pour ‹ msunpv.eninj › comme tu l’as faite pour les 2 autres compteurs.

J’ai bien les deux mêmes valeurs
image

Pourtant la modif des deux compteurs à bien été faite.
D’ailleurs pourquoi j’ai une valeur aussi grande alors que j’ai injecté 0w dans le réseau?
Je ne trouve nulle part cette valeur dans le msunpv.

image

image

Peux tu me confirmer que tu es bien en conf projet MS_PV2_2c ou MS_PV4_4c, sinon dit moi quelle version tu as ? (c’est indiqué sur la page web du routeur)

Si tu es bien en 2_2c ou 4_4c il faut alors laissé les compteurs ‹ energie_msunpv_eninj › et ‹ msunpv_eninj › en négatif (et juste ces deux là). Je n’y avait pas prêté attention car Patrick avait indiqué les avoir passé en positif mais apparemment dans les conf 2_2c et 4_4c le compteur d’injection est toujours en négatif. La valeur qui est affiché sur ton HA tant a confirmé cela.

image

Et voilà après modification…

image

Tu es un dieu… :grinning: :wink:

Par contre pourquoi energie est en positif?