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.

Mes capteurs de fumée

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.

blueprint:
  name: Fibaro Smoke alarm
  description: Sends a notification to the given phones if an alarm happens
  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: Test sensor
      description: Select a test sensor to be alerted when the sensor is tested
      selector:
        entity:
          device_class: problem
Nos 3 capteurs pour le blueprint.

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.

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:
        ...
    - conditions:
        - condition: state
          entity_id: !input smoke_sensor_test
          state: 'on'
      sequence:
        ...
  default: 
    ...
J'ai enlevé les parties redondantes

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.

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"
Exemple d'input

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