Alarme incendie et notifications
Bon, sans partir dans l'explication qu'un incendie c'est pas drôle blablabla, dans ce post je vais vous montrer comment je reçois mes notifications sur mon téléphone si l'un de mes capteurs incendie est déclenché.
Alors il faut savoir que j'ai des capteurs incendie Fibaro un peu partout chez moi. Je les aime bien, ils sont plutôt design et font leur boulot très bien (ça réveille en tout cas). Du coup cette automation va être basé sur ces capteurs.
Leur but premier est de notifier les gens présents d'un incendie, pour cela pas besoin d'application, ils sont autonomes. Le deuxième but est de nous avertir en cas d'incendie si nous ne sommes pas à la maison. En espérant que cela nous fasse gagner de précieuses minutes le jour où on en aurait besoin. Donc pour ce deuxième but on va créer une automation (enfin une par capteur) qui enverra un message prioritaire à tous les téléphones de la famille. Vu que j'ai plusieurs capteurs, on va faire un blueprint afin d'avoir tout le code a un seul endroit.
Je vais vous expliquer petit a petit, et vous aurez le code complet à la fin.
Déclencheurs
Commençons par le début, on veut avoir une alarme si le feu se déclare. Mais pas seulement. On va profiter aussi d'avoir des alertes si on enlève le capteur ou qu'on lance une alarme de test. Pour cela il nous faudra 3 capteurs mis a disposition par ZwaveJS: smoke, tamper et test.
On va utiliser ces 3 capteurs comme trigger:
trigger:
- platform: state
entity_id: !input smoke_sensor
to: 'on'
- platform: state
entity_id: !input smoke_sensor_tamper
to: 'on'
- platform: state
entity_id: !input smoke_sensor_test
to: 'on'
Et voilà. On a nos déclencheurs qui seront choisis à la création de l'automation.
Notification
Maintenant, notifions! J'ai fait un script de notification dans le dernier article, mais vu que l'on veut faire des alarmes, on veut pouvoir envoyer une notification critique. Pour cela je vais dupliquer mon script et faire une version urgente.
Je ne vais pas tout détailler du script, vous trouverez les infos dans cet article.
Afin d'avoir une alarme, j'ai ajouté deux parties:
- j'ai ajouté les options push: celles-ci permettent d'outrepasser les modes silence et ne pas déranger de iOS et d'avoir une alarme sonore avec le volume à fond.
- j'ai ajouté toutes les options à partir de channel
pour définir une alarme Android. Celle-ci n'outrepasse pas les modes ne pas déranger et silence par défaut. Vous trouverez plus d'info sur comment outrepasser cette limitation dans la doc. Cela dépend des versions Android.
data:
title: "{{ title }}"
message: "{{ message }}"
data:
actions:
- action: "URI"
title: "View More"
uri: "{{ url }}"
entity_id: "{{ camera_entity }}"
push:
sound:
name: "default"
critical: 1
volume: 1.0
channel: Alarme
color: red
importance: high
ledColor: red
persistant: true
sticky: false
tag: alarme
vibrationPattern: 100, 2000, 100, 2000, 100, 2000, 100, 2000
Voilà, mon script de notification est à jour, maintenant on va revenir à notre blueprint.
Et là, ça va se corser un peu, je vais commencer par l'action qui s’exécutera lorsqu'un trigger a lieu. Vu que l'on a 3 trigger, on va utiliser une action choose
qui permet d'effectuer différentes actions en fonction du trigger.
Dans le choose
, on lui donne d'abord la condition pour executer l'action (if) ensuite on défini l'action dans sequence
. Notre condition est donc le trigger (s'il s'agit d'une alarme, d'un test, ou si le capteur a été enlevé de son support). Ensuite pour l'action, ici j'utilise le script de notification. pour lequel je lui donne les titres, et à qui j'envoie la notification. J'ai choisi ici de ne pas mettre de variables, mais c'est une solution si nécessaire. Les données commençant avec !input
doivent être définies au début du blueprint.
Il suffit d'appliquer la même chose pour les 2 autres trigger et nous avons fini!
Encore une chose, j'ai décidé de mettre un message dans la partie default
du choose
si par hasard aucune des conditions ne valide. C'est juste par sécurité et n'est pas obligatoire.
Le code final
Bon, le code étant dense, je ne vous ai pas tout mis pour les explications, mais le voici enfin. N'hésitez pas a relire certaines parties si ce n'est pas tout clair, ou de poser des questions ci-dessous. Vous le trouverez aussi en anglais sur le forum.
blueprint:
name: Fibaro Smoke Alarm
description: Sends a notification via the notification engine if there is an alarm
domain: automation
input:
smoke_sensor:
name: Fire sensor
description: The smoke sensor that will be used to detect fire
selector:
entity:
device_class: smoke
smoke_sensor_tamper:
name: Tamper sensor
description: Select a tamper sensor to be alerted when the sensor is removed from it's place
selector:
entity:
device_class: safety
smoke_sensor_test:
name: Capteur de test
description: Select a test sensor to be alerted when the sensor is tested
selector:
entity:
device_class: problem
notif_engine_script:
name: Notification engine script
selector:
entity:
domain: script
critical_notif_engine_script:
name: Critical notification engine script
selector:
entity:
domain: script
message_content:
name: Notification message
description: Message a envoyer en cas d'incendie
default: "Un incendie est détecté: Vérifiez les informations et appelez le 144"
message_content_tamper:
name: Notification message
description: Message a envoyer lorsque le capteur est enlevé de son support
default: "Un capteur incendie à été enlevé"
message_content_test:
name: Notification message
description: Message à envoyer lors d'un test
default: "Le capteur incendie à été testé"
message_content_default:
name: Notification message
description: Message par défaut, ne devrait jamais être utilisé, et est envoyé en critique
default: "Il s'est passé quelques chose, vérifiez!"
sensor_page_url:
name: Lovelace sensor page
description: Page lovelace que l'on souhaite afficher
default: "/lovelace/main"
trigger:
- platform: state
entity_id: !input smoke_sensor
to: 'on'
- platform: state
entity_id: !input smoke_sensor_tamper
to: 'on'
- platform: state
entity_id: !input smoke_sensor_test
to: 'on'
condition: []
action:
choose:
- conditions:
- condition: state
entity_id: !input smoke_sensor
state: 'on'
sequence:
- service: script.notification_engine_critical
data:
who: family_app
title: Alarme incendie!
message: !input message_content
url: !input sensor_page_url
- conditions:
- condition: state
entity_id: !input smoke_sensor_tamper
state: 'on'
sequence:
- service: script.notification_engine
data:
who: family_app
title: Capteur incendie enlevé!
message: !input message_content_tamper
url: !input sensor_page_url
- conditions:
- condition: state
entity_id: !input smoke_sensor_test
state: 'on'
sequence:
- service: script.notification_engine
data:
who: family_app
title: Test capteur incendie
message: !input message_content_test
url: !input sensor_page_url
default:
- service: script.notification_engine_critical
data:
who: family_app
title: Alarme incendie!
message: !input message_content_default
url: !input sensor_page_url
Utilisation dans Home Assistant
Bon, c'est bien beau tout ça, mais comment l'utiliser dans home assistant?
Solution simple: cliquez sur le bouton ci dessous et ignorez l'étape suivante.
Sinon, mettez le blueprint dans le dossier config/blueprint/incendie
puis rechargez les automations.
Ensuite allez dans l'onglet Blueprints de HA trouvez Fibaro Smoke Alarm
et cliquez sur Créer une automation
. Vous devriez avoir ce formulaire qui s'ouvre:
Il ne vous reste plus qu'a remplir les cases et cliquer sur sauvegarder!
Enlevez l'un de vos capteurs de son support et vous recevrez une notification.
Répétez pour tout vos capteurs de fumée :)
Vous pouvez trouver ce code et d'autres pour Home Assistant sur mon GitLab!
Photo by Dave Phillips on Unsplash