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) :
- 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"
- 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…