Accueil | Niveau de difficulté | Avancé | Caméra de surveillance MQTT Raspberry Pi Zero W et Node-RED pour Home Assistant

Caméra de surveillance MQTT Raspberry Pi Zero W et Node-RED pour Home Assistant

raspberry pi camera v2.1

Depuis la version 1.3, le Raspberry Pi Zero possède un connecteur caméra sur lequel on peut brancher la caméra 8MP du Raspberry Pi au moyen d’un adaptateur. Home Assistant supporte de nombreuses caméras. Dans ce projet, nous allons fabriquer – très rapidement – une mini caméra de surveillance à l’aide de Node-RED. Node-RED va nous servir à prendre un cliché à intervalle régulier et envoyer l’image à Home Assistant par un message MQTT.

Pourquoi une caméra MQTT pour Home Assistant ?

Home Assistant supporte de nombreux types de caméra (liste complète). Depuis la version 0.46, les caméras Arlo de Netgear sont partiellement supportées.

Pour fabriquer une caméra de surveillance DIY à partir d’un Raspberry Pi Zero W, on a donc plusieurs solutions à notre disposition :

Pour écrire cet article, j’ai commencé (probablement comme tout le monde !) à installer Motion sur mon Raspberry Pi Zero et intégré à Home Assistant le flux vidéo à l’aide du composant Generic MJPEG IP Camera. Mais ça ne fonctionne pas. Actuellement, (sauf erreur de ma part), Home Assistant n’affiche aucune image sur les vues (view). Il n’y a que sur la vue de détail que l’image (flux vidéo) est affichée.

Je me suis donc tourné vers MQTT. L’avantage de MQTT c’est qu’il est possible de créer une caméra de surveillance connectée intelligente. En utilisant MQTT pour communiquer avec Home assistant, on pourra ajouter d’autres fonctions à la caméra:

  • Allumer un éclairage
  • Brancher un haut parleur  et diffuser des enregistrements audio : alarme, aboiement de chien, sirène…
  • Déclencher l’ouverture d’un portail ou d’un portillon
  • Transformer la caméra en portier vidéo

Pourquoi Node-RED. Tout simplement parce qu’il n’y aura absolument aucune programmation à faire ! Trois nodes suffisent pour créer une caméra de surveillance connectée !

Matériel utilisé

Il existe trois versions du Raspberry Pi Zero. Si vous prenez le train en route, voici un petit résumé

  1. La première version du Raspberry Pi Zero est commercialisée au prix de 5€ en 2015.
  2. Quelques mois après, la fondation ajoute un connecteur caméra. C’est la version 1.3.
  3. En 2017, le Raspberry Pi Zero W intégrant le WiFi et le Bluetooth 4.0 est lancé au prix de 11€. Il est maintenant officiellement distribué en France par Kubii ou sous la forme de kit sur Amazon.

raspberry pi zero camera surveillance node-red home assistant

Quelle caméra choisir pour le Raspberry Pi Zero W ?

Voici quelques modèle de caméra que vous pouvez acheter pour fabriquer une caméra de surveillance à partir d’un Raspberry Pi Zero. Le modèle NoIR est le mieux adapté car il permet avec un éclairage complémentaire (2 Led infra rouge par exemple) d’obtenir une caméra de surveillance nocturne jusqu’à 10 m environ.

Caméra v2.1 couleur officielle RaspberryCaméra v2.1 NoIR (1) officielle RaspberryCaméra asiatique NoIR (1)

(double éclairage à Led)

raspberry pi camera v2.1raspberry pi v2.1 noir camera officialnoir compatible camera raspberry pi
ConnecteurCSICSICSI, compatible Raspberry
Dimensions25 × 24 × 9 mm25 × 24 × 9 mm25 x 24 x 26 mm

25 x 75 x 26mm (avec Led)

Résolution8MP

3280 × 2464 pixels

8MP

3280 × 2464 pixels

5MP

2592 × 1944 pixels

CapteurCMOS Sony IMX219CMOS Sony IMX219CMOS OmniVision OV5647
Résolution vidéo max.1080p301080p301080p30
Taille du capteur1/4 pouces1/4 pouces1/4 pouces
DriverV4L2 V4L2 V4L2
Focale3.60 mm3.60 mm3.60 mm
Champ de vision53°(horiz.) x 41°(vert.)53°(horiz.) x 41°(vert.)75,7° (horiz.)
Liens commerciauxAmazon, environ 26€

Banggood, environ 28€

Amazon, environ 33€

Banggood, environ 29€

Aliexpress, environ 18€

Banggood, à partir de 15€

Le connecteur caméra qui équipe le Raspberry Pi Zero W est différent du Raspberry Pi 3 (ou antérieur). Il existe une version spécifique au Zero. En fait, c’est la nappe de connexion qui change. Si vous avez déjà une caméra ou un clone asiatique, vous pouvez acheter un nappe compatible pour environ 2€.

adaptateur nappe camera raspberry pi zero 1.3

Préparer le Raspberry Pi Zero W

Si vous venez d’acheter votre Raspberry Pi Zero W, suivez ces étapes pour préparer votre système :

  1. Installer Raspbian Jessie Lite (sans écran ni clavier) sur un Raspberry Pi Zero W
  2. Installer Node-RED sur Raspbian Jessie Lite
  3. Installer Home Assistant sur un Raspberry Pi, Orange Pi
  4. Installer un broker (serveur) MQTT, par exemple Mosquitto

Activer la caméra

Commencez par activer la caméra à l’aide de raspi-config

Allez à l’option (5) Interfacing Option

raspberry pi i2c raspi-config

Puis activez le module caméra (P1)

raspberry pi i2c activate raspi-config

Ceci fait, lancez la commande suivante pour changer le driver de la caméra

On rend permanent le chargement du driver au démarrage en exécutant

Maintenant, relancez le système pour activer les modifications

Installer la librairie Python Picamera

Pour ce projet, nous allons utiliser le flow node-red-contrib-camerapi qui permet de prendre un cliché à l’aide de la librairie Python Picamera (présentée en détail dans ce tutoriel). Exécutez cette commande pour l’installer.

Installer le module node-red-contrib-camerapi

Ouvrez le gestionnaire de palette

node-red manage palette

Saisissez camera dans le champ de recherche puis lancez l’installation du module en appuyant sur install.

camera raspberry pi zero node-red

Tout est prêt pour coder votre caméra de surveillance.

Capture vidéo avec Node-RED

Maintenant que tout fonctionne, nous allons utiliser Node-RED pour capturer une image à intervalle régulier. MQTT n’est pas conçu pour supporter un flux vidéo. D’autre part, comme les messages vont circuler sur votre réseau local et potentiellement être envoyés à votre smartphone lorsque vous quittez votre domicile, il est nécessaire de limiter la taille de l’image. C’est un peu dommage lorsqu’on possède une caméra 8MP, mais on va devoir limiter la résolution. Si vous utilisez l’application mobile pour iOS, limitez à 320 x 240 pixels. Pour un utilisation uniquement sur un réseau local, vous pouvez grimper la résolution à 640 x 480 pixels.

C’est parti pour la programmation. Déposez un node Inject. Choisissez le type repeat (répéter) et indiquez l’intervalle de prise de vue. Comme pour la résolution, inutile d’être trop gourmand. Un cliché toutes les 5 secondes, c’est suffisant pour voir ce qu’il y a dans une pièce.

cliche camera raspberry pi

Dans le champ de recherche, saisissez camera pour trouver le node de prise du vue du module

camerapi node-red take picture raspberry pi zero

Placez le sur le flow et faites un double clic et éditer les paramètres comme ceci :

  • File Mode : buffermode. Aucun fichier ne sera stocké localement. MQTT supporte l’envoi du buffer.
  • Resolution : 320 x 240 (conseillé)
  • Vous pouvez orienter ou inverser l’image en fonction de la position de la caméra avec les option flip et rotate
  • Vous pouvez ajuster le contraste, luminosité…
  • Enfin (inutile pour une caméra de surveillance), vous pouvez ajouter un effet (négatif, flou…)

camera raspberry pi node-red node configuration

Comme vous pouvez le constater, il n’y a aucune compression. C’est aussi une raison de limiter la taille de l’image.

camera debug buffermode correct raspberry pi zero

Pour tester que tout fonctionne bien, vous pouvez brancher un node debug et déployer le flow. Dans l’onglet debug, vous devez obtenir un objet contenant un tableau de chiffre (le buffer de l’image). Si vous obtenez une chaine vide, allez à la fin du tutoriel pour identifier et corriger le problème.

Publier l’image par MQTT

MQTT est supporté nativement par Node-RED. Cherchez le flow MQTT dans la palette et placez sur le flow un node MQTT output (sortie).

Ouvrez le node pour l’éditer.

Cliquez sur le crayon pour configurer une nouvelle connexion. Sur le premier onglet, indiquez l’adresse IP (ou l’adresse internet si vous utilisez un Broker en ligne)

Si vous avez mis en place une authentification par mot de passe, allez au second onglet et remplissez les champs Username et Password

node-red node mqtt security

 

Remarque. La sécurité par mot de passe ne crypte pas les massages qui transitent sur le réseau local. Pour cela, il faut activer le cryptage SSL du broker

Validez la connexion en cliquant sur Add. De retour sur le panneau de configuration du node MQTT, sélectionnez la connexion dans la liste. Indiquez enfin un Topic MQTT. Ici, toutes les images seront publiées sur le Topic camera/pizerow. Comme les images sont publiées régulièrement, vous pouvez laisser le QoS sur 0 (les messages sont envoyés sans garantie de réception) et retain sur false (lorsqu’un nouveau client se connecte, il ne pourra pas récupérer les anciens messages – images). Cliquez sur Done pour terminer.

La programmation de votre caméra est terminée. Déployez le flow

camera security raspberry pi zero w node-red flow

Code du Flow

Collez ce code et modifiez les paramètres avant de déployer le flow

Inclure la caméra MQTT à Home Assistant

Ouvrez le fichier de configuration d’Home Assistant

Commencez par ajouter une section mqtt et indiquez les paramètres de connexion à votre broker. Si vous avez activé a protection par mot de passe, remplissez username et password, sinon supprimez les paramètres.

Ensuite, ajoutez une nouvelle section camera. Indiquez le topic sur lequel Home Assistant doit aller récupérer les images. Ici camera/pizerow

Ajoutez la caméra à un groupe à l’aide. Ici, cela donnera camera.pizerow. Pour modifier l’étiquette affichée, ajoutez cette

Enregistrez la configuration (XTRL + X puis Y – O) et relancez Home Assistant

Après le redémarrage, la caméra est parfaitement intégrée à Home Assistant

raspberry pi zero w camera surveillance diy node-red mqtt

En cas de problème avec le module camerapi

Le module camerapi pour Node-RED est basé sur la librairie Picamera, si celle-ci n’est pas installée, vous aurez ce message

Le répertoire Pictures n’existe pas par défaut sur Raspbian Jessie Lite. Vous risquez d’avoir ce message d’erreur au premier déploiement du flow Node-RED.

Ouvrez un Terminal et exécutez cette commande pour créer le dossier manquant

 

Et voilà, grâce à Node-RED et MQTT, nous venons de fabriquer un caméra de surveillance connectée 100% DIY. Vous avez une maitrise totale des images qui sont envoyées à votre serveur domotique ou sur votre smartphone lorsque vous quittez votre domicile. Dans la prochain tutoriel, nous ajouterons un détecteur de mouvement qui permettra d’envoyer (aussi simplement) une notification, un email ou déclencher un scénario sur le serveur domotique.

Pour toute question technique, ce forum est à votre disposition.