Des caméras qui filment, c’est bien. Des caméras qui savent quoi te dire avant que tu regardes la photo, c’est autre chose. Voici comment j’ai branché une IA de vision sur mon système de surveillance, sans transformer ma maison en centre de contrôle exposé sur internet.
L’accroche : trop d’alertes tue l’alerte
Le problème classique de la vidéosurveillance connectée : chaque mouvement génère une notification. Un chat qui passe, une branche qui bouge, le facteur, ton voisin qui sort ses poubelles. Au bout d’une semaine, tu ne regardes plus rien. C’est exactement l’effet inverse de ce qu’on cherche : un système de sécurité que personne ne consulte n’a plus aucune utilité. L’idée a donc été de ne plus notifier sur une simple détection, mais sur une analyse : qu’est-ce qui se passe réellement sur l’image.
Le contexte : pourquoi ajouter une IA entre la caméra et moi
Mon installation repose sur des caméras UniFi Protect intégrées à Home Assistant. Les capteurs de détection de personne et de mouvement remontent en binary_sensor, ce qui est très bien pour déclencher une automatisation, mais totalement muet sur le contenu réel de l’image. Un binary_sensor à on ne dit rien de plus que « quelque chose a bougé ».
La contrainte principale n’était pas technique mais comportementale : je voulais garder un système simple à opérer au quotidien, sans dashboard à surveiller en permanence, et sans devoir ouvrir une appli de vidéosurveillance dédiée. Le canal choisi a été Telegram, déjà utilisé pour d’autres alertes de la maison, avec deux bots distincts : un pour les photos et analyses, un autre réservé aux boutons interactifs (pause, alarme). Cette séparation vient d’une contrainte de Home Assistant : les callbacks de boutons ne fonctionnent qu’avec le bot enregistré dans l’intégration officielle, pas avec un bot appelé en simple requête REST.
Deuxième contrainte, plus importante : ne jamais dépendre d’un service cloud tiers pour la partie critique (fermeture de volets, sirène). L’IA sert uniquement à qualifier une alerte pour un humain, jamais à décider seule d’une action de sécurité automatique.
L’implémentation : de la détection au texte lisible
Le principe général : une détection de personne déclenche une capture d’image, cette image part vers un service d’analyse par IA (ai_task.google_ai_task, la tâche IA de l’intégration Google Generative AI), qui répond avec une description texte adaptée au contexte (présence à la maison ou absence). Cette réponse est ensuite envoyée sur Telegram, avec ou sans bouton d’action selon la situation.
Le squelette d’une automatisation type ressemble à ça :
automation:
- alias: "Analyse caméra sur détection personne"
mode: single
trigger:
- platform: state
entity_id: binary_sensor.exemple_person_detected
to: "on"
condition:
- condition: state
entity_id: timer.gemini_cooldown
state: "idle"
action:
- service: timer.start
target:
entity_id: timer.gemini_cooldown
- service: camera.snapshot
target:
entity_id: camera.exemple_high
data:
filename: "/config/www/snapshot.jpg"
- service: ai_task.generate_data
data:
entity_id: ai_task.google_ai_task
task_name: "analyse_camera"
instructions: "Décris qui est visible et ce qu'il fait, en une phrase courte."
attachments:
media_content_id: "media-source://media_source/local/snapshot.jpg"
media_content_type: image/jpeg
response_variable: gemini_analysis
Le résultat texte de gemini_analysis.data part ensuite vers un rest_command dédié qui poste la photo et la légende sur le bon bot Telegram :
rest_command:
telegram_cam_photo:
url: "https://api.telegram.org/bot{{ secret_token }}/sendPhoto"
method: POST
payload: >
{"chat_id": "{{ chat_id }}", "caption": "{{ caption }}"}
content_type: "application/json"
Le point important, c’est que le prompt envoyé à l’IA change selon le contexte. Quand je suis présent, l’objectif est juste d’identifier rapidement qui sonne ou qui passe (livreur, visiteur, famille), sans jugement de dangerosité. Quand je suis absent, le prompt bascule sur une lecture plus orientée sécurité : comportement, niveau d’urgence, présence prolongée. C’est le même mécanisme technique, mais deux instructions différentes selon une condition sur mon statut de présence (person.*).
Découpe toujours tes prompts IA en deux versions selon le contexte (chez toi / absent). Un seul prompt générique produit des réponses trop vagues pour être vraiment utiles dans les deux cas.
Les pièges rencontrés
Le premier vrai souci a été le coût caché du spam. Sans garde-fou, une personne qui reste quelques minutes devant une caméra déclenche une nouvelle analyse à chaque cycle de détection : autant d’appels à l’API de vision, autant de notifications Telegram redondantes. La solution a été un timer de cooldown (quelques minutes) couplé à mode: single sur l’automatisation, pour garantir qu’un seul cycle d’analyse tourne à la fois. Un bouton « pause » étendu (plusieurs heures) permet aussi de couper temporairement les analyses pendant une activité prévisible dans le jardin, sans désactiver toute l’automatisation à la main.
Le deuxième piège était plus bête, mais m’a fait perdre du temps : le service ai_task.generate_data n’accepte pas la clé target: pour désigner l’entité de la tâche IA, contrairement à la plupart des autres services Home Assistant. Il faut passer l’entity_id directement dans data:. Sans ça, l’automatisation se déclenche sans erreur visible, mais l’analyse ne part jamais.
Troisième piège : le format de la réponse. Je m’attendais à récupérer le texte via gemini_analysis.data.text, qui n’existe pas. La bonne clé est directement gemini_analysis.data. Résultat pendant plusieurs jours : des photos envoyées sans aucune description, ce qui annule tout l’intérêt du système.
Depuis la 2026.7 : le déclenchement de base sans YAML
Depuis la mise à jour Home Assistant 2026.7 (sortie début juillet 2026), une partie de ce qui précède peut se construire sans écrire une ligne de YAML. L’éditeur graphique d’automatisation propose désormais, par défaut, des triggers et conditions « orientés intention », formulés en langage naturel. Concrètement, un déclenchement du type « mouvement détecté dans une zone extérieure, envoie une notification » se configure directement dans l’interface, en ciblant une zone plutôt qu’une caméra précise : ajouter ou retirer une caméra dans cette zone ne casse plus l’automatisation, contrairement à une entité codée en dur.
Ceci dit, pour ce qui est décrit dans cet article, le YAML garde tout son intérêt. Enchaîner un appel à l’analyse IA, puis traiter le résultat de façon conditionnelle (photo, niveau d’alerte, boutons dynamiques selon la présence à la maison), c’est le genre d’orchestration que l’éditeur graphique standard ne couvre pas encore. Le YAML n’est pas déprécié : il reste l’outil adapté pour des scénarios avancés comme celui-ci.
Bilan et pour aller plus loin
Le système tourne maintenant de façon stable, avec un vrai gain sur le nombre de notifications inutiles. Ce qui reste perfectible : la latence entre la détection et la notification (le temps de capture + appel IA + envoi Telegram) qui peut représenter plusieurs secondes, un délai qui compte si on attend une alerte en temps réel plutôt qu’un compte-rendu. Une autre piste : croiser l’analyse IA avec d’autres capteurs de la maison pour réduire encore les faux positifs, sans dépendre uniquement de l’image.
Je précise volontairement que certains détails de fonctionnement (nombre et emplacement exact des caméras, logique fine de détection en cas d’absence, zones couvertes) ne sont pas partagés ici, pour des raisons évidentes de sécurité physique du domicile.
Stack utilisée
- Home Assistant (automatisations, helpers timer)
- Caméras UniFi Protect (intégration native Home Assistant)
- Google Generative AI, tâche
ai_task.google_ai_task(analyse d’image Gemini) - Telegram Bot API (photos et boutons interactifs via
rest_commandet l’intégration Telegram Bot) - Sonos (diffusion TTS en cas d’alerte confirmée)
Est-ce que ce système remplace une alarme professionnelle ?
Non. Il qualifie des alertes pour un humain, il ne déclenche aucune action de sécurité automatique critique sans validation.
Combien coûte l’analyse IA par notification ?
Le coût dépend du volume d’appels à l’API de vision. Un cooldown limite fortement le nombre d’analyses déclenchées par heure.
Les images partent-elles vers un service cloud externe ?
Oui, l’image est envoyée à l’API Google Generative AI pour analyse, puis le résultat texte est transmis via Telegram.
Peut-on faire ça sans caméras UniFi Protect ?
Oui, le principe fonctionne avec toute caméra exposant une entité `camera.*` et un capteur de détection dans Home Assistant.
Que se passe-t-il si l’IA se trompe sur l’identification ?
La notification reste une aide à la décision. La vérification finale (photo, action) reste humaine, rien n’est automatique en cas d’alerte.









