Bonjour à tous et à toutes
Ce tuto s’adresse en priorité à des gens comme moi qui débarque d’un autre solution domotique et qui ne connaisse rien à home assistant.
Il s’agit du Thermostat TPI argonaute199 que j’ai fait Modifié par Anthropic Claude 4 pour faire fonctionner le module Nodon SIN-4-FP-21, en fil pilote quatre ordres.
Il faudra au préalable faire l’installation du thermostat Blueprint
Maintenant il faut remplacer le code par celui ci dessous, etant limiter par le nombre de ligne je vais expliquer comment dans le tuto suivant.
blueprint:
name: Thermostat TPI - Fil Pilote
description: Thermostat TPI (Time Proportional & Integral) pour chauffage fil pilote sans détection fenêtre
domain: automation
source_url: https://github.com/argonaute199/chauffage-home-assistant/blob/main/blueprint/thermostat_tpi.yaml
input:
coeff_c:
name: Coefficient C
selector:
number:
min: 0.0
max: 1.0
step: 0.01
coeff_t:
name: Coefficient T
selector:
number:
min: 0.0
max: 0.1
step: 0.001
entity_consigne:
name: Consigne
selector:
entity:
domain: input_number
entity_temp_ext:
name: Température extérieure
selector:
entity:
domain: sensor
device_class: temperature
entity_temp_int:
name: Température intérieure
selector:
entity:
domain: sensor
device_class: temperature
entity_puissance:
name: Puissance
selector:
entity:
domain: input_number
entity_chauffage:
name: Pilote Wire Mode
description: Entité représentant le mode fil pilote du module Zigbee (select, sensor, ou autre)
selector:
entity:
domain:
- select
- sensor
- climate
- switch
mode_confort:
name: Mode Confort
description: Valeur à envoyer pour le mode confort (ex. "comfort", "confort", "heat", etc.)
default: "comfort"
selector:
select:
options:
- "comfort"
- "confort"
- "heat"
- "comfort_-1"
- "comfort_-2"
mode_arret:
name: Mode Arrêt
description: Valeur à envoyer pour le mode arrêt (ex. "off", "arret", "eco", etc.)
default: "off"
selector:
select:
options:
- "off"
- "arret"
- "eco"
- "frost_protection"
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
entity_chauffage: !input entity_chauffage
mode_confort: !input mode_confort
mode_arret: !input mode_arret
trigger:
- platform: time_pattern
minutes: "/10"
- platform: state
entity_id: !input entity_consigne
action:
- alias: récupération des données
variables:
entity_consigne: !input entity_consigne
consigne: "{{ states(entity_consigne) | float(20) }}"
temp_ext: "{{ states(entity_temp_ext) | float(15) }}"
temp_int: "{{ states(entity_temp_int) | float(18) }}"
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: Log des valeurs pour débogage
service: system_log.write
data:
message: >-
Thermostat TPI - Consigne: {{ consigne }}°C, Temp int: {{ temp_int }}°C,
Temp ext: {{ temp_ext }}°C, Puissance calculée: {{ puissance }}%,
Temps chauffe: {{ temps_chauffe }}s, Entité: {{ entity_chauffage }}
level: info
- 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:
- alias: Log action arrêt
service: system_log.write
data:
message: "Thermostat TPI - Action ARRÊT - Entité: {{ entity_chauffage }}, Mode: {{ mode_arret }}"
level: info
- choose:
- conditions:
- condition: template
value_template: "{{ states[entity_chauffage.split('.')[0]][entity_chauffage.split('.')[1]] is defined and state_attr(entity_chauffage, 'options') is not none }}"
sequence:
- service: select.select_option
target:
entity_id: !input entity_chauffage
data:
option: "{{ mode_arret }}"
- conditions:
- condition: template
value_template: "{{ entity_chauffage.startswith('climate.') }}"
sequence:
- service: climate.set_preset_mode
target:
entity_id: !input entity_chauffage
data:
preset_mode: "{{ mode_arret }}"
default:
- service: switch.turn_off
target:
entity_id: !input entity_chauffage
- conditions:
- condition: template
value_template: "{{ puissance > 99 }}"
sequence:
- alias: Log action confort permanent
service: system_log.write
data:
message: "Thermostat TPI - Action CONFORT PERMANENT - Entité: {{ entity_chauffage }}, Mode: {{ mode_confort }}"
level: info
- choose:
- conditions:
- condition: template
value_template: "{{ states[entity_chauffage.split('.')[0]][entity_chauffage.split('.')[1]] is defined and state_attr(entity_chauffage, 'options') is not none }}"
sequence:
- service: select.select_option
target:
entity_id: !input entity_chauffage
data:
option: "{{ mode_confort }}"
- conditions:
- condition: template
value_template: "{{ entity_chauffage.startswith('climate.') }}"
sequence:
- service: climate.set_preset_mode
target:
entity_id: !input entity_chauffage
data:
preset_mode: "{{ mode_confort }}"
default:
- service: switch.turn_on
target:
entity_id: !input entity_chauffage
default:
- alias: Log action cyclique
service: system_log.write
data:
message: "Thermostat TPI - Action CYCLIQUE - Puissance: {{ puissance }}%, Temps confort: {{ temps_chauffe }}s"
level: info
- choose:
- conditions:
- condition: template
value_template: "{{ states[entity_chauffage.split('.')[0]][entity_chauffage.split('.')[1]] is defined and state_attr(entity_chauffage, 'options') is not none }}"
sequence:
- service: select.select_option
target:
entity_id: !input entity_chauffage
data:
option: "{{ mode_confort }}"
- conditions:
- condition: template
value_template: "{{ entity_chauffage.startswith('climate.') }}"
sequence:
- service: climate.set_preset_mode
target:
entity_id: !input entity_chauffage
data:
preset_mode: "{{ mode_confort }}"
default:
- service: switch.turn_on
target:
entity_id: !input entity_chauffage
- delay: "{{ temps_chauffe }}"
- choose:
- conditions:
- condition: template
value_template: "{{ states[entity_chauffage.split('.')[0]][entity_chauffage.split('.')[1]] is defined and state_attr(entity_chauffage, 'options') is not none }}"
sequence:
- service: select.select_option
target:
entity_id: !input entity_chauffage
data:
option: "{{ mode_arret }}"
- conditions:
- condition: template
value_template: "{{ entity_chauffage.startswith('climate.') }}"
sequence:
- service: climate.set_preset_mode
target:
entity_id: !input entity_chauffage
data:
preset_mode: "{{ mode_arret }}"
default:
- service: switch.turn_off
target:
entity_id: !input entity_chauffage
mode: restart
A tout de suite pour le tuto suivant