Récupérer des information de mon automate maxisun

Bonjour a tous,

ca fait maintenant 4 mois que je suis rentré dans le monde home assistant et plus j’avance plus je cherche a intégrer des équipements déjà existant dans mon domicile.

##Mon problème

J’ai acquis il y a quelques années une régulation pour mes panneaux solaire thermique et mon plancher chauffant nommée Maxisun ( Accueil (ard-tek.com).
cette régulation a un fichier xml de sortie de la forme suivante:

<response>
<rtcc>23:14:32 ME</rtcc>
<inAns> 1,0; 1,2; 21,5; 26,8;149,9; 29,6;149,9; 21,6; 200; 200; 200; 200; 200; 200; 200; 200;</inAns>
<survMm>0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;</survMm>
<cmdPos>4;0;0;0;0;0;0;0;</cmdPos>
<outStat> 0; 0; 0; 0;100; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0;</outStat>
<cptVals>4188;c124;5b1c;8e;ca24;d10b;144;8c4e;</cptVals>
<chOutVal>4;0;1;ff;: 21,8; 0,0; 0,0; 0,0;</chOutVal>
</response>

Je cherche à récupérer régulièrement dans des sensor les valeurs individuellement divisées par des « ; » contenues entre les balises <inAns> et </inAns>, ce sont les remontées des différentes sondes de température en °C.

j’ai essayé par mal de solutions a base de requêtes Curl, d’intégration restful, de script bash,… et j’en passe mais je crois que j’ai largement atteins mon niveau d’incompétence et il est temps pour moi de vous demander de l’aide.

est ce que quelqu’un pourrait m’aider ou a minima me guider sur une voie pour récupérer ces valeurs?

merci par avance pour votre aide.

Ma configuration


[center]## System Information

version core-2023.1.5
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.7
os_name Linux
os_version 5.15.80
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4999
Installed Version 1.29.1
Stage running
Available Repositories 1196
Downloaded Repositories 10
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 9.4
update_channel stable
supervisor_version supervisor-2022.12.1
agent_version 1.4.1
docker_version 20.10.19
disk_total 30.8 GB
disk_used 14.7 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons ESPHome (2022.12.3), File editor (5.5.0), Tailscale (0.7.0), Grafana (8.1.0), Node-RED (14.0.1), Samba share (10.0.0), Terminal & SSH (9.6.1), AppDaemon (0.11.0), InfluxDB (4.5.0), Home Assistant Google Drive Backup (0.110.1), Let’s Encrypt (4.12.7), Matter Server (2.0.0)
Dashboards
dashboards 1
resources 4
views 2
mode storage
Recorder
oldest_recorder_run 9 janvier 2023 à 21:37
current_recorder_run 18 janvier 2023 à 00:37
estimated_db_size 885.37 MiB
database_engine sqlite
database_version 3.38.5
[/center]

Bonjour @Theshwal
As-tu cherché côté Node Red, je pense que tu peux parser un XML, ensuite tu pourras alimenter des input avec les valeurs récupérées.
Il est où ton fichier XML ?

Bob

Bonjour et merci pour cette réponse. Non je n’ai pas essayé node red pour le découpage du XML, si je ne trouve pas en « natif » HA je serrais bien obligé d’y passer. Pour le fichier xml il est généré par la régulation et hebergé sur sont serveur web accessible sur mon réseau local

Salut
Sinon en rest ça doit aussi marcher

Certainement mais je ne comprends pas cette solution.

Je comprend qu’il faut créer au moins une intégration rest mais j’ai beau essayer rien ne fonctionne. Je me disais que la difficulté viendrait de la découpe mais je n’arrive déjà pas à créer les objet qui me permettraient de récupérer les info de dans les balises Inans

Le message le plus intéressant est celui-ci

Il permet de récupérer la valeur ‹ actual › (un tableau response avec parmi d’autres, un élément productive. Qui lui-même a un élément -actual).
Les json_attribute permettent de récupérer d’autres informations, soit toutes les valeurs -period et -sum

Commence par essayer de récupérer une bête valeur unique la première ligne du XML par exemple (en mettant les json_attribute de côté

Bon, j’ai encore fait des essais mais je n’arrive même pas a piger comment sortir une info de tout ca…

- platform: rest
  name: Maxisun
  resource: https://192.168.0.100/status.xml
  json_attributes_path: "$.response"
  scan_interval: 15
  json_attributes:
    - "inAns"
    - "rtcc"
  value_template: "OK"

- platform: template
  sensors:
    maxisun_text:
      friendly_name: "Maxisun Text"
      #          value_template: "{{ value.split('<inAns>')[1].split('</inAns>')[0].split(';')[1] }}"
      value_template: "{{ state_attr('sensor.Maxisun', 'inAns') }}"
      unit_of_measurement: "°C"

comme vous pouvez le voir j’ai essayé de split ( et ca marche en solo ) mais je ne comprend pas pourquoi je n’arrive pas a recuperer ni les info rtcc ni les inAns…
Je me demande même si quelques chose fonctionne dans mon code, mais deja ca ne plante pas ma conf :slight_smile:

Salut

ça crée quoi comme entité ça ? Mets une copie d’écran de l’état (3 colonnes) via outils de développement

Ça créé rien… A priori j’ai rien pigé a la plateforme rest…

Si le premier est vide, le deuxième ne doit pas donner beaucoup plus.
Vire tout ce qui est attributes et vérifie que tu obtient un OK… Ça montrera que l’URL et accessible sans authentification. Puis remplace le OK par le retour complet ($)… Ensuite tu pourras jouer avec le découpage des attributes

bon ca y est j’ai enfin quelquechose:

au code:

- platform: rest
  name: Maxisun
  resource: http://192.168.0.100/status.xml
  json_attributes_path: "$.response"
  scan_interval: 15
  json_attributes:
    - "inAns"
    - "rtcc"
  value_template: "OK"

j’ai ce retour d’état:

inAns: >-
  - 0,4;  0,7; 19,0; 22,1;149,9; 27,2;149,9; 22,2; 200; 200; 200; 200; 200; 200;
  200; 200;
rtcc: 19:15:59 LU
friendly_name: Maxisun

maintenant il faut faire des cut…

mon erreur venait du httpS , pfff

merci en tout cas.

1 « J'aime »

Bon,

C’est pas mal.
La suite c’est d’en faire un sensor qui redécoupe inAns :

Par exemple et probablement optimisable

- platform: template
  sensors:
    maxisun_text:
      friendly_name: "Maxisun Text"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";") }}
      unit_of_measurement: "°C"

On vire le point virgule en fin et les espaces puis on remplace le séparateur numérique , trop français par un truc standard . Et on termine par une transformation en tableau grâce au délimiteur ;

Reste à voir comment tu exploites ça …

Merci beaucoup pour ton aide.

la structuration de la réponse m’a largement aidé et m’a permit de trouver.

je partait avec simplement:

state_attr('sensor.Maxisun', 'inAns')

et du coup le découpage devenait compliqué
Grace a ton code:

- platform: template
  sensors:
    maxisun_text:
      friendly_name: "Maxisun Text"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";") }}
      unit_of_measurement: "°C"

j’ai eu juste à sélectionner chacune des entrées qui m’intéressaient en rajoutant simplement [n° de l'item] … MERCI

et voila le code final de mon installation:

- platform: rest
  name: Maxisun
  resource: http://192.168.0.100/status.xml
  json_attributes_path: "$.response"
  scan_interval: 20
  json_attributes:
    - "inAns"
  value_template: " "

- platform: template
  sensors:
    maxisun_text:
      friendly_name: "Maxisun temperature extérieure"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";")[0] }}
      unit_of_measurement: "°C"
      device_class: temperature
    maxisun_tcapt:
      friendly_name: "Maxisun temperature capteurs"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";")[1] }}
      unit_of_measurement: "°C"
      device_class: temperature
    maxisun_tamb:
      friendly_name: "Maxisun temperature interieur ambiante"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";")[2] }}
      unit_of_measurement: "°C"
      device_class: temperature
    maxisun_ttampb:
      friendly_name: "Maxisun temperature au bas du ballon"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";")[3] }}
      unit_of_measurement: "°C"
      device_class: temperature
    maxisun_ttamph:
      friendly_name: "Maxisun temperature en haut du ballon"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";")[5] }}
      unit_of_measurement: "°C"
      device_class: temperature
    maxisun_tdpc:
      friendly_name: "Maxisun temperature depart plancher chauffant"
      value_template: >-
        {% set str =state_attr('sensor.Maxisun', 'inAns') %}
        {% set str2=str[:-1]|replace(" ","")|replace(",",".") %}
        {{ str2.split(";")[7] }}
      unit_of_measurement: "°C"
      device_class: temperature

et voila les retour d’état

Maxisun inAns: 0,0; 0,2; 21,2; 28,4;149,9; 33,2;149,9; 23,0; 200; 200; 200; 200; 200; 200; 200; 200; friendly_name: Maxisun

Maxisun temperature interieur ambiante 21.2 unit_of_measurement: °C device_class: temperature friendly_name: Maxisun temperature interieur ambiante

Maxisun temperature capteurs 0.2 unit_of_measurement: °C device_class: temperature friendly_name: Maxisun temperature capteurs

Maxisun temperature depart plancher chauffant 23.0 unit_of_measurement: °C device_class: temperature friendly_name: Maxisun temperature depart plancher chauffant

Maxisun temperature extérieure 0.0 unit_of_measurement: °C device_class: temperature friendly_name: Maxisun temperature extérieure

Maxisun temperature au bas du ballon 28.4 unit_of_measurement: °C device_class: temperature friendly_name: Maxisun temperature au bas du ballon

Maxisun temperature en haut du ballon 33.2 unit_of_measurement: °C device_class: temperature friendly_name: Maxisun temperature en haut du ballon

Maintenant à moi de me servir de toutes ces data pour savoir si la température de mon ballon va suffir à maintenir la consigne de température de la maison.

Merci, sujet clot :grinning:

1 « J'aime »