Surveillance domestique sécurisée avec Home Assistant sur Raspberry Pi : Mouvement, Alarme et Capture Vidéo
Prérequis
- Raspberry Pi exécutant Home Assistant (version 0.101.3 ou plus récente recommandée)
- Capteur de mouvement PIR HC‑SR501
- Caméra USB ou CSI (toute caméra compatible avec mjpg‑streamer)
- Compte email connecté à Internet (ex. Gmail) pour les notifications
- Connaissances de base en YAML et Docker (si HA tourne en conteneur)
1. Câblage du HC‑SR501 sur le Pi
Le capteur a trois broches : VCC (+), GND (–) et OUT. Connectez-les ainsi :
- VCC → Broche 5 (3,3 V)
- GND → Broche 6 (Masse)
- OUT → Broche 7 (GPIO 4)
Ces connexions permettent à HA de lire l'état binaire du capteur via la plateforme rpi_gpio.
2. Installation de mjpg‑Streamer
Suivez ce guide pour configurer mjpg‑streamer et l'enregistreur FFMpeg optionnel. Les scripts du dépôt lancent le flux et démarrent/arrêtent l'enregistrement à la demande.
3. Configuration de Home Assistant
Ouvrez /usr/share/hassio/homeassistant/configuration.yaml (ou votre dossier de config HA). Ajoutez les sections suivantes :
# Capteur binaire pour PIR
binary_sensor:
- platform: rpi_gpio
ports:
7: Sensor HC‑SR501
invert_logic: false
# Panneau d'alarme manuel
alarm_control_panel:
- platform: manual
name: Home Alarm
pending_time: 60
delay_time: 40
code: 1234
# Interrupteurs en ligne de commande pour contrôler mjpg‑streamer
switch:
- platform: command_line
switches:
start_stop_motion_rec_timelapse:
friendly_name: 'Enregistrement timelapse mouvement'
command_on: "curl https://localhost/start_mjpgstrm.php && curl https://localhost/rec-motion-mjpg.php"
command_off: "curl https://localhost/stop_mjpgstrm.php && curl https://localhost/rec-motion-mjpg-stop.php"
# Commandes shell pour scripts personnalisés
shell_command:
take_snapshot_webcam: '/config/scripts/takeSnapshotWebcam.sh'
start_mgpg_streamer: 'curl https://localhost/start_mjpgstrm.php'
stop_mgpg_streamer: 'curl https://localhost/stop_mjpgstrm.php'
start_motion_rec: 'curl https://localhost/rec-motion-mjpg.php'
stop_motion_rec: 'curl https://localhost/rec-motion-mjpg-stop.php'
# Notificateur email (exemple Gmail)
notify:
- name: ha_sendmail
platform: smtp
server: smtp.gmail.com
port: 587
timeout: 15
sender: <votre-email>
encryption: starttls
username: <votre-email>
password: <mot-de-passe-application>
recipient:
- <votre-email>
sender_name: Mon Home Assistant
Après modification, validez la configuration via Configuration → Contrôles du serveur → Vérifier la config, puis rechargez automatisations et scripts.
4. Logique d'automatisation
Créez les automatisations suivantes dans automation.yaml pour lier le capteur, l'alarme et la caméra.
# 1. Déclenchement si armé absent et mouvement détecté
- alias: 'Déclencher alarme en mode absent'
trigger:
- platform: state
entity_id: binary_sensor.sensor_hc_sr501
to: 'on'
condition:
- condition: state
entity_id: alarm_control_panel.home_alarm
state: armed_away
action:
- service: shell_command.start_mgpg_streamer
- service: shell_command.start_motion_rec
- service: alarm_control_panel.alarm_trigger
target:
entity_id: alarm_control_panel.home_alarm
# 2. Arrêt enregistrement quand alarme désarmée
- alias: 'Arrêter enregistrement quand alarme désarmée'
trigger:
- platform: state
entity_id: alarm_control_panel.home_alarm
to: 'disarmed'
action:
- service: shell_command.stop_mgpg_streamer
- service: shell_command.stop_motion_rec
- service: persistent_notification.create
data:
message: 'L\'alarme est désarmée à {{ states(\'sensor.date_time\') }}'
# 3. Envoi photo au déclenchement alarme
- alias: 'Alerte email au déclenchement alarme'
trigger:
- platform: state
entity_id: alarm_control_panel.home_alarm
to: 'triggered'
action:
- service: persistent_notification.create
data:
message: 'Alarme déclenchée par capteur de mouvement.'
- delay: { seconds: 4 }
- service: script.webcam_snapshot
- service: notify.ha_sendmail
data:
title: 'Alerte intrusion'
message: '{{now().strftime("%H:%M %Y-%m-%d")}}: Alarme déclenchée par capteur de mouvement.'
data:
images:
- /config/camera/snapshot.jpg
Le script.webcam_snapshot doit invoquer takeSnapshotWebcam.sh, qui capture une seule image et la stocke sous /config/camera/snapshot.jpg pour la pièce jointe de l'email.
5. Note sur les volumes Docker
Si HA tourne dans Docker, rappelez‑vous que le dossier /config du conteneur correspond à /usr/share/hassio/homeassistant sur l'hôte. Utilisez docker inspect homeassistant | less pour confirmer les liaisons de volumes.
6. Test du système
- Armez l'alarme sur
armed_awayvia l'interface HA. - Déclenchez le capteur PIR (ex. en passant devant).
- Vérifiez que mjpg‑streamer démarre, l'enregistreur de mouvement capture un clip court, et qu'un email avec photo est reçu.
- Désarmez l'alarme et confirmez que l'enregistrement s'arrête et qu'une notification de désarmement apparaît.
Conclusion
Avec ces étapes, vous disposez d'une solution de sécurité domestique autonome, peu coûteuse, combinant détection de mouvement, contrôle d'alarme et alertes photo instantanées – le tout orchestré par Home Assistant sur un Raspberry Pi.
N'hésitez pas à adapter les scripts et paramètres de notification à votre environnement. Bonne automatisation !
Processus de fabrication
- Construire un enregistreur de température Raspberry Pi avec capteur I2C à 5 $
- Construire un capteur de température distant avec Raspberry Pi et Python – Guide étape par étape
- Construire une station météo Raspberry Pi qui envoie les données météo quotidiennes par email
- Comment connecter un capteur de température DS1820 One‑Wire à un Raspberry Pi via GPIO
- Connexion du capteur ultrasonique HC‑SR04 au Raspberry Pi 3 : Guide complet
- Construire un capteur de mouvement infrarouge DIY pour Raspberry Pi – Guide étape par étape
- Construire un réseau de capteurs sans fil abordable pour votre maison
- Contrôler une LED avec un capteur de mouvement PIR sur Raspberry Pi
- Construire une alarme à eau headless Raspberry Pi 2 avec Adafruit T‑Cobbler Plus