Aie, je crains qu’il ne faille soit adapter le blueprint en supprimant la variable et le test de la fenêtre (le plus propre), soit utiliser un binary_sensor pour simuler une fenêtre toujours fermée. Pour cela, tu peux par exemple utiliser un template binary_sensor avec un état toujours à off.
Pour le on-off d’allumage, le plus simple est de changer directement le blue print et de mettre on à la place de off et/ou réciproquement.
J’ai donné les blueprint et cartes comme modèles et il peut y avoir du sens de les adapter aux besoins de chacun.
Je quitte le lua pour le yaml et au premier abord, c’est loin d’etre simple.
Peux-tu verifier, merci ?
blueprint:
name: Thermostat TPI
description: Thermostat TPI (Time Propertional & Integral)
domain: automation
input:
coeff_c:
name: Coefficient C
description: coefficient multiplicateur de la différence entre la consigne et éa température intérieure pour le calcul de la puissance (0.6 conseillé)
selector:
number:
min: 0.0
max: 1.0
step: 0.01
coeff_t:
name: Coefficient T
description: coefficient multiplicateur de la différence entre la consigne et éa température extérieure pour le calcul de la puissance (0.01 conseillé)
selector:
number:
min: 0.0
max: 0.1
step: 0.001
entity_consigne:
name: Consigne
description: Champs d'entrée de la température de consigne (input number).
selector:
entity:
domain: input_number
entity_temp_ext:
name: Température extérieure
description: Sonde de mesure de la température extérieure (sensor)
selector:
entity:
domain: sensor
device_class: temperature
entity_temp_int:
name: Température intérieure
description: Sonde de mesure de la température intérieure (sensor)
selector:
entity:
domain: sensor
device_class: temperature
entity_puissance:
name: Puissance
description: Champs d'affichage de la puissance (input_number)
selector:
entity:
domain: input_number
entity_chauffage:
name: Chauffage
description: Interrupteur marche / arrêt du chauffage (switch)
selector:
entity:
domain: switch
# Récupération des paramètres
variables:
coeff_c: !input coeff_c
coeff_t: !input coeff_t
entity_temp_int: !input entity_temp_int
entity_temp_ext: !input entity_temp_ext
trigger:
- platform: time_pattern
minutes: "/10"
- platform: state
entity_id: !input entity_consigne
# - platform: state
# entity_id: !input entity_temp_int
action:
- alias: récupération des données
variables:
entity_consigne: !input entity_consigne
consigne: "{{states(entity_consigne)}}"
temp_ext: '{{ states(entity_temp_ext) }}'
temp_int: '{{ states(entity_temp_int) }}'
puissance: >-
{%set val = coeff_c * (consigne - temp_int) + coeff_t * (consigne -
temp_ext) %} {% if val > 1 %} {% set val = 100 %} {% elif val < 0 %}
{% set val = 0 %} {% else %} {% set val = ( (val *
100) | round(0)) %} {% endif %} {{val}}
temps_chauffe: '{{ puissance * 6 }}'
- alias: Met à jour l'indicateur de puissance
service: input_number.set_value
target:
entity_id: !input entity_puissance
data:
value: '{{puissance}}'
- choose:
- conditions:
- condition: template
value_template: '{{puissance == 0}}'
sequence:
- service: switch.turn_on
target:
entity_id: !input entity_chauffage
- conditions:
- condition: template
value_template: '{{ puissance > 99}}'
sequence:
- service: switch.turn_off
target:
entity_id: !input entity_chauffage
default:
- service: switch.turn_off
target:
entity_id: !input entity_chauffage
- delay: '{{temps_chauffe}}'
- service: switch.turn_on
target:
entity_id: !input entity_chauffage
mode: restart
blueprint:
name: Pilotage chauffage
description: Gestion des différents modes de chauffage - Stop Hors-gel Auto confort Auto eco
domain: automation
input:
entity_consigne:
name: Consigne
description: Champs d'entrée de la température de consigne (input number).
selector:
entity:
domain: input_number
entity_mode:
name: Sélection du mode
description: Entité de gestion du mode de gestion du chauffage (input_select)
selector:
entity:
domain: input_select
entity_schedule_confort:
name: Schedule mode confort
description: Entité générée par schedule pour la planification du mode confort (switch)
selector:
entity:
domain: switch
entity_schedule_eco:
name: Schedule mode eco
description: Entité générée par schedule pour la planification du mode eco (switch)
selector:
entity:
domain: switch
entity_thermostat_tpi:
name: Thermostat
description: Entité de gestion du thermostat TPI (automation)
selector:
entity:
domain: automation
# Température pour le hors gel
variables:
temperature_hg: 10
alias: Pilotage chauffage bureau Patrick
description: ''
trigger:
- platform: state
entity_id: !input entity_mode
condition: []
action:
- choose:
# ----- Mode Stop
- conditions:
- condition: state
entity_id: !input entity_mode
state: Stop
sequence:
- service: input_number.set_value
data:
value: 0
target:
entity_id: !input entity_consigne
- service: switch.turn_on
target:
entity_id:
- !input entity_schedule_eco
- !input entity_schedule_confort
- service: automation.turn_on
target:
entity_id: !input entity_thermostat_tpi
# ----- Mode Hors-gel
- conditions:
- condition: state
entity_id: !input entity_mode
state: Hors-gel
sequence:
- service: automation.turn_on
target:
entity_id: !input entity_thermostat_tpi
- service: input_number.set_value
data:
value: '{{temperature_hg}}'
target:
entity_id: !input entity_consigne
- service: switch.turn_on
target:
entity_id:
- !input entity_schedule_eco
- !input entity_schedule_confort
# ----- Mode Auto - confort
- conditions:
- condition: state
entity_id: !input entity_mode
state: Auto - confort
sequence:
- service: automation.turn_on
target:
entity_id: !input entity_thermostat_tpi
- service: switch.turn_off
target:
entity_id: !input entity_schedule_confort
- service: switch.turn_on
target:
entity_id:
- !input entity_schedule_eco
# ----- Mode Auto - eco ou absent
- conditions:
- condition: or
conditions:
- condition: state
entity_id: !input entity_mode
state: 'Auto - eco'
- condition: state
entity_id: !input entity_mode
state: 'Absent'
sequence:
- service: automation.turn_on
target:
entity_id: !input entity_thermostat_tpi
- service: switch.turn_on
target:
entity_id:
- !input entity_schedule_confort
- service: switch.turn_off
target:
entity_id: !input entity_schedule_eco
# ----- Mode manuel
default:
- service: switch.turn_on
target:
entity_id:
- !input entity_schedule_eco
- !input entity_schedule_confort
- service: automation.turn_off
target:
entity_id: !input entity_thermostat_tpi
mode: single
J’ai relu et chargé sur mon serveur de test les yaml pour vérifier la syntaxe, mais pas testé. Oui top, c’est à priori bon
yaml n’est pas naturel au début, surtout si on est habitué à de la programmation structurée classique, mais une fois un cap passé, c’est très puissant et relativement facile et rapide à maintenir. Cela vaut le coup de persévérer.
OK. Merci.
En même temps, j’ai pas fait grand chose. J’ai supprimé tout ce qui concernait le capteur d’ouverture de fenêtre et remplacé switch.turn_on par switch.turn_off et inversement.
Bonjour, est-ce qu’il y a la possibilité de rendre ce thermostat compatible avec les assistants vocaux comme Siri ? Merci d’avance
Hello,
Pour Siri, il faut passer par HomeKit. Et pour Alexa et Google Assistant, le plus simple reste de passer par le cloud de Nabu Casa.
Si l’objectif est de piloter la température, cela ne fonctionnera pas nativement : il faudrait exposer la consigne du thermostat portée par l’entité input_number. Or sauf erreur les assistants vocaux ne supportent pas le pilotage d’une valeur type input_number.
Par contre, les assistants supportent les thermostats (climate). Il faudrait donc recréer un thermostat type climate juste pour utiliser la consigne via l’assistant vocal, puis reprendre cette consigne dans le thermostat TPI (ou remplacer l’input_number dans le thermostat TPI par la consigne du climate). Je n’ai cependant pas testé.
Aucun problème par contre pour lire une température ou démarrer/arrêter le thermostat par un assistant.
Merci, je regarderai ça, la semaine prochaine
Merci pour ce super partage
Est il possible de l’adapter à un chauffage central à eau chaude avec vanne thermostatique?
Salut,
ça va dépendre du contexte et de ce que tu veux que ça fasse, mais sur le principe c’est quand même différent :
- Le chauffage centrale (eau) dispose de beaucoup plus d’inertie que les convecteurs electriques
- Une vanne thermostatique pilotée en principe, c’est pas du on/on comme sur les convecteurs… Le réglage est progressif
Donc à première vue, la partie planning est réutilisable, mais le reste risque de rendre les choses moins simples que le fonctionnement de base, non ? Et pas certain qu’il y a un gain en confort.
Merci.
Oui tout à fait c’est tout à fait possible. Il y aurait 2 adaptations à faire dans le blueprint du thermostat TPI:
- Augmenter le temps de recalcul. 10mn est pour un convecteur électrique et il faudrait passer à 30mn (voir plus) pour considérer l’inertie du chauffage à eau chaude.
- Le thermostat TPI proposé pilote un on-off et module le temps de ON et OFF en fonction de la puissance (par ex 3mn en ON et 7mn en OFF pour puissance à 30%). Il faudrait alors utiliser directement la puissance calculée par le thermostat (entre 0 et 100%) pour piloter la vanne électrostatique.
=> toutes les 30 mn, chaque vanne recevrait alors une valeur comprise entre 0 et 100 en fonction des températures intérieures et extérieures.
Dans l’exemple, une vanne recevra la valeur de 30% si la puissance calculée est à 30%.
Si une fenêtre ouverte, la vanne recevra une valeur de 0%.
Salut
Ça c’est à condition que ce soit une vanne pilotée en ouverture ? Genre les lc13 c’est une consigne
L’idée serait de mettre des vannes thermostatiques zigbee pour pouvoir les piloter et reprendre les informations de température ambiante via ces vannes pour mettre en chauffe la chaudière si une température ambiante est en dessous de la consigne.
Il faut regarder ton système de chauffage…
Vanne 3 voies ? Ballon tampon ? Un bon circulateur ?
En principe, c’est la loi d’eau qui le boulot sur une chaudière. Dans le cas d’un ballon tampon, la chaudière assure le maintien en température du ballon (un volume limité vis-à-vis du circuit complet). Si on pioche dedans en ouvrant les vannes, la température du ballon descend. La chaudière compense. Si les vannes restent fermées la température du ballon varie peu et la chaudière fonctionne au minimum.
Dans le cas d’un vanne 3 voies c’est moins facile (il n’y a pas de réserve) mais le principe reste le même.
Et pareil, allumer/éteindre une chaudière fioul c’est pas vraiment bon pour l’encrassement des brûleurs…
Ma chaudière est une chaudière gaz.
Elle est assez basique.
Un simple contact du thermostat situé dans la pièce principale la met en chauffe et met en marche le circulateur.
Lorsque la température est atteinte la chauffe s’arrête et le circulateur continue pendant 10 à 15 minutes.
La température d’eau est réglée par un bouton en façade de chaudière.
Les vannes thermostatiques font le reste.
La problème avec ce système c’est que si il fait chaud dans la pièce principale, la chaudière ne chauffe pas et il fait froid dans les autres pièces
Effectivement, pour pouvoir adapter le thermostat du blue print, il faut pouvoir piloter l’ouverture de la vanne et non la consigne de température.L’idée est de remplacer le thermostat intégré, comme avec les convecteurs, la sonde du radiateur étant trop proche de la source de chaleur pour être pertinente. Mais je ne connais pas assez ces produits pour savoir quelles vannes le permettent. Si quelqu’un a un retour sur ce sujet…
Je reprends la mise en place de ce blueprint et je rencontre pas mal de difficultés.
Tout d’abord, la création des input_number que j’ai crée dans le fichier /config/input_number.yaml
consigne_salon: # l'id unique
name: consigne_salon # un nom
initial: 20.5 # un état initial
min: 16 # une valeur mini
max: 24 # une valeur max
step: 0.5 # la valeur d'un interval
unit_of_measurement: °C
consigne_chambre:
name: consigne_chambre # un nom
initial: 17.5 # un état initial
min: 16 # une valeur mini
max: 19 # une valeur max
step: 0.5 # la valeur d'un interval
unit_of_measurement: °C
puissance_radiateur_salon:
name: puissance_radiateur_salon # un nom
initial: 7750 # un état initial
min: 7500 # une valeur mini
max: 8000 # une valeur max
step: 250 # la valeur d'un interval
unit_of_measurement: Watt
puissance_radiateur_chambre:
name: puissance_radiateur_chambre # un nom
initial: 1000 # un état initial
min: 999 # une valeur mini
max: 1001 # une valeur max
step: 1 # la valeur d'un interval
unit_of_measurement: Watt
C’est bon ou pas ?
Hello,
Si tu reprends le blueprint, il faut une consigne qui démarre a 0 pour que le blueprint puisse la baisser (hors gel par ex).
Enfin la puissance est un % de 0 a 100. Tu pourra utiliser ultérieurement un template pour convertir en watts.
Hi @Argonaute
J’ai rien compris … … ou presque …Comme ça, c’est mieux ?
Par contre, les % pour la puissance, je ne vois comment les faire apparaître.
J’ai copié sur @Steph_Flo, plus haut dans le post.
consigne_salon: # l'id unique
name: consigne_salon # un nom
min: 16 # une valeur mini
max: 24 # une valeur max
step: 0.5 # la valeur d'un interval
mode: slider
unit_of_measurement: °C
consigne_chambre:
name: consigne_chambre # un nom
min: 16 # une valeur mini
max: 19 # une valeur max
step: 0.5 # la valeur d'un interval
mode: slider
unit_of_measurement: °C
puissance_radiateur_salon:
name: puissance_radiateur_salon # un nom
min: 0 # une valeur mini
max: 100 # une valeur max
step: 5 # la valeur d'un interval
mode: slider
puissance_radiateur_chambre:
name: puissance_radiateur_chambre # un nom
min: 0 # une valeur mini
max: 100 # une valeur max
step: 5 # la valeur d'un interval
mode: slider
Dans le paragraphe 5, tu écris …
Une fois la carte scheduler créée, elle est vide. Il faut utiliser l’interface pour créer les différentes planifications (type schema - 2 planifications : auto-eco et auto-confort pour chaque radiateur).
Ci-dessous également le code du bandeau d’entête de la vue principale, avec l’icone pour accéder à la vue de paramétrage.
et là je suis perdu … Un peu d’aide serait la bienvenue. Merci.
Oui il faudra utiliser l’interface du scheduler pour créer les programmations.
Mais avant, il faut faire fonctionner le thermostat. Le min des consignes doit être à 0 et pas 16. Met le max a 28°c pour tester que le thermostat fonctionne (il faut chaud en ce moment, tu as mis 19°c).
Ensuite créer l’automatisation basé sur le blue print du thermostat. Aussi la puissance sera automatiquement réglée en fonction de la différence entre consigne mise dans l’input text et de la chaleur de la pièce.
Tu dois aussi créer l’input select avec les modes.
Enfin, créer la carte lovelace. Pour tester le thermostat, mets en ode manuel, puis change la consigne et vérifie que la puissance change : à 0% si la consigne est basse (par exemple 10°c) et à 100% si la consigne est haute (par exemple 28°c, le max).
Mais avant, il faut faire fonctionner le thermostat. Le min des consignes doit être à 0 et pas 16. Met le max a 28°c pour tester que le thermostat fonctionne (il faut chaud en ce moment, tu as mis 19°c).
J’ai pigé. Min réglé à 0 et max à 28°C, toutefois avec les températures actuelles, mes radiateurs ne se mettront pas en route même en étant à fond.
Mon but étant de mettre le système un maximum en place avant la mise en route.
Ensuite créer l’automatisation basé sur le blue print du thermostat. Aussi la puissance sera automatiquement réglée en fonction de la différence entre consigne mise dans l’input text et de la chaleur de la pièce.
Déjà fait.
Tu dois aussi créer l’input select avec les modes.
Déja fait, comme ça :
chauffage:
name: Etat du chauffage
icon: mdi:home-minus
options:
- Auto-confort
- Auto-eco
- Manuel
- Stop
- Hors-gel
- Absent
Enfin, créer la carte lovelace. Pour tester le thermostat, mets en ode manuel, puis change la consigne et vérifie que la puissance change : à 0% si la consigne est basse (par exemple 10°c) et à 100% si la consigne est haute (par exemple 28°c, le max).
Carte créée. Par contre, la modification de la consigne (0 ou 28°C) ne fait pas bouger la puissance.
Oui il faudra utiliser l’interface du scheduler pour créer les programmations.
Là …par contre, j’ai pas compris comment créer les programmations ?
En cliquant sur Modifier sur la carte, je vois « Groupe » « Entités » « Actions » ??
J’ai beau lire et relire le paragraphe 5 de ton premier post. C’est incompréhensible pour un néophyte comme moi.