[Automation] Zone et Notification avec message personnalisé

Mon problème

Je voudrais faire une automatisation qui me permette d’être notifié sur mon téléphone (avec HA Companion android) qu’une personne entre dans une zone appelée « Quartier » avec un message incluant le nom de la personne.

Mes tests

Notification sans le nom de la personne

Le code

- alias: "Notification arrivée dans quartier"
  description: "Notification d'arrivée dans la zone Quartier"
  trigger:
    - platform: zone
      entity_id:
        - person.sylvain
      zone: zone.quartier
      event: enter
  condition: []
  action:
    - service: notify.mobile_app_sm_a530f_sg
      data: 
        message: >-
          Sylvain arrive dans le quartier !

Exécution pour le test

image
Je recharge les automatisations en cliquant sur AUTOMATISATIONS.


Je clique sur le bouton EXECUTER.

J’obtiens une notification sur mon téléphone :

Sylvain arrive dans le quartier !

Notification avec le nom de la personne

Le code

- alias: "Notification arrivée dans quartier"
  description: "Notification d'arrivée dans la zone Quartier"
  trigger:
    - platform: zone
      entity_id:
        - person.sylvain
      zone: zone.quartier
      event: enter
  condition: []
  action:
    - service: notify.mobile_app_sm_a530f_sg
      data: 
        message: >-
          {{ trigger.to_state.name }} arrive dans le quartier !

Exécution pour le test

image
Je recharge les automatisations en cliquant sur AUTOMATISATIONS.


Je clique sur le bouton EXECUTER.

J’obtiens aucune notification sur mon téléphone.
Et une erreur dans le journal de HA :

Template variable error: 'dict object' has no attribute 'to_state' when rendering '{{ trigger.to_state.name }} arrive dans le quartier !'

Mes recherches

J’ai donc lu la video de ArminasTV sur 3 Tips sur les automatisations de Home Assistant, j’ai épluché les documents suivants (malheureusement en anglais :sob:) :

Lu les posts :

Sans succès … :sob:

Conclusion

Si une âme charitable pouvait m’expliquer comment faire pour récupérer le nom de la personne qui entre dans la zone dans le message de notification.
Ou pourquoi, j’ai une erreur lorsque j’execute l’automatisation.

Au fait j’oubliais, j’ai aussi essayé avec ce code :

- alias: "Notification arrivée dans quartier"
  description: "Notification d'arrivée dans la zone Quartier"
  trigger:
    - platform: zone
      entity_id:
        - person.sylvain
      zone: zone.quartier
      event: enter
  condition: []
  action:
    - service: notify.mobile_app_sm_a530f_sg
      data: 
        message: >-
          {{ trigger }} arrive dans le quartier !

Qui me renvoie la notification suivante :

{'platform': None} arrive dans le quartier !

Pourquoi la platform n’est pas défini puisque je l’ai défini dans mon code - platform: zone

Bref, je suis perdu !!!

Je ne sais plus si j’avais eu les mêmes symptômes que toi, mais au final j’avais résolu le truc en utilisant une variable.

Chez toi ça pourrait donner ça :

- alias: "Notification arrivée dans quartier"
  description: "Notification d'arrivée dans la zone Quartier"
  trigger:
    - platform: zone
      entity_id:
        - person.sylvain
      zone: zone.quartier
      event: enter
  variables:
    person_name: "{{ state_attr('person.sylvain','friendly_name') }}"      
  condition: []
  action:
    - service: notify.mobile_app_sm_a530f_sg
      data: 
        message: >-
          {{ person_name }} arrive dans le quartier !

Edit :

as-tu essayé avec ça :

{{ trigger.to_state.attributes.friendly_name }}

Si je mets ce code, ça fonctionne correctement mais je n’arrive pas à « variabiliser » la personne dans mon message.

Imaginons que j’ai plusieurs personnes qui entre dans cette zone, je souhaiterais être notifié par un message contenant le nom de al personne.
Une fois que j’arriverais à mettre le nom de la personne mon bloc entity_id pourra ressembler à ça :

  trigger:
    - platform: zone
      entity_id:
        - person.sylvain
        - person.toto
        - person.tata
      zone: zone.quartier
      event: enter

Et j’ai aussi essayé avec :

et j’ai ce message d’erreur dans le journal de HA :

Logger: homeassistant.helpers.template
Source: helpers/template.py:1791
First occurred: 14:49:18 (1 occurrences)
Last logged: 14:49:18

Template variable error: 'dict object' has no attribute 'to_state' when rendering '{{ trigger.to_state.attributes.friendly_name }}'

J’ai réussi avec ça :

alias: "Notification arrivée dans quartier"
description: "Notification d'arrivée dans la zone Quartier"
trigger:
- platform: zone
  zone: zone.quartier
  event: enter
  entity_id:
    - person.sylvain
    - person.toto
    - person.tata
action:
- service: notify.mobile_app_sm_a530f_sg
  data: 
    message: >-
      {% set item = trigger.entity_id %}
      {{ state_attr(item, 'friendly_name') }} arrive dans le quartier !

Dis moi si ça passe chez toi ?

J’ai ces erreurs avec ce code :

Logger: homeassistant.components.automation.notification_arrivee_dans_quartier
Source: components/automation/__init__.py:512
Integration: Automatisation (documentation, issues)
First occurred: 16:50:37 (1 occurrences)
Last logged: 16:50:37

Error while executing automation automation.notification_arrivee_dans_quartier: Error rendering data template: UndefinedError: 'dict object' has no attribute 'entity_id'
Logger: homeassistant.components.automation.notification_arrivee_dans_quartier
Source: helpers/script.py:1382
Integration: Automatisation (documentation, issues)
First occurred: 16:50:37 (1 occurrences)
Last logged: 16:50:37

Notification arrivée dans quartier: Error executing script. Error for call_service at pos 1: Error rendering data template: UndefinedError: 'dict object' has no attribute 'entity_id'
Logger: homeassistant.helpers.template
Source: helpers/template.py:1791
First occurred: 16:50:37 (1 occurrences)
Last logged: 16:50:37

Template variable error: 'dict object' has no attribute 'entity_id' when rendering '{% set item = trigger.entity_id %} {{ state_attr(item, 'friendly_name') }} arrive dans le quartier !'

@Herbs, comment tu fais pour tester ton automatisation ?
Est-ce que tu passes aussi par le bouton EXÉCUTER ?

Je force l’état de la « person » avec les outils de dev, je change le « state » avec le « friendly_name » de la zone et change aussi latitude et longitude.

Je suis en train d’essayer de tester avec une boucle for, mais je suis pas certain de la façon dont sont rendus les triggers quand il y’en a plusieurs.

image

OK, j’ai fait le teste avec ta méthode de test et ça marche ! :champagne:

En fait lorsque je testais dans les outils de dev, je modifiais l’état de Quartier à une autre zone puis retour sur Quartier mais sans changer les latitudes / longitudes, et du coup rien ne se passait alors qu’avec le bouton EXÉCUTER des automatisations j’avais une notification.

Il fallait donc modifier le nom de la zone et les latitudes/longitudes.

Du coup, j’ai retester la syntaxe d’origine plus simple :

- alias: "Notification arrivée dans quartier"
  description: "Notification d'arrivée dans la zone Quartier"
  trigger:
  - platform: zone
    zone: zone.quartier
    event: enter
    entity_id:
      - person.sylvain
      - person.steph
      - person.cassie
  action:
  - service: notify.mobile_app_sm_a530f_sg
    data: 
      message: >-
        {{ trigger.to_state.name }} arrive dans le quartier !

Et ça fonctionne bien :ok_hand:

Merci @Herbs pour ton aide, je vais pouvoir ajouter les autres personnes sur l’automatisation et avoir des messages personnalisés.

Merci :clap: :clap:

Effectivement plus simple :+1:

C’est vrai que j’ai tendance à chercher compliqué lorsqu’on peut faire simple :wink:

1 « J'aime »