[TUTO] - Sonoff TRVZB - Pilotage avec Home Assistant ("mode heat piloté")

Bonjour,
La meilleure solution, si vous le pouvez est Versatile Thermostat de @Jean-Marc_Collin mais il y a parfois quelques incompatibilités.

C’est mon cas avec une vieille chaudière fioul loi d’eau haute température qui ne supporte ni TPI, Auto TPI ou même PID, j’ai du mettre en place une solution pour piloter mes 7 vannes Sonoff TRVZB.

Je vous partage ici, pour ceux que ça intéresserai, un exemple de ma vanne cuisine qui peut être transposé sur les autres pièces.

Prérequis

  1. Sonoff TRVZB avec le dernier firmware 1.4.4 installée et fonctionnelle dans Home Assistant via zigbee2mqtt (non testé avec ZHA que je ne connais pas)
  2. schedule_state installé et fonctionnel (je n’explique pas sa mise en place, je vous laisse voir la doc)
  3. schedule-state-card développé par @Pulpy-Luke (idem je vous laisse voir la doc et le sujet sur ce forum)
  4. Au moins un capteur de température externe par pièces ou vous avez un radiateur avec une vanne Sonoff TRVZB (on n’utilise pas le capteur interne de la vanne)

Créer 3 input-numbers par vannes dans « paramètres - Entrées - Créer une entrée nombre »

  1. Consigne Cuisine Boost
boost

  1. Consigne Cuisine Confort
confort

  1. Consigne Cuisine Eco
eco

Créer ou modifier votre schedule.yaml aprés installation de schedule_state et tel qu’expliqué dans sa doc.

Exemple: extrait de mon yaml pour la cuisine

schedule.yaml
sensor:
  # --- DÉBUT BLOC CUISINE ---
  - platform: schedule_state
    # À MODIFIER : Nom unique du capteur pour cette pièce
    name: "Planning Chauffage Cuisine"
    # À MODIFIER : La consigne par défaut (souvent ECO) pour cette pièce
    default_state: "{{ states('input_number.consigne_cuisine_eco') }}"
    extra_attributes:
      unit_of_measurement: "°C"
    events:
      - start: "06:00"
        end: "11:00"
        # À MODIFIER : La consigne pour cette plage horaire (ex: BOOST)
        state: "{{ states('input_number.consigne_cuisine_boost') }}"
      - start: "11:00"
        end: "22:00"
        # À MODIFIER : La consigne pour cette plage horaire (ex: CONFORT)
        state: "{{ states('input_number.consigne_cuisine_confort') }}"
  # --- FIN BLOC CUISINE ---

  # --- DÉBUT BLOC [NOM_PIÈCE_SUIVANTE] ---
  # Répétez la structure ci-dessus ici pour le Salon, la Chambre, etc.

Créer l’automatisation Planning Chauffage Cuisine - Pilotage Cuisine (PID)

Avec le firmware 1.4.4, la Sonoff TRVZB introduit le Smart Temperature Control qui redéfinit l’algorithme PID (Proportional-Integral-Derivative) utilisé pour réguler la température. Merci à @KipK pour l’information que je n’avais pas vue, mais comme d’habitude ma chaudière a refusé un 2ème cerveau :frowning:

Les 3 modes disponibles :

1. OFF
Le contrôle PID est désactivé
La vanne fonctionne en mode tout-ou-rien (ON/OFF classique)
Lorsque la température est inférieure au setpoint : vanne ouverte à 100%
Lorsque la température atteint le setpoint : vanne fermée

2. Precision (Précision)
Algorithme PID actif avec contrôle fin et progressif
La vanne ajuste son ouverture de manière proportionnelle à l’écart entre température actuelle et consigne
Anticipe les variations pour éviter les dépassements

3. Smart (Intelligent)
Nouveau mode introduit avec le firmware 1.4.4
Combine efficacité énergétique et confort
Algorithme adaptatif qui apprend les caractéristiques thermiques de la pièce
Optimise les cycles de chauffe pour réduire la consommation tout en maintenant le confort

Dans l’automatisation ci-dessous, je suis en mode OFF, je n’utilise pas le Smart Temperature Control, mais j’ai laissé les paramètres, vous avez la possibilité de modifier les paramètres dans l’automatisation pour activer ‹ smart › si vous souhaitez activer Smart Temperature Control (PID) sur vos vannes

Code Automatisation Planning
# À MODIFIER : Le nom de l'automatisation pour la nouvelle pièce
alias: Planning Chauffage Cuisine - Pilotage Cuisine (PID)
description: Change la consigne de température de la vanne cuisine selon le planning
triggers:
  - trigger: state
    # À MODIFIER : Le capteur de planning de la pièce
    entity_id: sensor.planning_chauffage_cuisine
  - trigger: state
    entity_id:
      # À MODIFIER : Les 3 consignes (Boost, Eco, Confort) de la pièce
      - input_number.consigne_cuisine_boost
      - input_number.consigne_cuisine_eco
      - input_number.consigne_cuisine_confort
conditions:
  - condition: template
    value_template: >
      {# À MODIFIER : Le capteur de planning de la pièce ci-dessous #}
      {% set temp = states('sensor.planning_chauffage_cuisine') | float(-999) %}
      {{ temp >= 4 and temp <= 35 }}
actions:
  - action: climate.set_temperature
    target:
      # À MODIFIER : La vanne thermostatique (TRV) de la pièce
      entity_id: climate.cuisine_sonoff_trvzb
    data:
      temperature: >
        {# À MODIFIER : Le capteur de planning de la pièce ci-dessous #}
        {% set temp = states('sensor.planning_chauffage_cuisine') | float(19) %}
        {{ [[4, temp] | max, 35] | min }}
      hvac_mode: heat
  - if:
      - condition: state
        # À MODIFIER : Le sélecteur de mode PID de la vanne de la pièce
        entity_id: select.cuisine_sonoff_trvzb_smart_temperature_control
        state:
          - smart
          - precision
    then:
      - action: select.select_option
        metadata: {}
        target:
          entity_id:
            # À MODIFIER : Le sélecteur de mode PID de la vanne de la pièce
            - select.cuisine_sonoff_trvzb_smart_temperature_control
        data:
          option: "off"
      - delay:
          hours: 0
          minutes: 0
          seconds: 1
          milliseconds: 0
      - action: select.select_option
        metadata: {}
        target:
          entity_id:
            # À MODIFIER : Le sélecteur de mode PID de la vanne de la pièce
            - select.cuisine_sonoff_trvzb_smart_temperature_control
        data:
          option: "off"
mode: restart

Option automatisation ‹ Chauffage Cuisine - Gestion Portes ›

Code Automatisation
# À MODIFIER : Le nom de l'automatisation pour la nouvelle pièce
alias: Chauffage Cuisine - Gestion Portes
description: Coupe le chauffage si ouvert > 5 min et relance le planning à la fermeture
triggers:
  - trigger: state
    # À MODIFIER : Le capteur d'ouverture (porte/fenêtre) de la pièce
    entity_id: binary_sensor.rdc_ouvertures_groupe_chauffage
    to: "on"
    for:
      minutes: 5
    id: ouverture
  - trigger: state
    # À MODIFIER : Le même capteur d'ouverture que ci-dessus
    entity_id: binary_sensor.rdc_ouvertures_groupe_chauffage
    to: "off"
    id: fermeture
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id: ouverture
        sequence:
          - action: climate.set_temperature
            data:
              temperature: 7
            target:
              # À MODIFIER : La vanne thermostatique (TRV) de la pièce
              entity_id: climate.cuisine_sonoff_trvzb
      - conditions:
          - condition: trigger
            id: fermeture
        sequence:
          - action: automation.trigger
            target:
              entity_id:
                # À MODIFIER : L'automatisation de pilotage (PID) créée à l'étape 1 pour cette pièce
                - automation.00_planning_chauffage_pilotage_cuisine
            data:
              skip_condition: true
mode: restart

Synchronisation de la Température Externe de la Pièce avec la vanne Sonoff TRVZB

Le plus simple et le plus fiable est d’utiliser ce blueprint

blueprint-external-temperature-synchronization

Vous aurez à renseigner:

  1. Votre thermostat climate entity, dans mon
    exemple : climate.cuisine_sonoff_trvzb

  2. External Temperature Input de votre vanne
    exemple : number.cuisine_sonoff_trvzb_external_temperature_input

  3. External Temperature sensor
    l’entité de votre capteur de température de la pièce que j’ai mis en prérequis
    exemple pour moi : sensor.cuisine_temperature_median

  4. Temperature Sensor mode select de votre vanne
    exemple : select.cuisine_sonoff_trvzb_temperature_sensor_select

Ce point 4 justifie d’utiliser le blueprint plutôt que de faire une simple automatisation car il force external sur la vanne, et évite un petit bug qui fait que la vanne passe de internal à external external_1 etc …

Vous pouvez bien sûr concevoir une automatisation en intégrant ce paramètre et ne pas utiliser le blueprint.

Affichage sur le dashboard

1. Le planning de @Pulpy-Luke
je vous laisse voir la mise en place sur son github ou sur le sujet dédié sur ce forum

Exemple Carte dashboard planning

2. Exemples de carte avec les consignes interactives

Via l’automatisation les consignes horaires changent avec le planning de schedule-state, mais vous pouvez modifier la consigne en cours sur le dashboard, c’est interactif via l’automatisation.

Optionnel mais je l’utilise, donc il est présent dans la carte pour le badge consigne :
Créer une Entréé - Template - capteur

# à adapter en fonction des vannes
{{state_attr('climate.cuisine_sonoff_trvzb', 'temperature')}}

Nommée chez moi Consigne Cuisine TRVZB

Carte avec Consigne et thermostat

Code de la carte avec decluttering-card
type: custom:vertical-stack-in-card
cards:
  - type: vertical-stack
    cards:
      - type: custom:decluttering-card
        template: mushroom-card_consigne
        variables:
          - entity: input_number.consigne_cuisine_eco
          - name: Eco
          - icon: leaf
          - color: green
      - type: custom:decluttering-card
        template: mushroom-card_consigne
        variables:
          - entity: input_number.consigne_cuisine_confort
          - name: Confort
          - icon: fire
          - color: orange
      - type: custom:decluttering-card
        template: mushroom-card_consigne
        variables:
          - entity: input_number.consigne_cuisine_boost
          - name: Boost
          - icon: rocket-launch
          - color: red
  - type: vertical-stack
    cards:
      - type: custom:decluttering-card
        template: mushroom-card_sonoff
        variables:
          - entity1: climate.cuisine_sonoff_trvzb
          - name: Cuisine
          - entity2: sensor.consigne_cuisine_trvzb
          - entity3: select.cuisine_sonoff_trvzb_smart_temperature_control
          - entity4: sensor.cuisine_temperature_median
          - icon: countertop-outline

Code decluttering_templates
decluttering_templates:              
  mushroom-card_consigne:
    card:
      type: custom:vertical-stack-in-card
      cards:
        - type: custom:mushroom-number-card
          entity: '[[entity]]'
          display_mode: buttons
          layout: horizontal
          name: '[[name]]'
          secondary_info: none
          icon: mdi:[[icon]]
          icon_color: '[[color]]'
  mushroom-card_sonoff:
    card:
      type: custom:vertical-stack-in-card
      cards:
        - type: custom:mushroom-climate-card
          entity: '[[entity1]]'
          name: '[[name]]'
          icon: ''
          primary_info: name
          secondary_info: none
          layout: vertical
          tap_action:
            action: more-info
          hold_action:
            action: none
          double_tap_action:
            action: none
        - type: horizontal-stack
          cards:
            - type: custom:mushroom-chips-card
              chips:
                - type: entity
                  entity: '[[entity2]]'
                  tap_action:
                    action: none
                  hold_action:
                    action: none
                  double_tap_action:
                    action: none
                  icon_color: accent
                  content_info: state
                  use_entity_picture: false
                  icon: mdi:bullseye-arrow
              alignment: start
            - type: custom:mushroom-chips-card
              chips:
                - type: entity
                  entity: '[[entity3]]'
                  tap_action:
                    action: none
                  hold_action:
                    action: none
                  double_tap_action:
                    action: none
                  icon_color: accent
                  content_info: state
                  use_entity_picture: false
                  icon: null
              alignment: center
            - type: custom:mushroom-chips-card
              chips:
                - type: entity
                  entity: '[[entity4]]'
                  tap_action:
                    action: none
                  hold_action:
                    action: none
                  double_tap_action:
                    action: none
                  icon_color: accent
                  content_info: state
                  use_entity_picture: false
                  icon: mdi:[[icon]]
              alignment: end

Dernier prérequis concernant les vannes sonoff avant l’activation de ce qui prècède

  1. Si vous avez fait des essais d’autres configuration précédemment, je préconise de faire un « reset » sur les vannes, pour cela enlevez les batteries et remettez les en restant appuyé sur le bouton de la vanne et attendez la fin du cycle de « reset » avant de relâcher le bouton (elles vont rester connectée à zigbee2mqtt mais vont « resetter » les paramètres).

  2. Dans l’interface de zigbee2mqtt sur votre vanne allez dans « Expositions » et vérifiez les points suivants :

Local temperature calibration doit être à 0

System mode doit être sur heat

Temperature sensor doit être sur external (de toute façon le blueprint va le forcer)

Valve opening degree doit être à 100%

Valve closing degree doit être à 100%

Temperature accuracy par défaut il est à -1, vous pouvez le mettre à -0,4 dans un 1er temps si ça vous convient
(Précision de la régulation de température. La plage est de -0,2 à -1 °C, par incréments de 0,2 °C. La valeur par défaut est -1 °C. Si la précision de régulation est de -1 °C (valeur par défaut) et que la température cible est de 26 °C, le régulateur TRVZB fermera la vanne lorsque la température ambiante atteindra 26 °C et l’ouvrira à 25 °C. Si la précision est de -0,4 °C, la vanne se fermera à 26 °C et s’ouvrira à 25,6 °C. Remarque : Seule la version 1.3.0 ou supérieure est prise en charge.)

Je me suis relu, mais il peut manquer quelque chose …

1 « J'aime »

Je ne comprends pas bien le lien de cause à effet entre l’incompatibilité d’une trv sonoff, versatile thermostat , et une vieille chaudière ?
Vous n’avez pas de sortie contact sec sur le bornier de la chaudière pour allumer/éteindre ?

Il ne s’agit pas d’un problème de vieille chaudière il s’agit de régulation loi d’eau, qui fonctionne très bien par ailleurs c’est un système très efficace qui ne nécessite pas de 2eme régulation TPI ou PID
Les nouvelles chaudières loi d’eau ou PAC loi d’eau supportent mieux une 2eme régulation sans provoquer de phénomène d’emballement

Même si dans l’absolu une loi d’eau bien réglée avec des vannes thermostatiques ne nécessite pas d’avoir une 2eme régulation c’est normalement contre productif à condition de tomber sur un chauffagiste qui sache régler une régulation loi d’eau

Mais effectivement si un jour le boîtier trimatik de ma vieille Viessmann me lache je mettrais un contact sec :slight_smile: mais c’est une merveille le chauffagiste fait une prière à chaque fois qu’il fait la révision annuelle quand il doit l’arreter

J’ai également une vieille chaudière gaz, sans loi d’eau par contre, mais avec une sortie contact sec.
Je joue sur la temperature d’eau manuellement en fonction des tendances de la semaine. Parfois j’y touche pas pendant plusieurs semaines.

Justement, Versatile apporte énormément pour gérer les vieux ésuipementd :

  • hystérésis pour limiter les cycles de démarrage de la chaudière et créer davantage de charge thermique par cycle
  • paramétrage du nombre minimum de Vtherm en demande pour autoriser le démarrage, toujours dans le but de solliciter la chaudière avec un minimum de charge requis
  • %minimum d’ouverture d’une vanne pour que ça circule toujours quelque part
  • etc..

A vous de voir.

c’est toute la différence.

Viessmann était précurseur pour les chaudières loi d’eau, à l’époque c’était innovant et tant qu’elle fonctionne je n’ai aucun intérêt à shunter sa régulation, la loi d’eau est ce qu’il y a de mieux pour une chaudière, elle gère très bien la température de l’eau en fonction de la température extérieure toute seule (maintenant que j’ai trouvé un chauffagiste qui a su la régler), aujourd’hui je suis pleinement satisfait de mon mode de fonctionnement avec les vannes.

Pas possible dans ma région il y a 2 jours il faisait 4º et aujourd’hui presque 10° je passerai mon temps à ajuster :slight_smile: ma loi d’eau fait le boulot toute seule, elle a adapté la température de l’eau et 19,5° dans mes pieces de vie il y a 2 jours, et 19,5° aujourd’hui, inertie imperceptible.
Le seul truc perturbant en bord de mer c’est le vent et la température ressentie qui joue mais c’est un détail
je connais bien Versatile Thermostat, j’ai fait tous les tests et remonté toutes mes relevés et remarques, le problème est connu je ne suis pas le seul.

Le but de ce tuto n’est pas de dénigrer Versatile Thermostat, au contraire, je commence le tuto en disant que c’est la meilleure solution si on peut l’utiliser, d’ailleurs tu es la cible idéale avec ta chaudière sans loi d’eau. Le but est de donner une alternative pour ceux qui sont confrontés à ce problème.

En te relisant ce point me pose question, utiliser versatile thermostat uniquement avec une régulation par hysteresis c’est un peu dommage.

la richesse fonctionnelle de versatile thermostat c’est le TPI justement, c’est beaucoup plus précis que l’hystérésis. Il réduit la puissance à mesure qu’on approche de la cible pour éviter de la dépasser et c’est idéal pour les chaudières classiques (ON/OFF) comme la tienne et les radiateurs électriques.

Une régulation par hysteresis c’est plus ou moins mon tuto en fait

Sans hystérésis, la chaudière tourne quasiment non stop, du moins la pompe.
Avec hystérésis (-0.3 et +0.2) j’oscille autour de la consigne légèrement plus, mais ça crée davantage de charge par cycle, et ça me limite le nombre de cycles.
J’utilise également d’autres fonctions de versatile, comme le nombre minimum de Vtherm en demande pour autoriser le démarrage de la chaudière, etc.

Je laisse la chaudière faire sa propore régulation (consigne T°C d’eau), et Versatile la régulation des radiateurs.
La loi d’eau sert simplement à avoir une montée en T°C constante à ouverture de vanne équivalente. Ça permet une régulation de puissance plus homogène également.

ex : l’équilibre thermique d’une pièce va dépendre de la différence entre :
- les déperditions
- les apports (radiateurs, personnes, etc.)

S’il fait -5°C et que je mets une eau à 60°C , en général la montée en T°C est de l’ordre de 1.5°C/heure.
S’il fait 10°C dehors et que je laisse la T°C à 60°C, le radiateur aura toujours la même puissance, mais les déperditions seront plus faibles. Donc l’équilibre thermique sera plus important, ce qui va se traduire par une montée en T°C plus rapide, 3°C/heure. Pour pallier cela, il faut baisser la T°C d’eau pour « brider » la puissance du radiateur.
Vous me direz, mais la vanne aussi sert à brider le radiateur. Oui, mais la puissance à réguler sur une faible ouverture est plus difficile à maintenir que sur une ouverture plus grande, avec des risques de dépasser le point de consigne (overshoot) , d’où l’intérêt de la loi d’eau.
Avec une loi d’eau et un équilibrage parfait des radiateurs (tés de réglage) on pourrait presque se passer des vannes de régulation/thermostatique.

après vérification les dernières versions de Versatile Thermostat ne laissent pas le choix de désactiver tpi et d’activer un mode hysteresis , tu utilises peut-être une ancienne version, ou on ne parle pas de la même chose

J’ai demandé si on pouvait ajouter un mode hystérésis dans les choix de versatile thermostat comme ils viennent d’ajouter un 2ème choix smart_pi, à priori c’est possible, ce sera peut-être fait dans une prochaine version

Hello,

intéressante discussion. L’hysteresis implémenté dans VTherm permet d’activer ou non le TPI (cf. versatile_thermostat/documentation/fr/algorithms.md at main · jmcollin78/versatile_thermostat · GitHub). Il est donc intégré au TPI en effet. Le TPI ne s’applique que entre les 2 seuils. En dessous, la puissance est maximale, au dessus nulle.

Je n’ai pas prévu de faire autre chose que ça et d’avoir un fonctionnement par hystereris sans TPI.
Ca fait déjà beaucoup beaucoup d’options.

Y a en effet, un SmartPI sur le feu qui est toujours en développement, mais rien à voir à priori avec un hysteresis.

1 « J'aime »