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

Je viens de publier un nouvel article sur notre portail. :fire:

Venez le découvrir dès maintenant !

Il s’agit de mon dernier de cette série dédiée aux automatisations… N’hésitez pas à réagir dans ce fil et merci d’avance pour vos commentaires et retours. :blush:

Bonne lecture !

Si par hasard vous aviez raté les deux premiers, ils sont ici:


Bonus, quelques raccourcis vers des astuces partagées dans les trois fil dédiés aux trois articles:

16 « J'aime »

Très belle séries d’articles pour bien débuter, et finalement, tu m’auras fait découvrir le « trace » a rajouter a la fin

1 « J'aime »

Je ne pensait pas découvrir autant de chose en rédigeant cette série d’articles…

Ce troisième article est aussi là pour ouvrir le dialogue et partager nos bonnes pratiques.

Personnellement cette astuce sur la trace m’a permis de debugger certaines automatisations où les 5 traces par défaut n’étaient pas suffisantes pour attraper le cas qui pose problème…

Cette limite m’a p**** les c******* plus d’une fois, et c’est pour ça entre autre que j’ai changé ma gestion des lave linge/vaisselles, pour ne plus avoir le déclencheur sur la conso de la prise. C’est un input.bolean, qui, grâce a un template, surveille la conso. Du coup plus Xmille « trace » pour 1 execution

2 « J'aime »

Merci pour cet article. Il m’a entre autres permis de découvrir spook :+1:

1 « J'aime »

Moi je dis juste pour la qualité des articles et l’investissement juste bravo!!!

2 « J'aime »

Merci @BBE pour cette super série d’article qui amène beaucoup de grains à moudre :grinning_face:

Je galère malgré tout sur la partie des scripts qui s’emboîtent comme des poupées russes…

Un exemple plus concret que dans l’article m’aiderait bien, j’avoue… si vous avez le temps.

Merci encore en tout cas :wink:

1 « J'aime »

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…

Un grand merci à vous :blush:

1 « J'aime »

Un grand merci pour ces articles, clairs et progressifs. J’ai découvert Home Assistant et ses automatisations en 2025, et vos articles m’auraient fait gagné du temps et de la confiance. Même lus un peu plus tardivement, je découvre quelques fonctions et je sens que je peux aller plus loin, plus sûrement, et parfois plus simplement. Beau travail ! (ll me reste à potasser la fin de #3 puis les liens :hugs: )

1 « J'aime »

Je ne connaissais pas spook… et bien, il a été adopté immédiatement. Bien plus intéressant que Watchman. Bref, j’en ai encore une petite, tellement ca m’a plu et ca m’a trouvé qq erreurs !

Bon, sinon, s’il y avait une méthode “simple” pour partir d’une automatisation et en faire un blueprint, ce serait cool. Genre, prendre son automatisation et utiliser l’interface graphique pour définir “ce paramètre, ce sera un input”… et ca une fois qu’on a définit tous les inputs, on sauve en blueprint.

Ainsi :

1- on crée une automatisation qui marche (on la teste aisément)

2- on la transforme en “machin générique” (blueprint)

1 « J'aime »

C’est pas très compliqué, c’est d’ailleurs la marche à suivre, mais ce n’est pas si simple non plus, car tout se fait dans des fichiers en Yaml, il n’y a pas d’interface… En tout cas pour l’instant.

Et content que spook plaise !

Je l’avais découvert ici: Faut-il utiliser Spook? et là: Integration watchman et Spook et je l’ai adopté depuis sans souci…