Piloter son poêle Ravelli

Bonjour à toutes et à tous,

Je viens vous annoncer que j’ai développé une électronique, à base d’ESP8266, permettant de s’interfacer avec les poêles à granulé Ravelli utilisant la télécommande TOUCH remote control afin de contrôler ceux-ci via un système domotique.
Pour se faire l’électronique se branche sur la prise servant à raccorder, habituellement, la télécommande au poêle. Ce qui rend la télécommande inutile, et invisible depuis le poêle.

Plus de détail sur l’un des 2 langages que vous pouvez utiliser :

Veuillez noter que tout ceci est en phase de bêta, et je suis ouvert à toutes vos critiques, constructives. Ici, ou directement sur Github :slight_smile:

4 « J'aime »

Salut,

Super merci pour ton boulot.

J’ai une question, pour le moment c’est la télécommande qui me sert de sonde de température et je trouve ca pratique. Je mets la telecommande a mes cotes et j’obtiens la température voulu vers moi et pas a l’autre bout de la pièce.
Tu te sers de quoi comme sonde? t’en a jouté une ou tu utilise la sonde a l’arrière du poile?
Perso j’ai une cuisinière Ravelli MIA 90.

Amicalement,

Traken

1 « J'aime »

Bonjour @traken,

Pour ma part, je me sert d’une sonde de température que j’ai dans la pièce, déjà reliée à ma.box domotique.

Sinon, il y a la possibilité de brancher une sonde de température à l’ESP et de mettre à jour le code en conséquence (dans l’absolu je peux le faire) pour qu’il pointe sur cette sonde.

Je pense qu’i est même possible de se baser sur la température retourné par l’électronique du poêle, à un gradient (que je ne connais pas) près. Sachant que pour le moment, cette fonctionnalité n’est pas correctement implementée et retourne une erreur.

Dans tous les cas, vu que le fait de relier cette board désactive la télécommande, il est nécessaire d’avoir une sonde de température.

Merci pour ta réponse, je vais y réfléchir et me pencher dessus dans le mois qui arrive.
Bonne continuation :wink:

Bonjour,
Je suis un nouvel utilisateur d’un natural 7 et je suis preneur d’une solution qui s’intègre à home assistant . Je peux servir de bêta testeur

1 « J'aime »

Bonjour à tous,

Je suis utilisateur de HA depuis peu (environ 1 an) et viens tout juste d’acquérir un poêle Ravelli (flexi 11), équipé d’un module wifi (winet).
Je suis donc plutôt parti sur l’option de communiquer via ce module wifi (sans passer par le cloud) ce qui me permet de garder l’utilisation de la télécommande et de sa sonde en parallèle de HA.

En observant les paquets passant sur le réseau lors de l’utilisation de l’application wifi, j’ai commencé à identifier les requêtes correspondantes pour le piloter et avoir un retour d’état du poêle.
J’utilise des REST sensor pour obtenir un retour sur l’état des paramètres du poêle et des commandes REST pour le piloter. (je pourrai détailler tout cela si quelqu’un est intéressé)

J’ai pu identifier les principaux paramètres retournés par le poêle mais pas encore l’intégralité…
@Tank comment as-tu procéder pour créer ton système ? As-tu trouver des documents techniques sur les protocoles de communication utilisés par les poêles Ravelli ?

1 « J'aime »

Bonjour,

@letetram, ton retour sera intéressant. Fais-moi signe quand tu as pu commencer, que ce soit en positif ou en négatif.

@Aubusson, je n’ai pas trouvé de doc technique. Par contre, j’avais vu un poste sur Arduino d’une personne qui avait commencé de la rétro-ingénierie, qui m’a servi de base. Aussi, j’ai travaillé avec un câble fait maison pour brancher la télécommande au poêle, avec une dérivation vers un oscilloscope, pour relever tous les échanges entre les 2 (de façon filaire uniquement).
Mon installateur m’a posé ce module wifi winet (gratuitement) il y a 1 mois. Mais, de ce que j’ai pu voir, il manque pas mal d’information, comparativement à ce que je peux relever via mon dev. Par exemple, avec winet, je ne peux pas commander la ventilation frontale, on a pas accès aux compteurs, … Par contre, point bénéfique, il n’y a pas les bip à chaque changement de commande. J’ai commencé à regarder les échanges via « l’appli » internet, et j’avoue que l’appli flood pas mal (toutes les secondes environ ça rafraichit les données)

Merci Tank pour ton retour.

C’est surprenant, de mon côté, j’ai bien le pilotage des ventilations (avant et arrière) disponible depuis l’application. Ne serait-ce pas une histoire de configuration entre l’application et ton poêle ?

Je n’ai pas encore déchiffré tous les paramètres que je remonte sur mes sensors mais je n’ai pas l’impression qu’il manque grand chose par rapport à la télécommande. J’ai au moins tout ce qu’il sera nécessaire au pilotage du poêle et des ventilations.

Oui, effectivement, c’est ce que j’ai remarqué en observant les échanges sur le réseau. L’application demande un retour d’état toutes les secondes… Via HA, je me contente de rafraîchir les infos toutes les 5mins pour le moment.

Ahhh. Merci de l’info, je vais contacter mon installateur pour voir à ça.

Bonjour à tous
J’ai un poele Ravelli Flexi 9 et je serais intéresser que tu détailles les commande REST que tu utilise.
D’avance merci

Bonjour

Qu’appelles tu les commandes REST ?

Bonjour
désolé ma question s’adressé plutôt @Aubusson dans son poste plus haut il propose de détaillé ses REST sensor.
Ca m’intéresse car j’aimerai domotiser mon poêle tout en gardant l’usage de la télécommande.

Bonjour @macraspberrypi, je suis sur le tel et n’ai pas accès à mon pc pour l’instant. Je posterai ce que j’ai mis en place pour mon poêle en milieu/fin de semaine depuis le pc, ça sera plus commode.

@Tank, je peux poster ici ou tu préfères que j’ouvre un autre post pour pas trop s’éloigner du sujet de base ?

1 « J'aime »

Alors voici ce que j’ai configuré pour exploiter mon poêle via HA et le module wifi (winet) de celui-ci qui a pour adresse IP 192.168.0.70 :

  • Tout d’abord les REST sensors qui me permettent de récupérer les variables d’états du poêle (il me reste encore des paramètres à identifier) :
sensor:
  - platform: rest
    resource: http://192.168.0.70/ajax/get-registers
    method: POST
    name: poele_variables2
    scan_interval: 300 #300s
    payload: key=020&category=2 
    json_attributes:
      - params
      - alr
      - localWeb
      - cat
      - authLevel
      - signal
      - model
      - flame
      - chrono
      - name
      - netatmo
    verify_ssl: false
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 18 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest

  - platform: rest
    resource: http://192.168.0.70/ajax/get-registers
    method: POST
    name: poele_variables4
    scan_interval: 300 #300s
    payload: key=020&category=4
    verify_ssl: false
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 18 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest
   
  - platform: rest
    resource: http://192.168.0.70/ajax/get-registers
    method: POST
    name: poele_variables6
    scan_interval: 300 #300s
    payload: key=020&category=6
    verify_ssl: false
    value_template: '{{ value_json["params"] }}' ## value template utilisé pour tronquer la reponse car plus de 255 caractères et ne garder que le contenus de params..., avoids the "State max length is 255 characters" error
    json_attributes:
      - params
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 18 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest
  • Ensuite, j’ai créé quelques template sensors supplémentaires pour extraire les variables les plus intéressantes :
template:
  - sensor:
      - name: "statut poele"
        unique_id: poele_statut
        state: >
                {% set names = {
                                0: "OFF",
                                1: "En attente de redémarrage",
                                2: "Allumage",
                                3: "3???",
                                4: "Flamme presente",
                                5: "Travail",
                                6: "Nettoyage brasier",
                                7: "Nettoyage final",
                                8: "?8?",
                                9: "?9?",
                                10: "?10?"
                } %}      #il faut encore que j'identifie certains états du poêle en regardant ce qu’affiche l'application officielle mais je n'ai pas encore eu besoin de chauffer vraiment la maison pour le moment...                  
                {% set status =  names[state_attr('sensor.poele_variables2','params')[1][1]]  %}
                {{status}}
        icon: >
          {% if is_state("sensor.statut_poele", "OFF") %}
            mdi:fireplace-off
          {% else %}
            mdi:fireplace
          {% endif %}
        attributes:
          poele_id2: "{{state_attr('sensor.poele_variables2','params')[1][1]}}" 

      - name: "poele_reglage_temperature"
        unique_id: poele_reglage_temperature
        device_class: temperature
        unit_of_measurement: '°C'
        state: "{{state_attr('sensor.poele_variables2','params')[8][1] }}"
        
      - name: "poele_sonde_telecommande"
        unique_id: poele_sonde_telecommande
        device_class: temperature
        unit_of_measurement: '°C'
        state: "{{state_attr('sensor.poele_variables2','params')[4][1] }}"
        
      - name: "poele_reglage_puissance"
        unique_id: poele_reglage_puissance
        state: "{{state_attr('sensor.poele_variables2','params')[9][1] }}"
        
      - name: "ventilation arriere poele"
        unique_id: poele_ventilation_arriere_level
        state: >
                {% set names = {
                                0: "0",
                                1: "1",
                                2: "2",
                                3: "3",
                                4: "4",
                                5: "5",
                                6: "AUTO"
                } %}                         
                {% set level_ventil_arriere =  names[state_attr('sensor.poele_variables6','params')[8][1]]  %}
                {{level_ventil_arriere}}
        attributes:
          poele_id187: "{{state_attr('sensor.poele_variables6','params')[8][1]}}" 

      - name: "ventilation avant poele"
        unique_id: poele_ventilation_avant_level
        state: >
                {% set names = {
                                0: "0",
                                1: "1",
                                2: "2",
                                3: "3",
                                4: "4",
                                5: "5",
                                6: "AUTO"
                } %}                         
                {% set level_ventil_avant =  names[state_attr('sensor.poele_variables6','params')[9][1]]  %}
                {{level_ventil_avant}}
        attributes:
          poele_id188: "{{state_attr('sensor.poele_variables6','params')[9][1]}}" 
  • et ci-dessous les commandes qui me permettent de piloter le poêle avec des REST command ( j’utilise des input_number pour changer les consignes) :
rest_command:
  allumer_ou_eteindre_poele:
    url: http://192.168.0.70/ajax/get-registers
    method: POST
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 7 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest
    payload: key=022

  maj_consigne_temperature_poele:
    url: http://192.168.0.70/ajax/set-register
    method: POST
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 47 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest
    payload: key=002&memory=1&regId=50&value={{states('input_number.consigne_temperature_poele')| int  }}&result=false

  maj_consigne_puissance_poele:
    url: http://192.168.0.70/ajax/set-register
    method: POST
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 46 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest
    payload: key=002&memory=1&regId=51&value={{states('input_number.consigne_puissance_poele')| int  }}&result=false

  maj_consigne_ventilation_avant_poele:
    url: http://192.168.0.70/ajax/set-register
    method: POST
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 47 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest
    payload: key=002&memory=1&regId=188&value={{ states('input_number.consigne_ventilation_avant_poele')| int }}&result=false

  maj_consigne_ventilation_arriere_poele:
    url: http://192.168.0.70/ajax/set-register
    method: POST
    headers:
      Accept: 'application/json, text/javascript, */*; q=0.01'
      Accept-Encoding: 'gzip, deflate'
      Accept-Language: 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'
      Connection: keep-alive
      Content-Length: 47 #correspond au nombre de caractères dans le payload !
      Content-Type: 'application/json; charset=UTF-8'
      Cookie: winet_lang=fr
      Host: 192.168.0.70
      Origin: http://192.168.0.70
      Referer: http://192.168.0.70/management.html
      User-Agent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36 OPR/63.0.3368.43'
      X-Requested-With: XMLHttpRequest
    payload: key=002&memory=1&regId=187&value={{ states('input_number.consigne_ventilation_arriere_poele')| int }}&result=false

Voilà, en espérant que ça pourra aider. Je ne sais pas si tout sera générique pour tous les poêles/module wifi… Si besoin de plus d’explications/détails, n’hésitez pas.

1 « J'aime »

Merci pour ton partage @Aubusson je vais tester ça et je ferai un retour ici.

Bonjour
Encore merci pour ton partage @Aubusson
Tout fonctionne parfaitement, j’ai juste changer l’adresse IP et tout est fonctionnel.

Bonjour,
Super ça !
Je n’avais pas pensé à partager l’automatisation qui gère le fonctionnement mais en gros, à chaque changement de consigne, j’appelle le rest_command qui va bien, et je fait un homeassistant.update_entity sur les variables afin d’avoir un retour d’informations du poêle à jour et réactif.
Et quand un changement sur les informations du poêle est détecté, je mets à jour les consignes également.

Si tu utilises ton poêle actuellement, n’hésites pas à me dire si tu vois des problèmes/erreurs car je n’ai pas vraiment eu l’occasion de débugger encore. Je serais intéressé par les intitulés des statuts qu’il manque dans le sensor.statut_poele aussi… :wink:

1 « J'aime »

Salut Aubusson
J’ai fait exactement pareil (automatisation) sauf pour la commande REST d’allumer/éteindre que je fais en vocal avec un script et Google home.
J’ai remarqué un soucis mais ça fait pareil avec l’appli quand le poêle a atteint sa température de consigne il se met en eco et pas possible de l’éteindre quand il est dans cet état il faut remonter la consigne de temp pour qu’il se remette au travail et la commande REST d’allumer/eteindre fonctionne mais c’est pareil avec l’appli Ravelli.Par contre avec la télécommande ça fonctionne.
Vu les températures clémente je n’utilise pas encore mon poêle mais dès qu’il sera au travail je regarderais pour les intitulés des status😉

Salut ! Je viens de tomber sur ce post et de m’inscrire sur le site. Je suis un utilisateur de domoticz mais depuis hier je teste home assistant. Je dois dire que ça me change de domoticz qui n’a plus de vraie mise à jour depuis longtemps…
Quelque chose que je n’ai jamais réussi à faire c’est de domotiser mon poêle ravelli. Et la je vois que vous avez bien avancé sur le sujet. Le fait de brancher un esp sur la prise télécommande et donc de neutraliser celle ci ne m’arrange pas trop. Je pense donc plutôt à investir dans un module wifi. Est ce que le modèle wifi type m sur le site de top chaleur conviendrait ? Je ne peux pas poster le lien.

Est ce que c’est difficile à brancher sur la carte mère ?
Merci à vous

Salut Pimseb,
Si tu parles du module suivant :

Cela semble effectivement être le même que le mien. Je n’ai par contre pas utilisé l’appli qui est affichée sur ce site mais celle de Ravelli qui semble être une variante très proche.

Sur mon poêle, l’installateur s’est juste assuré que le poêle soit débranché de l’alimentation et a connecté le module sur le connecteur de la carte mère directement accessible à l’arrière de celui-ci .
J’imagine que cela peut dépendre des modèles. Tu as lequel ?