Récupération donnée depuis une requête http

Bonjour tout le monde.

Je possède un poêle à pellet stove italy. j’ai trouvé un moyen de récupérer certaines information en lui faisant une requête http:


Par exemple, sur l’image , le 195 représente la sonde de température du poêle.
Ma question est : comment l’intégrer dans home assistant, et actualiser toutes les X minutes les infos .
Merci d’avance


Salut
Tu peux utiliser RESTful Sensor - Home Assistant
Par contre, vu la structure de la réponse, va falloir bidouiller pour récupérer ton information.

Bonjour govenants,

Je viens de me pencher sur le sujet pour essayer de gérer mon Poele Alaska avec HA. Avant de réinventer la poudre, as tu fait des progrès sur le sujet?

Merci de ton aide

Bon, en attendant des nouvelles, je continue ma rétro-ingénierie doucement. Comme suggéré par Giga77 je me sert de RESTful sensor pour envoyer la requête http, récupérer la réponse et la décomposer.

rest:
  - scan_interval: 30
    resource: http://192.168.0.31/read?byte=81
    sensor:
      - name: stove_data_0
        value_template: "{{ (value.split(',')[0])| float }}"
      - name: stove_data_1
        value_template: "{{ (value.split(',')[1])| float }}"
      - name: stove_data_2
        value_template: "{{ (value.split(',')[2])| float }}"
...

J’affiche chacune des variables dans un dashboard et je compare les valeurs et leur évolution avec ceux de l’appli (Vivace The Stove ex StoveItaly)

Cela m’a permit d’identifier 5 températures (n’étant pas encore en période de chauffe, le poêle est en standby) :

  • Température Ambiente:
      - name: stove_ambient_temperature
        value_template: "{{ (value.split(',')[34])| float /10 }}"
        device_class: temperature
        unit_of_measurement: "°C"
  • Température de la structure:
      - name: stove_structure_temperature
        value_template: "{{ (value.split(',')[38])| float }}"
        device_class: temperature
        unit_of_measurement: "°C"
  • Temperature des fumées:
      - name: stove_smoke_temperature
        value_template: "{{ (value.split(',')[42])| float }}"
        device_class: temperature
        unit_of_measurement: "°C"
  • Temperature du flux (quoi que cela veille dire):
      - name: stove_flow_temperature
        value_template: "{{ (value.split(',')[54])| float }}"
        device_class: temperature
        unit_of_measurement: "°C"
  • Temperature de consigne (en lecture seule):
      - name: stove_control_temperature
        value_template: "{{ (value.split(',')[12])| float /10}}"
        device_class: temperature
        unit_of_measurement: "°C"

Une fois que j’aurai mis le poêle en route je devrais pourvoir en identifier d’avantage.

L’étape suivante sera de hacker la requête de commande que je sais être du même type. J’ai déjà utilisé une attaque « man in the middle » du type ARP Spoofing avec Ethercap pour enregistrer les échanges entre l’appli et le poêle. Il faut que j’arrive à l’exploiter de la même manière.

A bientôt pour la suite…

Coucou oui j’ai reussi a faire ce que je voulais.
C’est un peu à l’arrache mais ça fait le job.
J’utilise node-red pour récuperer les infos via un http-get
voici un screen :

je fais une fonction qui recupere sous forme de payload


Puis pour un exemple, je recupere l’info de temperature, celle ci est en position 34 et 35 de mon http-get
image
et je crée mon capteur:
image
je te montre aussi ce que donne mon http-get en faisant la requete directement sur mon navigateur :

J’ai aussi réussi a faire le demarrage/extinction a distance ainsi que l’activation/désactivation du planning en faisant une requette http hyper horrible car il reprends toute les options :sweat_smile:

Si vous avez des questions, je regarderai plus souvent le forum pour répondre plus rapidement :stuck_out_tongue:

Salut govenants,

Merci pour les infos. Ravis de savoir que tu as avancé de ton côté. En effet, c’est ta requête http qui m’a mis sur le coup.

Afin de m’éviter des soirées interminable à jouer avec tous les paramètres pour déterminer quoi bouge quand, aurais-tu un glossaire des index que tu as déjà identifiés?

Et si ce n’est pas trop abuser, une description détaillée de la recette horrible pour commander m’intéresse aussi :face_holding_back_tears:

Ce soir j’ai découvert que les index 5, 6 et 7 ce sont des compteurs 0-255. Le 5 compte à la seconde, le 6 à chaque reinit du 5 et le 7 à chaque reinit du 6.

Totalement inutile, mais intéressant. Un compteur de temps depuis le dernier démarrage, j’imagine.

En tout cas, toute aide est bienvenue.

Bonjour à vous tous ,
je possède aussi une poêle cheminée Stove italy piano et comme vous je désir le connecter à HA pour la récupération de données.
Par contre je suis novice dans HA et votre aide mais précieuse.
vous semblez bien connaitre votre sujet.
bravo à vous et félicitation.
1 ère question: comment recuperer l’ip de mon stove italy?
Merci d’avance pour cet intérêt du sujet qui je pense aidera plein de monde.

Pour trouver l’ip de ton poele, il y a plusieurs solutions. le plus simple est de voir sur ton serveur qui attribue les IP dans ton réseau, c’est le serveur dhcp. Le plus souvent c’est la box qui s’en charge sauf si vous avez un equipement qui a ce role. Sinon faire une analyse du réseau, il existe des soft sur pc ou sur mobile connecté au meme wifi que le poele qui marche tres bien.
J’utilise Fing qui est dispo sur le play store. Il affiche une liste des equipements connecté ce qui est suffisant pour trouver le poele

Pour intéragir avec le poele, j’ai fais des capture pcapdroid pour trouver la trame qui lance les commandes. pour commander le poele, il faut injecter depuis la page serialflush


il faudra faire une capture de trames avec son telephone et l’appli stove pour chaque commande que l’on veut faire. Dans mon cas, j’ai 4 captures differentes on/off/activate/desactivate.
Pour la partie glossaire, je parle en position
34/35 => temperature en celcius
64 => niveau de pellet 0-40
9 => allumer ou pas donc 0-1
10=> activer ou pas (1 ON / 2 OFF)
99 => puissance de chauffe entre 0/5

Bonjour,

Merci encore du retour rapide. J’hésitais à installer pcapdroid. Je suis habitué a Wireshark sur PC et j’avais l’impression que pcapdroid était plus gadget qu’utile, mais je vais essayer.

Donc si je comprends bien, tu as fait une capture de chaque commande individuelle (arrêt, marche, plannif on, plannif off) et tu la revoies à l’identique avec node-red ?

Si c’est le cas j’ai plusieurs questions:

  • Si elle sont à l’identique, n’as tu peur de changer d’autre paramètres involontairement?
  • je vois dans ton screenshot que tu utilises la méthode GET et pas PUT. Est-ce bon, et quel retour as tu du poêle?

Et merci pour les paramètres supplémentaires! Je les intègre de suite :smile:

Bonjour Govenants,
d’abort merci pour votre réponse rapide
OK j’ai réussi à récupérer L’IP du Stove et dans la requete web sur Firefox comme tu as indiqué j’ai les datas. comme affichée pour toi.
par contre je ne suis pas sur la même plage D’IP 192.168.4 pour l’un et 192.168.1 pour l’autre. comment faire un pont entre ces deux ip ?

Bonjour @christia,

Les addresses IP dependent de comment tu te connectes au poêle. Si tu te connectes directement au Wifi du poêle avec ton telephone, c’est le poêle qui fait point d’accès et serveur DHCP (pour distribuer les adresses IP). Dans ce réseau wifi du poêle lui il a toujours l’adresse 192.168.4.1 et attribue aux telephones les suivantes (192.168.4.2, 192.168.4.2, etc.).
En parallèle le poêle peut se connecter à ton réseau wifi maison et là c’est ta box qui allouera les adresses IP (en general 192.168.1.X). Dans le réseau de la maison le poêle aura une adresse IP (qu’il vaux mieux configurer dans la box pour que ce soit toujours la meme), ton home assistant aura une autre, et ton telephone une autre.

Pour répondre à ta question, lier les 2 sous-reseaux n’est pas simple car il faudra avoir un appareil (cela s’appele un bridge) qui soit connecté aux deux et qui fasse le pont. Par contre cela n’est pas necessaire. En principe les commandes identifiées par Govenants sont utilisables a l’interieur de ton reseau Maison dans lequel tout le monde doit avoir une adresse dans le meme sous-reseau (192.168.1.X)

Bonsoir @Felipe,
merci de t’a réponse et de l’intérêt que tu porte à ce sujet.
e me connecte en wifi depuis mon smartphone pour accéder à mon Stove Piano mais quand je lance une requête comme Govenants en direct et même avec Excel je suis obligé de basculé sur le wifi de mon Stove 192.168.4.1 sinon ça ne fonctionne pas.

@christia ,

Es-tu sur d’utiliser la bonne adresse IP du poêle dans le réseau de la maison? Car si le poêle est bien connecté il n’y a pas de raison pour qu’il ne réponde pas.

oui Felipe l’ip du poêle est 192.168.4.1 et la box maison est 192.168.1.1

Bonjour Christia,

La non réponse du ping depuis le réseau de ta box (192.168.1.0/24) ne fait que confirmer que le poêle n’est pas connecté avec l’adresse 192.168.4.1. Celle-ci est son adresse IP dans son propre wifi (celui propre au poêle).

Je reformule donc ma question:

Es-tu sûr que l’adresse IP du poêle dans le réseau wifi de ta box est 192.168.4.1?

Je ne sais pas quelle box tu as, mais en general il est rare qu’elles ségrégent les réseau. De plus, si ton ping est envoyé depuis un PC connecté au meme wifi de la maison, il est pratiquement impossible qu’il soit affecté a un autre sous-reseau.

Quel est l’adresse IP de ton home assistant? J’imagine qu’il est aussi dans le 192.168.1.X

Ton poêle est il connecté via un router autre que ta box?

Bonjour @govenants,

J’ai continué mes investigations et mappé la plus part des paramètres intéressants dans la requête /read?byte=81". Je les ai compilé dans un tableau :

Index Value Ex1 Value Ex2 Value Ex3 Content Encoding
0 81 81 81 Command ID
5 20 138 69 Seconds counter 0 to 255
6 208 251 8 Seconds/255 counter 0 to 255
7 167 196 197 Seconds/255/255 counter 0 to 255
9 0 1 1 Stove on/off State 0 for OFF
1 for ON
10 0 1 1 Stove program on/off/ext state 0 for OFF
1 for ON
2 for EXT (using external intelligent thermostat)
12 208 215 215 Stove Target Control Temperature x 10
20 1 1 0 Stove Auto OFF state 0 for OFF
1 for ON
34 232 211 224 LSB part of Stove Ambient temperature Ambient Measured Temperature = (Answer[35] x 255 + Answer[34]) / 10
35 0 0 0 MSB part of Stove Ambient temperature Ambient Measured Temperature = (Answer[35] x 255 + Answer[34]) / 10
38 24 24 51 Stove Structure Temperature (TC1) 0 to 255
42 23 22 191 Stove Smoke Temperature (TC2) 0 to 255
54 18 0 116 Stove Flow Temperature 0 to 255
64 22 34 41 Stove Pellet level 0 to Max height in cm
99 0 0 1 Stove Power level 1 to 5
100 0 0 75 Stove Pellet Motor Speed 0 to 255
101 0 0 116 Stove Convection Fan Speed 0 to 255
102 0 0 150 Stove Smoke Fan Speed 0 to 255

J’ai aussi un peu joué avec la requête /serialflush, mais le problème est qu’elle contient l’ensemble des paramètre modifiables. Y compris les heures et températures de programmation. Du coup, si tu les rejoues tels quels, non seulement tu va changer le paramètre voulu, mais tu vas aussi réinitialiser tous les autres.

Pour celle là aussi j’ai fait un mapping :

Index Content Value Ex1
0 Command ID 50
4 On/off State 1
5 Program State 0
6 Ventilation Speed 1
7 Control Temperature 208
11 Control Temperature 208
19 Auto_OFF State 1
41 Monday 1st Start Hours 1
42 Monday 1st Start Minutes 0
43 Monday 1st Stop Hours 6
44 Monday 1st Stop Minutes 0
45 Monday 1st Control Temperature 190
47 Monday 2nd Start Hours 6
48 Monday 2nd Start Minutes 1
49 Monday 2nd Stop Hours 8
50 Monday 2nd Stop Minutes 0
51 Monday 2nd Control Temperature 215
53 Monday 3rd Start Hours 17
54 Monday 3rd Start Minutes 0
55 Monday 3rd Stop Hours 22
56 Monday 3rd Stop Minutes 30
57 Monday 3rd Control Temperature 215
59 Tuesday 1st Start Hours 1
60 Tuesday 1st Start Minutes 0
61 Tuesday 1st Stop Hours 6
62 Tuesday 1st Stop Minutes 0
63 Tuesday 1st Control Temperature 190
65 Tuesday 2nd Start Hours 6
66 Tuesday 2nd Start Minutes 1
67 Tuesday 2nd Stop Hours 9
68 Tuesday 2nd Stop Minutes 0
69 Tuesday 2nd Control Temperature 215
71 Tuesday 3rd Start Hours 17
72 Tuesday 3rd Start Minutes 0
73 Tuesday 3rd Stop Hours 22
74 Tuesday 3rd Stop Minutes 30
75 Tuesday 3rd Control Temperature 215
77 Wednesday 1st Start Hours 1
78 Wednesday 1st Start Minutes 0
79 Wednesday 1st Stop Hours 6
80 Wednesday 1st Stop Minutes 0
81 Wednesday 1st Control Temperature 190
83 Wednesday 2nd Start Hours 6
84 Wednesday 2nd Start Minutes 1
85 Wednesday 2nd Stop Hours 8
86 Wednesday 2nd Stop Minutes 0
87 Wednesday 2nd Control Temperature 215
89 Wednesday 3rd Start Hours 17
90 Wednesday 3rd Start Minutes 0
91 Wednesday 3rd Stop Hours 22
92 Wednesday 3rd Stop Minutes 30
93 Wednesday 3rd Control Temperature 215
95 Thrusday 1st Start Hours 1
96 Thrusday 1st Start Minutes 0
97 Thrusday 1st Stop Hours 6
98 Thrusday 1st Stop Minutes 0
99 Thrusday 1st Control Temperature 190
101 Thrusday 2nd Start Hours 6
102 Thrusday 2nd Start Minutes 1
103 Thrusday 2nd Stop Hours 8
104 Thrusday 2nd Stop Minutes 0
105 Thrusday 2nd Control Temperature 215
107 Thrusday 3rd Start Hours 17
108 Thrusday 3rd Start Minutes 0
109 Thrusday 3rd Stop Hours 22
110 Thrusday 3rd Stop Minutes 30
111 Thrusday 3rd Control Temperature 215
113 Friday 1st Start Hours 1
114 Friday 1st Start Minutes 0
115 Friday 1st Stop Hours 6
116 Friday 1st Stop Minutes 0
117 Friday 1st Control Temperature 190
119 Friday 2nd Start Hours 6
120 Friday 2nd Start Minutes 1
121 Friday 2nd Stop Hours 8
122 Friday 2nd Stop Minutes 0
123 Friday 2nd Control Temperature 215
125 Friday 3rd Start Hours 17
126 Friday 3rd Start Minutes 0
127 Friday 3rd Stop Hours 23
128 Friday 3rd Stop Minutes 0
129 Friday 3rd Control Temperature 215
131 Saturday 1st Start Hours 1
132 Saturday 1st Start Minutes 0
133 Saturday 1st Stop Hours 7
134 Saturday 1st Stop Minutes 30
135 Saturday 1st Control Temperature 190
137 Saturday 2nd Start Hours 7
138 Saturday 2nd Start Minutes 31
139 Saturday 2nd Stop Hours 23
140 Saturday 2nd Stop Minutes 0
141 Saturday 2nd Control Temperature 215
143 Saturday 3rd Start Hours 255
144 Saturday 3rd Start Minutes 255
145 Saturday 3rd Stop Hours 255
146 Saturday 3rd Stop Minutes 255
147 Saturday 3rd Control Temperature 255
149 Sunday 1st Start Hours 1
150 Sunday 1st Start Minutes 0
151 Sunday 1st Stop Hours 7
152 Sunday 1st Stop Minutes 30
153 Sunday 1st Control Temperature 190
155 Sunday 2nd Start Hours 7
156 Sunday 2nd Start Minutes 31
157 Sunday 2nd Stop Hours 23
158 Sunday 2nd Stop Minutes 0
159 Sunday 2nd Control Temperature 215
161 Sunday 3rd Start Hours 255
162 Sunday 3rd Start Minutes 255
163 Sunday 3rd Stop Hours 255
164 Sunday 3rd Stop Minutes 255
165 Sunday 3rd Control Temperature 255
169 CRC1? 21
170 CRC2? 219

La bonne nouvelle est qu’il y a une requête qui permet de récupérer l’ensemble de ces valeurs a un instant t.

/read?byte=49

Du coup l’astuce va être, avant de lancer la commande /serialflush, de lancer la read?byte=49 et recopier tout les champs sauf celui qu’on veut modifier :sunglasses:

Seul bémol : les CRC de la fin que je n’ai pas encore réussi à déchiffrer. Je crains que, s’il ne sont pas bons, la requête ne sera pas acceptée. Bon, je n’ai pas essayé. Si cela se fait ça marche tel quel, mais j’en doute :confused:

C’est la prochaine étape. A suivre…

Bonjour Felipe, heureux de te retrouver sur le sujet.
intéressant tout ça tu as fait du bon boulot.
pour ma parts j’ai planté ma Stove Piano en lançant le PCAPdroid je suppose mais pas certain enfin 4 jours pour retrouver mon Stove opérationnel. message" err01 nocom" et en maintenant appuyer sur bouton rouge Erreur de l’appli message Update ou Continuer.
j’ai tourné en rond desinstall installe sur trois Smartphones sans succes reset box idem enfin grosse galère. nocom correspond à" pas de communication internet avec le serveur".
question comment as-tu lancé tes requêtes as tu essayes avec excel pour obtenir un tableau des datas ?
pour les crc de la fin de ligne on peut supposer quil contienne les identifiants de connections et passe pour chaque Stove !.. mais pas sur…

Salut christia,

Je suis désolé d’entendre que tu as eu des soucis. J’avais eu le meme problème au tout debut (le poêle avait un mois) lorsque j’ai voulu lancer une mise à jour de FW depuis l’appli. Heureusement j’ai pu faire jouer la garantie et ils m’ont changé la carte. Je ne devais pas être le seul car dans la mise à jour suivante de l’appli, l’option avait disparu.

Donc si j’ai bien compris, pour t’en sortir tu es resté appuyé sur le bouton message update?

Je lance les requêtes de lecture (read?byte=81 et read?byte=49) avec firefox

Pour les requêtes en écriture (serialflush) j’utilise l’integration RESTFul API de HA. Pour l’instant j’ai fait comme govenants, je n’ai envoyé que des requêtes statiques « copier-coller » de ce que fait l’appli (espionnée avec PCAPDroid).
L’avantage de l’integration REST est qu’après, on peut utiliser des templates à la place des valeur fixes. Par exemple pour changer l’état ON/OFF ou la vitesse de ventilation. Mais je n’en suis pas encore là.

C’est un peu laborieux car il faut écrire les requêtes dans le configuration.yaml et les lancer, soit avec un service dans le menu outil development, soit avec une automatisation liée p. ex à un bouton.

Afin d’y voir plus clair les 170 valeurs et jouer un peu avec je suis en effet passé par excel. D’ailleurs c’est comme cela que j’espere trouver la logique des CRC. Pour l’instant pas concluant. J’ai enregistré les requêtes pour des modifications simples (un paramètre à la fois) et comparé les valeur des champs 169 et 170. Il sont identiques pour 2 requêtes identiques, donc pas dépendants du temps (pas de code cyclique). Il sont toujours différents pour des requêtes différentes, meme pour des modifications mineurs (p.ex On/off State 0 → 1 ou Ventilation Speed 1–> 3 → 5). Donc pas dépendant du Stove.

Je pensait que ce serait une addition bête de l’ensemble des champs, mais non, car pour les exemples ci-dessus, les CRC sont plus petits avec des valeurs plus grandes.

Il faut que je fasse plus d’enregistrements de l’appli afin d’avoir un ensemble de requêtes plus large pour essayer de trouver la logique, ou espérer qu’il ne les prenne pas en compte…