[Article] Automatisation #3 : aller encore plus loin!

Mon cas perso:

Un script de notification par téléphone (c’est le seul endroit où je fais directement appel à l’integration de notification du telephone…) :

exemple vers mon telephone, nous en avons 5 sur le même modèle...
sequence:
  - action: notify.mobile_app_smartphone_doudou
    metadata: {}
    data:
      title: "{{ titre }}"
      message: "{{ message }}"
      data:
        clickAction: "{{ clickaction}}"
        sticky: "{{ sticky }}"
    continue_on_error: true
fields:
  titre:
    selector:
      text: null
    name: Titre
    description: >-
      Titre de la notification (peut contenir un template type {{
      states('entity.name') }} )
    required: true
  message:
    selector:
      template: {}
    name: message
    description: >-
      Message de la notification, (peut contenir un template type {{
      states('entity.name') }} ) 
    required: true
  clickaction:
    selector:
      template: {}
    name: clickAction
    description: Raccourci lors du clic sous la forme /lovelace-smartphone/view
    required: false
  sticky:
    selector:
      text: {}
    default: "true"
    description: true reste apres visionage, false disparait dès visionnage
alias: Notification smartphone doudou
description: Notification vers le smartphone de Bernard
icon: mdi:bell

J’appelle ensuite ces 5 scripts soit directement, soit dans un autre script, par exemple pour notifier les téléphones des parents, ou de toute la famille (nous sommes 5):

exemple scripts parents, celui pour juste les enfants ou pour toute la famille est fait sur le même modèle en utilisant les scripts définis précédemment:
sequence:
  - action: script.notification_smartphone_doudou
    metadata: {}
    data:
      sticky: "{{ sticky }}"
      titre: "{{ titre }}"
      message: "{{ message }}"
      clickaction: "{{ clickaction }}"
  - action: script.notification_smartphone_jeanne
    metadata: {}
    data:
      sticky: "{{ sticky }}"
      titre: "{{ titre }}"
      message: "{{ message }}"
      clickaction: "{{ clickaction }}"
fields:
  titre:
    selector:
      text: null
    name: Titre
    description: >-
      Titre de la notification (peut contenir un template type {{
      states('entity.name') }} )
    required: true
  message:
    selector:
      template: {}
    name: message
    description: >-
      Message de la notification, (peut contenir un template type {{
      states('entity.name') }} ) 
    required: true
  clickaction:
    selector:
      template: {}
    name: clickAction
    description: Raccourci lors du clic sous la forme /lovelace-smartphone/view
    required: false
  sticky:
    selector:
      text: {}
    default: "true"
    description: true reste apres visionage, false disparait dès visionnage
alias: Notification smartphone parents
description: Notification vers le smartphone des parents
icon: mdi:bell


de le même façon je peux me faire un script intelligent pour Alexa:

notif alexa:
sequence:
  - choose:
      - conditions:
          - alias: si c'est le jour (WE avec grasse mat')
            condition: or
            conditions:
              - condition: time
                after: "08:00:00"
                before: "20:30:00"
                weekday:
                  - mon
                  - tue
                  - wed
                  - thu
                  - fri
              - condition: time
                after: "09:30:00"
                before: "20:30:00"
                weekday:
                  - sat
                  - sun
        sequence:
          - action: notify.alexa_media
            metadata: {}
            data:
              target:
                - media_player.echo_dot_jeanne
                - media_player.echo_jeanne
                - media_player.jeanne_echo_dot
                - media_player.echo_dot_sdb_enfant
                - media_player.echo_dot_thibault
                - media_player.echo_dot_louise
                - media_player.echo_dot_justine
              data:
                type: tts
              message: "{{ message }}"
              title: "{{ titre }}"
            alias: diffuser "message" partout
            continue_on_error: true
    default:
      - alias: Chuchotage du message (de nuit si message facultatif)
        if:
          - condition: template
            value_template: "{{ message_nuit == idem }}"
            alias: Si message de nuit par défaut
        then:
          - action: notify.alexa_media
            metadata: {}
            data:
              target:
                - media_player.echo_dot_jeanne
                - media_player.echo_jeanne
                - media_player.jeanne_echo_dot
              data:
                type: tts
              message: <amazon:effect name="whispered">{{ message }}</amazon:effect>
              title: "{{ titre }}"
            alias: Chuchotage de "message" sur les echo des pieces à vivre
        else:
          - action: notify.alexa_media
            metadata: {}
            data:
              target:
                - media_player.echo_dot_jeanne
                - media_player.echo_jeanne
                - media_player.jeanne_echo_dot
              data:
                type: tts
              message: >-
                <amazon:effect name="whispered">{{ message_nuit
                }}</amazon:effect>
              title: "{{ titre }}"
            alias: Chuchotage de "message_nuit" sur les echo des pieces à vivre
        continue_on_error: true
fields:
  titre:
    selector:
      text: null
    name: Titre
    description: Titre de la notification (facultatif)
    example: notification
    default: Titre
  message:
    selector:
      text: null
    name: Message
    required: true
    description: Message inclus dans la notification de jour
    example: Ceci est une notification de jour
    default: Notification jour
  message_nuit:
    selector:
      text: null
    name: Message de nuit
    description: Message à chuchoter (si différent du message principal)
    example: ceci est un message chuchoté de nuit
    default: idem
description: >-
  Notification d'un message dans toute la maison.

  - Message diffusé partout le jour 

  Message chuchoté dans les pieces a vivre seulement la nuit (possibilité d'un
  message différent la nuit)
icon: mdi:speaker-message
alias: Alexa-notification-maison

Ensuite dans chaque automatisation ou script dans lequel j’ai besoin d’une notification téléphone ou Alexa, ce sont ces scripts que j’appelle (notif parents, notifs enfants, notif famille et/ou notif Alexa) plutôt que de devoir refaire une logique à chaque fois.

Le gain est double :

  • je n’ai qu’un script à appeller pour notifier 5 telephones et pas à refaire 5x la notification
  • la maintenance est facilitée.
exemple : automatisation de surveillance de fuite dans le cellier
alias: Surveillance - Fuite - cellier
description: Envoi d'une notification en cas de détection d'eau dans le cellier
triggers:
  - entity_id:
      - binary_sensor.fuite_eau_cellier_water_leak
    for:
      hours: 0
      minutes: 1
      seconds: 0
    trigger: state
    to: "on"
conditions: []
actions:
  - action: script.notification_smartphone_famille
    metadata: {}
    data:
      titre: Maison - surveillance fuite
      message: >-
        Le capteur de fuite détecte de l'eau sous la machine à laver. Il
        faudrait vérifier dans le cellier!
  - action: script.ecam_publish
    data:
      message: "SURV: Alerte Fuite cellier "
mode: single

pour la maintenance, s’il y a une modification à faire:

  • nouveau telephone
  • changement d’horaire
  • ajouter une enceinte
  • etc…

on ne le fait que dans un seul script et ça se propage à tous les scripts / automatisations qui utilisent ce script, comme des dominos…

Sinon il faut le refaire à tous les endroits où la logique ou l’action est appelée…

L’image des poupées russes c’est:

  • Automatisation de surveillance X => appelle le script notification parents => appelle les scripts du portable de mon epouse et le mien.
  • Automatisation de surveillance Y => appelle le script notification parents => appelle les scripts du portable de mon epouse et le mien.
  • Automatisation de surveillance Z => appelle le script notification famille => appelle les scripts du portable de mon epouse, de chaque enfant et le mien.

si je change de telephone, je n’ai qu’un script à modifier.
Si le fils est parti de la maison, je n’ai qu’à supprimer l’appel à son script dans les script famille et enfant.
etc…

Si en plus on ajoute des etiquettes / labels, on peut se rappeller facilement où sont utilisés ces scripts…