Utilisation de la passerelle web Signal avec Home Assistant

En écrivant ces quelques lignes dans mon journal de bord, je m'aperçois que cette petite installation commence finalement a dater. Toutefois, on peut considérer ici qu'il s'agit ici d'une bonne nouvelle. Déformation professionnelle oblige, j'ai plutôt tendance à me débarrasser “vite fait, bien fait” de tout ce qui n'est pas très fiable.

Bref. La suite ?

Pourquoi Signal ?

Cela faisait donc longtemps que je cherchais un système de notifications (fiable ... j'insiste !) pour lamaisonquiparle.

Afin de faire rire l'internet (vite fait) un certain nombre d'éléments communiquent directement sur Mastodon (@lamaisonquiparle). Toutefois, il me fallait bien aussi un canal plus discret pour des raisons évidentes de vie privée.

Aussi, je souhaitais profiter de ce même canal pour envoyer des commandes de contrôle en plus de l'interface (douteuse) de Home Assistant. Je dois garder cette vielle habitude de l'époque des bots IRC. Il aurait tout de même été possible de les poster publiquement certes, mais l'idée d'avoir débat de troll infini lorsque je réglerai la consigne de mon chauffage +2 degrés au-dessus de la normale, me hante beaucoup.

La révélation m'est apparue après avoir convaincu un bon nombre de mes proches à finalement migrer de toutes ces saloperies de Whatsapp, Messenger, Hangouts ... vers Signal !

Si seulement, ma maison pouvait elle aussi communiquer sur ce même canal, je m'évitais un nouveau logiciel et remplissait haut la main le cahier des charges (code ouvert, vie privée, sécurité).

Dans mon cas, la maisonquiparle dispose de sa propre ligne SIP. Pas mal obligatoire pour uns certains nombres de projets connexes qui apparaîtront en temps voulus dans ce journal.

Le numéro de ligne SIP sera donc son identifiant Signal. Le numéro doit être saisi dans vos contacts et synchronisé dans Signal.

Non (à ma connaissance), vous ne pouvez pas utiliser votre identifiant personnel Signal avec la passerelle.

A ce sujet, veiller aussi à avoir la possibilité de lire ou router les SMS entrants sur ce numéro. Dans mon cas, j'ai juste activé une redirection vers mon numéro de téléphone personnel.

Le cerveau de la maison est un ordinateur recyclé (type PC bureautique) avec CentOS. Afin de préserver un système propre et stable, l'ensemble des applications tierces sont donc des conteneurs. Mettre la merde dans des boîtes, c 'est ce que l'on fait de mieux en 2019.

Le code source de la passerelle et le build de l'image sont disponibles sur Gitlab.

La documentation est facile à suivre pas à pas. Il suffit de créer 2 volumes persistants et de s'authentifier via un code reçu par le SMS le confirmation.

# docker volume ls
DRIVER              VOLUME NAME
[...]
local               signal-web-gateway_config
local               signal-web-gateway_storage

La seule différence avec la documentation du projet dans mon cas sera sur le choix d'utiliser le démarrage automatique des applications par Docker lui-même (restart: always) et non par systemd ou supervisord, afin d'être homogène avec le reste de mon installation.

Le fichier docker-compose prend alors cette forme:

version: '3.2'
services:
  signal-web-gateway:
    image: registry.gitlab.com/morph027/signal-web-gateway:master
    restart: always
    ports:
    - 5000:5000
    volumes:
      - config:/signal/.config
      - storage:/signal/.storage
    network_mode: host
volumes:
  config:
  storage:

Une fois la passerelle installée, nous pouvons utiliser cURL pour tester le service:

$ curl -X POST -F "to=+1__________" -F "message=Test de message." http://1.2.3.4:5000

Ok c'est bon, la suite mec.

Configurer Home Assistant

Pour envoyer les notifications depuis Home Assistant, il y a plusieurs méthodes. Le plus simple pour illustrer l'exemple est de configurer une commande shell dans le fichier de configuration home-assistant/config/configuration.yaml.

shell_command:
  signal_porte_open: /usr/bin/curl -X POST -F "to=+1__________" -F "message=Porte de garage ouverte" http://1.2.3.4:5000

Ensuite il suffit d'ajouter une règle de déclenchement automatique dans home-assistant/config/automations.yaml. Dans mon cas, il s'agit d'un changement d'état du capteur installé pour la porte de garage. Passage de off à on (porte fermée vers porte ouverte).

- id: '123456789'
  alias: Notification → Signal → Garage → Open
  trigger:
  - entity_id: binary_sensor.garage_door_sensor
    platform: state
    from: 'off'
    to: 'on'
  condition: []
  action:
  - alias: ''
    service: shell_command.signal_porte_open

Exemples de notifications sur Signal

^EOF

#signal #homeassistant