v1.5.2

H.A.C.A

Home Assistant Config Auditor — Auditez, détectez et corrigez automatiquement les problèmes de votre configuration Home Assistant.

v1.5.2 local_polling HA 2024.1+ MIT License 13 langues LLM API natif 65 outils MCP

Pourquoi H.A.C.A ?

Au fil du temps, une installation Home Assistant accumule des automatisations obsolètes, des entités fantômes, des références cassées et des problèmes de performance difficiles à repérer manuellement. H.A.C.A fait ce travail à votre place — automatiquement, en continu, sans configuration complexe.

🔍

Audit continu

Scan auto toutes les 60 min. Score de santé en temps réel exposé comme capteur HA.

Corrections 1-clic

Prévisualisation avant/après. Application directe. Backup automatique YAML avec rollback si le rechargement échoue.

🤖

LLM API natif v1.5.2

HACA s'enregistre comme LLM API dans HA. Mistral, Gemini, Llama utilisent les 65 outils nativement. Fallback automatique si l'agent préféré échoue.

📊

Historique

Suivi du score dans le temps. Rapports PDF, Markdown et JSON. Fréquence configurable (quotidien / hebdomadaire / mensuel).

🔋

Batteries + Prédictions

Surveillance de tous les niveaux. Régression linéaire — dates de remplacement estimées. Alertes 7 jours à l'avance.

🗄️

Recorder DB + Impact

Détection et purge des entités orphelines. Analyse de l'impact par entité (écritures/jour, Mo/an). YAML exclude prêt à copier.

Conformité

Audit des métadonnées : noms, zones, labels, helpers. 10 types configurables.

🧩

Helpers

Onglet dédié avec sous-onglets par type et détection des helpers jamais utilisés.

💬

Chat IA

Assistant conversationnel avec accès aux 65 outils MCP. Exécute les tâches complexes en plusieurs étapes.

🔗

Serveur MCP (65 outils)

Protocole MCP intégré pour 12 agents IA : Claude Desktop, Cursor, VS Code, n8n et plus.

🗂️

Graphe — sidebar relations v1.5.2

Clic sur un nœud → sidebar "Utilisé par / Utilise" avec navigation cliquable. Exports CSV et Markdown par nœud ou graphe complet.

🗺️

Complexité des zones

Heatmap interactive par zone. Score composite. Suggestions automatiques de fusion et découpage.

🔄

Redondances

Chevauchements logiques, candidates blueprint (≥3 identiques), remplaçables par des fonctionnalités HA natives.

🛡️

Sécurité renforcée v1.5.2

@require_admin sur 18 handlers destructifs. Écritures YAML atomiques. Protection path traversal.

📜

Graphe de scripts

Cycles, profondeur excessive, scripts orphelins, candidats blueprint générés par l'IA.

👥

Analyseur de groupes

Groupes vides, références manquantes, imbrications excessives.

Score de santé

85/100
90–100 — ExcellentConfiguration propre
75–89 — BonQuelques optimisations possibles
50–74 — AttentionProblèmes à traiter
0–49 — CritiqueIntervention recommandée
💡
Intégration native HA
Le score est exposé comme capteur sensor.haca_health_score — utilisez-le dans vos dashboards Lovelace ou automatisations d'alerte.

Démarrage rapide

Consultez le pour être opérationnel en 5 minutes via HACS ou manuellement.

Installation

Installation

H.A.C.A s'installe en quelques minutes via HACS (recommandé) ou manuellement.

Prérequis

⚠️
Versions supportées
Home Assistant 2024.1 minimum · Python 3.12+ (inclus avec HA) · Accès au dossier /config/
ComposantVersion minimaleNotes
Home Assistant Core2024.1.0Requis
HACS1.34.0Optionnel (méthode recommandée)
PyYAML6.0Installé automatiquement
fpdf22.7.4Installé automatiquement

Installation via HACS

Méthode recommandée
HACS gère les mises à jour automatiquement et simplifie l'installation.
1

Installer HACS

Si HACS n'est pas installé, rendez-vous sur hacs.xyz et suivez le guide officiel. Redémarrez HA après installation.

2

Ajouter le dépôt personnalisé

Dans HACS : Intégrations → ⋮ → Dépôts personnalisés

  • URL : https://github.com/JeanMarc-Labs/ha-config-auditor
  • Catégorie : Intégration

Cliquez Ajouter.

3

Installer H.A.C.A

Recherchez H.A.C.A dans la liste, cliquez sur la carte, puis Télécharger. Choisissez la dernière version.

4

Redémarrer Home Assistant

Paramètres → Système → Redémarrer → Redémarrer Home Assistant

⚠️
Un redémarrage complet est obligatoire (pas seulement "Recharger").
5

Configurer l'intégration

Paramètres → Appareils & Services → + Ajouter une intégration

Recherchez H.A.C.A ou Config Auditor. ✅ Le panneau H.A.C.A apparaît dans votre sidebar.

Installation manuelle

bash
# Télécharger le projet
git clone https://github.com/JeanMarc-Labs/ha-config-auditor.git

# Copier le composant
mkdir -p /config/custom_components/
cp -r ha-config-auditor/custom_components/config_auditor /config/custom_components/

# Redémarrer HA puis ajouter l'intégration

Dépannage

ProblèmeSolution
Intégration absente après installationVérifiez que custom_components/config_auditor/manifest.json existe. Redémarrez HA (pas reload).
Panel absent de la sidebarVidez le cache navigateur (Ctrl+Shift+R). Vérifiez Profil → Menu latéral.
No module named fpdf2Les dépendances s'installent automatiquement au 1er démarrage complet.
Scans ne se lancent pasTestez via Outils de développement → Services : config_auditor.scan_all
Chat IA sans réponseConfigurez un LLM API dans Paramètres → Assistants vocaux et sélectionnez HACA comme LLM API de l'agent.
Utilisation

Tableau de bord

La première page que vous voyez en ouvrant H.A.C.A. Vue d'ensemble instantanée de la santé de votre installation.

Score de santé

Le score (0–100) est affiché en grand en haut. Il se met à jour après chaque scan.

formule
Score = 100 − Σ pénalités

Pénalités par issue :
  HIGH   → −5 points
  MEDIUM → −2 points
  LOW    → −1 point

Intégration dans HA

yaml · Automatisation d'alerte
automation:
  - alias: "HACA : Alerte score santé"
    trigger:
      - platform: numeric_state
        entity_id: sensor.haca_health_score
        below: 70
    action:
      - service: notify.mobile_app
        data:
          title: "⚠️ Score HA bas"
          message: "Score : {{ states('sensor.haca_health_score') }}/100"

Capteurs exposés dans HA

CapteurDescription
sensor.haca_health_scoreScore de santé global (0–100)
sensor.haca_total_issuesNombre total d'issues
sensor.haca_automation_issuesIssues d'automatisations
sensor.haca_entity_issuesIssues d'entités
sensor.haca_battery_low_countAppareils sous le seuil batterie
sensor.haca_battery_critical_countAppareils sous 10%
sensor.haca_battery_thresholdSeuil batterie configuré
Utilisation

Analyse des Issues

Comprendre, filtrer et agir sur les problèmes détectés par H.A.C.A.

Structure d'une carte d'issue

interface
┌─────────────────────────────────────────────────────┐
│ ⚠️ HIGH   Mode incorrect pour détection de mouvement │
│                                                      │
│ 📍 automation.lumieres_salon                         │
│                                                      │
│ L'automatisation utilise le mode 'single' mais       │
│ contrôle une lampe via un capteur de mouvement.      │
│                                                      │
│ [ ✏️ Ouvrir dans HA ] [ 🤖 IA ] [ 🔧 Fix ]          │
└─────────────────────────────────────────────────────┘

Boutons IA sur les issues

Chaque issue dispose d'un bouton 🤖 IA qui s'adapte au type d'issue :

ComportementTypes concernésAction
Modale simple fixno_alias, no_descriptionSuggestion IA dans un champ texte éditable → Fermer / Modifier manuellement / Appliquer
Chat impératif66 types (device_id, complexity, blueprints…)Ouvre le Chat avec un prompt pré-rempli — l'IA exécute la correction via les outils MCP
Explication8 types informationnelsExplique le problème avec les bonnes pratiques HA
Nouveau v1.5.2 — Modale simple fix
Pour no_alias et no_description, l'IA génère une suggestion directement dans une modale légère — pas besoin d'ouvrir le Chat complet. La valeur est modifiable avant application.

Filtres disponibles

  • 12 sous-onglets — Tous · Sécurité · Automations · Scripts · Scènes · Entités · Helpers · Performance · Blueprints · Dashboards · Carte Zones · Redondances
  • Chips de sévéritéHIGH MEDIUM LOW
  • Export CSV de la liste filtrée courante

Types d'issues principaux

device_id_in_trigger / action / target

🔴
HIGH — Casse silencieusement au remplacement matériel
Si le device est supprimé et réajouté, son ID change. L'automatisation cesse de fonctionner sans aucune erreur visible.
yaml · diff
- platform: device
  device_id: abc123def456
  domain: binary_sensor
  type: motion
- platform: state
  entity_id: binary_sensor.capteur_mouvement_salon
  to: "on"

incorrect_mode_motion_single

🔴
HIGH — La lumière peut rester allumée indéfiniment
En mode single, si le capteur se déclenche pendant l'exécution (extinction programmée), l'action est ignorée.
yaml · diff
mode: single
mode: restart   # ✅ Redémarre si nouveau mouvement détecté

expensive_template_states_all

🔴
HIGH — Charge CPU significative
L'expression states sans entité ciblée parcourt TOUTES les entités HA à chaque évaluation. Sur 500+ entités, l'impact est mesurable.
Utilisation

Corrections

H.A.C.A corrige certaines issues directement depuis l'interface, avec prévisualisation et backup automatique.

💾
Backup automatique + rollback
Avant toute correction, H.A.C.A crée automatiquement une sauvegarde YAML dans .haca_backups/. Si le rechargement HA échoue après la correction, le fichier original est restauré automatiquement.

Issues corrigeables

Type d'issueMéthodeFix
device_id_in_triggerConversion → platform: stateAuto
device_id_in_actionConversion → service + target.entity_idAuto
device_id_in_targetRemplacement device_identity_idAuto
incorrect_mode_motion_singleMode singlerestartAuto
template_simple_stateTemplate → condition nativeAuto
broken_device_referenceNettoyage de la référenceAuto
zombie_entitySuppression de l'entrée registreAuto
no_alias / no_descriptionModale IA + champ texte éditableModale IA
high_complexity_actionsOptimisation IA dans le ChatChat IA
Issues de zones, redondances, blueprintsPrompt impératif dans le Chat IAChat IA

Flux de correction automatique

1

Cliquez sur 🔧 Fix

Le bouton apparaît sur les issues corrigeables automatiquement.

2

Prévisualisation diff

Un modal affiche le YAML avant (rouge) et après (vert). Vérifiez la proposition.

3

Appliquer

H.A.C.A crée le backup, écrit le YAML corrigé de façon atomique, puis recharge. Si le rechargement échoue, le fichier original est restauré automatiquement.

4

HA recharge

Les automations/scripts sont rechargés immédiatement. Aucun redémarrage nécessaire.

Mode simulation

yaml
service: config_auditor.fix_device_id
data:
  automation_id: "1234567890abc"
  dry_run: true   # Aucun fichier modifié
Utilisation

Historique & Rapports

Suivez l'évolution de votre installation dans le temps et générez des rapports exportables.

Onglet Historique

Chaque scan produit un point de données conservé. Le graphique montre l'évolution du score sur les 30 derniers scans. Une hausse stable = vos corrections portent leurs fruits. Une baisse soudaine = nouvelles automations avec problèmes.

Fréquence du rapport automatique

Nouveau v1.5.2 — Fréquence configurable
Dans l'onglet Config, section Agent IA Proactif : choisissez Quotidien, Hebdomadaire (défaut), Mensuel ou Jamais. La vérification a lieu une fois par jour.

Formats de rapport

FormatContenuUsage
PDFRapport formaté, imprimableArchivage, partage
MarkdownRapport texte structuréDocumentation, Git
JSONDonnées brutes structuréesIntégrations, scripts
yaml · Via service HA
service: config_auditor.generate_report
data:
  format: pdf    # pdf | markdown | json | all
fichiers générés
/config/.haca_reports/
├── haca_report_20260314_143022.pdf
├── haca_report_20260314_143022.md
└── haca_report_20260314_143022.json
Utilisation

Batteries & Recorder DB

Surveillance des niveaux de batterie et analyse de la base de données Recorder.

Module Batteries

CouleurNiveauAction recommandée
🔴 Rouge< 10%Remplacement urgent
🟠 Orange10–20%Planifier le remplacement
🟢 Vert> 20%Niveau acceptable
yaml · Automatisation alerte batterie
automation:
  - alias: "HACA : Alerte batterie faible"
    trigger:
      - platform: numeric_state
        entity_id: sensor.haca_battery_low_count
        above: 0
    action:
      - service: notify.mobile_app
        data:
          title: "🔋 Batterie(s) faible(s)"
          message: >
            {{ states('sensor.haca_battery_low_count') }} appareil(s)
            sous {{ states('sensor.haca_battery_threshold') }}%

Module Recorder DB

🔴
Action irréversible
La purge supprime définitivement les données historiques. Créez une sauvegarde HA complète avant.
yaml
service: config_auditor.purge_recorder_orphans
Utilisation · v1.5.0

Prédictions batteries

H.A.C.A analyse la tendance des niveaux de batterie par régression linéaire sur l'historique HA et prédit quand chaque appareil aura besoin d'une pile neuve.

📊
Accès
Onglet Batteries → sous-onglet Prédictions. Nécessite que le Recorder HA soit actif et que les entités batterie aient au moins quelques jours d'historique.

Comment ça marche

Pour chaque entité batterie, H.A.C.A récupère les N derniers points de données et calcule une droite de régression linéaire. La pente détermine le taux de décharge journalier moyen. H.A.C.A extrapole ensuite la date à laquelle le niveau atteindra le seuil critique (10%) et le seuil d'alerte configuré.

💡
Précision
La régression linéaire est précise pour les batteries à décharge régulière (capteurs de température, mouvement). Elle est moins fiable pour les appareils à décharge par pics (télécommandes). H.A.C.A affiche un indicateur de confiance (R²).

Alertes préventives 7 jours

Tout appareil prédit pour atteindre le seuil critique dans les 7 prochains jours remonte une issue battery_predict_critical_soon de sévérité HIGH.

Export CSV

Colonnes : entity_id · current_level · days_remaining · predicted_empty_date · discharge_rate_per_day · confidence_r2.

Utilisation · v1.5.0

Impact Recorder

Identifie les entités qui saturent votre base de données SQLite et génère le bloc YAML recorder: exclude: prêt à copier-coller.

🗄️
Accès
Onglet Recorder → sous-onglet Impact. Auto-détecté dans /config/home-assistant_v2.db.

Métriques calculées

ColonneDescription
writes_per_dayNombre moyen d'écritures en base par jour (30 derniers jours)
mb_per_yearEstimation de l'espace disque consommé annuellement
total_statesNombre total de lignes en base pour cette entité
linked_automationsNombre d'automations référençant cette entité
impact_scoreScore composite normalisé 0-100

Génération du bloc YAML d'exclusion

yaml · configuration.yaml
recorder:
  exclude:
    entities:
      - sensor.temperature_exterieure   # 1842 writes/day — 2.1 MB/year
      - sensor.cpu_temperature            # 1440 writes/day — 1.6 MB/year
⚠️
Exclure une entité du Recorder supprime son historique dans les graphiques Lovelace. H.A.C.A indique le nombre d'automations liées.
Utilisation · v1.5.0

Complexité des zones

Heatmap interactive qui visualise la complexité de chaque zone et propose des suggestions automatiques de restructuration.

🗺️
Accès
Sous-onglet Carte Zones dans les sous-onglets Issues.

Score de complexité composite

DimensionPoids
Nombre d'entités30%
Nombre d'automations30%
Nombre de scripts20%
Imbrication de zones10%
Interdépendances10%

Interprétation

ScoreCouleurSignification
0–30■ VertZone simple
31–60■ JauneZone modérée — à surveiller
61–80■ OrangeZone complexe — révision conseillée
81–100■ RougeZone critique — restructuration recommandée

Suggestions automatiques

  • Découpage (area_split_suggested) — zones rouges > 80 : séparation en 2 sous-zones logiques
  • Fusion (area_merge_suggested) — paires de zones vertes < 20 avec entités similaires
Utilisation · v1.5.0

Analyseur de redondances

Détecte trois catégories de redondances entre vos automations pour nettoyer, consolider et simplifier votre configuration.

🔄
Accès
Sous-onglet Redondances dans les sous-onglets Issues.

Catégorie 1 — Chevauchements logiques

Deux automations partageant ≥ 80% des mêmes déclencheurs ET ciblant les mêmes entités avec des effets similaires → issue redundancy_overlap. L'IA propose de les fusionner.

Catégorie 2 — Candidates à la blueprintisation

Quand ≥ 3 automations sont structurellement identiques → issue redundancy_blueprint_candidate avec bouton Générer Blueprint.

Catégorie 3 — Remplaçables par des fonctionnalités HA natives

Pattern détectéFonctionnalité HA native suggérée
Allumage/extinction selon présenceadaptive_lighting
Action planifiée à heure fixeschedule integration
Thermostat avec plages horairesgeneric_thermostat
Notification sur changement d'étatalert integration
Suivi de présence GPSperson + zone natifs
Utilisation

Conformité

Audit de la qualité des métadonnées de votre configuration : noms lisibles, zones, icônes, labels et unique_id.

ℹ️
Onglet dédié
Les issues de conformité apparaissent dans l'onglet Compliance ET dans le sous-onglet correspondant des Issues (Entités, Helpers, etc.).

Types de checks disponibles

TypeDescriptionSévérité
compliance_no_friendly_nameEntité affichée par son entity_id brutMEDIUM
compliance_raw_entity_nameNom de domaine visible dans l'interfaceLOW
compliance_entity_no_areaEntité sans zone assignée (jusqu'à 150 individuelles)LOW
compliance_entity_no_area_bulkRésumé quand > 150 entités sans zone (bannière orange)LOW
compliance_area_no_iconZone sans icône définieLOW
compliance_helper_no_iconHelper nommé sans icôneLOW
compliance_helper_no_areaHelper nommé sans zoneLOW
compliance_unused_labelLabel créé mais non assignéLOW
compliance_automation_no_unique_idAutomation non éditable via l'UIMEDIUM
compliance_automation_no_descriptionAutomation sans descriptionLOW
compliance_script_no_descriptionScript sans descriptionLOW

Configuration

Dans l'onglet Config de H.A.C.A, section Conformité : chaque type de check peut être activé ou désactivé individuellement.

Corrections

Les issues de conformité ne nécessitent pas d'IA pour être corrigées — elles pointent vers des paramètres simples à renseigner directement dans l'interface HA. Utilisez les boutons Ouvrir dans HA de chaque carte pour accéder directement à la page de configuration correspondante.

Utilisation

Helpers

Onglet dédié à tous vos helpers d'entrée avec détection des helpers jamais utilisés.

Types de helpers surveillés

DomainDescription
input_booleanInterrupteurs logiques
input_numberValeurs numériques
input_textTextes libres
input_selectListes de sélection
input_datetimeDates et heures
input_buttonBoutons déclencheurs
timerMinuteries
counterCompteurs

Détection des helpers inutilisés

H.A.C.A vérifie chaque helper dans les automations, scripts et dashboards. Un helper non référencé génère une issue :

  • unused_input_helper — Helper jamais utilisé dans une automation ou un script (MEDIUM)
  • unused_timer_helper — Timer non référencé dans une automation, script ou dashboard (LOW)
Utilisation

Graphe de scripts

Analyse les chaînes d'appel entre scripts pour détecter cycles, profondeur excessive et orphelins.

Types d'issues détectées

TypeSévéritéDescription
script_cycle_detectedHIGHScript A appelle Script B qui rappelle Script A — boucle infinie
script_call_depth_exceededMEDIUMChaîne d'appel > 3 niveaux de profondeur
script_single_in_loopHIGHScript en mode single appelé en boucle — appels manqués
orphan_scriptMEDIUMScript jamais appelé par aucune automation
script_blueprint_candidateLOWScript appelé par ≥ 3 automations — candidat blueprint
Utilisation · v1.5.2

Graphe de dépendances

Visualisation D3.js force-directed de toutes les dépendances entre entités, automations, scripts et scènes.

Nouveau v1.5.2 — Sidebar de relations
Cliquer sur un nœud ouvre maintenant une sidebar avec les sections Utilisé par et Utilise — chaque item est cliquable pour naviguer directement vers ce nœud dans le graphe. Les données sont sauvegardées localement pour rester disponibles même après un refresh du graphe.

Exports disponibles

ExportContenuDisponible dans
CSV par nœudRelations d'un nœud sélectionné (colonnes : entity_id, label, type, relationship, direction)Sidebar (clic sur un nœud)
Markdown par nœudRapport structuré du nœud avec ses relations "← Utilisé par" / "→ Utilise"Sidebar (clic sur un nœud)
CSV graphe completToutes les relations du grapheToolbar
Markdown graphe completNœuds groupés par type avec détection des orphelinsToolbar

Navigation dans le graphe

  • Zoom — molette de la souris ou pinch sur mobile
  • Déplacer — clic + drag sur le fond
  • Nœud — clic pour ouvrir la sidebar de relations
  • Filtres — barre de filtres en haut pour afficher uniquement certains types de nœuds
Utilisation · v1.5.2

Intelligence Artificielle

H.A.C.A utilise votre LLM HA existant via une intégration native. Aucune clé API supplémentaire requise.

v1.5.2 — LLM API natif HA
HACA s'enregistre comme LLM API dans Home Assistant. Plus de hacks de prompt ni de parsing intermédiaire. Configurez une seule fois :
Paramètres → Assistants vocaux → [votre agent] → LLM API → HACA

Providers supportés

Tout agent conversation configuré dans HA est utilisable :

ProviderNotes
Google GeminiVia intégration Google Generative AI
OpenAI / ChatGPTVia intégration OpenAI Conversation
Anthropic ClaudeVia intégration Anthropic
Mistral / OpenRouterVia intégration OpenAI-compatible
Ollama100% local, aucune donnée envoyée sur internet

Fallback automatique

Si l'agent préféré échoue (quota dépassé, timeout, erreur), H.A.C.A essaie automatiquement l'agent suivant disponible. L'agent préféré de vos Assistants vocaux est toujours essayé en premier.

🏠
Ollama — IA 100% locale
Ollama fait tourner des LLM en local (Llama, Mistral, Qwen…). Aucune donnée envoyée sur internet — idéal pour les installations sensibles.

Explication des issues

Le bouton 🤖 IA génère pour chaque issue :

  • Pourquoi c'est un problème dans votre contexte
  • Quel risque cela représente concrètement
  • Comment le corriger (ou l'IA l'exécute directement)
  • Bonnes pratiques liées à ce type d'issue
🔄
Fallback sans IA
Si aucun LLM n'est disponible, H.A.C.A affiche une explication locale pré-rédigée adaptée au type d'issue.

Optimiseur d'automatisations complexes

Pour les automatisations avec un score de complexité ≥ 15, le bouton Optimiser ouvre le Chat avec un prompt complet incluant le YAML de l'automatisation. L'IA propose :

  • Extraction en scripts réutilisables
  • YAML modernisé et simplifié
  • Suggestion de blueprint si applicable

Agent IA Proactif

L'agent en arrière-plan génère un rapport automatique à la fréquence configurée (quotidien / hebdomadaire / mensuel). Il détecte aussi des corrélations entre les issues : par exemple, si 3 automations liées à la même zone ont toutes des problèmes similaires.

Utilisation

Chat IA

Assistant conversationnel avec accès à 65 outils MCP — lire, créer, modifier et recharger toute configuration HA en langage naturel.

⚙️
Prérequis
Configurez le LLM API HACA dans Paramètres → Assistants vocaux → [votre agent] → LLM API → HACA avant d'utiliser le Chat.

Exemples de requêtes

requêtes Chat IA
"Crée un blueprint à partir de l'automatisation lumières_cuisine
et applique-le aux 3 pièces similaires"

"Analyse les 5 automations avec le plus fort impact Recorder
et génère un bloc d'exclusion YAML"

"Renomme toutes les entités de la zone Salon pour suivre la
convention snake_case"

"Y a-t-il des automations qui se chevauchent logiquement ?
Montre-les moi et propose une fusion."

"Crée une scène 'Soirée cinéma' avec les lumières du salon à 20%"

Capacités

CapacitéExemple
Lire la configurationha_get_automation, ha_get_entities, ha_get_config_file
Créer des automatisationsha_create_automation avec YAML généré par l'IA
Modifier des YAMLha_update_automation, ha_update_script
Créer des blueprintsha_create_blueprint, ha_import_blueprint
Analyser l'historiqueha_get_history, ha_get_statistics
Gérer les tableaux de bordha_get_lovelace, ha_add_lovelace_card
Sauvegarderha_backup_create avant toute action destructive
Vérifier la configha_check_config après chaque écriture YAML

Rate limiting

Un délai minimum de 3 secondes est imposé entre les messages pour protéger vos quotas IA. Un message de confirmation s'affiche si vous envoyez trop vite.

Conversation ID

Le Chat maintient un conversation_id pour que l'IA se souvienne du contexte d'une message à l'autre au sein de la même session. Rafraîchir la page démarrera une nouvelle conversation.

Utilisation

Serveur MCP — 65 outils

Serveur Model Context Protocol intégré qui expose tous les outils H.A.C.A et HA aux agents IA externes.

Connexion

config agent IA
# URL du serveur MCP
http://homeassistant.local:8123/api/haca/mcp

# Header d'authentification
Authorization: Bearer <votre-token-haca>

# Token créé dans HA
Paramètres → Votre profil → Sécurité → Tokens d'accès longue durée
🔒
Sécurité
Le token MCP est stocké chiffré et masqué dans l'interface. Utilisez un token dédié à HACA — pas votre token HA principal.

Agents supportés

AgentConfiguration
Claude Codeclaude mcp add haca --url http://ha:8123/api/haca/mcp
Claude DesktopSection mcpServers dans claude_desktop_config.json
CursorSettings → MCP → Add server
VS Code / CopilotExtension Copilot → MCP Servers
WindsurfSettings → AI → MCP Servers
n8nNode MCP Client → URL + Bearer
HTTP/RESTPOST direct sur l'endpoint JSON-RPC 2.0

65 outils — 11 catégories

📊
Audit HACA
7
haca_get_scorehaca_get_issueshaca_get_automationhaca_fix_suggestionhaca_apply_fixhaca_get_batterieshaca_explain_issue
🔍
Recherche
7
ha_get_entitiesha_deep_searchha_get_entity_detailha_list_servicesha_get_scoreha_get_issuesha_get_batteries
Contrôle
8
ha_call_serviceha_reload_coreha_rename_entityha_enable_entityha_remove_entityha_manage_entity_labelsha_list_labelsha_create_label
🤖
Automations & Scripts
9
ha_get_automationha_create_automationha_update_automationha_remove_automationha_get_scriptha_create_scriptha_update_scriptha_remove_scriptha_get_automation_traces
📐
Blueprints
6
ha_list_blueprintsha_get_blueprintha_create_blueprintha_import_blueprintha_update_blueprintha_remove_blueprint
🎨
Scènes
4
ha_get_sceneha_create_sceneha_update_sceneha_remove_scene
🖥️
Tableaux de bord
5
ha_get_lovelaceha_list_dashboardsha_add_lovelace_cardha_update_lovelace_cardha_remove_lovelace_card
📈
Monitoring
5
ha_get_historyha_get_statisticsha_get_logbookha_get_system_healthha_get_updates
🧩
Helpers & Zones
6
ha_config_list_helpersha_config_set_helperha_config_remove_helperha_get_helperha_update_helperha_config_set_area
⚙️
Fichiers config
2
ha_get_config_fileha_update_config_file
🛡️
Sécurité & Validation
6
ha_backup_createha_check_configha_eval_templateha_fix_suggestionha_apply_fixha_explain_issue

Sécurité

Tous les outils destructifs requièrent un token admin. H.A.C.A vérifie les droits administrateur côté serveur avant d'exécuter toute action d'écriture. Les chemins de fichiers sont validés avec os.path.realpath() pour prévenir le path traversal.

Référence

Tous les types d'issues

Tableau complet. Légende fix : Auto automatique · Modale IA champ texte éditable · Chat IA prompt MCP · Manuel édition directe dans HA.

TypeSévéritéFixDescription
device_id_in_triggerHIGHAutoDéclencheur utilise device_id — fragile au remplacement matériel
device_id_in_actionHIGHAutoAction utilise device_id directement
device_id_in_targetHIGHAutotarget.device_id au lieu de target.entity_id
device_trigger_platformHIGHAutoPlateforme de déclencheur device
device_id_in_conditionMEDIUMAutoCondition utilise device_id
incorrect_mode_motion_singleHIGHAutoMode single sur automation mouvement/lumière
template_simple_stateMEDIUMAutoTemplate remplaçable par condition native
no_aliasLOWModale IAAutomatisation sans nom lisible
no_descriptionLOWModale IAAutomatisation sans description
high_complexity_actionsMEDIUMChat IAScore de complexité élevé — refactoring suggéré
deprecated_serviceHIGHManuelService HA déprécié
potential_self_loopHIGHManuelBoucle de déclenchement potentielle
duplicate_automationMEDIUMManuelAutomation identique à une autre
never_triggeredLOWManuelAucun déclenchement en mémoire
excessive_delayLOWManuelDélai > 1h dans une action
high_parallel_maxMEDIUMManuelmax_exceeded élevé en mode parallel
TypeSévéritéFixDescription
unavailable_entityHIGHManuelEntité en état unavailable
stale_entityMEDIUMManuelEntité sans changement d'état depuis longtemps
broken_device_referenceHIGHAutoRéférence à un appareil inexistant
zombie_entityMEDIUMAutoEntité dans le registre sans intégration active
disabled_but_referencedMEDIUMManuelEntité désactivée utilisée dans une automation
TypeSévéritéFixDescription
expensive_template_states_allHIGHManuelTemplate utilisant states (tous) — très coûteux en CPU
template_time_checkMEDIUMManuelVérification temporelle coûteuse
template_numeric_comparisonMEDIUMManuelComparaison numérique inefficace en template
recorder_high_impactMEDIUMManuelEntité avec impact SQLite élevé (écritures/jour)
TypeSévéritéFixDescription
hardcoded_secretHIGHManuelSecret codé en dur (mot de passe, token…)
sensitive_data_exposureHIGHManuelDonnées sensibles exposées en clair
TypeSévéritéFixDescription
blueprint_file_not_foundHIGHManuelFichier blueprint introuvable
blueprint_empty_inputMEDIUMManuelInput de blueprint vide
blueprint_candidateLOWChat IAScript appelé par ≥ 3 automations — candidat blueprint
TypeSévéritéFixDescription
script_cycle_detectedHIGHManuelCycle dans la chaîne d'appel
script_call_depth_exceededMEDIUMManuelChaîne > 3 niveaux
script_single_in_loopHIGHAutoScript mode single appelé en boucle
orphan_scriptMEDIUMManuelScript jamais appelé
unused_input_helperMEDIUMManuelHelper jamais utilisé
unused_timer_helperLOWManuelTimer jamais référencé
TypeSévéritéFixDescription
scene_unavailable_entityHIGHManuelScène référençant une entité unavailable
scene_never_activatedMEDIUMManuelScène non activée depuis > 90 jours
scene_duplicateMEDIUMManuelScènes en double
TypeSévéritéFixDescription
group_emptyMEDIUMManuelGroupe sans membre
group_missing_entityHIGHManuelGroupe référençant une entité inexistante
group_all_unavailableMEDIUMManuelTous les membres unavailable
group_nesting_exceededMEDIUMManuelGroupes imbriqués > 2 niveaux
TypeSévéritéFixDescription
compliance_no_friendly_nameMEDIUMManuelEntité sans nom lisible
compliance_entity_no_areaLOWManuelEntité sans zone (jusqu'à 150 individuelles)
compliance_entity_no_area_bulkLOWManuelRésumé groupé > 150 (bannière orange)
compliance_area_no_iconLOWManuelZone sans icône
compliance_helper_no_iconLOWManuelHelper sans icône
compliance_helper_no_areaLOWManuelHelper sans zone
compliance_unused_labelLOWManuelLabel non assigné
compliance_automation_no_unique_idMEDIUMModale IAAutomation sans unique_id
compliance_automation_no_descriptionLOWModale IAAutomation sans description
compliance_script_no_descriptionLOWModale IAScript sans description
TypeSévéritéFixDescription
area_high_complexityMEDIUMChat IAZone dépassant le seuil de complexité composite
area_split_suggestedMEDIUMChat IAZone trop large — découpage suggéré
area_merge_suggestedLOWChat IAZones similaires peu peuplées — fusion suggérée
TypeSévéritéFixDescription
redundancy_overlapMEDIUMChat IAChevauchement logique : mêmes déclencheurs, mêmes cibles
redundancy_blueprint_candidateMEDIUMChat IA≥3 automations identiques — bouton "Générer Blueprint"
redundancy_native_haLOWChat IAAutomation remplaçable par une fonctionnalité HA native
Référence

Services HA

yaml
# Scans
service: config_auditor.scan_all
service: config_auditor.scan_automations
service: config_auditor.scan_entities
service: config_auditor.scan_compliance

# Preview + Fix (backup auto + rollback si reload échoue)
service: config_auditor.preview_device_id
data: { automation_id: "abc123" }

service: config_auditor.fix_device_id
data: { automation_id: "abc123", dry_run: false }

service: config_auditor.restore_backup
data: { backup_path: ".haca_backups/automations_20260314.yaml" }

# Rapport
service: config_auditor.generate_report
data: { format: pdf }   # pdf | markdown | json | all

# Purge Recorder
service: config_auditor.purge_recorder_orphans
Référence

Configuration

ℹ️
Toute la configuration se fait depuis le panel H.A.C.A (onglet ⚙️ Config), pas dans configuration.yaml.

Options

OptionTypeDéfautDescription
scan_intervalint60 minIntervalle de scan automatique (5–1440 min)
battery_alert_thresholdint20%Seuil d'alerte batterie (1–50%)
notifications_enabledbooltrueNotifications HA lors de nouvelles issues HIGH
report_frequencystringweeklyFréquence du rapport auto : daily / weekly / monthly / never
debug_modeboolfalseActive les logs debug
mcp_ha_tokenstringToken HA longue durée pour le serveur MCP
excluded_issue_typeslist[]Types d'issues à exclure des scans
excluded_compliance_typeslist[]Types de checks de conformité désactivés

Structure des fichiers

structure
/config/
├── custom_components/config_auditor/
├── .haca_backups/
│   └── automations_20260314_143022.yaml
└── .haca_reports/
    ├── haca_report_20260314.pdf
    ├── haca_report_20260314.md
    └── haca_report_20260314.json

Niveaux de log

yaml · configuration.yaml
logger:
  logs:
    custom_components.config_auditor: debug
Contribution

Architecture

llm_api.py ✨
HacaLLMAPI + HacaTool. S'enregistre comme LLM API dans HA. Mistral/Gemini/Llama utilisent les 65 outils nativement (v1.5.2)
mcp_server.py
65 outils MCP. _atomic_write, _auto_backup, _safe_write_and_reload, protection path traversal
websocket.py
Handlers WebSocket. @require_admin sur 18 handlers destructifs. Simple fix modal (v1.5.2)
conversation.py
Bridge IA multi-provider. Fallback via entity_registry (config_entry_id). 526 lignes (v1.5.2)
proactive_agent.py
Agent background. Rapport auto fréquence configurable. Vérification 1×/jour (v1.5.2)
automation_analyzer.py
23+ types d'issues dans automations, scripts et scènes
dep_graph.js
Sidebar relations "Utilisé par / Utilise". Exports CSV+MD par nœud et graphe complet (v1.5.2)
health_score.py
Score 0-100 avec pénalités HIGH(−5)/MEDIUM(−2)/LOW(−1)
battery_predictor.py
Régression linéaire. Dates prédites. Alertes 7j. Confidence R²
area_complexity_analyzer.py
Score composite 5D. Heatmap interactive. Suggestions fusion/découpage
redundancy_analyzer.py
Overlaps logiques. Blueprints (≥3 identiques). Remplacement natifs HA
recorder_impact_analyzer.py
writes/day + MB/year. Génération YAML recorder: exclude:
Contribution

Guide développeur

Patterns obligatoires

Écriture YAML — _safe_write_and_reload

python
# ❌ Dangereux
auto_file.write_text(new_yaml)
await hass.services.async_call("automation", "reload", blocking=True)

# ✅ Atomique + rollback si reload échoue
await _safe_write_and_reload(hass, auto_file, new_yaml, "automation")

Always async

python
# ✅ Non-bloquant
async def async_load_yaml(hass, path):
    return await hass.async_add_executor_job(lambda: yaml.safe_load(open(path)))

Shadow DOM — appender au body

javascript
// ✅ Toujours visible
document.body.appendChild(modal);

Build JS — toujours modifier src/*.js

bash
# 1. Modifier dans www/src/ (jamais haca-panel.js directement)
# 2. Builder
cd www && bash build.sh
# 3. Ctrl+Shift+R dans le navigateur
🔒
Sécurité — règles obligatoires
@require_admin sur tout handler WebSocket qui écrit/supprime des données.
os.path.realpath() pour valider tout chemin fourni par l'utilisateur.
Jamais de write_text() directement — utiliser _atomic_write().

Ajout d'un module analyseur

ÉtapeFichierAction
1my_analyzer.pyImplémenter async def analyze(hass) → list[Issue]
2__init__.pyImporter et appeler dans analyze_all()
3const.pyAjouter les types dans ISSUE_TYPES
4translations/*.jsonClés dans les 13 langues sous panel.issue_types.types.*
5www/src/issues.jsAjouter dans _buildActionPrompt()
6tests/test_my_analyzer.pyCréer le fichier de tests
7www/build.shAjouter le .js avant closer.js
Contribution

Tests

FichierModule couvert
test_automation_analyzer.pyAnalyseur d'automations, scripts, scènes
test_refactoring_assistant.pyCorrections auto, preview diff, backup + rollback
test_entity_analyzer.pyEntités fantômes, zombies, désactivées
test_v130_features.pyScript graph, scènes, groupes, blueprints, version
test_conversation.pyBridge IA, fallback, entity_registry match
test_websocket.py v1.5.2@require_admin, fallback chat, atomic write, auto-backup, path traversal
test_llm_api.py v1.5.2HacaLLMAPI, HacaTool routing, JSON Schema→voluptuous, rollback, timeout deep_search, rate limit
bash
pip install pytest pytest-asyncio homeassistant --break-system-packages
python -m pytest custom_components/config_auditor/tests/ -v
python -m pytest custom_components/config_auditor/tests/test_llm_api.py -v
⚙️
pytest.ini à la racine du repo configure asyncio_mode = auto. Ce fichier ne doit pas être inclus dans le zip de distribution.
-title">pytest-asyncioLe fichier pytest.ini à la racine du repo configure asyncio_mode = auto. Il ne doit pas être inclus dans le zip de distribution.
Contribution

Contribuer à H.A.C.A

Toute contribution est bienvenue — bug fix, nouvelle fonctionnalité, documentation ou traduction.

Workflow Git

bash
# 1. Fork + clone
git clone https://github.com/VOTRE_USERNAME/ha-config-auditor.git
cd ha-config-auditor

# 2. Branche feature
git checkout -b feature/ma-fonctionnalite

# 3. Développer et tester
python -m pytest custom_components/config_auditor/tests/ -v
cd www && bash build.sh

# 4. Commit (Conventional Commits)
git commit -m "feat: add configurable report frequency"
git commit -m "fix: _async_find_all_ai_task_entities entity_registry match"
git commit -m "security: add @require_admin to handle_apply_field_fix"

# 5. Push + Pull Request
git push origin feature/ma-fonctionnalite

Checklist Pull Request

  • Tests unitaires ajoutés/mis à jour pour les nouvelles fonctionnalités
  • python -m pytest tests/ passe sans erreur (0 failed)
  • cd www && bash build.sh si le JS a été modifié
  • Traductions FR et EN mises à jour si nouveaux textes UI
  • 13 langues synchronisées (toutes les clés présentes dans chaque fichier)
  • CHANGELOG.md et CHANGELOG_fr.md mis à jour
  • Version mise à jour dans const.py, manifest.json et translations/*.json
  • Handlers WebSocket destructifs protégés par @require_admin
  • Pas de secrets ou données personnelles dans le code

Bonnes pratiques HA

1️⃣
Toujours async — toute I/O bloquante passe par hass.async_add_executor_job().
2️⃣
Écriture YAML — utiliser _atomic_write + _safe_write_and_reload (rollback automatique).
3️⃣
Sécurité@require_admin sur tout handler destructif. Valider les chemins avec os.path.realpath().
4️⃣
Registre d'entités — utiliser entity_registry.async_get(entity_id) pour les métadonnées.
5️⃣
Traductions — toute chaîne UI doit être dans les 13 fichiers JSON sous panel.* (pas à la racine).

Liens utiles