Avant, je planifiait mon chauffage avec des automations qui s'appuyaient sur des input_date, input_time pour actionner et input_number pour sélectionner la température de consigne souhaitée et je notifiait dans un journal sur Slack, ce qui me permet un debug facile. J'en avait largement parlé ici, mais maintenant il existe un vrai scheduler et je vais changer ma façon de faire. Sauf que ce scheduler, dont je vous parlerais bientôt, ne dispose pas d'une option de notification. Ca viendra peut être, et ce travail sera peut être à jeter, bien que le principe puisse être adapté à d'autre notifications.
Le scheduler pilotant dans mon cas les thermostats, je vais donc me baser sur les changement d'était du thermostat pour notifier l'état à Slack (voire faire autre chose...). Pour cela je vais stocker les états qui ont changés dans des input_number et des input_text et m'en servir pour notifier avec les bonnes variables.
La liste des courses
J'ai essayé de simplifier en minimisant les besoins, mais il nous faut des input_number:
et des input_text:
input_number
trigger_source_notify_temp_current:
name: Température Ambiante
mode: box
min: 0
max: 30
unit_of_measurement: "°C"
trigger_source_notify_temp_target:
name: Température de consigne
mode: box
min: 0
max: 30
unit_of_measurement: "°C"
input_text:
trigger_source_notify_name:
name: Trigger Source Name
trigger_source_notify_hvac_mode:
name: Trigger Source HVAC Mode
trigger_source_notify_hvac_action:
name: Trigger Source HVAC Action
trigger_source_notify_preset_mode:
name: Trigger Source Preset Mode
trigger_source_notify_state:
name: Trigger Source State
Ces "inputs" vont servir à stocker temporairement les valeurs que je vais afficher dans mes notifications.
Une seule automation
Ensuite on va avoir besoin d'une automation qui va :
- Se déclencher (trigger) sur les changements d'état pour lesquels on souhaite envoyer une notification. Ici les attributs de deux thermostats.
- Ecrire (action) les valeurs liées à la source de déclenchement dans les
input_number:
et input_text:
- Notifier (action) en se servant des valeurs écrite précédemment.
- alias: Notifications des Thermostats
trigger:
- platform: template
value_template: "{{ state_attr('climate.daikin','temperature') }}"
- platform: template
value_template: "{{ state_attr('climate.daikin','preset_mode') }}"
- platform: template
value_template: "{{ state_attr('climate.daikin','hvac_modes') }}"
- platform: template
value_template: "{{ state_attr('climate.thermostat_antoine','temperature') }}"
- platform: template
value_template: "{{ state_attr('climate.thermostat_antoine','preset_mode') }}"
- platform: template
value_template: "{{ state_attr('climate.thermostat_antoine','hvac_modes') }}"
action:
- data_template:
entity_id: input_number.trigger_source_notify_temp_target
value: '{{ trigger.to_state.attributes.temperature }}'
service: input_number.set_value
- data_template:
entity_id: input_number.trigger_source_notify_temp_current
value: '{{ trigger.to_state.attributes.current_temperature }}'
service: input_number.set_value
- data_template:
entity_id: input_text.trigger_source_notify_name
value: '{{ trigger.to_state.attributes.friendly_name }}'
service: input_text.set_value
- data_template:
entity_id: input_text.trigger_source_notify_hvac_action
value: '{{ trigger.to_state.attributes.hvac_action }}'
service: input_text.set_value
- data_template:
entity_id: input_text.trigger_source_notify_preset_mode
value: '{{ trigger.to_state.attributes.preset_mode }}'
service: input_text.set_value
- data_template:
entity_id: input_text.trigger_source_notify_state
value: '{{ trigger.to_state.state }}'
service: input_text.set_value
- service: notify.slack_hass_canaletto
data:
message: "{{ states.sensor.date_time.state}} > {{ states.input_text.trigger_source_notify_name.state }} : Consigne à {{ states.input_number.trigger_source_notify_temp_target.state }}° |
Température ambiante : {{ states('input_number.trigger_source_notify_temp_current') }}° |
Etat : {{ states.input_text.trigger_source_notify_hvac_action.state }} / {{ states.input_text.trigger_source_notify_preset_mode.state }} / {{ states.input_text.trigger_source_notify_state.state }}
Et on obtient une notification dans le journal Slack
2020-12-06, 20:24 > Thermostat : Antoine : Consigne à 13.0° | Température ambiante : 17.1° | Etat : idle / away / heat
Bonus
On peut s'amuser à traduire les messages d'état et ainsi les insérer en clair et en français dans la notification... En bricolant quelque chose du genre :
{% if is_state('input_text.trigger_source_notify_hvac_action', 'heating') %}
Etat : Chauffe
{%-elif is_state('input_text.trigger_source_notify_hvac_action', 'cooling') %}
Climatise
{%-elif is_state('input_text.trigger_source_notify_hvac_action', 'dry') %}
Désumidifie
{%-elif is_state('input_text.trigger_source_notify_hvac_action', 'fan_only') %}
Ventile
{%-elif is_state('input_text.trigger_source_notify_hvac_action', 'heat_cold') %}
Auto
{% else %}
Etat : Inactif
{% endif %}
{% if is_state('input_text.trigger_source_notify_preset_mode', 'away') %}
Préréglage : Absent
{%-elif is_state('input_text.trigger_source_notify_preset_mode', 'eco') %}
Préréglage : Eco
{%-elif is_state('input_text.trigger_source_notify_preset_mode', 'boost') %}
Préréglage : Boost
{% else %}
Préréglage : Normal
{% endif %}
{% if is_state('input_text.trigger_source_notify_state', 'heat') %}
Mode : Chauffage
{%-elif is_state('input_text.trigger_source_notify_state', 'cold') %}
Mode : Climatisation
{%-elif is_state('input_text.trigger_source_notify_state', 'dry') %}
Mode : Désumidifiation
{%-elif is_state('input_text.trigger_source_notify_state', 'fan_only') %}
Mode : Ventilation
{%-elif is_state('input_text.trigger_source_notify_state', 'heat_cold') %}
Mode : Auto
{% else %}
Mode : Arrêt
{% endif %}
Voilà, bien entendu tout ça est adaptable à d'autres besoins....