Pilotage Chaudière Frisquet ECO Radio System via ESPHome

J’ai remarqué deux choses :

  • après un reboot de l’ESP, la première valeur de consigne est fausse ( setpoint = 214783647) => ce qui donne une consigne de chauffe en FF (chaudière au max à 100%). Si il y a en mémoire une target_temperature, et une current_temperature, alors une nouvelle consigne correcte est rapidement calculée. Sinon… ça peut être gênant. Peut être qu’il faudrait éviter d’envoyer une consigne temps que les valeurs ne sont pas correctement calculés ?

  • les variables heat_factor, offset, et kp reviennent à leur valeur initiale après reboot (valeurs initiales définies dans le fichier de configuration yaml).

Bonjour @erwan33fr
Merci pour ce retour, en effet, le calcul se fait quand la température extérieure ou intérieure évolue. Si l’une des deux n’est pas encore chargée par l’ESP depuis HA, le calcul est faux. Je vais corriger ça.

Sinon, j’ai poussé sur git une nouvelle version des composants, qui ne sont plus des custom components mais de vrais composants esphome plus facile à configurer dans le fichier yaml. J’utilise désormais la fonctionnalité external_components pour cela.

Les composants customs sont trop simples et on arrive vite aux limites de ce qu’on peut faire avec.
Je t’invite à faire la migration car l’ancienne version (toujours disponible) ne va plus évoluer.

Changement : l’ID de la chaudière et le numéro de pin se renseignent désormais dans le fichier yaml. Il n’y a plus à toucher au code c++.

Pour les variables globales qui ne sont pas sauvegardées, j’ai remarqué ça aussi alors que la doc dit le contraire. J’ai abandonné ce concept dans la nouvelle version en attendant mieux

@erwan33fr , c’est corrigé, dis moi comment ça se passe de ton coté.
J’ai également corrigé l’ancien code (déplacé dans /custom), c’est la dernière fois que j’y touche :wink:

1 « J'aime »

@corti23, je viens de voir tes messages, je vais essayer de trouver le temps cette semaine pour tester cette nouvelle version :+1:

il y a de gros changement :slight_smile:

Pour l’intégration dans Home Assistant, la modification des variables control_parameters et output_parameters de CLIMATE (heat_factor, offset, kp, output_factor, output_offset)
se fait via l’appel aux services suivant ? :thinking: :

set_heat_factor
set_offset
set_kp
set_output_calibration_factor
set_output_calibration_offset
set_minimum_output

Sous cette forme ? :

action:
  - service: esphome.frisquet_set_heat_factor
    data:
      heat_factor: 1.4

Et le changement de mode, toujours sous cette forme ?

service: esphome.frisquet_send_operating_mode
            data:
              mode: 3

Il faudrait peut être documenter davantage l’intégration dans Home Assistant, pas toujours évident de comprendre le code et de retrouver les services Home Assistant associés.

1 « J'aime »

Oui, tu as raison, il faut étoffer la doc pour l’intégration HA, c’est en cours.

Pour les services disponibles dans HA, je les ai remplacés par des « Actions » d’automatismes plus proches de la philosophie ESPHome et permet plus de flexibilité dans la création des services. Tout est dans la documentation.

1 « J'aime »

Parfait, la documentation est plus complète maintenant :slight_smile:
Petite remarque, il y a une inversion dans les exemples entre les chapitres « set_mode » et "set_level "

Dans le composant climate, pour output_parameters, il y a le paramètres minimum_output, output_factor, et output_offset. Pas de paramètre maximum_output et zero_means_zero ?
D’ailleurs pourrais tu préciser le rôle du paramètre zero_means_zero ?

Dans le fichier boiler.yaml de github, tu as les valeurs suivantes :
heat_factor: 1.65
offset: 21.5
kp: 0

Cela signifie que pour calculer ta consigne, tu ne tiens pas compte de la différence entre la température souhaitée et la température courante ? Donc tu ne tiens compte que de la différence entre température désirée et la température extérieure ?

Pour le moment j’avais ses valeurs :
heat_factor: 1.4
offset: 21
kp: 10
mais je me retrouve en moyenne 1° au dessus de la consigne.
Je vais tester :
heat_factor: 1.4
offset: 16
kp: 8

PS : chaudière Frisquet Hydroconfort

1 « J'aime »

Hello à tous,

J’avais suivi ce fil cet été car je comptais me mettre à HA.
C’est maintenant chose faite, et je découvre que le projet s’est simplifié, quel bonheur :slight_smile:
Je vais donc me lancer

J’ai néanmoins une question concernant le module ESPxxx
Je dispose chez moi de pas mal de shelly (ESP32) et dernièrement un nouvel add-on a été introduit dans leur gamme:
image

https://www.shelly.cloud/en/products/shop/shelly-plus-add-on

plus de détails:

il permet d’étendre les capacités de leur relais
De plus on peut installer ESPHome sur ces relais.

est ce que je pourrais utiliser cela et y connecter le connecteur pour la chaudière ?

d’avance merci

Dans le composant climate, minimum_output correspond à la consigne minimale envoyée à la chaudière en dessous de la quelle le climate enverra 0 (arrêt de la chaudière). Par défaut la valeur mini est 10%. Par exemple, si le climate calcule 9%, il enverra 0. Cela correspond au fonctionnement de la chaudière, en dessous de 10, il ne se passe rien.

zero_means_zero est un paramètre commun aux Float Outputs et est utile quand on configure un min_power (dans l’output, pas le climate). En gros quand l’output reçoit une consigne (entre 0 et 1), elle la convertit proportionnellement pour qu’elle soit entre min_power et max_power. Donc 0 sera converti en min_power sauf si zero_means_zero est true, dans ce cas zéro sera toujours égal à zéro.

Oui, une fois les bons coefficients trouvés, pas besoin de facteur proportionnel, à condition de ne pas changer la consigne durant la journée. Sans kp, la convergence peut alors être très longue. Par exemple si tu passes de 19°C à 17°C quand tu pars le matin, sans kp cela va mettre des heures à descendre. Avec un kp agressif, la chaudière va baisser significativement, au risque même d’être arrêtée, ce qui peut être un problème dans certaines pièces de la maison. Mais cela peut aussi être le comportement désiré.

Mon cas est particulièr, le séjour a de gros radiateurs en fonte avec de l’inertie et dans les chambres j’ai des radiateurs en tôle et robinets thermostatiques zigbee. Donc mes coefficients sont calculés pour le séjour mais il faut toujours de l’eau chaude dans les pièces car les radiateurs en tôle n’ont pas d’inertie. Quand la chaudière s’arrête, il fait vite froid dans les chambres. C’est pour cela que la régulation PID de Frisquet ne me convenait pas. La consigne de nuit arrêtait la chaudière à cause de l’inertie des radiateurs en fonte et on gelait dans les chambres.

Oui, ce n’est pas étonnant, ta loi d’eau doit être trop forte et la régulation proportionnelle ne permet pas de compenser. Il faudrait ajouter un terme intégral pour ça (je vais peut-être le faire). Tu as peut être une maison bien isolée (pas comme moi !).

En revanche, la loi d’eau, bien réglée devrait converger.

En hiver (maintenant par exemple), si c’est trop chaud, baisse la pente (0.1 p.ex.) , ne change pas l’offset. A la mi-saison, tu joues sur l’offset, par exemple baisse de 1 mais il faut compenser en augmentant la pente de 0,1.

Commence avec kp = 0 et regarde où ça te mène. Pense au kp comme un accélérateur.

Mon conseil, c’est de noter au cours de l’année la consigne envoyée à la chaudière (température d’eau) et le delta t constaté. En traçant la courbe (une droite normalement !), on trouve assez facilement les bon paramètres:

Il faut une saison complète pour bien trouver les paramètres. Et si tu changes l’isolation de la maison, il faudra recommencer.

1 « J'aime »

Je ne vois pas de sortie numérique (Digital Out). Sans ça, pas possible de communiquer avec la chaudière.

Merci pout ta réponse.

Comme je n’y connais rien en ESP, et que je n’ai pas trop envie de m’atteler à la partie hardware
Je suis tombé la dessus.
le pin G21 est disponible.
Est ce un bon choix pour se lancer dans ce projet ?

Merci pour ton aide :slight_smile:

Interessant petit produit… Si on pouvait y coller les sondes Dallas sans effort ce serait parfait !
GP21 ou GP22 ont l’air libre, ça vaut le coût d’essayer. Tiens nous au courant.

hoy boy …
J’espèrais plus d’aide sur ce genre de produit ahah
déja que je ne comprends pas tout à ton tuto.

Ma semaine de vacances au chaud va etre productive en apprentissage je sens :slight_smile:

A priori ils vendent bcp d’add-on pour connecter moultes trucs et capteurs ^^

Je ne vois pas comment t’aider plus à ce stade. Suis bien le tuto (sur GitHub, celui présenté ici sur ce thread n’est plus à jour) et si tu as des questions, n’hésite pas à revenir vers moi.

Si c’est ton premier essai sur ESPHome, commence par une config de démo assez simple comme présenté ici (ESPHome: Nothing-to-firmware in 30 minutes - YouTube) ça te permettra de te familiariser.

Pour revenir à la chaudière, le point critique est la détermination de l’ID de la chaudière, car il faut faire tourner un bout de code sur un Arduino pour écouter les trames reçues par le récepteur radio de la chaudière. Ça peut aussi se faire avec un ESP32 en mode Arduino mais ça, je n’ai pas essayé.

Je viens de tester la dernière version avec les vrais composants esphome.

Lorsque je valide à la compilation j’ai :

INFO Reading configuration /config/esphome/frisquet.yaml...
Failed config

sensor.heat_curve_climate: [source /config/esphome/frisquet.yaml:51]
  
  Component sensor.heat_curve_climate cannot be loaded via YAML (no CONFIG_SCHEMA).
  platform: heat_curve_climate
  name: Consigne chaudière
  type: WATERTEMP
sensor.heat_curve_climate: [source /config/esphome/frisquet.yaml:55]
  
  Component sensor.heat_curve_climate cannot be loaded via YAML (no CONFIG_SCHEMA).
  platform: heat_curve_climate
  name: Réglage chaudière
  unit_of_measurement: %
  type: SETPOINT
sensor.heat_curve_climate: [source /config/esphome/frisquet.yaml:60]
  
  Component sensor.heat_curve_climate cannot be loaded via YAML (no CONFIG_SCHEMA).
  platform: heat_curve_climate
  name: Erreur régulation
  type: ERROR
sensor.heat_curve_climate: [source /config/esphome/frisquet.yaml:64]
  
  Component sensor.heat_curve_climate cannot be loaded via YAML (no CONFIG_SCHEMA).
  platform: heat_curve_climate
  name: Delta température extérieure
  type: DELTA

Mon fichier frisquet.yaml :

substitutions:
  device: frisquet
  name: "Chaudière Frisquet"
  reboot_timeout: 14d
  update_interval: 60s
  ota_password: "XXXXXXXXXXXXXXXX"

esphome:
  name: ${device}
  
external_components:
  - source: components

esp8266:
  board: d1_mini

packages:
  common: !include common/common.yaml
  binary_sensors: !include common/binary_sensors.yaml
  sensors: !include common/sensors.yaml
  switches: !include common/switches.yaml
  text_sensors: !include common/text_sensors.yaml

logger:
  baud_rate: 0
  level: DEBUG
  logs:
    sensor: INFO
    text_sensor: INFO

sensor:
  - platform: homeassistant
    id: current_temperature
    entity_id: sensor.temperature_interieure
    unit_of_measurement: "°C"
    filters:
      - filter_out: nan
      - heartbeat: 60s
        
  - platform: homeassistant
    id: outdoor_temperature
    entity_id: sensor.temperature_exterieure
    unit_of_measurement: "°C"
    filters:
      - filter_out: nan
      - heartbeat: 60s

  - platform: heat_curve_climate
    name: "Consigne chaudière"
    type: WATERTEMP

  - platform: heat_curve_climate
    name: "Réglage chaudière"
    unit_of_measurement: "%"
    type: SETPOINT

  - platform: heat_curve_climate
    name: "Erreur régulation"
    type: ERROR

  - platform: heat_curve_climate
    name: "Delta température extérieure"
    type: DELTA

climate:
  - platform: heat_curve_climate
    id: boiler_climate
    name: ${name}
    sensor: current_temperature
    outdoor_sensor: outdoor_temperature
    output: boiler_cmd
    visual:
      min_temperature: 7
      max_temperature: 28
      temperature_step: 0.5
    control_parameters:
      heat_factor: 1.1
      offset: 15
      kp: 10
    output_parameters:
      minimum_output: 0.1
      output_factor: 1.9
      output_offset: -41

output:
  - platform: frisquet_boiler
    pin: 5
    id: boiler_cmd
    boiler_id: XXXX

 # Enable Home Assistant API
api:
  encryption:
    key: "XXXXXXXXXXXXXXXXXXXXXXXXXX"
  services:
    - service: set_boiler_setpoint
      variables:
        setpoint: int
      then:
        - output.set_level:
            id: boiler_cmd
            level: !lambda 'return setpoint / 100.0;'

    - service: set_boiler_mode
      variables:
        mode: int
      then:
        - boiler.set_mode:
            id: boiler_cmd
            mode: !lambda 'return mode;'
            
    - service: set_control_parameters
      variables:
        heat_factor: float
        offset: float
        kp: float
      then:
        - climate.heat_curve.set_control_parameters:
            id: boiler_climate
            heat_factor: !lambda 'return heat_factor;'
            offset: !lambda 'return offset;'
            kp: !lambda 'return kp;'

Ton fichier YAML a l’air correct.
L’erreur que tu as semble indiquer que ESPHome ne trouve pas les nouveaux composants.

Si tu enlèves les sensors, est-ce que le reste passe ?
Est-ce que les deux dossiers frisquet_boileret heat_curve_climate sont bien dans le dossier components ?
Est-ce que le dossiers sensor et son contenu est bien dans le dossier heat_curve_climate ?

Effectivement, il devait manquer quelque chose dans mon dossier « components ».
J’ai recopié l’arborescence et cette fois tout est ok :slight_smile:

J’ai ajouté une ligne en 112 au fichier « heat_curve_climate.cpp » pour éviter les valeurs de consigne farfelu également lorsque la température courante n’est pas encore connu (après un reboot par exemple)

		    if (std::isnan(this->current_temperature))
			{
				ESP_LOGD(TAG, "Current temperature not available, skipping calculation.");
				return;
			}

Pour les paramètres de réglages (heat_factor, offset, kp), sous Home Assistant, j’ai créé des « input_number » avec une automatisation lors de changement :

alias: Chaudière Set Control Parameters
description: Set control parameters
trigger:
  - platform: state
    entity_id:
      - input_number.chaudiere_heat_factor
      - input_number.chaudiere_offset
      - input_number.chaudiere_kp
condition: []
action:
  - service: esphome.frisquet_set_control_parameters
    data:
      heat_factor: "{{ states('input_number.chaudiere_heat_factor') | float}}"
      offset: "{{ states('input_number.chaudiere_offset') | float }}"
      kp: "{{ states('input_number.chaudiere_kp') | float }}"
mode: restart

et pour restaurer les paramètres de réglage après un reboot de l’ESP, j’ai ajouté une automatisation :

alias: Chaudière Restore Control Parameters
description: Restore control parameters after a reboot
trigger:
  - platform: numeric_state
    entity_id: sensor.chaudiere_frisquet_uptime
    below: 60
condition: []
action:
  - service: esphome.frisquet_set_control_parameters
    data:
      heat_factor: "{{ states('input_number.chaudiere_heat_factor') | float}}"
      offset: "{{ states('input_number.chaudiere_offset') | float }}"
      kp: "{{ states('input_number.chaudiere_kp') | float }}"
  - delay: "00:01:30"
mode: single
max_exceeded: silent

ou plus simple

trigger:
  - platform: state
    entity_id:
      - binary_sensor.chaudiere_frisquet_status
    to: "on"
    for:
      seconds: 10
condition: []
action:
  - service: esphome.frisquet_set_control_parameters
    data:
      heat_factor: "{{ states('input_number.chaudiere_heat_factor') | float}}"
      offset: "{{ states('input_number.chaudiere_offset') | float }}"
      kp: "{{ states('input_number.chaudiere_kp') | float }}"
mode: restart

Salut,
Content que cela fonctionne pout toi :grinning:. Pour la modification que tu proposes, j’ai mis en place quelque chose de similaire dans la version que je vais pousser dans quelques jours. La différence est que si la température « current » n’est pas disponible, on saute juste le calcul proportionnel mais on continue avec la heat curve. Ce que tu proposes saute tout le calcul.

Quant aux automatisations que tu proposes, c’est super, je vais m’en inspirer probablement.

A noter que je suis en train d’ajouter un facteur intégral au climate mais je ne suis pas encore convaincu du résultat.

Pour le moment, après avoir trouver les paramètres adaptés à mon isolation (heat_factor 1.1 , offset 19 et kp 10), la régulation fonctionne parfaitement :slight_smile:

Dans la prochaine version, est-ce que tu pourrais ajouter des sensors (heat_factor, offset et kp) pour avoir les paramètres pris en compte par l’ESP ?

Oui c’est faisable (et pas compliqué).

J’ai jute un problème avec mon ESP (un Wemos D1 mini), il se reboot tout seul de façon assez cyclique (entre 37000 et 39000 secondes, soit toutes les 10h environ)

Le signal Wifi est bon, et j’ai essayé de changer l’alim.

En cherchant un peu, ce type de problème peut est lié à un 100% de load :

Est-ce que tu as constaté également ce phénomène ?