[Article] Gestion de bout en bout du chauffage

puissance: >-
        {%set val = coeff_c * (consigne - temp_int) + coeff_t * (consigne -
        temp_ext) %}  {% if val > 1 and fenetre == 'off' %} {% set val = 100 %} 
        {% elif val < 0 or fenetre == 'on' %} {% set val = 0 %}  {% else %} {%
        set val = ( (val * 100) | round(0)) %} {% endif %} {{val}}
     

C’est bien ça ?
Je n’ai rien changé à ton blueprint à moins d’une fausse manip.

Oui le code est bon.
Fais voir la trace de ton automation stp ?

Je ne sais pas si c’est ça que tu veux.

Code

Pour le moment j’ai trouvé une parade en mettant la plage de l input number puissance de 0 a 1000.

Qu’est ce qui plante exactement ? Parce que la je ne vois pas d’erreur, si ce n’est qu’il ne rentre dans aucune condition.
Pourtant il définit bien la puissance a 22%, et donc le temps de chauffe a 132s (22% de 10mn)


{
	"logbookEntries":[
		{
			"context_id":"01GGWBXKS4JGFH0324MZ45PVM4",
			"domain":"automation",
			"entity_id":"automation.thermostat_tpi",
			"message":"triggeredbystateofinput_number.temp_desiree_salon",
			"name":"ThermostatSalon",
			"source":"stateofinput_number.temp_desiree_salon",
			"when":1.667399339814137E9
		},
		{
			"context_domain":"automation",
			"context_entity_id":"automation.thermostat_tpi",
			"context_event_type":"automation_triggered",
			"context_message":"triggeredbystateofinput_number.temp_desiree_salon",
			"context_name":"ThermostatSalon",
			"context_source":"stateofinput_number.temp_desiree_salon",
			"entity_id":"input_number.puissance_chauffage_salon",
			"icon":"mdi:percent",
			"state":"267.0",
			"when":1.667399339816291E9
		}
	],
	"trace":{
		"blueprint_inputs":{
			"alias":"ThermostatSalon",
			"description":"",
			"id":"1636134806058",
			"use_blueprint":{
				"input":{
					"coeff_c":0.6,
					"coeff_t":0.01,
					"entity_chauffage":"switch.chauffage_salon",
					"entity_consigne":"input_number.temp_desiree_salon",
					"entity_fenetre":"binary_sensor.fenetre",
					"entity_puissance":"input_number.puissance_chauffage_salon",
					"entity_temp_ext":"sensor.chalonnes_sur_loire_temperature",
					"entity_temp_int":"sensor.salon_sens_temp"
				},
				"path":"argonaute199/thermostat_tpi.yaml"
			}
		},
		"config":{
			"action":[
				{
					"alias":"récupérationdesdonnées",
					"variables":{
						"consigne":"{{states(entity_consigne)}}",
						"entity_consigne":"input_number.temp_desiree_salon",
						"fenetre":"{{states(entity_fenetre)}}",
						"puissance":"{%setval=coeff_c*(consigne-temp_int)+coeff_t*(consigne-temp_ext)%}{%ifval>1andfenetre=='off'%}{%setval=100%}{%elifval<0orfenetre=='on'%}{%setval=0%}{%else%}{%setval=((val*100)|round(0))%}{%endif%}{{val}}",
						"temp_ext":"{{states(entity_temp_ext)}}",
						"temp_int":"{{states(entity_temp_int)}}",
						"temps_chauffe":"{{puissance*6}}"
					}
				},
				{
					"alias":"Metàjourl'indicateurdepuissance",
					"data":{
						"value":"{{puissance}}"
					},
					"service":"input_number.set_value",
					"target":{
						"entity_id":"input_number.puissance_chauffage_salon"
					}
				},
				{
					"choose":[
						{
							"conditions":[
								{
									"condition":"template",
									"value_template":"{{puissance==0}}"
								}
							],
							"sequence":[
								{
									"service":"switch.turn_off",
									"target":{
										"entity_id":"switch.chauffage_salon"
									}
								}
							]
						},
						{
							"conditions":[
								{
									"condition":"template",
									"value_template":"{{puissance>99}}"
								}
							],
							"sequence":[
								{
									"service":"switch.turn_on",
									"target":{
										"entity_id":"switch.chauffage_salon"
									}
								}
							]
						}
					],
					"default":[
						{
							"service":"switch.turn_on",
							"target":{
								"entity_id":"switch.chauffage_salon"
							}
						},
						{
							"delay":"{{temps_chauffe}}"
						},
						{
							"service":"switch.turn_off",
							"target":{
								"entity_id":"switch.chauffage_salon"
							}
						}
					]
				}
			],
			"alias":"ThermostatSalon",
			"description":"",
			"id":"1636134806058",
			"mode":"restart",
			"trigger":[
				{
					"minutes":"/10",
					"platform":"time_pattern"
				},
				{
					"entity_id":"input_number.temp_desiree_salon",
					"platform":"state"
				},
				{
					"entity_id":"binary_sensor.fenetre",
					"platform":"state"
				}
			],
			"variables":{
				"coeff_c":0.6,
				"coeff_t":0.01,
				"entity_fenetre":"binary_sensor.fenetre",
				"entity_temp_ext":"sensor.chalonnes_sur_loire_temperature",
				"entity_temp_int":"sensor.salon_sens_temp"
			}
		},
		"context":{
			"id":"01GGWBXKS4JGFH0324MZ45PVM4",
			"parent_id":"01GGWBXKS1SBRW4BD4JX32430Z"
		},
		"domain":"automation",
		"item_id":"1636134806058",
		"last_step":"action/2/choose/1/sequence/0",
		"run_id":"35a05f60321249fa49d9ede073b77255",
		"script_execution":"finished",
		"state":"stopped",
		"timestamp":{
			"finish":"2022-11-02T14:28:59.819220+00:00",
			"start":"2022-11-02T14:28:59.812423+00:00"
		},
		"trace":{
			"action/0":[
				{
					"changed_variables":{
						"context":{
							"id":"01GGWBXKS4JGFH0324MZ45PVM4",
							"parent_id":"01GGWBXKS1SBRW4BD4JX32430Z"
						}
					},
					"path":"action/0",
					"timestamp":"2022-11-02T14:28:59.814828+00:00"
				}
			],
			"action/1":[
				{
					"changed_variables":{
						"consigne":26,
						"entity_consigne":"input_number.temp_desiree_salon",
						"fenetre":"unknown",
						"puissance":267,
						"temp_ext":17.5,
						"temp_int":21.7,
						"temps_chauffe":1602
					},
					"path":"action/1",
					"result":{
						"limit":10,
						"params":{
							"domain":"input_number",
							"service":"set_value",
							"service_data":{
								"entity_id":[
									"input_number.puissance_chauffage_salon"
								],
								"value":267
							},
							"target":{
								"entity_id":[
									"input_number.puissance_chauffage_salon"
								]
							}
						},
						"running_script":false
					},
					"timestamp":"2022-11-02T14:28:59.815201+00:00"
				}
			],
			"action/2":[
				{
					"path":"action/2",
					"result":{
						"choice":1
					},
					"timestamp":"2022-11-02T14:28:59.817073+00:00"
				}
			],
			"action/2/choose/0":[
				{
					"path":"action/2/choose/0",
					"result":{
						"result":false
					},
					"timestamp":"2022-11-02T14:28:59.817119+00:00"
				}
			],
			"action/2/choose/0/conditions/0":[
				{
					"path":"action/2/choose/0/conditions/0",
					"result":{
						"entities":[],
						"result":false
					},
					"timestamp":"2022-11-02T14:28:59.817137+00:00"
				}
			],
			"action/2/choose/1":[
				{
					"path":"action/2/choose/1",
					"result":{
						"result":true
					},
					"timestamp":"2022-11-02T14:28:59.817223+00:00"
				}
			],
			"action/2/choose/1/conditions/0":[
				{
					"path":"action/2/choose/1/conditions/0",
					"result":{
						"entities":[],
						"result":true
					},
					"timestamp":"2022-11-02T14:28:59.817237+00:00"
				}
			],
			"action/2/choose/1/sequence/0":[
				{
					"path":"action/2/choose/1/sequence/0",
					"result":{
						"limit":10,
						"params":{
							"domain":"switch",
							"service":"turn_on",
							"service_data":{},
							"target":{
								"entity_id":[
									"switch.chauffage_salon"
								]
							}
						},
						"running_script":false
					},
					"timestamp":"2022-11-02T14:28:59.817657+00:00"
				}
			],
			"trigger/1":[
				{
					"changed_variables":{
						"coeff_c":0.6,
						"coeff_t":0.01,
						"entity_fenetre":"binary_sensor.fenetre",
						"entity_temp_ext":"sensor.chalonnes_sur_loire_temperature",
						"entity_temp_int":"sensor.salon_sens_temp",
						"this":{
							"attributes":{
								"current":1,
								"friendly_name":"ThermostatSalon",
								"id":"1636134806058",
								"last_triggered":"2022-11-02T14:28:37.243352+00:00",
								"mode":"restart"
							},
							"context":{
								"id":"01GGWBWXQTK8X0KN8Y2KNVP9CT",
								"parent_id":"01GGWBWXQQ1S6SKDWJMP0JJSJV"
							},
							"entity_id":"automation.thermostat_tpi",
							"last_changed":"2022-11-01T15:02:16.845318+00:00",
							"last_updated":"2022-11-02T14:28:37.243469+00:00",
							"state":"on"
						},
						"trigger":{
							"description":"stateofinput_number.temp_desiree_salon",
							"entity_id":"input_number.temp_desiree_salon",
							"from_state":{
								"attributes":{
									"editable":true,
									"friendly_name":"temp_desiree_salon",
									"icon":"mdi:thermometer",
									"max":30,
									"min":0,
									"mode":"slider",
									"step":0.5,
									"unit_of_measurement":"°C"
								},
								"context":{
									"id":"01GGWBWXQQ1S6SKDWJMP0JJSJV",
									"user_id":"e9d24e60ecd641c18374bbc24c375343"
								},
								"entity_id":"input_number.temp_desiree_salon",
								"last_changed":"2022-11-02T14:28:37.240741+00:00",
								"last_updated":"2022-11-02T14:28:37.240741+00:00",
								"state":"22.0"
							},
							"id":"1",
							"idx":"1",
							"platform":"state",
							"to_state":{
								"attributes":{
									"editable":true,
									"friendly_name":"temp_desiree_salon",
									"icon":"mdi:thermometer",
									"max":30,
									"min":0,
									"mode":"slider",
									"step":0.5,
									"unit_of_measurement":"°C"
								},
								"context":{
									"id":"01GGWBXKS1SBRW4BD4JX32430Z",
									"user_id":"e9d24e60ecd641c18374bbc24c375343"
								},
								"entity_id":"input_number.temp_desiree_salon",
								"last_changed":"2022-11-02T14:28:59.810243+00:00",
								"last_updated":"2022-11-02T14:28:59.810243+00:00",
								"state":"26.0"
							}
						}
					},
					"path":"trigger/1",
					"timestamp":"2022-11-02T14:28:59.812594+00:00"
				}
			]
		},
		"trigger":"stateofinput_number.temp_desiree_salon"
	}
}

Voilà une trace avec un fort différentiel entre température de consigne et température mesurée

Bonjour,

Je viens de mettre en place ce régulateur pour mon plancher chauffant électrique, mais je galère un peu à trouver le réglage le plus approprié.
Le souci d’un plancher chauffant est qu’il a beaucoup d’inertie (1-2h). J’ai mis que très peu d’écart (1°C) entre le mode confort et le mode eco, mais cela ne suffit pas, il y a de gros
dépassements de consigne (Dans mon cas, la chauffe s’arrête trop tard, il faudrait qu’elle s’arrête bien avant d’atteindre la consigne pour éviter de la dépasse. Puis elle se remet en route trop tard également lorsque la température descend sous la consigne. Du coup avec ces deux soucis, j’ai des amplitudes de température de +/-4°C durant la journée. Je n’ai pour le moment pas trouvé de réglage approprié (coeff_c et coeff_t).
J’ai passé la périodicité à 30mn, peut être devrais-je encore augmenter ?

Voici un exemple de la chauffe de ce matin (avec les paramètres c et t par défaut). La courbe de température n’est pas entière, car hier soir j’ai changé mon capteur de mesure (je suis passé d’un Aqara à une sonde DS18B20 connectée sur un ESP8266 pour faire un test).
Ici le dépassement est plus grand que d’habitude, car le soleil est présent.

image

Je ne sais pas si parmi vous, des personnes utilisent ce type de régulateur pour un chauffage à forte inertie. Si c’est le cas je serai intéressé d’avoir votre retour d’expérience :slight_smile:

Merci d’avance pour vos retours !

Hello,
Oui 30mn semble bien, et même presque trop. Il faut surtout baisser le coeff_c pour baisser la puissance bien avant que la consigne ne soit atteinte.
Après le thermostat est surtout proportionnel et marche parfaitement pour des convecteurs et effectivement peut trouver ses limites avec une très forte inertie. Si tu n’arrives pas a un résultat correct, il faudrait alors envisager un thermostat PID : proportionnel + intégrale + dérivée.

Salut @Jex2512

En regardant tes courbes, j’ai l’impression que ce qui te soucie c’est que

  • la température était en remonté rapide alors que le thermostat commandait encore de la puissance.
  • le thermostat a commandé de la puissance alors que la température avait dépassé la puissance.

Pour cela le premier point, il faudrait un terme dérivé de température dans le thermostat qui anticipe le fait que la température va dépasser la consigne. (smart thermostat devrait le faire).
Pour le second point, cela vient peut être de la température extérieure qui est trop froide par rapport à ta consigne donc qui demande un petit résidu de puissance.

Personnellement, j’ai réglé le coeff_t sur la température extérieure à la valeur de mes pertes thermiques. (j’ai modifié le blueprint pour qu’il calcule directement une puissance.
J’ai augmenté le coeff_c sur l’écart consigne mesure pour qu’il ait plus de poids que l’autre coeff et éteigne les radiateurs lorsque Text =10° et Tint>Tconsigne+1°.

Par contre dans ton cas, le coef_c sur la différence consigne mesure à l’air un peu fort. En effet, à -0.5° le chauffage est à fond et à +0.5°, il est arrêté. De mon coté, je cherche un peu de stabilité sur les radiateurs: pas à fond/arrêtés sur 0.5°.

Par contre, j’ai vraiment un logement particulier (passoire thermique sans inertie + puissance des radiateurs sous dimensionnés) :sob:

Dans ton cas: grosse inertie (1/2h), il faudrait peut être anticiper la remontée de la température externe le matin, pour cela il faudrait des courbes qui montrent la montée et descente de la température lorsqu’on met en chauffe ou qu’on arrête de chauffer… et faire une prédiction :thinking:

Merci à vous deux pour votre retour ! Je viens de baisser un peu le coefficient c sur vos conseils, je verrai cette semaine s’il y a du mieux. Ensuite s’il faut j’essaierai de faire quelques tests avec un régulateur PID. Pour info, voici mes courbes à l’instant :

image

Merci @Haz pour ton retour d’expérience et les modifs que tu as apportées dans ton cas.

Bonsoir @Lou_Juicy , peut tu me détailler l’histoire de l’utility_meter cela à l’air simple mais je sèche. Il faut le créer dans le fichier config ?

Salut

Le comportement du chauffage par rapport à l’écart consigne/mesure correspond plus à ce que j’attendrais chez moi.

Par contre, je me pose la question de la valeur de puissance commandée quand la consigne égale la mesure… En effet, si consigne égale la mesure, la puissance commandée est coeff_t*(consigne -Texterne). On compense les pertes.
Cela à lieu deux fois sur ces courbes mais, vers 12h la puissance est supérieure à celle de 5h du matin (45>30) là où normalement les températures externes sont les plus basses… :thinking:
J’ai l’impression qu’il s’est mis à faire froid?

Bonjour,

J’ai cherché à implémenté ce blueprint dans mon HA, et ça s’est fait sans grande difficulté ! j’ai par ailleurs appris d’autres petites choses sur HA au fur à mesure du déroulement du tuto.
Je me créé un compte aujourd’hui pour pouvoir te remercier pour ce joli tuto et ce partage !

et bien sûr merci au reste de la communauté de ce forum, on y trouve beaucoup d’inspiration !

1 « J'aime »

Bienvenu sur le forum et merci pour ton retour :blush:

Hello ! C’était il y a pas mal de temps et je ne me souvient malheureusement plus trop… Qu’est ce que tu recherche exactement ?

Salut @Jujuka89

Peut-être t’en es tu sorti depuis ton dernier message, sinon tu peux faire un tour sur la documentation officielle.

Après tu as plusieurs façon d’intégrer ça à HA, 2 exemples (il existe encore d’autre façon) :

  1. directement dans configuration.yaml avec ce code par exemple :
utility_meter:
  daily_energy:
    source: sensor.energy
    name: Daily Energy
    cycle: daily
  weekly_energy:
    source: sensor.energy
    name: Weekly Energy
    cycle: weekly
  1. En créant un fichier dédié :

Ajouter un include dans configuration.yaml :

utility_meter: !include utility_meter.yaml

Créer le fichier utility_meter.yaml dans /config, puis le documenter comme ça :

daily_energy:
  source: sensor.energy
  name: Daily Energy
  cycle: daily
weekly_energy:
  source: sensor.energy
  name: Weekly Energy
  cycle: weekly

Bonjour à tous !
Avant toute chose, je tenais a vous dire que je suis méga novice dans ce nouveau monde qu’est HA. Ma domotique tourne actuellement sur Jeedom, j’en suis a peut pres satisfait, si ce n’est l’ergonomie qui est assez basique, et pas très glamour.
Je souhaitais depuis un bout de temps explorer HA, j’ai fait quelques tests interessants, et ce qui me bloque jusqu’à aujourd’hui c’est la gestion du chauffage de la maison. Je tourne sur des radians, avec des actionneurs sur le fil pilote de chaque pièce. j’ai donc 3 - 4 zones à gérer, le tout piloté en zigbee. Et là je viens de tomber sur le post d’Argonaute! et Chapeau bas vraiment. Du coup tu as attisé encore plus ma curiosité.

J’ai donc essayé de suivre ton tuto, mais je me heurte à mon incompétence, et à des trucs que je ne maitrise pas encore…
J’ai réussi les premières étapes, installer button-card, hui-element, number-box, scheduler card/component.
Ce que je comprends moins c’est la creation des planifications, et des modes.
J’ai tenté d’ajouter une carte, par exemple pour le scheduler-card avec le code :

type: 'custom:scheduler-card'
include:
  - input_number.chauffage_*_consigne
time_step: 15
title: ''
show:
  labels: true
  labels_secondary: false
display_options:
  primary_info: name
  secondary_info: ' '
style: |
  .card-header {
    font-size: 18px;
  }
discover_existing: false

La carte s’affiche bien avec le message : il n’y a rien à montrer et un bouton ajouter, qui affiche : GROUPE
Aucun groupe défini
ENTITÉ
Choisir un groupe en premier
ACTION
Choisir une entité en premier

Je fais certainement fausse route…ou j’ai omis quelque chose, mais je ne vois pas, d’ou mon incompétence… soyez indulgent :sweat_smile: :sweat_smile:
J’ai essayé d’avancer, mais j’imagine que le fait de bloquer à cette étape, va bloquer le reste du tuto… Par exemple j’ai ajouté le code du bandeau d’en tête de la vue principale, la carte s’affiche bien mais avec des erreurs, que certaine j’arrive à comprendre notamment la sonde orego qu’il faut que je remplace par ma sonde j’imagine… :
Entité non disponible: input_select.chauffage_salon_mode

sensor.oregon_thermometre_salon_temperature

input_number.chauffage_salon_consigne

input_number.chauffage_salon_puissance

binary_sensor.a

Est-ce qu’une âme charitable pour me donner quelque piste pour que je puisse comprendre mes erreurs, ou me guider vers le bon chemin ?

Merci par avance !!

Salut @Herbs,
Merci pour ta réponse et oui je m’en suis sorti ! :wink:
Tout le chauffage de ma maison fonctionne.
Reste quelques améliorations à faire notamment la présence ou non pour l’activation du chauffage .

1 « J'aime »

Salut @frankb,
En tant que novice ont va ce comprendre ou pas lol …
Je me suis fait un petit tuto si sa peut t’aider pour les taches à réaliser :

  1. Télécharger le blueprint “Thermostat TPI”
  2. Créer un “input_number” pour la consigne de la pièce.
  3. Créer un “input_number” pour la puissance de la pièce.
  4. Créer un “binary_sensor” pour simuler le contact de fenêtre sur off dans configuration.yaml.
    4b : Inversion de la commande du chauffage (option).
  5. Créer le Thermostat TPI (Blueprint)
  6. Installer depuis HACS : button-card, hui-element et number-box.
  7. Ajoutez la carte en manuel sur votre vue. (suivant code).
  8. Créer un “input_select “chauffage salon mode” avec les différents modes.
  9. Ajouter “scheduler” depuis HACS
  10. Ajoutez la carte du scheduler sur votre vue. (suivant code).
  11. Créer les différents modes de chauffage depuis cette carte.
  12. Télécharger le blueprint “chauffage_pilotage"
  13. Créer l’automatisme depuis ce blueprint

Il y a certainement des erreurs ou des ajouts a faire. Sait tu as quelle étape tu es ?
Bonne soirée

Salut Jujuka89 !!
Merci pour ton aide, c’est vraiment cool ! Alors avec ta liste j’ai ou avancer et éclaircir mon chemin.
Voici où j’en suis :

  1. Télécharger le blueprint “Thermostat TPI” OK
  2. Créer un “input_number” pour la consigne de la pièce. OK
  3. Créer un “input_number” pour la puissance de la pièce. OK
  4. Créer un “binary_sensor” pour simuler le contact de fenêtre sur off dans configuration.yaml. Pas trouvé le code :frowning: et il faut le rajouter dans le fichier configuration.yaml ? À terme je vais migrer mes capteurs de fenetres, mais pour le moment effectivement ça pourrait être pas mal de simuler le truc.
    4b : Inversion de la commande du chauffage (option). Pas besoin je pense pour mon cas
  5. Créer le Thermostat TPI (Blueprint) Pas pu le faire à cause du binary_sensor
  6. Installer depuis HACS : button-card, hui-element et number-box. OK
  7. Ajoutez la carte en manuel sur votre vue. (suivant code). OK
  8. Créer un “input_select “chauffage salon mode” avec les différents modes. OK
  9. Ajouter “scheduler” depuis HACS OK
  10. Ajoutez la carte du scheduler sur votre vue. (suivant code). OK
  11. Créer les différents modes de chauffage depuis cette carte. Si j’ai bien compris on y met notre planning avec les consignes de températures ?
  12. Télécharger le blueprint “chauffage_pilotage" OK
  13. Créer l’automatisme depuis ce blueprint Pas encore fait

Merci pour tout !! :slight_smile:

Pour le capteur de fenêtre soit tu le rentre dans ton fichier binary_sensor.yaml si tu fonctionne ainsi avec des codes par catégories ou simplement dans le fichier configuration.yaml en ajoutant binary_sensor devant le code.

### Fenêtre virtuelle toujours fermée, pour chauffage ###
 - platform: template
   sensors:
     fenetre_virtuelle_onoff:
         friendly_name: Fenetre vituelle
         value_template: off
         device_class: opening

Après cela tu pourras créer le Thermostat TPI :grinning:
Sinon oui pour créer les différents modes de chauffage c’est directement sur la carte.