snapshot mai 2026 · projet personnel · évolue en continu

Une maison qui pense,
un labo qui apprend

1 serveur, 33 containers Docker, 11 agents IA 100 % locaux, 248 automatisations Home Assistant, backup 4-tier double juridiction (USB + NAS + Hetzner DE + kDrive CH) avec runbook de reconstruction testé en 2h30, pipeline mail Proton autonome 24/7, calendrier iCloud synchronisé, agent IA privé qui lit toute la mémoire en recherche hybride keyword + sémantique (8 685 docs + 172 notes vault), vitrine Notion auto-générée à la demande.
Un labo permanent — la technique au service du quotidien, zéro octet hors de la maison.

33
containers Docker
11
agents IA autonomes
248
automatisations HA
8 685
docs kDrive indexés
14
dashboards Grafana
100 %
IA locale · 0 cloud
4-tier
backup · 2 juridictions DE+CH
2h30
reconstruction DR testée

Concrètement, ça change quoi ?

Derrière la stack, des problèmes très réels — quatre dimensions du quotidien.

Sécurité de la maison

Détecter une intrusion par la posture des silhouettes — la chatte ne déclenche plus l'alarme. Vision IA locale, classification humain/animal/poule, 3 snapshots en séquence, push iPhone critique avec cooldown anti-spam. Mode absence qui s'adapte aux périodes d'hospitalisation.

Archives & souveraineté

Archiver factures, contrats, courriers médicaux, documents administratifs avec une IA qui extrait dates, montants et correspondants — sans qu'aucune donnée ne sorte du réseau. Reconstruction complète de l'infra en 2h30 si le serveur lâche, grâce à un runbook documenté.

Énergie & confort

Suivi conso temps réel pour arbitrer solaire vs heures creuses. Volets, chauffage, scènes qui s'ajustent au climat intérieur (CO₂, VOC, température). Briefing matinal automatique : météo, agenda, alertes mail urgentes — d'un coup d'œil, pas un écran de plus.

Vivant · poulailler · proches

Porte automatique du poulailler avec règles solaires et météo, comptage des poules rentrées le soir, alertes en cas d'absence. Capteurs discrets pour les seniors : chute, sortie nocturne, absence prolongée — alertes simples vers les aidants, sans app compliquée. L'humain reste central, le numérique reste invisible.

Tout est en production chez moi. Aucun cas d'usage n'est théorique.

Architecture en 4 couches

Tout converge vers un seul mini-PC (Minisforum AI Ryzen 9). L'IA tourne sur l'iGPU AMD via ROCm, sans un octet de données qui sort de la maison.

EDGE · capteurs & IoT 6 caméras PoE Zigbee2MQTT Matter Thread Netatmo · Hue Omlet · Nuki · Wallbox CŒUR · cma3 (Minisforum AI · Ryzen 9 · 28 Gi) Home Assistant 248 automatisations 8 685 docs Meili Alarmo · Sentinel ARIA · 11 agents security · health energy · comfort poulailler · meteo … Ollama (local) gemma3:12b vision qwen3:8b tools ROCm iGPU 890M Postgres + pgvector mémoire longue RAG embeddings historique alertes OBSERVABILITÉ Prometheus + Grafana Uptime Kuma 14 dashboards 5 ans de rétention SORTIES Discord · Telegram Push iPhone critique TTS Alexa · TRMNL e-ink routage par sévérité BACKUP 4-tier USB · NAS · Hetzner DE kDrive CH (rclone) 2 juridictions cloud dead man's switch 26h

Les 4 piliers

Ce qui différencie un homelab bricolé d'un système production.

Sécurité proactive

Sentinel v2 — zones PERIMETER/INTERIOR/POULTRY × Alarmo × fenêtre horaire. Vision IA locale classe humain/animal/poule, 3 snapshots en séquence, push iPhone critique avec cooldown 30 min anti-spam, Alarmo strict 8 portes extérieures sans bypass automatique. Mode absence dédié aux périodes d'hospitalisation : skip Marilyn sur les fausses alertes, alertes critiques préservées.

vision IA zones learning auto cooldown iOS

IA 100% locale

0 appel cloud. Gemma3:12b pour la vision et les conversations, Qwen3:8b pour le tool calling Home Assistant, Nomic pour les embeddings RAG. Tout sur l'iGPU AMD via ROCm. Luciole — agent IA privé qui lit toute la mémoire en recherche hybride keyword + sémantique via Meilisearch (8 685 docs kDrive + 172 notes vault Obsidian + Notion Gethsemane). Vitrine Notion auto-générée en 6 phases (expansion sémantique LLM, tri par actionnabilité, pré-décision, delta vs précédent, re-rank LLM). Anthropic, OpenAI, Gemini et Groq ont été purgés — plus de clés, plus de packages.

Ollama ROCm Meili hybrid pgvector Luciole RAG vitrine Notion auto

Monitoring 360°

14 dashboards Grafana provisionnés par fichier JSON — énergie, climat intérieur, backups 4-tier (USB · NAS · Hetzner · kDrive), qualité air, solaire, NPU/GPU, tondeuse, alertes prédictives. Uptime Kuma en doublon pour ping/HTTP. Textfile collector pour les métriques métier.

Prometheus Grafana Kuma

Backup 4-tier · double juridiction

4 copies, 4 supports, 2 juridictions cloud (Allemagne + Suisse). USB local, NAS Synology, Hetzner Storage Box (DE) via Hyper Backup WebDAV, kDrive Infomaniak (CH) via rclone — chaque tier sur son propre cron, dead man's switch 26h, dashboard Grafana 4-tier dédié, alerte Discord si un flux rate. Audit exhaustif des 33 containers en mai 2026 : ~98 % de couverture vérifiée (HA recorder via SQLite atomic, CrowdSec, Mosquitto, Grafana SQLite, Uptime Kuma, Technitium volume complet, etc.). Runbook de reconstruction complet : reconstruire le serveur from scratch en 2h30 — 8 phases, inventaire de 18 catégories d'artefacts, secrets tracés, pièges connus. Page admin /dr interactive pour suivre l'état.

USB+NAS+Hetzner+kDrive DE+CH chiffré DR runbook 2h30 98 % couverture

Mémoire vivante

Source unique, dérivés automatiques. Le dossier mémoire local du Mac est la seule source de vérité ; un agent launchd pousse les fiches au vault Obsidian du serveur en quelques secondes via rsync. De là, propagation auto vers Postgres pgvector (RAG sémantique), Meilisearch hybrid (keyword + sémantique) et Notion 🌿 Gethsemane — DB unifiée mémoire + PKM, scorer canonicité gemma3:12b nocturne. L'index MEMORY.md est généré depuis les frontmatter, borné par construction — plus de dérive. Un bandeau santé agrégé surveille les 6 maillons du pipeline et un bilan Discord quotidien dit « tout OK » ou pointe le maillon à voir. Outil d'audit dédié pour traquer doublons et incohérences du corpus.

Obsidian pgvector launchd index généré observable

ARIA · le cerveau en étoile

11 agents Python autonomes (security, security_vision, health, energy, comfort, digest, predictive, anomaly, poulailler, meteo, governance), un moteur de règles rapide (95 % des requêtes sous 1 s), routage intelligent vers les LLM locaux uniquement quand nécessaire.

ARIA smart engine security Sentinel · Alarmo health CO2 · VOC · pollens energy solaire · HC comfort climat · volets digest bulletins predictive anticipations anomaly détection poulailler œufs · porte meteo alertes 12 governance audit
requête moteur rapide (95 %) action HA ou réponse directe
fallback 5 % RAG pgvector Gemma3 / Qwen3 local

Sentinel · agent sécurité auto-calibrant

Détection périmètre 40 capteurs · scoring contextuel · 3 VETO en série · apprentissage continu via feedback Discord. Aucun PIR intérieur (le chat dort sur le canapé, on évite les faux positifs).

Pipeline Sentinel — capteurs vers FSM avec VETO, boucle d'apprentissage, et auto-arm proactif De gauche à droite : capteurs (4 portes, 20 fenêtres, 16 caméras IA) alimentent un scoring contextuel pondéré, qui passe à une FSM 4 états (normal, surveillance, suspicion, intrusion). Avant l'escalade en intrusion, 3 VETO en cascade peuvent rétrograder vers suspicion. Une alerte Discord avec 3 boutons est postée. Le clic Confirmé ou Faux positif boucle dans la base d'apprentissage qui ajuste les coefficients du scoring. Bande basse — Auto-arm proactif : si la maison est vide et l'alarme désarmée depuis 15 minutes, Sentinel poste sur Discord une proposition avec 3 boutons (Armer maintenant, Dans 30 minutes, Ignorer 2 heures), et boost le scoring périmètre de 0.3 à 1.5 pendant 30 minutes en attendant la décision. CAPTEURS · 40 Caméras IA 7 humain · 9 animal UniFi Protect Portes · 4 entrée · portail · garage Fenêtres · 20 RDC · étage · chambres scoring armé OU nuit Pas de PIR intérieur — chat Alarmo + bypass + contexte (heure, météo) SCORING · FSM Score pondéré zone × heure × armé × learning NORMAL · < 30 SURVEILLANCE · 30 SUSPICION · 60 INTRUSION · 120 Lissage 5 derniers scans Hystérésis : monter vite, descendre lentement 3 VETO · cascade VETO vision gemma3:12b porte oubliée ? VETO habitant person.* == home déplacement interne VETO planning RDV calendrier ≤15 min SORTIE Discord embed L1/L2/L3 + snapshot Confirmé Faux positif Analyser → vision + timeline Learning 30 jours Postgres sentinel_log Prometheus dashboard 41 SECU boucle apprentissage continue AUTO-ARM PROACTIF · si tu oublies d'armer Détection vide + désarmée 15 min Proposition Discord — 3 boutons 🔒 Armer · ⏰ Snooze 30 min · 🔕 Ignorer 2h Boost vigilance × 1.5 périmètre × 0.3 → × 1.5 pendant 30 min
  • 40 capteurs périmètre : 16 caméras IA (humain + animal), 4 portes contact, 20 fenêtres extérieures
  • FSM 4 états avec lissage 5 scans + hystérésis : monter vite, descendre lentement
  • 3 VETO en cascade : vision LLM (porte oubliée), habitant (person home), planning (RDV calendrier)
  • Apprentissage continu : multiplicateur 0.3-1.1 par zone × heure × état armé, recalculé sur fenêtre 30 jours dès 5 feedbacks
  • Auto-arm proactif : si maison vide + alarme désarmée 15 min, propose Discord (3 boutons) et boost vigilance ×1.5 — décision toujours humaine
  • Observabilité : 8 séries Prometheus, dashboard Grafana 41 SECU — Sentinel FSM, event-store Postgres sentinel_log
  • Discord interactif : embed L1/L2/L3 + bouton Analyser (vision LLM gemma3:12b sur snapshot + timeline 5 min)

Stack ouvert

Tout est standard, open source, auto-hébergeable. Pas de SaaS verrouillé.

Infra & réseau

  • Ubuntu 24.04 + kernel 6.17
  • Docker Compose (33 containers)
  • UDM Pro SE · VLANs · WiFi 6
  • Technitium DNS local
  • Reverse proxy TLS

Domotique

  • Home Assistant + HACS
  • Zigbee2MQTT · Matter · Thread
  • Alarmo (8 portes strictes)
  • Frigate / UniFi Protect
  • Alexa Media Player + TTS

IA locale

  • Ollama (Gemma3 · Qwen3)
  • Nomic embeddings (768d)
  • Postgres + pgvector (RAG)
  • Meilisearch hybrid (keyword + sémantique)
  • ROCm iGPU 890M
  • ARIA Python framework maison
  • Vitrine Notion auto 6 phases
  • FastFlowLM NPU XDNA2 (qwen3:1.7b · ~150 calls/jour en prod)

Observabilité

  • Prometheus + node-exporter
  • Grafana (JSON provisionné)
  • Uptime Kuma + watchdog SQLite
  • Cron silent check (détection scripts muets)
  • Textfile collectors custom
  • cAdvisor · PostgresExp
  • Admin dashboard unifié (9 vues)

Sorties / UX

  • Optimus Discord bot (49 slash cmds)
  • Discord webhooks (15 channels)
  • Push iPhone critical / time-sensitive
  • TRMNL e-ink 800×480
  • Alexa TTS · Sonos ambiance

Sauvegardes & DR

  • Backup 4-tier (USB + NAS + Hetzner DE + kDrive CH)
  • Hyper Backup WebDAV + rclone
  • Cron quotidien 3h-3h30 + horaire
  • Dead man's switch 26h
  • HA recorder via SQLite atomic backup
  • Runbook DR 8 phases (2h30)

Pipeline mail Proton

  • Bridge Proton container 24/7
  • Classification gemma3:12b (2 étages)
  • Push Notion (3 DBs auto-alimentées)
  • Discord #mails + iOS critical
  • Anti-dup PG, cooldown 30min

Documents & calendrier

  • kDrive Infomaniak 3 To (rclone WebDAV)
  • Luciole : drop + classify gemma3:12b + route
  • Meilisearch indexation 8 685 docs + cron delta 15 min
  • iCloud CalDAV (briefing + créer)
  • Sync calendrier → Notion 90j (filtres MMA / scolaire)
  • Jardin Gethsemane (vault Obsidian, 172 notes)
  • Exports Notion + Discord nocturnes (4 DBs + 2 guildes)

En exploration · R&D permanente

Les chantiers que je documente honnêtement, qu'ils soient passés en production ou encore en exploration. Une vitrine parfaite serait un mensonge : ici, ce qui marche, ce qui tâtonne, et ce qui dort.

✓ Déployé

NPU XDNA2 · AMD Ryzen AI 9 HX 370

POC validé le 11 mai 2026 après upgrade kernel 7.0.6 + firmware NPU 1.1.2.64. FastFlowLM 0.9.39 sert qwen3:1.7b à ~42 tok/s sur le port :52625. Intégré à ARIA via llm_router.py — 5 scripts migrés (embed-gemma, narration, scoring, classify, vision L1/L2), ~150 calls par jour déchargés de l'iGPU. Fallback Ollama automatique si le NPU est indisponible.

✓ Déployé

kDrive + Meilisearch hybrid · recherche 100% locale

Pipeline Luciole : drop dans kDrive Infomaniak 3 To → classification gemma3:12b multimodale (vision + texte) → routage automatique en 14 zones thématiques. Meilisearch indexe 8 685 docs (PDFs, Office, mails) avec recherche hybride keyword + sémantique via embedder Ollama nomic-embed-text. Vitrine Notion auto-générée à la demande agrège 7 sources (kDrive + vault + Notion + mémoires Claude + mails + calendrier + décisions classer) en 6 phases : expansion sémantique LLM → multi-search → partition par actionnabilité → pré-décision LLM → delta vs précédent → re-rank LLM. Paperless décommissionné en mai 2026 au profit de cette stack.

✓ Déployé

Second cerveau Obsidian + transcripts

Vault Obsidian sur le dossier mémoire Claude Code (120+ notes), plugin Dataview pour queries sur frontmatter, 16 clusters thématiques via backlinks « Voir aussi ». Plugin transcript-saver auto-archive chaque session d'IA en Markdown. Boîte noire = sessions, manuel = mémoires curées, pilote = Claude qui lit les deux.

Snapshot en commande

cma3 · ~ · zsh
$ docker ps --format {{.Names}} | wc -l 31 $ ls aria/agents/*.py | grep -v __ | wc -l 11 $ curl -s $HA/api/states | jq 'length' 3826 $ curl -s $HA/api/states | jq '[.[] | select(.entity_id|startswith("automation."))] | length' 248 $ ollama list | awk 'NR>1 {print $1}' gemma3:12b qwen3:8b qwen3:4b nomic-embed-text:latest

Pourquoi ce homelab ?

Curiosité radicale. J'apprends en cassant, en remontant, en documentant. Chaque container, chaque agent, chaque dashboard est né d'un problème concret du quotidien — pas d'une démo abstraite. La maison me sert de terrain ; le code me sert de carnet.

Souveraineté numérique. Les modèles tournent en local, les sauvegardes sont chiffrées, les secrets ne quittent jamais le périmètre. Quand un service externe tombe (cloud, API, fournisseur), rien ne s'arrête ici.

Tous les éléments listés sont en production chez moi · snapshot mai 2026. Adresses IP, domaines internes et secrets volontairement omis.