Pilotage Chaudière Frisquet ECO Radio System via ESPHome

Bonjour à tous,

Pour mon premier sujet sur cette communauté, je souhaite vous présenter une réalisation qui sera je l’espère utile à d’autres : le pilotage de ma chaudière Frisquet Evolution (Eco Radio System) de 2011 via Home Assistant et un module ESPHome.

Pourquoi ?

Il existe sur le marché de nombreuses solutions domotiques pour piloter une chaudière mais, pour la plupart et notamment pour les chaudières anciennes (non OpenTherm), cela reste de la régulation on/off par contact sec.

Hors, les chaudières Frisquet offrent nativement une regulation modulante où la température de l’eau varie selon le besoin de chauffage. Il est bien entendu possible de les connecter via contact sec à une solution type Nest of Netatmo mais on perd ainsi la souplesse offerte par la chaudière et on se retrouve avec une chaudière soit à fond, soit à l’arrêt.

Mon objectif était le suivant :

  • piloter et programmer ma chaudière via Home Assistant
  • assure un mode de régulation plus souple et avec prise en compte de la température extérieure

Chaudières concernées

La solution développée est applicables à toutes les chaudière Frisquet commercialisées jusqu’en 2012 et équipées du module Eco Radio System. Les chaudières plus récentes équipée du module Visio ne sont pas compatibles car Frisquet a depuis mis en place un chiffrage dans son protocole de communication.

Matériel nécessaire

  • Module ESP32 ou ESP8266
  • Prise Micro-fit 4 (pour se connecter à la chaudière)
  • 2 sondes Dallas 18d20 (pas indispensable mais utile) + resistance 4,7 kOhm

L’installation des deux sondes Dallas n’est pas présentée dans cet article. Voir les nombreux tutos disponibles sur le sujet et notamment ici : Dallas Temperature Sensor — ESPHome.

Câblage

L’ESPHome va remplacer le récepteur radio HF Eco Radio System de la chaudière et sera connecté au panneau de contrôle de la chaudière par une prise micro-fit 4.

ESP32 equivalent récepteur radio Numéro du pin
GND cable noir 1
Pin 21 (configurable) cable jaune 2
5V cable rouge (optionnel) 3

Numérotation des pins du Micro-fit 4 :

connector_4pin1

A noter : l’alimentation 5V fournie par la chaudière n’est pas suffisante pour alimenter un ESP32, il est nécessaire de mettre en place une alimentation externe.

Installation

Le code source et les fichiers de configuration sont disponibles ici :

Mise à jour Novembre 2022 :
La procédure d’installation a changé significativement.
Voir les nouvelles instructions dans le fichier README.md sur GitHub.

Mise à jour Février 2024 :
Pour éviter les erreurs, j’ai effacé de ce message l’ancienne méthode d’installation qui n’est plus applicable.

Références

Ces travaux sont fortement inspirés des articles suivants :

Et des discussions du long fil « Frisquet » sur le forum Easy Domoticz :
https://easydomoticz.com/forum/viewtopic.php?f=17&t=1486sid=d2f41ac68e5bab18fd412a192a21c2c4

Merci à eux pour le travail phénoménal réalisé sur le protocole de communication Frisquet.

Photo

On voit à droite le câble du récepteur radio déconnecté et à gauche le branchement sur la platine de la chaudière.

6 « J'aime »

Complément : comment obtenir l’ID de la chaudière ?

J’ai oublié de préciser que pour que cela fonctionne, l’ID de chaudière doit être renseigné dans le fichier de configuration.

La manière la plus simple est d’utiliser un Arduino, connecté sur le cable de sortie du récepteur radio HF avec le schéma frisquet-ERS-decode.ino qu’on trouve ici :

En changeant la consigne de chauffe sur la télécommande, un train de consignes sera envoyé par radio et sur la console de log de l’arduino, on trouvera l’ID de la chaudière :

15:00:43.154 -> Init
15:03:35.095 -> 1111110110000001001110100000000000001000000000000000000110000010010011000000000011111011101111001111111100000001
15:03:35.095 -> 00 00 7E 03 B9 00 20 00 00 83 64 00 FE 3D FF 80 
15:03:35.095 -> Checksum correct
15:03:35.095 -> Your ID is: 03 B9
15:04:03.651 -> 1111110110000001001110100000000000001000000000000000000110000010010011000000000011111011101111001111111100000001
15:04:03.651 -> 00 00 7E 03 B9 00 20 00 00 83 64 00 FE 3D FF 80 
15:04:03.651 -> Checksum correct
15:04:03.651 -> Your ID is: 03 B9
15:04:03.722 -> 1111110110000001001110100000000000001000000000010000000110000010010011000000000011111011001111001111111100000001
15:04:03.722 -> 00 00 7E 03 B9 00 20 00 01 83 64 00 FE 3C FF 80 
15:04:03.722 -> Checksum correct
15:04:03.722 -> Your ID is: 03 B9

Si le sujet vous intéresse et que ce point particulier vous bloque, n’hésitez pas à demander de l’aide.

3 « J'aime »

Merci pour tous ces éléments. Je possède également une chaudiere Frisquet Eco Radio System + RIF 5000 sur lesquels je me renseigne car je viens d’arriver dans la maison.

Mon besoin de base était de connecter un Netatmo ou autre pour la domotique, mais en lisant beaucoup de sujets sur le net, j’ai l’impression que c’est viable si l’on a pas le RIF 5000 (et surtout la sonde de température exterieure) car on reste en contact sec.

J’ai un peu de mal à me dire que je vais me passer de ça étant donné que c’est là et que mon installation est dotée de plancher chauffant + radiateurs à l’étage, je voudrais par contre enlever l’unité centrale.

Votre usage semble donc permettre de conserver la finesse apportée par le RIF, mais j’aimerai quelques précisions (pour être sur d’avoir bien compris) :

  • Avez vous un RIF 5000 connecté ?
  • Vous remplacez complètement l’unité centrale du RIF 5000 au profit de l’ESP Home ?
  • Le pilotage se fait donc uniquement dans HA sans thermostat visible ?

J’ai d’autres questions sur l’aspect technique que j’ai compris à 80% à la lecture du code, mais avant de me lancer j’aimerai valider ce point pour être sur. Si vous aviez par chance un schema global de l’installation, ça me permettrai à moi (et peut être à d’autres) d’y voir plus clair.

Bonjour,

Je n’ai pas d’arduino mais uniquement une carte ESP8266 ESP-12F NodeMCU V2.

J’ai transféré ce sketch sur l’ESP8266 :
frisquet-ERS-decode.ino

Puis :

  • brancher la masse de l’ESP au fil noir du récepteur
  • brancher le pin D3 de l’ESP (GPIO0) au fil jaune du récepteur

Malheureusement dans la console série, je ne vois rien passer :frowning:

Est-ce que ce sketch fonctionne également sur ESP ?

@chooz
Avec un peu de retard (je ne suis pas le forum très régulièrement) :

  • je n’ai pas de RIF 5000
  • Seul l’ESP Home pilote la chaudière
  • Il n’y a en effet pas de thermostat visible, une sonde zigbee dans le salon et une dehors.

Comme je n’ai pas fait l’essai du script sur un ESP32 (en fait je ne les ai jamais utilisés sans ESP Home), je ne saurais dire mais il n’y a pas, en théorie, de raison pour que cela ne fonctionne pas. Peut-être regarder si la bonne entrée est utilisée. Au besoin, elle peut être changée dans le code.

Puisque l’ESP a sa propre alimentation, est-ce qu’il ne serait pas utile d’insérer entre l’ESP et la chaudière un optocoupleur pour protéger la carte électronique de la chaudière ?

Autre question concernant la PIN a utiliser au niveau de l’ESP (un ESP8266 ESP-12F NodeMCU V2 CP2102 dans mon cas), il faut modifier la variable « ERS_PIN » du fichier FrisquetBoilerFloatOutput.h ?

La valeur de cette variable correspond au GPIO choisi ?
par exemple pour une carte « ESP8266 NodeMCU », ERS_PIN = 5 => pin GPIO5 = pin sérigraphiée D1 ?
pour une carte « ESP-VROOM-32 NodeMCU 38PIN », ERS_PIN = 21 => pin GPI021 = pin sérigraphiée G21 ?

J’ai trouvé un arduino, et j’ai pu faire fonctionner le scetch.

Mais j’ai 2 ID possible.
6E 3F ou 4F AF

11111100111011011111010000000000000001000000000000000000000000010000000000000000011111011110011011111111100000001
00 00 7E 6E 3F 00 20 00 00 80 00 00 FE B3 FF 80
Checksum correct
Your ID is: 6E 3F
11111100111011011111010000000000000001000000000010000000000000010000000000000000011111011010011011111111100000001
00 00 7E 6E 3F 00 20 00 01 80 00 00 FE B2 FF 80
Checksum correct
Your ID is: 6E 3F
11111100111011011111010000000000000001000000000000000000000000010000000000000000011111011110011011111111100000001
00 00 7E 6E 3F 00 20 00 00 80 00 00 FE B3 FF 80
Checksum correct
Your ID is: 6E 3F
11111100111011011111010000000000000001000000000010000000000000010000000000000000011111011010011011111111100000001
00 00 7E 6E 3F 00 20 00 01 80 00 00 FE B2 FF 80
Checksum correct
Your ID is: 6E 3F
11111100111011011111010000000000000001000000000001000000000000000000000000000000111110111100011001111111100000001
00 00 7E 6E 3F 00 20 00 02 00 00 00 FF 31 FF 80
Checksum correct
Your ID is: 6E 3F
1111110111100101111010100000000000001000000000000000000000000010000000000000000011111011010001101111111100000001
00 00 7E 4F AF 00 20 00 00 80 00 00 FE 62 FF 80
Checksum correct
Your ID is: 4F AF
1111110111100101111010100000000000001000000000010000000000000010000000000000000011111011100001101111111100000001
00 00 7E 4F AF 00 20 00 01 80 00 00 FE 61 FF 80
Checksum correct
Your ID is: 4F AF
1111110111100101111010100000000000001000000000001000000000000000000000000000000011111011000001111111111100000001
00 00 7E 4F AF 00 20 00 02 00 00 00 FE E0 FF 80
Checksum correct
Your ID is: 4F AF
1111110111100101111010100000000000001000000000000000000000000010000000000000000011111011010001101111111100000001
00 00 7E 4F AF 00 20 00 00 80 00 00 FE 62 FF 80
Checksum correct
Your ID is: 4F AF

Etonnant, peut-être un voisin a-t-il aussi une chaudière Frisquet ? Il va falloir essayer les deux…

Oui c’est bien la variable qui fixe quel PIN utiliser pour l’ERS (Eco Radio System) et cela correspond au numéro de GPIO. Sur mes ESP 32, cela correspond au numéro sérigraphié.

Je ne pense pas que cela soit nécessaire. Je ne suis pas spécialiste mais tous ceux sur sur le forum easydomoticz qui ont branché un ESP32 ou un Arduino sur leur chaudière semblent l’avoir fait directement.

Je n’avais pas pensé à ce cas particulier d’un voisin avec également une chaudière Frisquet. C’est bien possible, je vais donc tester les deux ID.

J’ai encore une question concernant l’octet 10, qui piloterait le préchauffage de l’eau ?, et peut prendre 3 valeur en fonction du mode de fonctionnement désiré :

Hors gel
message1: 0x84, message2: 0x84, message3: 0x04

Mode réduit (lune)
message1: 0x80, message2: 0x80, message3: 0x00

Mode confort (soleil)
message1: 0x83, message2: 0x83, message3: 0x03

Dans FrisquetBoilerFloatOutput.h, la fonction « on_send_operating_mode » semble permettre de modifier ce mode de fonctionnement (mode : 0 = eco / 3 = confort / 4 = hors gel)

Est-ce qu’il serait possible d’intégrer le choix de ce mode de fonctionnement dans Home Assistant ?

L’effet de ce paramètre est assez obscur et je n’ai pas vu d’impact réel dans le fonctionnement de la chaudière.

A tout hazard j’ai mis une automation dans Home Assistant qui change le paramètre en fonction de la consigne de température : < 7,5 hors gel, entre 7,5 et 17,5 Eco et à partir de 18 confort. Dans les faits ça ne change rien car j’ai observé que je fais plutôt des économies de chauffage quand je ne modifie pas la consigne la nuit. Pour moi c’est 19 en permanence, ensuite j’ajuste dans certaines pièces avec des robinets thermostatiques.

automation:
  - alias: Chaudière Hors Gel
    description: ""
    trigger:
      - platform: numeric_state
        entity_id: climate.chaudiere_frisquet
        attribute: temperature
        below: "7.2"
    condition: []
    action:
      - service: esphome.boiler_send_operating_mode
        data:
          mode: 4
    mode: single
  - alias: Chaudière Eco
    description: ""
    trigger:
      - platform: numeric_state
        entity_id: climate.chaudiere_frisquet
        attribute: temperature
        above: "7.2"
        below: "17.2"
    condition: []
    action:
      - service: esphome.boiler_send_operating_mode
        data:
          mode: 0
    mode: single
  - alias: Chaudière Confort
    description: ""
    trigger:
      - platform: numeric_state
        entity_id: climate.chaudiere_frisquet
        attribute: temperature
        above: "17"
    condition: []
    action:
      - service: esphome.boiler_send_operating_mode
        data:
          mode: 3
    mode: single

bonjour merci pour ce sujet et explications. toujours un peu compliqué neanmoins pour les non inities. Je commande ma frisquet via domoticz et un relais TOR… en perdant donc l intelligence PID. Avec ce tuto, est ce que je peux encore encore utiliser domoticz …
merci

Bonjour, je ne connais pas domoticz mais il n’y pas de raison que cela ne fonctionne pas. Dans ce cas, il faudrait activer l’interface mqtt sur esphome plutôt que l’api qui est propre à home assistant. Voir également le fil du forum domoticz que j’ai mis en référence (attention, fil très long !) dans mon premier post plus haut.

Bonjour à tous, la saison de chauffe à commencé et a nécessité pour ma part des ajustements de la courbe de chauffe. Mise ne place en plein hiver l’an dernier, elle n’était pas adaptée aux température intermédiaires de novembre et au final ça chauffait un peu trop.

Afin de ne pas avoir à recompiler le firmware esphome à chaque fois que je changeait une valeur, j’ai passé les paramètres en variables globales que l’on peut ajuster au besoin via un service. Les modifications sont disponibles dans le git.

@erwan33fr si tu as pu mettre ta régulation en place, je serais preneur de ton retour d’expériences et commentaires éventuels.

@corti23 j’ai mis en place ton projet de régulation :slight_smile:
Un grand merci pour ton travail :+1:

Je confirme que via le sketch arduino frisquet-ERS-decode.ino j’avais bien deux identifiants, le mien et celui de mon voisin :wink:

J’ai ensuite utilisé un WeMos D1 ESP12F sur le quel j’ai mis en place ESPHome avec tes fichiers de configuration que j’ai adapté à mon installation et tes fichiers sources.

J’ai connecté directement GPIO5 et la masse au connecteur Micro-fit 4 pin via un câble une paire de 3m environ.

Micro-fit 4 pin côté chaudière Frisquet :

Connecteurs Dupont (côté WeMos):

Pince à sertir SN-48BS :

L’ensemble fonctionne pour le moment :slight_smile:
J’ai l’impression qu’en prenant en compte une sonde extérieure (ce qui n’était pas le cas avec le thermostat Firsquet initial), la régulation de température semble plus efficace.
Je mettrai en place ta dernière modification cette semaine.

Pour le mode ECO et le mode confort, j’ai reproduit le fonctionnement du thermostat initial, c’est à dire mode confort avec une température réglé à 19° lorsque l’alarme n’est pas activée (donc présence) et mode ECO à 18° lorsque l’alarme est activée (personne dans la maison) ou la nuit.

Concernant ta dernière modification, si j’ai bien compris, plutôt que d’écrire en dur dans le fichier yaml de configuration du composant ESPHome et de devoir recompiler à chaque changement des paramètres, tu as passé ces variables en globale ? donc :

température_de_l_eau = (consigne - temp_extérieure) * pente + parallèle

pente = « heat_factor » (variable globale => modifiable via service )
parallèle = « offset » (variable globale => modifiable via service )

Concernant « kp », il s’agit de « PROPORTIONAL_FACTOR » qui était à la valeur « 10 » en dur dans le fichier « HeatCurveClimate.h » ?

Comment savoir quelles valeurs choisir pour ces 3 paramètres ?

Les variables « output_conversion_factor » et « output_conversion_offset » restent écrite en dur dans le fichier de configuration yaml ? pas besoin de les ajuster ?

L’appel du service via Home Assistant se fait sous cette forme ?

action:
  - service: esphome.boiler_set_heating_curve
    data:
      heat_factor: 1.4
      offset: 21
      kp: 10

Oui c’est bien ça, il y a des valeurs par défaut dans le code et l’appel du service change ces valeurs qui sont sauvegardée dans la mémoire flash de l’ESP32 et donc normalement récupérées à chaque reboot.

Quant à trouver les bon paramètres… Il faut faire des essais :wink:.

A la mi-saison, on joue plus sur l’offset et quand l’écart de température (consigne vs extérieur) est grand (janvier- février), on jour plus sur la pente. Le facteur proportionnel kp remplace bien la constante PROPORTIONAL_FACTOR. Pour ma part, en ce moment je l’ai mis à zero et j’arrive à ma consigne à 0,3 °C près. Pour bien faire en fait, il faudrait peut-être mettre en place un facteur intégral qui serait plus efficace. A voir si j’ai le temps.

Les variables « output_conversion_factor » et « output_conversion_offset » font le lien entre la température de l’eau et la commande envoyée à la chaudière. Le valeurs que j’ai mises en dur correspondent à ma chaudière et établies graces aux sondes Dallas installée sur le circuit de chauffage. Elle n’ont pas vocation à changer sur une installation donnée. Quant à savoir si elle s’appliquent à ta chaudière, je ne saurais le dire.

Ma page de suivi de la chaudière :

A noter, il m’est arrivé que la sonde extérieur se déconnecte et là c’est le drame !
J’ai donc mis un template qui renvoie la température donnée par la météo si la température extérieure n’est pas mise à jour pendant plus de deux heures.