Sur 2 actions n'en exécuter qu'une si on est entre 2 heures

Mon problème

J’ai actuellement une automation qui m’informe lorsque un éclair est détecté dans un rayon de 100 kms autour de chez moi (ça me permet de ranger ma tondeuse :grin:).
Elle m’informe sur 2 canaux de diffusion : mon téléphone et Alexa.

Mon problème, lorsqu’un orage gronde en pleine nuit, ça gonfle un peu :face_with_symbols_over_mouth: d’entendre Alexa à chaque éclair.

Ma configuration

Je souhaiterais déclencher l’annonce Alexa uniquement entre 8h et 22h.
Je n’arrive pas à séparer les 2 action envoi du message via Alexa et envoi du message sur le téléphone.

Voici le code actuel de l'automation :
#
# https://www.home-assistant.io/docs/automation/trigger/#zone-trigger
#
- alias: "Notification de détection d'éclair"
  description: "Notification de détection d'éclair dans un rayon de 100 kms"
  trigger:
  - platform: state
    entity_id: sensor.blitzortung_lightning_counter
  condition:
    !include ../conditions/lightning_detected.yaml
  action:
  - service: script.notify_alexa_salon
    data:
      message: >-
        Un éclair a été détecté !
  - service: notify.mobile_app_sm_a530f_sg
    data: 
      message: >-
        Un éclair a été détecté !
Mon script de notification Alexa :
#
# Script de notification sur Alexa
#
# service: notify.alexa_media
# data:
#   message: contenu du massage lu
#   target: media_player.mr_echo_dot
#   data:
#     type: tts

notify_alexa_salon:
  alias: Announce Alexa
  description: 'Envoi une notification sur Alexa'
  fields:
    message:
      description: 'Le contenu du message'
      example: 'La lampe est allumée !'
  sequence:
  - service: media_player.volume_set
    data:
      entity_id: media_player.mr_echo_dot
      volume_level: '0.5'
  - service: notify.alexa_media_mr_echo_dot
    data:
      data:
        type: announce
      message: "{{ message }}"
      target: media_player.mr_echo_dot

Si je met une condition time avec un after/before, les 2 actions sont conditionnées… :thinking:

Une idée ?
Est-ce qu’on peut directement mettre cette condition d’interval horaire dans le script pour qu’il ne s’exécute pas entre 22h et 8h ? (ça m’éviterait de recopier la condition dans tout ces appels)

et en mode ne pas déranger, ca sonne quand même sur le téléphone ?

Le problème n’est pas sur le téléphone mais sur Alexa.

Je met effectivement mon téléphone sur « Ne pas déranger » mais pas Alexa donc, à chaque éclair, Alexa y va de son annonce « Un éclair a été détecté ! »

il doit y avoir un moyen de dire a alexa qu’il fait nuit !!!

La fonctionnalité Ne pas déranger bloque les notifications, telles que les appels et les messages, adressées à votre appareil. Elle ne bloque pas vos alarmes, minuteurs ou rappels.

J’ai essayé de lui dire que j’allais me coucher mais elle comprend rien :rofl:

Salut,

ça se gère tout simplement pas avec une condition de plus ?

  condition:
    !include ../conditions/lightning_detected.yaml
    - condition: state
      entity_id: sensor.heuredudodo
      state: "non"

Je fais ce genre de trucs sous NR
Google ‹ bonne nuit › => ça met mon sensor à jour => NR se sert du statut pour bloquer les messages

PS: J’étais déjà pas fondementalement convaincu par la structure du YAML pour l’automatisation, mais avec l’inclusion de fichiers ça me semble encore plus le b* à debugger

Et cette condition, je la place dans le script ou l’automation ?

Oui dans l’automatisation, puisque tu n’as pas un système de notification générique, il faut gérer ça dans (chaque) l’automatisation.

En fouillant loin sur le Web, j’ai trouvé cet implémentation avec une condition dans un script, à voir si ça fonctionne en tout cas la validation du YAML passe.

Mon script Alexa
#
# Script de notification sur Alexa
#
# service: notify.alexa_media
# data:
#   message: Annonce d'alexa
#   target: media_player.mr_echo_dot
#   data:
#     type: tts
notify_alexa_salon:
  alias: Announce Alexa
  description: 'Envoi une notification sur Alexa'
  fields:
    message:
      description: 'Le contenu du message'
      example: 'La lampe est allumée !'
  sequence:
    - condition: time
      after: "08:00:00"
      before: "22:00:00"
    - service: media_player.volume_set
      data:
        entity_id: media_player.mr_echo_dot
        volume_level: '0.5'
    - service: notify.alexa_media_mr_echo_dot
      data:
        data:
          type: announce
        message: "{{ message }}"
        target: media_player.mr_echo_dot
Et son appel dans l'automation
#
# https://www.home-assistant.io/docs/automation/trigger/#zone-trigger
#
- alias: "Notification de détection d'éclair"
  description: "Notification de détection d'éclair dans un rayon de 100 kms"
  trigger:
  - platform: state
    entity_id: 
      - sensor.blitzortung_lightning_counter
      - sensor.blitzortung_lightning_distance
  condition:
    !include ../conditions/lightning_detected.yaml
  action:
  - service: script.notify_alexa_salon
    data: 
      message: >-
        Un éclair a été détecté !
  - service: notify.mobile_app_sm_a530f_sg
    data: 
      message: >-
        Un éclair a été détecté !

Il me reste juste à ajouter la variabilisation de la distance dans le message pour avoir un message :
"Un éclair a été détecté à xx kms !

Et je n’arrive pas à récupérer la valeur de sensor.blitzortung_lightning_distance:thinking:

Et pourquoi tu met pas ta condition dans le bloc condition de ton automatisation ? (Au lieu d’une action dans ton script)

Parce qu’à chaque fois que le script sera appelé, la condition sera vérifier.

Ce que je cherche, c’est que la notification par Alexa ne me réveille pas la nuit (entre 22h et 8h) quelque soit la provenance de l’annonce, donc, on mettant la condition dans le script plutôt que dans l’automation, je suis sûr que chaque automation sera « testée » sur la condition avant d’être envoyée sur Alexa.

Et j’ai pu testé cette nuit, ce script fonctionne à moitié car j’ai eu à mon réveil 43 notifications sur mon téléphone « Un éclair a été détecté ! » et aucune notification par Alexa durant la nuit mais à 8h13, va savoir pourquoi, Alexa s’est affolée et à lancer toutes les annonces à la suite … :sob:. J’ai dû la débrancher tellement ça gonflait…

Pour améliorer, je vois 2 solutions :

  • 1ère solution : il faudrait que je limite les annonces à 1 toutes les 30 minutes.Si une annonce de ce type « Eclair a été détecté ! » a été faite à 9h23, la prochaine de ce type ne pourra être faite qu’à 9h53.
  • 2nde solution : avoir un accusé réception via un bouton sur la notification du téléphone pour désactiver temporairement les annonces pour une durée de « 15min », « 30min », « 1h », « 2h », « 12h », « 24h ».

Salut

Sur le principe tu as raison, mais vu le contenu de l’annonce (avec les fields en dur etc) tu es certain que c’est appelé depuis ailleurs ? Ou alors ces fields sont surchargeables ?
Du coup, mettre le test avant de rentrer dans le script d’annonce irait dans le sens de l’économie des ressources (pas beaucoup d’aller plus loin on sait déjà que ça ne sera pas annoncé)

Oui, les messages sont surchargeables via l’automation et l’appel au script. Pour des soucis de clarté, je n’ai pas mis les fichiers séparés des messages mais effectivement, je passe par des messages différents qui sont en fonction de l’automation qui lance le script.

1 « J'aime »

Personnellement j’aime pas trop les trucs qui se réécrasent (debug tout ça c’est vite le bordel) mais si tu t’y retrouve c’est l’essentiel

Plus je lis la doc (le problème de mon anglais limité et les outils de traduction de temps en temps étrange :thinking:) et plus je me dit que je dois mélanger trigger et condition

Le but de mon automation :

Envoyer une notification Eclair détecté à xx kms ! lorsqu’un éclair est détecté à moins de 50 kms

  • sur mon téléphone tout le temps
  • et sur Alexa uniquement entre 8h et 22h

Si possible ajouter un lien cliquable à la notification sur le téléphone pour désactiver la notification pour 30min ou 12h (mais on verra après :wink:).

Mon code actuel

automations/list/lightning_detected_notify.yaml
#
# https://www.home-assistant.io/docs/automation/trigger/#zone-trigger
#
- alias: "Notification de détection d'éclair"
  description: "Notification de détection d'éclair dans un rayon de 100 kms"
  trigger:
  - platform: state
    entity_id: 
      - sensor.blitzortung_lightning_counter
      - sensor.blitzortung_lightning_distance
  condition:
    - !include ../conditions/lightning_detected.yaml
    - !include ../conditions/lightning_detected_near.yaml
  action:
  - service: script.notify_alexa_salon
    data: 
      message: ../messages/lightning_detected.yaml
  - service: notify.mobile_app_sm_a530f_sg
    data: 
      message: ../messages/lightning_detected.yaml
automations/conditions/lightning_detected.yaml
#
# Condition : Un éclair à été détecté
#
alias: "Un éclair à été détecté"
condition: numeric_state
entity_id: sensor.blitzortung_lightning_counter
above: 0
automations/conditions/lightning_detected_near.yaml
#
# Condition : Un éclair à été détecté a moins de 50 kms
#
alias: "Un éclair à été détecté à moins de 50 kms"
condition: numeric_state
entity_id: sensor.blitzortung_lightning_distance
below: 50
automations/messages/lightning_detected.yaml
#
# Message : Un éclair a été détecté à xx kms
#
message: 'Un éclair a été détecté à {{ trigger.<sensor.blitzortung_lightning_distance>.value }} !'

Les sensors utilisés

Mes questions

  1. Est-ce que je dois utiliser les 2 entity_id dans le trigger sachant que je n’utilise que la distance dans le message ?
  2. Comment faire pour ajouter la distance en variable du message ci-après si je suis obligé de mettre les deux sensor dans mon trigger ?
    'Un éclair a été détecté à {{ trigger.<sensor.blitzortung_lightning_distance>.value }} !'

Edit :
Et :face_with_symbols_over_mouth:, j’ai atteint la limite des 500 messages push par jour avec toutes ces alertes, je peux même pas testé via les outils de dev mon nouveau code… :sob:

Logger: homeassistant.components.mobile_app.notify
Source: components/mobile_app/notify.py:73
Integration: Application mobile (documentation, issues)
First occurred: 09:11:59 (1 occurrences)
Last logged: 09:11:59

mobile_app push notification rate limits for SM-A530F-SG: 501 sent, 500 allowed, 0 errors, resets in 16:48:00

Je n’ai pas la réponse au problème. Mais, là-dessus, il me semble que la « bonne » traduction c’est

trigger = quand
condition = si

Quand il se passe un truc (trigger) et si le machin (condition) a telle propriété alors action.

PS: Perso le yaml :nauseated_face: donc NodeRed :heart_eyes:

1 « J'aime »