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 ).
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 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…
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)
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.
ç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
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.
#
# 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 …
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 … . 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 ».
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.
Plus je lis la doc (le problème de mon anglais limité et les outils de traduction de temps en temps étrange ) 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 ).
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
#
# 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 }} !'
Est-ce que je dois utiliser les 2 entity_id dans le trigger sachant que je n’utilise que la distance dans le message ?
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 , 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…
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