Notifier tant que l'état d'un sensor ne fait pas partie d'une liste

Mon problème

Je souhaite être alerté via une notification lorsque l’état d’un sensor fait parmi d’une liste.

Ma configuration

J’ai créé des sensors pour suivre le status de ma tondeuse via MQTT.
Ce status peut avoir plus de 76 valeurs différentes et parmi ces 76 valeurs certaines sont connues pour être des erreurs et d’autres un fonctionnement normal.

Je vais me baser sur un code que j’avais déjà qui me notifie toutes les 10 minutes si la charge de la tablette est inférieure à 30 et qu’elle n’est ni en charge, ni inconnu et ni inaccessible, voici le code revu pour mon besoin actuel :

#
# Notification lors d'une erreur sur Caroline
# Une notification est envoyée toutes les 10 minutes
# tant que Caroline n'est pas revenue dans un état de bon fonctionnement
#
- mode: single
  alias: "Notification sur erreur de Caroline"
  description: "Notification sur erreur de Caroline"
  trigger:
    - platform: state
      entity_id: sensor.automower_status
  condition: []
  action:
    - choose:
        - conditions:
            - <le status fait partie d'une liste définie d'erreur>
          sequence:
            - repeat:
                while:
                  - <le status fait partie d'une liste définie>
                sequence:
                  - service: script.notify_mon_phone
                    data: <le message Caroline est plantée !>
                  - delay:
                      hours: 0
                      minutes: 10
                      seconds: 0
                      milliseconds: 0
            - condition: not
              conditions:
                - <le status fait partie d'une liste définie d'état correct>
      default: []

Comment faire pour rédiger la condition : <le status fait partie d'une liste définie d'erreur> ?

P.S. Ah oui, ma tondeuse s’appelle Caroline (rapport à la tortue de Boule & Bill) :grin:

Si j’ai bien compris, j’aurais utilisé la comparaison in avec un tableau :

exemple : {{ 1 in [1, 2, 3] }} qui donnera un booléen en retour

Ça ferait donc un truc de ce style :

automations/triggers/state_automower.yaml
#
# Evènement : état du status de Caroline
#
platform: state
entity_id: sensor.automower_status
automations/triggers/automower_in_error_with_notif.yaml
#
# Condition : Caroline en erreur avec Notif
#
alias: "Caroline en erreur avec Notif"
condition: template
entity_id: sensor.automower_status
state: |-
  {% set codeNotif = [
      '-'      ,
      '6'      ,
      '8'      ,
      '12'     ,
      '14'     ,
      '16'     ,
      '18'     ,
      '26'     ,
      '28'     ,
      '30'     ,
      '34'     ,
      '38'     ,
      '42'     ,
      '52'     ,
      '54'     ,
      '56'     ,
      '58'     ,
      '1038'   ,
      '1052'   ,
      '1056'   ,
      '1062'   ,
      '1066'
    ]
  %}
  {% set state = value %}
  {{ state in codeNotif }}
automations/messages/automower_in_error.yaml
#
# Message : Caroline en erreur
#
  title: 'Caroline en erreur'
  message: >-
    ⚠️ Caroline en erreur !
automations/conditions/automower_in_correct.yaml
#
# Condition : Caroline en fonctionnement normal
#
alias: "Caroline en fonctionnement normal"
condition: template
entity_id: sensor.automower_status
state: |-
  {% set codeNormal = [
      'NULL'   ,
      'null'   ,
      '1'      ,
      '24'     ,
      '1000'   ,
      '1002'   ,
      '1006'   ,
      '1008'   ,
      '1012'   ,
      '1014'   ,
      '1016'   ,
      '1024'   ,
      '1036'   ,
      '1040'   ,
      '1042'   ,
      '1044'   ,
      '1048'   ,
      '1050'   ,
      '1058'   ,
      '1060'   ,
      '1064'   ,
      '1070'   ,
      '1072'
    ]
  %}
  {% set state = value %}
  {{ state in codeNormal }}
automations/list/automower_error_notify.yaml
#
# Notification lors d'une erreur sur Caroline
# Une notification est envoyée toutes les 10 minutes
# tant que Caroline n'est pas revenue dans un état de bon fonctionnement
#
- mode: single
  alias: "Notification sur erreur de Caroline"
  description: "Notification sur erreur de Caroline"
  trigger:
    - !include ../triggers/state_automower.yaml
  condition: []
  action:
    - choose:
        - conditions:
            - !include ../conditions/automower_in_error_with_notif.yaml
          sequence:
            - repeat:
                while:
                  - !include ../conditions/automower_in_error_with_notif.yaml
                sequence:
                  - service: script.notify_sm_a530f_sg
                    data: !include ../messages/automower_in_error.yaml
                  - delay:
                      hours: 0
                      minutes: 10
                      seconds: 0
                      milliseconds: 0
            - condition: not
              conditions:
                - !include ../conditions/automower_in_correct.yaml
      default: []

Mais je n’arrive pas à résoudre cet erreur :

Logger: homeassistant.config
Source: config.py:454
First occurred: 07:42:01 (1 occurrences)
Last logged: 07:42:01

Invalid config for [automation]: [entity_id] is an invalid option for [automation]. Check: automation->action->0->choose->0->conditions->0->entity_id. (See ?, line ?).

T’as essayé qqc dans ce genre :

#
# Condition : Caroline en fonctionnement normal
#
alias: "Caroline en fonctionnement normal"
condition: template
value_template: |-
  {% set codeNormal = [
      'NULL'   ,
      'null'   ,
      '1'      ,
      '24'     ,
      '1000'   ,
      '1002'   ,
      '1006'   ,
      '1008'   ,
      '1012'   ,
      '1014'   ,
      '1016'   ,
      '1024'   ,
      '1036'   ,
      '1040'   ,
      '1042'   ,
      '1044'   ,
      '1048'   ,
      '1050'   ,
      '1058'   ,
      '1060'   ,
      '1064'   ,
      '1070'   ,
      '1072'
    ]
  %}
  {% set state = states('sensor.automower_status') %}
  {{ state in codeNormal }}

Après un rapide coup d’oeil, je pense que tes 2 conditions sont mal écrite (automower_in_error_with_notif.yaml et automower_in_correct.yaml) :

Il devrait avoir ce format :

condition: template
value_template: "{{ la condition à respecter }}"

Ton fichier automower_in_error_with_notif.yaml devrait plutôt être comme ça :

#
# Condition : Caroline en fonctionnement normal
#
alias: "Caroline en fonctionnement normal"
condition: template
value_template: >-
  {% set codeNotif = [...] %}
  {{ states('sensor.automower_status') in codeNotif }}

Après je n’utilise pas d’include dans les automatisations mais je suppose que l’erreur vient de ça !

En modifiant mon fichier automower_in_error_with_notif.yaml comme ceci (idem pour automower_in_correct.yaml) comme tu le décris @OmiTech :

#
# Condition : Caroline en erreur avec Notif
#
alias: "Caroline en erreur avec Notif"
condition: template
# entity_id: sensor.automower_status
state: |-
  {% set codeNotif = [
      '-'      ,
      '6'      ,
      '8'      ,
      '12'     ,
      '14'     ,
      '16'     ,
      '18'     ,
      '26'     ,
      '28'     ,
      '30'     ,
      '34'     ,
      '38'     ,
      '42'     ,
      '52'     ,
      '54'     ,
      '56'     ,
      '58'     ,
      '1038'   ,
      '1052'   ,
      '1056'   ,
      '1062'   ,
      '1066'
    ]
  %}
  {{ states('sensor.automower_status') in codeNotif }}

j’obtiens une autre erreur :

Logger: homeassistant.config
Source: config.py:454
First occurred: 12:10:45 (1 occurrences)
Last logged: 12:10:45

Invalid config for [automation]: [state] is an invalid option for [automation]. Check: automation->action->0->choose->0->conditions->0->state. (See ?, line ?).

Et la même erreur avec ton code @Herbs

Ote moi d’un doute, t’as essayé en remplaçant le « state » par « value_template » ?

Parce qu’en gros c’est « La » différence entre ce que tu as fait et ce que nous te suggérons avec @OmiTech et ce qui fait aussi qu’on modifie la template derrière :wink:

1 « J'aime »

Oups, je l’avais modifié sur automower_in_correct.yaml mais pas sur automower_in_error_with_notif.yaml :pleading_face:

Merci pour avoir vu mon erreur :ok_hand:, ça passe maintenant.
Je laisse ouvert le sujet jusqu’à ce que les notifications tombent :grin: pour être sûr.

2 « J'aime »

C’est vraiment top, maintenant, je sais j’abuse, comme je reçois une notification, j’aimerais y glisser le code erreur.
Comment connaitre les attributs d’un trigger, par exemple trigger.to_state.xxx.

J’ai modifié mon code pour y insérer le code erreur mais dans le message il n’affiche rien :

#
# Notification lors d'une erreur sur Caroline
# Une notification est envoyée toutes les 10 minutes
# tant que Caroline n'est pas revenue dans un état de bon fonctionnement
#
- mode: single
  alias: "Notification sur erreur de Caroline"
  description: "Notification sur erreur de Caroline"
  trigger:
    - platform: state
      entity_id: sensor.automower_status
  condition: []
  action:
    - choose:
        - conditions:
            - !include ../conditions/automower_in_mode_alert.yaml
          sequence:
            - repeat:
                while:
                  - !include ../conditions/automower_in_mode_alert.yaml
                sequence:
                  - service: notify.mobile_mon_phone
                    data: 
                      message: >-
                        ⚠️ Caroline en erreur code : {{ trigger.to_state.value }} !
                  - delay:
                      hours: 0
                      minutes: 10
                      seconds: 0
                      milliseconds: 0
            - condition: not
              conditions:
                - !include ../conditions/automower_in_mode_normal.yaml
      default: []

Le trigger étant d’une platform state, je me suis dit que trigger.to_state.value pourrait me renvoyer la valeur du trigger mais nada :sob:, c’est pas ça…

Une idée ?

P.S. Je vous fais grace des 2 fichiers recensant tous les codes (sauf si vous en avez besoin :wink:).

Edit :
Je me répond à moi-même après avoir trouvé la solution en tâtonnant …

#
# Notification lors d'une erreur sur Caroline
# Une notification est envoyée toutes les 10 minutes
# tant que Caroline n'est pas revenue dans un état de bon fonctionnement
#
- mode: single
  alias: "Notification sur erreur de Caroline"
  description: "Notification sur erreur de Caroline"
  trigger:
    - platform: state
      entity_id: sensor.automower_status
  condition: []
  action:
    - choose:
        - conditions:
            - !include ../conditions/automower_in_mode_alert.yaml
          sequence:
            - repeat:
                while:
                  - !include ../conditions/automower_in_mode_alert.yaml
                sequence:
                  - service: notify.mobile_mon_phone
                    data: 
                      message: >-
                        ⚠️ Caroline en erreur code : {{ trigger.to_state.state }} !
                  - delay:
                      hours: 0
                      minutes: 10
                      seconds: 0
                      milliseconds: 0
            - condition: not
              conditions:
                - !include ../conditions/automower_in_mode_normal.yaml
      default: []

Ça pourra aider certains !

Après si quelqu’un pouvait m’indiquer une doc où l’on peut trouver les différents attributs des triggers, ça m’arrangerait que tâtonner … :grin:

Je partirai de cette doc là, même si parfois elle me donne mal au crâne :stuck_out_tongue:

1 « J'aime »