Unifi Protect & Alexa

Unifi Protect pour gérer ses caméras (Unifi) de surveillance c'est top. Sauf qu'on est face à une solution professionnelle et qu'en se sens ils ne se préoccupent pas de l'intégration avec Alexa. J'ai récemment acheté un Alexa Echo Show 5 pour remplacer mon radio réveil et je me disait que ce serait bien que je puisse lui demander de voir le flux vidéo de mes caméras, fonctionnalité non proposée de base par Unifi Protect.

En cherchant un peu j'ai trouvé un service qui pourrait m'aider, service par ailleurs pas réservé aux caméras Unifi puisque basé sur le protocole RSTP. Et cerise sur le gâteau Monocle va me permettre de demander à Alexa de voir le flux de mes caméras, sans pour autant que ce flux circule à l'extérieur de mon réseau local. Pour y parvenir il faut faire tourner localement un petit service (Linux, Windows, OSX, Docker, Synology) à caser sur une machine existante qui servira de relais, Monocle ne servant alors qu'çà aiguiller les requêtes et les flux entre les serveurs et devices Alexa et les caméras locales (via le NVR pour Unifi Protect).

On part bien sur du principe que les caméras sont installées, et fonctionnent correctement avec Unifi Protect dans notre cas. 

La première chose à faire sera de se créer un compte sur le site https://www.monoclecam.com. Ensuite on va sur la page de configuration d'Unifi Protect activer le flux RSTP (le medium me semble suffisant) et on copie le lien correspondant, que l'on pourra au passage tester en se servant de VLC.

Lien que l'on reportera sur le dasboard Monocle lors de la création de la caméra, avec simplement son adresse IP locale (rien à faire coté routeur puisque la passerelle Monocle servira de relais) et dans notre cas le TAG @tunnel, cette balise sera utilisée pour demander à Monocle de transférer les connexions d'un appareil Alexa vers la caméra de votre réseau local. Cela indique à Monocole de créer une connexion tunnel sécurisée directement entre la caméra et l'appareil Alexa sans faire transiter le flux à l'extérieur.

Il va maintenant falloir configurer la passerelle locale. Cette passerelle communique avec le Skill Alexa hébergé dans le cloud Monocle et qui utilise les détails configurés dans les étapes ci-dessus pour dire à mon Echo Show comment communiquer avec ma caméra locale. La documentation fournie par Monocle contient d'excellentes instructions sur la façon de configurer la passerelle sur différents systèmes différents, mais dans mon exemple, je vais simplement la configurer sur une VM Windows Server disponible pour ce test.

J'ai donc simplement téléchargé la version x64 de la passerelle, que j'ai décompressée dans le répertoire c:\monocle, ensuite je suis allé créé et télécharger la clé API sur mon compte Monocle et je l'ai copiée dans ce même répertoire. Il suffit ensuite de lancer monocle-gateway.exe en ligne de commande. Et voilà ! (en mode production on pourra bien sur installer cette passerelle en tant que service Windows comme décrit dans la documentation).

Coté Alexa on installe le Skill Monocle depuis l'application mobile, ce qui permettra de faire remonter les cameras dans Alexa et de les affecter à des pièces, et ensuite on demande à Alexa sur l'Echo Show de vous montrer la caméra, et miracle ça marche du premier coup !

Sources

Unifi Protect avec un RPI

La solution Unifi Protect fonctionne bien mieux que l’ancienne version Unifi Video. Sauf qu’un client vous demandera toujours ce qui n’existe pas… Si on peut très facilement visionner ses cameras sur un navigateur (astuces inside : 1 - 2) ou un application mobile, mais rien n’est prévu sur un TV isolé, sauf à connecter un PC. Et un PC n’est pas franchement ce qui sera le plus fiable sur la durée. Je suis donc allé chercher du coté de chez Raspberry, le nano ordinateur à tout faire et on y trouve un petit projet simplement nommé DisplayCameras

L’installation devait être simple mais m’a tout de même un peu cassé la tête, en fait simplement parce que j’ai pris une image Raspbian trop récente pour que tout se déroule normalement, donc voici : 

  1. On télécharge une image Raspbian, la Buster lite fera très bien l’affaire (Ou simplement une Stretch ici qui sera compatible avec le script). Avec Etcher (ou autre chose) on prépare la carte µSD
  2. Une fois terminé, on insère la carte dans le RPI et on y connecte un clavier et le réseau
  3. Une fois qu’il a démarré on lance sudo raspi-config et on configure ces options :

(3) Boot Options > Wait For Network at Boot
(4) Localisation Options > Change Timezone > (tant qu’à y être aussi votre langue et clavier…)
(5) Interfacing Options >  SSH >  Yes
(7) Advanced Options > Expand File System
(7) Advanced Options > Memory Split > 256

  1. On en profite pour faire une petite mise à jour
    sudo apt-get update && sudo apt-get upgrade -y && sudo reboot
  2. A ce stade je recommande de passer l’IP en statique avec sudo nano /etc/dhcpcd.conf (on enlève les # et on complete). Mais avant allez repérer le nom de votre interface avec un ip a car eth0 ça devait trop simple… Et ensuite on redémarre avec un sudo reboot.

# Example static IP configuration:
interface enxb827eb1aa100
static ip_address=192.168.210.35/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.210.1
static domain_name_servers=192.168.210.12 8.8.8.8

  1. A partir de là on oublie le clavier du RPI et on passe en SSH, avec Teminus par exemple. C’est plus pratique pour la copié / collé. On se connecte avec le username / password par defaut si on ne l’a pas changé plus haut (ce serait bien de le faire…) :
    Username = pi / Password = raspberry 
  1. Une fois connecté on va télécharger le code qui nous intéresse, le décompresser et enfin l’installer...

wget https://github.com/Anonymousdog/displaycameras/archive/0.8.3.3.zip
unzip 0.8.3.3.zip
cd displaycameras-0.8.3.3
chmod +x install.sh
sudo ./install.sh

Sauf que comme le script d’installation n’est pas fait pour l'ultime version de Rasbian, il en oublie l'essentiel. Il va falloir ruser un peu :

sudo apt-get update
sudo apt-get install omxplayer

Maintenant on va configurer le flux de nos caméras avec sudo /etc/displaycameras/layout.conf. Ce fichier contient également tous les réglages possibles de positionnement, mais par défaut il est configuré pour 4 caméras sur un écran HD. La principale partie qui nous intéresse est celle-ci :

camera_feeds=( \
"rtsp://192.168.1.2:7447/i6m4f1act8nwtp4bg0veqw4u_1" \
"rtsp://192.168.1.2:7447/ifkjakg27dboh5ho6ull349u_1" \
"rtsp://192.168.1.2:7447/n7jt8fimlqvm6o0a0nwjdal6_1" \
"rtsp://192.168.1.2:7447/9lqpgwvrusvk8u0br7n3t2ki_1" \

CameraDisplay ne s’appuie pas sur Unifi Protect mais sur les flux RTSP qui sont configurables en option dans Unifi Protect au niveau des réglages de chaque caméras et ce en différentes résolutions. J’ai fait mes tests sur un RPI2, je me suis donc abstenu de passer en full HD, mais c’est jouable sur un RPI3. Dans les liens ci dessous vous trouverez d’autres réglages, tel que la rotation d’images si on dispose de plus de 4 caméras par exemple…

A ce stade on est pressé de voir le résultat, alors on lance sudo systemctl restart displaycameras.service. On peut aller brancher le RPI au dos de la TV sans clavier, il redémarrera tout seul avec la bonne config. Voilà !

Sources