C’est sympa, merci !
Je continue de cherche de mon côté, j’aimerai trouver le moyen d’inclure dans le message qui est envoyé (notification) le niveau de batterie, et non pas comme mes premiers tests « entre 90 et 80 ».
C’est sympa, merci !
Je continue de cherche de mon côté, j’aimerai trouver le moyen d’inclure dans le message qui est envoyé (notification) le niveau de batterie, et non pas comme mes premiers tests « entre 90 et 80 ».
Je t’ai mis ça là : Envoyer des alertes (mail, etc) lors d'une coupure de courant? - #12 par Clemalex
L’information est entre les {{ }}
Je n’avais pas compris sur le coup, cette fois-ci c’est bon !
- id: '1614076057203'
alias: 00 TEST
description: ''
trigger:
- platform: numeric_state
entity_id: sensor.myups_battery_charge_2
above: '0'
below: '101'
condition: []
action:
- service: notify.notify
data:
message: il reste {{states('sensor.myups_battery_charge_2') | int}} % de batterie
mode: single
Je reçois la notif !
Merci
Donc en gros je pourrai m’arrêter là. A chaque changement du niveau de la batterie, je reçois une info. Si y a coupure de courant, ça passera obligatoirement en dessous de 100%, mais j’aurai bien aimé avoir une alerte sur coupure et une autre sur retour du courant.
Et là j’y reviens, dans les déclencheurs, je n’ai pas trouvé comment utiliser un OU (OL ou FSD OL,
OB DISCHRG ou FSD OB DISCHRG etc
message: 'Onduleur en {{states(''sensor.myups_status_data_2'') | int}} il reste {{states(''sensor.myups_battery_charge_2'') | int}} % de batterie'
J’ai ajouté l’état de l’onduleur pour voir si il est en charge ou décharge, mais ça me met 0 dans le message que je reçois, au lieu de OL, FSD OL, OB DISCHRG,; etc
Normal, tu le convertis en INTEGER donc du texte en NOMBRE donne 0 s’il n’est pas représentatif…
Si je laisse |int l’assistant de création de l’automatisation m’envoie balader (j’avais tenté avant de poster).
Donc je ne sais pas quoi mettre dans ce cas.
c’est ce message qu’il faut nous fournir pour t’aider…
Je vois qu’à un moment tu as mis :
entity_id: sensor.myups_load_2
J’avais cru comprendre que l’état de l’onduleur est remonté par myups_status_data_2
et que la charge de la batterie par sensor.myups_battery_charge_2
.
D’ailleurs l’entité sensor.myups_battery_charge_2
passe à 101 quand la batterie est pleine ? L’entité myups_status_data_2
ne te donne pas l’information ?
Qu’elle est l’état de sensor.myups_status_data_2
quand il y a du courant et que la batterie est pleine ?
Je viens de retenter, et maintenant ça passe, je reçois le bon message…
message: 'Onduleur en {{states(''sensor.myups_status_data_2'')}} il reste {{states(''sensor.myups_battery_charge_2'') | int}} % de batterie'
J’ai dû me tromper lors du 1er test. Désolé.
Tu as raison, pour le LOAD, je me suis trompé dans une des automatisations, je n’ai pas sélectionné la bonne entité (DATA) pour lire l’état remonté.
Pour le 101, j’avais testé avec 100, mais je ne recevais pas de notif quand la batterie était chargée à fond (100%) (en jouant à la main avec le changement d’état via les « outils de dev ». Puisque c’est « Bellow / en dessous de », j’ai mis 101, donc 100 est valide.
Pour répondre à ta dernière question, quand le courant est OK et batterie pleine, avant c’était OL, maintenant c’est FSD OL (fast shutdown online).
Encore merci pour ton aide !!
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).
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
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 🔌
Je reviens seulement sur le forum.
Merci BEAUCOUP !
Je vais prendre le temps de regarder, comprendre, tester, modifier, etc.
Merci
Bon, y a un peu de « code » donc j’ai du mal à suivre/comprendre.
Donc, l’éditeur d’automatisation (l’interface utilisateur) n’est pas exploitable, il n’affiche pas les champs habituels.
J’ai créé une nouvelle automatisation, j’ai collé ton texte (j’ai dû modifier des bricoles car l’éditeur indiquait des erreurs (les espaces devant les première lignes apparemment), j’ai exécuté, et… rien Je ne reçois aucune notif, pourtant la conf semble bonne.
J’ai modifié l’état en indiquant 99 (de batterie) et je vois que l’automatisation a été déclenchée.
Etrange
Nop, en fait ça marche pas, ça ne se déclenche pas même quand je change l’état pour « OB DISCHRG » par exemple.
Et je ne trouve pas d’erreur dans le code
Parce qu’il n’y en as pas… (très présomptueux)
Plus sérieusement, si je prends le code 2 et que je l’utilise cela fonctionne très bien
Ce n’est pas normal.
Affiche dans une carte ENTITES ton automatisation et affiche l’attribut DERNIER DECLENCHEMENT :
type: entities
entities:
- entity: sensor.myups_status_data_2
- entity: sensor.myups_battery_charge_2
- entity: automation.gestion_onduleur
secondary_info: last-triggered
De plus, pour la mise au point, enlèves les actions qui ne sont pas significatives pour la mise au point mais qui si elles échouent, bloquent l’automatisation.
Ca donne (en ajoutant des notifications partout) :
alias: Gestion Onduleur
description: Notification 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: persistent_notification.create
data:
message: >
{% 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 %}
title: DEBUG Automatisation
notification_id: '{{ (range(1, 9999)|random) }}'
- 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: persistent_notification.create
data:
message: |
⚠️ Détection : {{(now()|string).split('.')[0]}}
title: "⚡ Coupure de Courant \U0001F50B"
notification_id: '{{ (range(1, 9999)|random) }}'
- conditions:
- condition: template
value_template: >
{% set etat_precedent = trigger.from_state.state %} {% if
'DISCHRG' in etat_precedent.split() %}
true
{% else %}
false
{% endif %}
- condition: template
value_template: '{{ trigger.to_state.state != ''unknown'' }}'
- condition: template
value_template: '{{ trigger.to_state.state != ''unavailable'' }}'
sequence:
- service: persistent_notification.create
data:
message: 'ℹ️ Détection : {{(now()|string).split(''.'')[0]}}'
title: "⚡ Retour du Courant \U0001F50C"
notification_id: '{{ (range(1, 9999)|random) }}'
default:
- service: persistent_notification.create
data:
message: action par défaut
title: DEFAUT
default:
- service: persistent_notification.create
data:
message: action par défaut
title: DEFAUT GENERAL
mode: restart
Enfin,
Aucun soucis chez moi…
Bon, je recommence, en partant de ton code2 comme pour le 1er essai.
Quand je colle le code (copié via le petit bouton en haut à droite de la zone de code dans ton message), j’ai des erreurs comme celles ci :
end of the stream or a document separator is expected at line 305, column 1:
mode: restart
^
(pour mode: restart )
end of the stream or a document separator is expected at line 306, column 1:
alias: Gestion Onduleur
^
Pour alias: Gestion Onduleur
end of the stream or a document separator is expected at line 307, column 1:
id: gestion_onduleur
^
Pour id: gestion_onduleur
Pour celles ci (les 3 du dessus), j’ai dû ajouter 2 espaces devant.
duplicated mapping key at line 307, column 3:
id: gestion_onduleur
^
Etrange pour celle ci ( id: gestion_onduleur ) que l’ID ne soit pas au début de ton code, et qu’il n’y ait pas de " - " devant non ? Comme j’avais déjà créé un ID ( - id: ‹ 1614252819521 › ) j’efface ta ligne.
Est-ce ok ?
end of the stream or a document separator is expected at line 307, column 1:
description: Notification en fon …
^
Pour « description: Notification en fonction des changements d’état de l’onduleur »
end of the stream or a document separator is expected at line 308, column 1:
trigger:
^
Pour trigger:
end of the stream or a document separator is expected at line 313, column 1:
condition:
^
Pour condition:
end of the stream or a document separator is expected at line 314, column 1:
action:
^
Pour action:
Après avoir modifié tout ça, le vérificateur de code est passé en vert.
Je viens de changer l’état en OB DISCHRG (l’entité montre bien le changement), mais rien ne se passe, ce n’est pas déclenché.
Même chose pour charge_2 passé à 90%, l’entité montre bien la modif mais l’automatisation n’est pas déclenchée.
Donc là je continue de gratouiller…
Je vois que dans l’assistant d’automatisation c’est toujours l’ancien nom TEST qui apparait et pas ce que tu as écrit (gestion onduleur), étrange, je me dis que, même si je clique pour éditer (via l’assistant) cette automatisation et que le contenu apparait bien, le système n’a peut-être pas rechargé / pris en compte les nouvelles règles.
Pour mes tests je créé une nouvelle automatisation (TEST 2), et en ressortant de l’assistant, je vous que TEST a été renommée GESTION ONDULEUR. De suite je change le niveau de batterie à 95 et bingo j’ai reçu toutes les notifs !
Pfff tout ce temps perdu pour ça. Lors de mes premiers tests je n’avais pas besoin de redémarrer quoi que ce soit.
Je continue les tests et reviens vers toi.
MERCI !
Où trouves tu les icones que tu utilises pour les notifs ? (c’est top)
Est-ce une liste ?
Certaines ne passent pas par SMS et j’ai un caractère chinois (je pense, probablement car le SMS est envoyé par ma borne Huawei).
Exemple, celles ci ne passent pas
Lire l’article :
https://forum.hacf.fr/t/publie-ajouter-des-emojis-dans-vos-notifications/2591
Les phrases :
et
sont incohérentes pour moi car le mode restart
et l’alias
ne sont pas au même niveau (ils sont de surcroit à l’opposé l’un de l’autre).
Comment intègre tu l’automatisation ?
Voici la méthode que j’utilise :
Merci pour le lien, mais je ne peux pas y accéder, j’ai ce message " Oups ! Cette page n’existe pas ou est privée."
En fait je passe par l’éditeur de fichier (addon FILE EDITOR) pour éditer automatisations.yaml).
Je vais faire comme toi maintenant. Merci.
Quel outil utilises-tu pour faire tes GIFs ?
Je continue de jouer/modifier un peu.
J’ai un nouveau soucis
Si je débranche /rebranche l’onduleur du courant, j’ai des alertes pour le niveau de batterie (qui baisse / remonte) mais pas les alertes « coupure de courant » « retour du courant ».
Je les ai uniquement quand je change manuellement l’état (OB DISCHRG puis il repasse seul en OL CHARG puis OL une fois la batterie chargée).
Sur cette copie d’écran, les 2 notifs du haut sont générées manuellement, et on voit bien au milieu qu’elles manquent (entre la décharge et le charge de la batterie).
Mon code est :
mode: restart
alias: Gestion Onduleur
description: Notification 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: "\U0001F50B Onduleur niveau de batterie : {{ 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: "\U0001F50B Onduleur niveau de batterie : {{ 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: persistent_notification.create
data:
message: "\U0001F50B Onduleur niveau de batterie : {{ 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 %}\n ⚡ Décharge en cours ↘️\n{% else %}\n \U0001F50C Recharge en cours ↗️\n{% endif %} \n"
notification_id: '{{ (range(1, 9999)|random) }}'
- 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 ⚡ Coupure de Courant :
{{(now()|string).split('.')[0]}}
- service: notify.notify
data:
message: '⚠️ Détection : {{(now()|string).split(''.'')[0]}}'
title: "⚡ Coupure de Courant \U0001F50B"
- service: persistent_notification.create
data:
message: '⚠️ Détection : {{(now()|string).split(''.'')[0]}}'
title: "⚡ Coupure de Courant \U0001F50B"
notification_id: '{{ (range(1, 9999)|random) }}'
- conditions:
- condition: template
value_template: >
{% set etat_precedent = trigger.from_state.state %} {% if
'DISCHRG' in etat_precedent.split() %}
true
{% else %}
false
{% endif %}
- condition: template
value_template: '{{ trigger.to_state.state != ''unknown'' }}'
- condition: template
value_template: '{{ trigger.to_state.state != ''unavailable'' }}'
sequence:
- service: notify.huawei_lte
data:
message: "ℹ️ Détection ⚡ Retour du Courant \U0001F50C : {{(now()|string).split('.')[0]}}"
- service: notify.notify
data:
message: 'ℹ️ Détection : {{(now()|string).split(''.'')[0]}}'
title: "⚡ Retour du Courant \U0001F50C"
- service: persistent_notification.create
data:
message: 'ℹ️ Détection : {{(now()|string).split(''.'')[0]}}'
title: "⚡ Retour du Courant \U0001F50C"
notification_id: '{{ (range(1, 9999)|random) }}'
Aurais-tu une idée ?
Oups ! Mauvais lien :
Pour le reste je me mets un rappel pour lire demain
Merci !
Il n’y a qu’une seule version des smileys « prise électrique » et « batterie », rien à faire, ça ne passe pas dans les SMS sur mon S9.
Tant pis, c’est pas bien grave