[Résolu] Recherche méthode pour établir une automatisation avec notifications par email

Bonjour,

après avoir passé plusieurs heures sur la documentation et sur ce forum (un grand merci aux initiateurs et participants à ce forum, soit dit en passant), je suis encore bloqué sur la méthodologie à adopter pour créer une automatisation.

Voici mon problème : j’ai une installation électrique vétuste et instable et j’ai besoin de recevoir un email lorsque le disjoncteur saute alors que je ne suis pas là, pour me permettre de venir remettre le courant manuellement (ou via un voisin consentant).

Mon installation : J’ai branché un onduleur (APC BackUPS 700) sur la freebox et une raspi 3B (sur laquelle est HA). J’ai réussi à faire reconnaître l’onduleur par HA (merci au forum).

Je souhaite maintenant utiliser quelque chose comme https://forum.hacf.fr/t/envoyer-des-alertes-mail-etc-lors-dune-coupure-de-courant/1180/49?u=patrice mais en le modifiant pour qu’il m’envoie des emails et pas des SMS.
Si j’ai bien compris, il me faudrait déjà mettre en place un système de notification par emails que j’utiliserai dans le script https://forum.hacf.fr/t/envoyer-des-alertes-mail-etc-lors-dune-coupure-de-courant/1180/49?u=patrice ; et c’est là que le bât blesse : je ne vois pas du tout comment mettre en place une notification par email.

En fait j’ai beaucoup de mal à saisir s’il existerai un blueprint pour les notifs par email… Je n’ai pas compris également ce que pouvait m’apporter node-red par exemple.

Je suis preneur d’infos pour newbies en fait.

Cordialement,
Patrice

Salut Patrice,

Tu peux déjà créer un « notifier » smtp en suivant cette doc :

https://www.home-assistant.io/integrations/smtp/

Example chez moi avec une @ovh

### mail OVH
- name: mail_ovh
  platform: smtp
  server: ssl0.ovh.net
  port: 465
  timeout: 15
  sender: !secret amailovh
  encryption: tls
  username: !secret amailovh
  password: !secret pmailovh
  recipient:
    - !secret dmailovh
  sender_name: Home Assistant

et en admettant que ton notifier soit nommé « mail_patrice » tu n’auras plus qu’à l’intégrer dans tes automations dans la partie action de cette façon :

  action:
    - service: notify.mail_patrice
      data:
        title: "Le titre"
        message: "le message que tu souhaites y compris des templates"

Merci @Herbs,

je pense que je saisi de travers dans l’éditeur, car j’ai ajouté ceci dans /config/configuration.yaml :
NB : je suis aussi chez OVH :slight_smile:

### mail OVH
notify:
 - name: mail_ovh
   platform: smtp
   server: ssl0.ovh.net
   port: 465
   timeout: 15
   sender: !secret identifiantdemonadresseovh@monnomdedomaineovh
   encryption: tls
   username: !secret identifiantdemonadresseovh@monnomdedomaineovh
   password: !secret lemotdepassedemonadresseovh
   recipient:
    - !secret adresse1@gmail.com
    - !secret adresse2@gmail.com
   sender_name: Home Assistant

Et j’ai la réponse suivante lors de la vérification de la configuration :
Error loading /config/configuration.yaml: Secret identifiantdemonadresseovh@monnomdedomaineovh not defined

Je ne dois pas être bien loin du résultat mais je dois avouer avoir besoin d’un regard aguerri sur mon code visiblement pourri.
cordialement

Le identifiantdemonadresseovh@monnomdedomaineovh est une indirection pour une info stockée dans secrets.yaml. C’est expliqué là

C’est ce que tu fais?

1 « J'aime »

Merci @golfvert ,
je n’avais pas encore intégré la notion de «storing secret» ; je corrige de suite mon fichier de config et ajoute un secrets.yaml.
[…] C’est bon, mon fichier de configuration est valide dorénavant.

1 « J'aime »

Ouais désolé, j’aurais dû préciser cette partie :wink:

Par contre, mon script d’automatisation ne semble pas être fonctionnel (pas d’envoi d’emails lorsque l’onduleur est sur batteries) :

alias: Gestion Onduleur
description: Notification en fonction des changements détat de londuleur
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_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.mail_ovh
                    data:
                      message: >-
                        ⚠️ Détection ⚡ Coupure de Courant :
                        {{(now()|string).split('.')[0]}}
                      title: ⚡ Coupure de Courant 🔋
                  - service: notify.notify
                    data:
                      message: '⚠️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Coupure de Courant 🔋
                  - service: persistent_notification.create
                    data:
                      message: '⚠️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Coupure de Courant 🔋
                      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.mail_ovh
                    data:
                      message: >-
                        ℹ️ Détection ⚡ Retour du Courant 🔌 :
                        {{(now()|string).split('.')[0]}}
                      title: ⚡ Retour du Courant 🔌
                  - service: notify.notify
                    data:
                      message: 'ℹ️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Retour du Courant 🔌
                  - service: persistent_notification.create
                    data:
                      message: 'ℹ️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Retour du Courant 🔌
                      notification_id: '{{ (range(1, 9999)|random) }}'
      - conditions:
          - condition: template
            value_template: >-
              {{trigger.from_state.entity_id.split('.')[1] ==
              'myups_battery_charge_2' }}
        sequence:
          - service: notify.mail_ovh
            data:
              message: >-
                ⚡ 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: >-
                🔋 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: >-
                🔋 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 %}               
              notification_id: '{{ (range(1, 9999)|random) }}'
mode: restart

J’ai juste remplacé le notify.huawei_lite par notify.mail_ovh dans le script de https://forum.hacf.fr/t/envoyer-des-alertes-mail-etc-lors-dune-coupure-de-courant/1180/49

Est-il nécessaire que je supprime d’autres trucs comme persistent_notification.create et notify.notify ?

Je n’ai pas la moindre idée de ce que peut être sensor.myups_status_data_2, ni comment ce script peut savoir que je cherche à avoir des infos sur l’onduleur.

Ca semble être les entités de l’automation dont tu t’inspires, mais est-ce que ça correspond à tes propres entités ?

Si ce n’est pas le cas aucune chance que l’automation soit « triggée », il te faut alors remplacer ces entités par les tiennes.

Dans ce qui correspond à l’intégration de ton onduleur tu dois avoir qqc de ce genre (au détail près selon ta conf) :

image

et

Si je devais reprendre cette automation avec ma conf je devrais écrire :

trigger:
  - platform: state
    entity_id: sensor.1200_pro_status

Du coup il faut que tu retrouves l’entité « status » de ton onduleur, et la mettre à chaque endroit nécessaire.

Super, ça fonctionne, c’était bien ça : la notion de trigger que je ne maîtrisais pas encore.
Décidemment, grâce à vous j’ai fait un grand pas en avant dans la connaissance de HA et de sa configuration.
Pour info j’avais besoin de modifier comme cela le fichier :

alias: Gestion Onduleur
description: Notification en fonction des changements détat de londuleur
trigger:
  - platform: state
    entity_id: sensor.onduleur_status_data
  - platform: state
    entity_id: sensor.onduleur_battery_charge
condition: []
action:
  - choose:
      - conditions:
          - condition: template
            value_template: >-
              {{trigger.from_state.entity_id.split('.')[1] ==
              'onduleur_status_data' }}
        sequence:
          - choose:
              - conditions:
                  - condition: or
                    conditions:
                      - condition: state
                        entity_id: sensor.onduleur_status_data
                        state: OB DISCHRG
                      - condition: state
                        entity_id: sensor.onduleur_status_data
                        state: FSD OB DISCHRG
                sequence:
                  - service: notify.mail_ovh
                    data:
                      message: >-
                        ⚠️ Détection ⚡ Coupure de Courant :
                        {{(now()|string).split('.')[0]}}
                      title: ⚡ Coupure de Courant 🔋
                  - service: notify.notify
                    data:
                      message: '⚠️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Coupure de Courant 🔋
                  - service: persistent_notification.create
                    data:
                      message: '⚠️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Coupure de Courant 🔋
                      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.mail_ovh
                    data:
                      message: >-
                        ℹ️ Détection ⚡ Retour du Courant 🔌 :
                        {{(now()|string).split('.')[0]}}
                      title: ⚡ Retour du Courant 🔌
                  - service: notify.notify
                    data:
                      message: 'ℹ️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Retour du Courant 🔌
                  - service: persistent_notification.create
                    data:
                      message: 'ℹ️ Détection : {{(now()|string).split(''.'')[0]}}'
                      title: ⚡ Retour du Courant 🔌
                      notification_id: '{{ (range(1, 9999)|random) }}'
      - conditions:
          - condition: template
            value_template: >-
              {{trigger.from_state.entity_id.split('.')[1] ==
              'onduleur_battery_charge' }}
        sequence:
          - service: notify.mail_ovh
            data:
              message: >-
                ⚡ Onduleur niveau de batterie : {{
                states('sensor.onduleur_battery_charge')|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: >-
                🔋 Onduleur niveau de batterie : {{
                states('sensor.onduleur_battery_charge')|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: >-
                🔋 Onduleur niveau de batterie : {{
                states('sensor.onduleur_battery_charge')|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 %}               
              notification_id: '{{ (range(1, 9999)|random) }}'
mode: restart
1 « J'aime »