Envoyer des alertes (mail, etc) lors d'une coupure de courant?

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 :smiley:

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

:expressionless:

Normal, tu le convertis en INTEGER donc du texte en NOMBRE donne 0 s’il n’est pas représentatif…

:sweat_smile:

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… :grin: :upside_down_face:

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 !! :slight_smile:

Voici un exemple comme convenu :
:warning: Je n’ai pas du tout fait la mise au point…
:information_source: Lis tranquillement et poses TOUTES les questions que tu veux :+1:

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 🔌

Je reviens seulement sur le forum.
Merci BEAUCOUP !
Je vais prendre le temps de regarder, comprendre, tester, modifier, etc.

Merci :smiley:

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 :o: 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 :grimacing:

Parce qu’il n’y en as pas… :sweat_smile: (très présomptueux)

Plus sérieusement, si je prends le code 2 et que je l’utilise cela fonctionne très bien :+1:

animate

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 ! :slight_smile:

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
:battery: :electric_plug:

Lire l’article :

https://forum.hacf.fr/t/publie-ajouter-des-emojis-dans-vos-notifications/2591

Concernant les erreurs que tu mentionnes :

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 :

animate

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 :cry:
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 :+1:

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 :smiley: