Voici un exemple comme convenu :
Je n’ai pas du tout fait la mise au point…
Lis tranquillement et poses TOUTES les questions que tu veux
Avec le code suivant, tu sera spammé de notification toutes les minutes, mais j’ai fais comme tu le demande pour que tu t’y retrouves.
Je mets un second code qui à le même comportement que le 1er mais qui notifie à chaque changement d’état du niveau de batterie et non plus toutes les minutes (ça à l’avantage de ne pas recevoir 2x ou + la notification avec le même niveau de batterie).
Code 1 (qui réponds à ta demande initiale)
id: 'gestion_onduleur'
mode: restart #Pourquoi RESTART ? -> https://www.home-assistant.io/docs/automation/modes/
alias: Gestion Onduleur
description: "Notifie en fonction des changements d'état de l'onduleur"
trigger:
- platform: state
entity_id: sensor.myups_status_data_2
condition: []
action:
## Utilisation de choose (if elsif/else ). L'ordre est important.
- choose:
## Coupure de Courant
- conditions:
- condition: or
conditions:
- condition: state
entity_id: "sensor.myups_status_data_2"
state: "OB DISCHRG"
- condition: state
entity_id: "sensor.myups_status_data_2"
state: "FSD OB DISCHRG"
sequence:
- service: notify.huawei_lte
data:
message: >
⚠️ Détection : {{(now()|string).split('.')[0]}}
title: ⚡ Coupure de Courant
- service: notify.notify
data:
message: >
⚠️ Détection : {{(now()|string).split('.')[0]}}
title: ⚡ Coupure de Courant 🔋
- repeat:
sequence:
- service: notify.huawei_lte
data:
message: "🔋 Niveau : {{ states('sensor.myups_battery_charge_2')|int }}%"
title: ⚡ Décharge en cours ↘️
- service: notify.notify
data:
message: "🔋 Niveau : {{ states('sensor.myups_battery_charge_2')|int }}%"
title: ⚡ Décharge en cours ↘️
- delay:
minutes: 1
while:
- condition: or
conditions:
- condition: state
entity_id: "sensor.myups_status_data_2"
state: "OB DISCHRG"
- condition: state
entity_id: "sensor.myups_status_data_2"
state: "FSD OB DISCHRG"
## Retour du Courant
- conditions:
# Si l'état précédent comportait le texte "DISCHRG" cela veux dire que l'onduleur était sur batterie et qu'il vient
# de passer sur secteur.
- condition: template
value_template: >
{% set etat_precedent = trigger.from_state.state %}
{% if 'DISCHRG' in etat_precedent.split() %}
true
{% else %}
false
{% endif %}
- "{{ trigger.to_state.state != 'unknown' }}"
- "{{ trigger.to_state.state != 'unavailable' }}"
sequence:
- service: notify.huawei_lte
data:
message: "ℹ️ Détection : {{(now()|string).split('.')[0]}}"
title: ⚡ Retour du Courant 🔌
- service: notify.notify
data:
message: "ℹ️ Détection : {{(now()|string).split('.')[0]}}"
title: ⚡ Retour du Courant 🔌
- choose:
## Chargement de la batterie
- conditions:
- condition: template
value_template: >
{% set etat_actuel = trigger.to_state.state %}
{% if 'CHRG' in etat_actuel.split() %}
true
{% else %}
false
{% endif %}
sequence:
- repeat:
sequence:
- service: notify.huawei_lte
data:
message: "🔋 Niveau : {{ states('sensor.myups_battery_charge_2')|int }}%"
title: ⚡ Recharge en cours ↗️
- service: notify.notify
data:
message: "🔋 Niveau : {{ states('sensor.myups_battery_charge_2')|int }}%"
title: ⚡ Recharge en cours ↗️
- delay:
minutes: 1
while:
- condition: numeric_state
entity_id: sensor.myups_battery_charge_2
below: 100
Code 2 (avec notification sur % de batterie):
mode: restart
alias: Gestion Onduleur
id: gestion_onduleur
description: Notificatiob en fonction des changements d'état de l'onduleur
trigger:
- platform: state
entity_id: sensor.myups_status_data_2
- platform: state
entity_id: sensor.myups_battery_charge_2
condition: []
action:
- choose:
- conditions:
- condition: template
value_template: >-
{{trigger.from_state.entity_id.split('.')[1] ==
'myups_battery_charge_2' }}
sequence:
- service: notify.huawei_lte
data:
message: "🔋 Niveau : {{ states('sensor.myups_battery_charge_2')|int }}%"
title: >
{% set etat_precedent = trigger.from_state.state|int %} {% set
etat_actuel = trigger.to_state.state|int %} {% if
etat_precedent > etat_actuel %}
⚡ Décharge en cours ↘️
{% else %}
⚡ Recharge en cours ↗️
{% endif %}
- service: notify.notify
data:
message: "🔋 Niveau : {{ states('sensor.myups_battery_charge_2')|int }}%"
title: >
{% set etat_precedent = trigger.from_state.state|int %} {% set
etat_actuel = trigger.to_state.state|int %} {% if etat_precedent
> etat_actuel %}
⚡ Décharge en cours ↘️
{% else %}
⚡ Recharge en cours ↗️
{% endif %}
- conditions:
- condition: template
value_template: >-
{{trigger.from_state.entity_id.split('.')[1] ==
'myups_status_data_2' }}
sequence:
- choose:
- conditions:
- condition: or
conditions:
- condition: state
entity_id: sensor.myups_status_data_2
state: OB DISCHRG
- condition: state
entity_id: sensor.myups_status_data_2
state: FSD OB DISCHRG
sequence:
- service: notify.huawei_lte
data:
message: |
⚠️ Détection : {{(now()|string).split('.')[0]}}
title: ⚡ Coupure de Courant
- service: notify.notify
data:
message: >
⚠️ Détection : {{(now()|string).split('.')[0]}}
title: ⚡ Coupure de Courant 🔋
- conditions:
# Si l'état précédent comportait le texte "DISCHRG" cela veux dire que l'onduleur était sur batterie et qu'il vient
# de passer sur secteur.
- condition: template
value_template: >
{% set etat_precedent = trigger.from_state.state %}
{% if 'DISCHRG' in etat_precedent.split() %}
true
{% else %}
false
{% endif %}
- "{{ trigger.to_state.state != 'unknown' }}"
- "{{ trigger.to_state.state != 'unavailable' }}"
sequence:
- service: notify.huawei_lte
data:
message: "ℹ️ Détection : {{(now()|string).split('.')[0]}}"
title: ⚡ Retour du Courant 🔌
- service: notify.notify
data:
message: "ℹ️ Détection : {{(now()|string).split('.')[0]}}"
title: ⚡ Retour du Courant 🔌