LLM local pour la domotique : vie privée et maison connectée
La domotique cloud — Google Home, Alexa, SmartThings — envoie en continu des bouts d'information sur ce qui se passe chez vous vers des serveurs distants. Un LLM local domotique vie privée renverse l'équation : votre serveur Home Assistant pilote vos lampes et thermostats, un modèle Ollama traduit vos demandes en actions, et rien ne sort du réseau local. Ce guide montre comment câbler concrètement Ollama à Home Assistant, quel modèle léger choisir pour rester sous les deux secondes de latence, et ce que vous gagnez vraiment en confidentialité.
#Pourquoi un LLM local pour la maison connectée ?
Sur une enceinte cloud classique, chaque phrase prononcée est envoyée à un serveur distant pour être transcrite, comprise et exécutée. La transcription est conservée, parfois écoutée par des sous-traitants pour entraîner les modèles, et le constructeur sait à quel moment vous rentrez chez vous, à quelle heure vous allumez la chambre, quand vous lancez votre playlist du soir. Pour beaucoup de foyers, c'est trop d'information donnée à trop de tiers.
Home Assistant adresse le problème à la racine : c'est une plateforme open source qui tourne sur votre matériel et parle aux objets connectés en local (Zigbee, Z-Wave, Matter, MQTT). En lui ajoutant un LLM local via Ollama, vous obtenez un assistant capable de comprendre des phrases libres (« baisse le chauffage du salon de deux degrés », « éteins toutes les lampes du rez-de-chaussée ») sans qu'aucun audio ni aucune commande ne quitte le LAN.
- Confidentialité réelle
- Aucune donnée d'usage envoyée à un tiers. Pas de profil publicitaire construit sur vos habitudes.
- Fonctionne hors-ligne
- Coupure Internet, panne d'un fournisseur cloud — votre maison continue de répondre aux commandes.
- Latence prévisible
- Plus de round-trip vers un datacenter ; la latence dépend uniquement de votre machine.
- Contrôle total
- Vous choisissez le modèle, vous le mettez à jour quand vous voulez, vous le remplacez quand un meilleur sort.
#Prérequis
- Home Assistant en place
- Version 2024.6 minimum (qui inclut l'intégration Ollama native). Idéalement la dernière stable. HA OS, HA Container ou HA Supervised conviennent tous.
- Une machine pour Ollama
- Ollama peut tourner sur la même machine que HA si elle est assez musclée, ou sur un PC à part sur le LAN. Un Mac mini M4, un NUC i7 ou un PC avec GPU 8 Go+ font très bien le travail.
- Ollama installé
- Daemon actif sur le port 11434. Vérifiez avec curl http://localhost:11434 — la réponse doit être Ollama is running. Si rien n'est en place, suivez d'abord le guide d'installation Ollama du site.
- Réseau local stable
- Idéalement HA et Ollama sur le même VLAN, avec IP fixe pour le serveur Ollama. Le port 11434 doit être ouvert entre les deux.
- Un modèle adapté
- On y vient juste après. À ce stade, retenez qu'il faut un modèle qui sait faire du tool calling (appel d'outils).
#Modèles légers adaptés aux commandes domotiques
Le bon modèle pour la domotique n'est pas forcément le plus gros : il doit (1) supporter le tool calling correctement pour appeler les services Home Assistant, (2) bien parler français, (3) répondre vite. Les modèles 3B à 8B en Q4_K_M sont le sweet spot.
- Llama 3.1 8B (Q4_K_M, ~5 Go VRAM)
- Le défaut conseillé par la doc Home Assistant. Tool calling robuste, français correct, latence raisonnable sur GPU. C'est le bon point de départ.
- Qwen 2.5 7B (Q4_K_M, ~5 Go VRAM)
- Excellent en français, tool calling fiable, légèrement plus rapide que Llama 3.1. Bon choix alternatif si Llama dérive sur vos commandes.
- Llama 3.2 3B (Q4_K_M, ~2 Go VRAM)
- Pour les setups modestes (Pi 5, NUC sans GPU). Tool calling présent mais moins fiable sur des commandes complexes — restez sur des phrases courtes et explicites.
- Qwen 2.5 14B (Q4_K_M, ~9 Go VRAM)
- Si vous avez une RTX 3060 12 Go ou mieux. Gain net sur les commandes ambiguës (« mets une ambiance cosy au salon ») et la compréhension contextuelle.
- Mistral 7B Instruct
- Très bon en français, mais le tool calling est moins fiable que Llama 3.1 ou Qwen 2.5. Plutôt pour des dialogues, moins pour piloter strictement la maison.
#1. Brancher Ollama à Home Assistant
L'intégration Ollama est officielle dans Home Assistant depuis la version 2024.6. Elle se configure entièrement depuis l'interface, sans toucher à configuration.yaml.
- 01Tirer le modèle côté OllamaSur la machine qui héberge Ollama, lancez la commande shell ci-dessous. Le téléchargement prend 3-5 Go selon le modèle choisi.
- 01Rendre Ollama accessible sur le LANPar défaut Ollama n'écoute que sur localhost. Pour que Home Assistant (potentiellement sur une autre machine) puisse l'appeler, exposez le service sur toutes les interfaces.
- 01Ajouter l'intégration dans Home AssistantParamètres > Appareils et services > Ajouter une intégration > rechercher « Ollama ».
- 02Renseigner l'URLURL : http://IP-DU-SERVEUR-OLLAMA:11434 (ex: http://192.168.1.42:11434). Si Ollama tourne sur la même machine que HA Container, utilisez http://host.docker.internal:11434.
- 03Choisir le modèleHome Assistant interroge automatiquement Ollama et affiche la liste des modèles disponibles. Sélectionnez llama3.1:8b.
- 04Activer le contrôle (Control Home Assistant)Dans les options de l'intégration, cochez « Control Home Assistant ». C'est ce qui autorise le LLM à appeler des services (allumer, éteindre, régler température). Sans cette case, il ne fait que discuter.
#2. Exposer les bonnes entités à l'assistant
Home Assistant gère parfois des centaines d'entités (capteurs, prises, ampoules, vues, automatisations…). Les envoyer toutes au LLM saturerait le contexte et embrouillerait le modèle. L'astuce : exposer uniquement ce que l'assistant doit réellement contrôler.
- 01Paramètres > Voix > ExposerListe de toutes les entités. Activez celles que l'assistant doit piloter : lumières, thermostats, prises, volets. Désactivez les capteurs internes (RAM du Pi, signal Zigbee, etc.) qui ne servent à rien à un humain.
- 02Renommer en langage naturelUne entité light.salon_lampe_principale_zigbee_3 est illisible. Renommez-la en « Lampe principale du salon ». Le LLM choisit la bonne entité bien plus fiablement à partir d'un nom humain.
- 03Grouper par zoneAssignez chaque entité à une zone (Salon, Cuisine, Chambre…). Le LLM peut alors comprendre « éteins le salon » sans lister manuellement chaque lampe.
- 04TesterDans Paramètres > Voix > Assistants, cliquez sur l'icône chat de votre pipeline Ollama, et essayez : « Quelle est la température de la chambre ? » puis « Allume la lampe principale du salon ».
#3. Pipeline vocale 100 % locale (en option)
Si vous voulez parler à voix haute (au lieu de taper dans l'app HA), Assist permet de chaîner reconnaissance vocale → LLM → synthèse vocale, tout en local. Aucune dépendance Google ou Amazon.
- Wake word — openWakeWord
- Add-on HA officiel. Détecte un mot-clé d'activation (« Hey Jarvis », « Nabu ») sur un Pi ou un ESP32 satellite (Atom Echo, M5Stack).
- STT (speech-to-text) — Whisper
- Add-on HA officiel basé sur faster-whisper. Modèle tiny ou base suffit pour des commandes courtes, en français. ~1-2 s de transcription sur CPU correct.
- LLM — Ollama (déjà configuré)
- Reçoit la transcription, appelle l'outil HA approprié, renvoie une phrase de confirmation.
- TTS (text-to-speech) — Piper
- Add-on HA officiel. Voix françaises natives (fr_FR-siwis-medium, fr_FR-tom-medium). Très rapide, ~200 ms par phrase.
Une fois les quatre add-ons installés et démarrés, Paramètres > Voix > Assistants permet d'assembler le pipeline : sélectionnez Whisper en STT, votre intégration Ollama en agent conversationnel, Piper en TTS. C'est le moment où votre maison devient pilotable à la voix, sans aucune connexion sortante.
#Latence : local vs cloud
C'est l'argument souvent négligé. Le cloud n'est pas magique : chaque commande fait un aller-retour datacenter, plus une file d'attente côté serveur. En local, vous coupez la moitié du trajet.
- Cloud (Google/Alexa)
- STT cloud (~400 ms) + intent cloud (~300 ms) + action HA via cloud (~200 ms) + TTS (~300 ms) = 1,2-1,8 s en moyenne, plus si le réseau est chargé.
- Local — Pi 5 + LLM 3B CPU
- STT Whisper tiny (~800 ms) + LLM 3B (~3-5 s sur CPU) + action (~50 ms) + TTS Piper (~200 ms) = 4-6 s. Acceptable pour une commande, frustrant en usage intensif.
- Local — PC + LLM 8B GPU 8 Go
- Whisper base (~400 ms) + LLM 8B Q4 (~600-900 ms) + action (~50 ms) + TTS (~200 ms) = 1,3-1,6 s. Aussi rapide qu'un Google Home, sans le cloud.
- Local — Mac mini M4 24 Go
- Pipeline complet ~1,1-1,4 s grâce au GPU intégré et à la mémoire unifiée. C'est probablement le meilleur rapport perf/consommation pour de la domotique LLM 24/7.
#Ce qui sort vraiment du LAN (rien)
Vérifions concrètement le périmètre des données. Sur un setup HA + Ollama + Whisper + Piper bien configuré :
- Audio capté par le micro
- Traité par Whisper local. Aucun audio quitte le réseau.
- Texte transcrit de votre commande
- Envoyé à Ollama local. Aucune transcription quitte le réseau.
- Liste de vos appareils et zones
- Partagée avec Ollama local pour qu'il appelle la bonne entité. Reste sur le LAN.
- Décision et action HA
- Exécutée par HA, qui parle directement à Zigbee/Z-Wave/Matter/MQTT en local.
- Réponse vocale Piper
- Audio synthétisé localement. Aucune voix de synthèse fetchée en ligne.
Le seul trafic sortant possible reste les mises à jour de HA, d'Ollama et des modèles — vous décidez quand les lancer. Pour un usage strict, on peut couper Internet à la machine HA après installation : tout continue de fonctionner.
#Astuces et dépannage
- Le LLM répond en anglais
- Ajoutez un prompt système dans l'intégration Ollama : « Tu es l'assistant domotique de la maison. Réponds toujours en français, en une phrase courte. » Cette consigne suffit avec Llama 3.1 ou Qwen 2.5.
- Il invente des entités inexistantes
- Symptôme d'un modèle trop petit ou d'un nom d'entité ambigu. Renommez les entités en langage naturel, réduisez le nombre exposé, ou passez à Qwen 2.5 14B si VRAM disponible.
- Il appelle le bon service mais sur la mauvaise zone
- Vérifiez que chaque entité a bien une « area » assignée dans HA. Sans zone, le modèle devine et se trompe sur les noms proches.
- Latence qui s'effondre après quelques heures
- Ollama a déchargé le modèle. Lancez le service avec OLLAMA_KEEP_ALIVE=24h (ou 168h pour une semaine).
- Connection refused depuis HA
- Ollama écoute encore sur 127.0.0.1. Vérifiez OLLAMA_HOST=0.0.0.0:11434 dans l'unit systemd, redémarrez, et testez avec curl depuis la machine HA.
- Pi 5 qui chauffe en CPU
- Le LLM en CPU sollicite les 4 cœurs à 100 %. Ajoutez un ventilateur actif (ou un Pi 5 case Argon ONE V3) si vous tenez à tout faire tourner sur le Pi. Sinon, déportez Ollama sur un autre hôte.
- Voulez confiner Ollama au LAN seulement
- Plutôt que 0.0.0.0:11434, écoutez sur l'IP LAN précise (ex: OLLAMA_HOST=192.168.1.42:11434). Ollama n'acceptera plus de connexion depuis d'autres interfaces.
#Pour aller plus loin
Vous avez un assistant domotique LLM local fonctionnel. Quelques pistes pour aller plus loin :
- Installer Ollama sur Linux
- Si vous voulez dédier une machine Linux à Ollama (le scénario le plus propre pour de la domotique 24/7), le guide d'install Linux couvre systemd, GPU NVIDIA/AMD, et la configuration réseau.
- LLM sur Raspberry Pi 5
- Pour évaluer concrètement ce qui passe en CPU pur sur un Pi 5 8 Go, avec benchmarks tokens/sec et choix de modèles 1-3B.
- Choisir sa quantification (Q4, Q5, Q8)
- Pour comprendre pourquoi Q4_K_M est le sweet spot domotique, et quand monter en Q5_K_M ou descendre en Q3 a du sens.
Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.