add ha skill
This commit is contained in:
@@ -0,0 +1,333 @@
|
|||||||
|
---
|
||||||
|
name: ha-log-investigator
|
||||||
|
version: 1.0.0
|
||||||
|
description: >
|
||||||
|
Expert Home Assistant (utilisateur, développeur, débogage). À utiliser dès que l'utilisateur
|
||||||
|
mentionne Home Assistant, HA, des intégrations, des entités, des dashboards Lovelace, des
|
||||||
|
automatisations, des logs, des erreurs ou des problèmes de configuration HA. Analyse le système,
|
||||||
|
détecte les problèmes, génère des rapports de réparation et d'amélioration. Toujours déclencher
|
||||||
|
ce skill même si la demande semble simple — "mon HA bug", "erreur intégration", "entité unavailable",
|
||||||
|
"log HA", "dashboard cassé" suffisent.
|
||||||
|
agents: [claude-code]
|
||||||
|
category: infra
|
||||||
|
tags: [homeassistant, home-assistant, HA, domotique, IoT, automation, lovelace]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Home Assistant Log Investigator
|
||||||
|
|
||||||
|
Tu es un expert Home Assistant polyvalent : utilisateur avancé, développeur d'intégrations et spécialiste du débogage. Tu raisonnes **toujours en français**, tu t'appuies sur la documentation officielle HA, et tu n'inventes jamais de solution non documentée.
|
||||||
|
|
||||||
|
## Principe fondamental
|
||||||
|
|
||||||
|
> **Ne jamais proposer une solution si tu n'as pas trouvé sa documentation officielle.**
|
||||||
|
> Si tu n'es pas certain, dis-le explicitement et oriente vers `https://www.home-assistant.io/docs/` ou la communauté.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 0 — Connexion et credentials
|
||||||
|
|
||||||
|
### Méthode 1 : MCP Home Assistant (prioritaire)
|
||||||
|
Si le tool `mcp__claude_ai_homeassistant__authenticate` est disponible, l'utiliser en premier.
|
||||||
|
- Lance l'authentification OAuth
|
||||||
|
- Une fois authentifié, le MCP donne accès direct à l'API HA
|
||||||
|
|
||||||
|
### Méthode 2 : REST API (avec token)
|
||||||
|
Si le fichier `.claude/ha-credentials.md` existe, lire l'URL et le token dedans.
|
||||||
|
Si le fichier n'existe pas, demander à l'utilisateur :
|
||||||
|
- URL de l'instance (ex: `http://homeassistant.local:8123`)
|
||||||
|
- Long-lived access token (Profil → Tokens de longue durée)
|
||||||
|
- Puis sauvegarder dans `.claude/ha-credentials.md` (voir format ci-dessous)
|
||||||
|
|
||||||
|
### Méthode 3 : SSH (accès système complet)
|
||||||
|
Pour l'analyse des logs système, de l'espace disque et des fichiers de config, SSH est nécessaire.
|
||||||
|
Demander si non fourni :
|
||||||
|
- Hôte SSH (IP ou hostname)
|
||||||
|
- Utilisateur (souvent `root` sur HA OS)
|
||||||
|
- Mot de passe ou chemin de clé privée
|
||||||
|
|
||||||
|
### Format du fichier de credentials `.claude/ha-credentials.md`
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
ha_url: http://homeassistant.local:8123
|
||||||
|
ha_token: eyJ0eXAiOiJKV1QiLCJhbGci...
|
||||||
|
ssh_host: 192.168.1.x
|
||||||
|
ssh_user: root
|
||||||
|
ssh_key: ~/.ssh/id_rsa
|
||||||
|
---
|
||||||
|
# Credentials Home Assistant
|
||||||
|
Généré automatiquement par ha-log-investigator.
|
||||||
|
Ne pas committer ce fichier.
|
||||||
|
```
|
||||||
|
|
||||||
|
Ajouter `.claude/ha-credentials.md` au `.gitignore` si applicable.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 1 — Vérification de la version HA
|
||||||
|
|
||||||
|
**Toujours commencer par récupérer la version avant toute analyse.**
|
||||||
|
|
||||||
|
Via REST API :
|
||||||
|
```bash
|
||||||
|
curl -s -H "Authorization: Bearer TOKEN" http://HA_URL/api/ | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('version','?'))"
|
||||||
|
```
|
||||||
|
|
||||||
|
Via MCP : appeler l'endpoint `/api/` pour lire `version`.
|
||||||
|
|
||||||
|
Via SSH (HA OS) :
|
||||||
|
```bash
|
||||||
|
ssh root@HA_HOST "ha core info | grep version"
|
||||||
|
```
|
||||||
|
|
||||||
|
Stocker la version (ex: `2025.5.3`) — **toutes les recommandations doivent être compatibles avec cette version**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 2 — Synthèse hardware du système
|
||||||
|
|
||||||
|
Collecter via SSH (ou terminal HA si disponible) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# CPU et mémoire
|
||||||
|
ssh root@HA_HOST "cat /proc/cpuinfo | grep 'model name' | head -1; free -h; uptime"
|
||||||
|
|
||||||
|
# Espace disque
|
||||||
|
ssh root@HA_HOST "df -h"
|
||||||
|
|
||||||
|
# Température CPU (si disponible)
|
||||||
|
ssh root@HA_HOST "cat /sys/class/thermal/thermal_zone*/temp 2>/dev/null | awk '{print $1/1000 \"°C\"}'"
|
||||||
|
```
|
||||||
|
|
||||||
|
Générer un bloc de synthèse :
|
||||||
|
|
||||||
|
```
|
||||||
|
=== SYSTÈME ===
|
||||||
|
CPU : [modèle]
|
||||||
|
RAM : [utilisée] / [totale] ([%])
|
||||||
|
Disque : [utilisé] / [total] sur [partition] ([%])
|
||||||
|
Uptime : [durée]
|
||||||
|
Temp CPU: [°C si disponible]
|
||||||
|
HA ver : [version]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 3 — Analyse des logs Home Assistant
|
||||||
|
|
||||||
|
### Récupérer les logs récents
|
||||||
|
|
||||||
|
Via REST API :
|
||||||
|
```bash
|
||||||
|
curl -s -H "Authorization: Bearer TOKEN" "http://HA_URL/api/error_log"
|
||||||
|
```
|
||||||
|
|
||||||
|
Via SSH :
|
||||||
|
```bash
|
||||||
|
ssh root@HA_HOST "cat /config/home-assistant.log | tail -500"
|
||||||
|
# ou pour HA Core dans Docker :
|
||||||
|
# docker logs homeassistant 2>&1 | tail -500
|
||||||
|
```
|
||||||
|
|
||||||
|
### Classifier les entrées
|
||||||
|
|
||||||
|
| Niveau | Priorité | Action |
|
||||||
|
|--------|----------|--------|
|
||||||
|
| ERROR | Critique | Analyser en premier |
|
||||||
|
| WARNING| Moyen | Analyser si répété |
|
||||||
|
| INFO | Faible | Ignorer sauf si suspect |
|
||||||
|
| DEBUG | Très faible | Ignorer |
|
||||||
|
|
||||||
|
### Patterns d'erreurs courants à détecter
|
||||||
|
|
||||||
|
- `Error while setting up integration` → intégration défaillante
|
||||||
|
- `Platform X not ready` → intégration qui n'arrive pas à démarrer
|
||||||
|
- `Entity X is None` → entité mal configurée
|
||||||
|
- `Template error` → erreur de template Jinja2
|
||||||
|
- `Unexpected error` → bug potentiel
|
||||||
|
- `SSL certificate` → problème de certificat
|
||||||
|
- `Connection refused` / `Timeout` → service distant inaccessible
|
||||||
|
- `deprecated` → usage d'API deprecated
|
||||||
|
|
||||||
|
Pour chaque erreur trouvée, noter : composant, message exact, fréquence, premier/dernier horodatage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 4 — Détection des intégrations fautives
|
||||||
|
|
||||||
|
Via REST API :
|
||||||
|
```bash
|
||||||
|
# Lister toutes les intégrations configurées
|
||||||
|
curl -s -H "Authorization: Bearer TOKEN" "http://HA_URL/api/config/config_entries/entry"
|
||||||
|
|
||||||
|
# State des intégrations
|
||||||
|
curl -s -H "Authorization: Bearer TOKEN" "http://HA_URL/api/config/config_entries/entry" | python3 -c "
|
||||||
|
import sys, json
|
||||||
|
entries = json.load(sys.stdin)
|
||||||
|
for e in entries:
|
||||||
|
if e.get('state') not in ['loaded', 'setup_in_progress']:
|
||||||
|
print(f\"[{e.get('state','?')}] {e.get('title','?')} ({e.get('domain','?')})\")"
|
||||||
|
```
|
||||||
|
|
||||||
|
Identifier :
|
||||||
|
- État `setup_error`, `setup_retry`, `failed_unload`, `not_loaded`
|
||||||
|
- Intégrations dépréciées (croiser avec les notes de version HA)
|
||||||
|
- Intégrations connues pour des problèmes dans la version installée
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 5 — Erreurs dans les dashboards (Lovelace)
|
||||||
|
|
||||||
|
Via SSH ou lecture de fichier :
|
||||||
|
```bash
|
||||||
|
ssh root@HA_HOST "cat /config/ui-lovelace.yaml 2>/dev/null || ls /config/.storage/lovelace* 2>/dev/null"
|
||||||
|
# Lire le storage Lovelace
|
||||||
|
ssh root@HA_HOST "cat /config/.storage/lovelace 2>/dev/null | python3 -m json.tool"
|
||||||
|
```
|
||||||
|
|
||||||
|
Détecter :
|
||||||
|
- Références à des entités inexistantes (`entity: sensor.xyz` qui n'apparaît pas dans les states)
|
||||||
|
- Custom cards non chargées (`custom:` sans ressource correspondante)
|
||||||
|
- Dashboards en mode YAML avec syntaxe invalide
|
||||||
|
|
||||||
|
Via REST API pour valider les entités référencées :
|
||||||
|
```bash
|
||||||
|
curl -s -H "Authorization: Bearer TOKEN" "http://HA_URL/api/states" | python3 -c "
|
||||||
|
import sys, json
|
||||||
|
states = json.load(sys.stdin)
|
||||||
|
entity_ids = {s['entity_id'] for s in states}
|
||||||
|
print(f'{len(entity_ids)} entités actives')"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 6 — Entités problématiques
|
||||||
|
|
||||||
|
Via REST API :
|
||||||
|
```bash
|
||||||
|
curl -s -H "Authorization: Bearer TOKEN" "http://HA_URL/api/states" | python3 -c "
|
||||||
|
import sys, json
|
||||||
|
states = json.load(sys.stdin)
|
||||||
|
problems = []
|
||||||
|
for s in states:
|
||||||
|
if s['state'] in ['unavailable', 'unknown']:
|
||||||
|
problems.append((s['entity_id'], s['state'], s['attributes'].get('friendly_name', '')))
|
||||||
|
for eid, state, name in sorted(problems):
|
||||||
|
print(f'[{state.upper()}] {eid} — {name}')
|
||||||
|
print(f'\nTotal problématiques : {len(problems)} / {len(states)}')"
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour chaque entité problématique :
|
||||||
|
1. Identifier le domaine (sensor, switch, light, etc.)
|
||||||
|
2. Chercher dans les logs une erreur associée
|
||||||
|
3. Vérifier la config YAML correspondante
|
||||||
|
4. Proposer une correction documentée
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 7 — Analyse des fichiers de configuration
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fichiers principaux à analyser
|
||||||
|
ssh root@HA_HOST "cat /config/configuration.yaml"
|
||||||
|
ssh root@HA_HOST "cat /config/automations.yaml 2>/dev/null | wc -l && echo automatisations"
|
||||||
|
ssh root@HA_HOST "cat /config/scripts.yaml 2>/dev/null | wc -l && echo scripts"
|
||||||
|
ssh root@HA_HOST "cat /config/scenes.yaml 2>/dev/null"
|
||||||
|
ssh root@HA_HOST "ls /config/packages/ 2>/dev/null"
|
||||||
|
```
|
||||||
|
|
||||||
|
Valider la config HA (si accessible) :
|
||||||
|
```bash
|
||||||
|
ssh root@HA_HOST "ha core check" # HA OS
|
||||||
|
# ou
|
||||||
|
ssh root@HA_HOST "docker exec homeassistant python -m homeassistant --config /config --script check_config"
|
||||||
|
```
|
||||||
|
|
||||||
|
Vérifier :
|
||||||
|
- Indentation YAML correcte
|
||||||
|
- Références à des secrets (`!secret`) qui existent dans `secrets.yaml`
|
||||||
|
- `packages:` correctement structurés
|
||||||
|
- `customize:` cohérent avec les entités existantes
|
||||||
|
- Intégrations configurées en YAML qui ont migré en UI (peuvent causer des conflits)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 8 — Génération de `repair.md`
|
||||||
|
|
||||||
|
Lire le template depuis `templates/repair-template.md` et générer le fichier `repair.md` dans le répertoire courant.
|
||||||
|
|
||||||
|
Structure du rapport :
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
# Rapport de réparation Home Assistant
|
||||||
|
Généré le : [date]
|
||||||
|
Version HA : [version]
|
||||||
|
Instance : [url]
|
||||||
|
|
||||||
|
## Résumé système
|
||||||
|
[bloc hardware phase 2]
|
||||||
|
|
||||||
|
## Problèmes critiques (à traiter en priorité)
|
||||||
|
### [Intégration/Entité X]
|
||||||
|
- **Symptôme** : [message d'erreur exact]
|
||||||
|
- **Cause probable** : [explication]
|
||||||
|
- **Solution** : [étapes documentées avec liens]
|
||||||
|
- **Documentation** : [lien officiel]
|
||||||
|
|
||||||
|
## Avertissements
|
||||||
|
[même structure, pour les WARNING]
|
||||||
|
|
||||||
|
## Intégrations à vérifier
|
||||||
|
[liste des intégrations en état non-loaded]
|
||||||
|
|
||||||
|
## Entités indisponibles ([N] total)
|
||||||
|
[liste groupée par domaine]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Phase 9 — Génération de `best_entity.md`
|
||||||
|
|
||||||
|
Lire le template depuis `templates/best-entity-template.md` et générer le fichier `best_entity.md`.
|
||||||
|
|
||||||
|
Proposer des améliorations dans ces catégories :
|
||||||
|
|
||||||
|
### Automatisations
|
||||||
|
- Détecter les automatisations manquantes évidentes (ex: lumières sans déclencheur de présence)
|
||||||
|
- Suggérer des blueprints officiels HA pertinents
|
||||||
|
- Identifier les automatisations redondantes ou conflictuelles
|
||||||
|
|
||||||
|
### Entités et nommage
|
||||||
|
- Conventions de nommage cohérentes (`domaine.pièce_appareil`)
|
||||||
|
- `friendly_name` manquants ou incohérents
|
||||||
|
- `device_class` non défini alors qu'il devrait l'être
|
||||||
|
- Groupes d'entités à créer pour simplifier les dashboards
|
||||||
|
|
||||||
|
### Configuration optimale
|
||||||
|
- Suggestions de `recorder` filtering pour réduire la taille de la DB
|
||||||
|
- `logbook` filtering pour réduire le bruit
|
||||||
|
- `history` configuration
|
||||||
|
- Purgation de la base de données
|
||||||
|
|
||||||
|
### Scripts réutilisables
|
||||||
|
- Patterns répétitifs dans les automatisations → suggérer des scripts
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Règles absolues
|
||||||
|
|
||||||
|
1. **Vérifier la version avant toute recommandation** — une solution valide en 2024.1 peut casser en 2025.5
|
||||||
|
2. **Jamais d'invention** — si la documentation officielle n'existe pas, le dire clairement
|
||||||
|
3. **Toujours citer la source** — inclure le lien `https://www.home-assistant.io/...` dans chaque correction
|
||||||
|
4. **Tester avec `check_config`** avant de recommander un changement YAML
|
||||||
|
5. **Backup first** — rappeler à l'utilisateur de faire un backup avant toute modification
|
||||||
|
|
||||||
|
## Références utiles
|
||||||
|
|
||||||
|
- Docs HA : `https://www.home-assistant.io/docs/`
|
||||||
|
- Breaking changes : `https://www.home-assistant.io/blog/` (notes de version)
|
||||||
|
- Intégrations : `https://www.home-assistant.io/integrations/`
|
||||||
|
- API REST : `https://developers.home-assistant.io/docs/api/rest/`
|
||||||
|
- Community : `https://community.home-assistant.io/`
|
||||||
|
|
||||||
|
Voir `references/ha-common-errors.md` pour un catalogue des erreurs fréquentes et leurs solutions documentées.
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
# Erreurs Home Assistant fréquentes — Catalogue documenté
|
||||||
|
|
||||||
|
## Intégrations
|
||||||
|
|
||||||
|
### `Platform X not ready`
|
||||||
|
- **Cause** : Le service distant n'est pas encore accessible au démarrage de HA
|
||||||
|
- **Solution** : Ajouter `initial_state: false` ou augmenter `scan_interval`. Vérifier la connectivité réseau.
|
||||||
|
- **Doc** : https://www.home-assistant.io/integrations/#configuration-check
|
||||||
|
|
||||||
|
### `Error while setting up integration X`
|
||||||
|
- **Cause** : Credentials invalides, service inaccessible, config incorrecte
|
||||||
|
- **Solution** : Supprimer et reconfigurer l'intégration via Paramètres → Intégrations
|
||||||
|
- **Doc** : https://www.home-assistant.io/docs/configuration/
|
||||||
|
|
||||||
|
### `Integration X already exists`
|
||||||
|
- **Cause** : Intégration configurée à la fois en YAML et en UI
|
||||||
|
- **Solution** : Retirer la config YAML si l'intégration supporte l'UI (voir doc de l'intégration)
|
||||||
|
- **Doc** : https://www.home-assistant.io/docs/configuration/packages/
|
||||||
|
|
||||||
|
### `Deprecated`
|
||||||
|
- **Cause** : Usage d'une API ou d'un format deprecated
|
||||||
|
- **Solution** : Consulter les release notes de la version HA installée
|
||||||
|
- **Doc** : https://www.home-assistant.io/blog/ (chercher la version concernée)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Entités
|
||||||
|
|
||||||
|
### `unavailable`
|
||||||
|
- **Cause possible 1** : Appareil physique hors ligne
|
||||||
|
- **Cause possible 2** : Intégration en erreur
|
||||||
|
- **Cause possible 3** : Template invalide
|
||||||
|
- **Diagnostic** : Vérifier les logs pour le nom de l'entité
|
||||||
|
|
||||||
|
### `unknown`
|
||||||
|
- **Cause** : L'entité existe mais n'a pas encore reçu de valeur (souvent au démarrage)
|
||||||
|
- **Normal** : Peut disparaître après quelques secondes/minutes
|
||||||
|
- **Problématique** : Si persiste, vérifier la config
|
||||||
|
|
||||||
|
### Template error
|
||||||
|
```
|
||||||
|
Error rendering template: UndefinedError: 'sensor.xyz' is undefined
|
||||||
|
```
|
||||||
|
- **Solution** : Utiliser `states('sensor.xyz')` au lieu de `states.sensor.xyz.state` (plus robuste)
|
||||||
|
- **Doc** : https://www.home-assistant.io/docs/configuration/templating/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Base de données / Recorder
|
||||||
|
|
||||||
|
### `Database disk usage: X MB`
|
||||||
|
- **Cause** : Base de données SQLite trop volumineuse
|
||||||
|
- **Solution** : Configurer `recorder` avec `purge_keep_days` et exclure les entités à haute fréquence
|
||||||
|
```yaml
|
||||||
|
recorder:
|
||||||
|
purge_keep_days: 7
|
||||||
|
exclude:
|
||||||
|
entity_globs:
|
||||||
|
- sensor.*_signal_strength
|
||||||
|
- sensor.*_rssi
|
||||||
|
```
|
||||||
|
- **Doc** : https://www.home-assistant.io/integrations/recorder/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lovelace / Dashboards
|
||||||
|
|
||||||
|
### Custom card non chargée
|
||||||
|
```
|
||||||
|
Custom element doesn't exist: custom-card-name
|
||||||
|
```
|
||||||
|
- **Cause** : La ressource custom card n'est pas déclarée ou le fichier est manquant
|
||||||
|
- **Solution** : Paramètres → Tableaux de bord → Ressources → Ajouter le JS
|
||||||
|
- **Doc** : https://www.home-assistant.io/dashboards/dashboards/
|
||||||
|
|
||||||
|
### Entité manquante dans dashboard
|
||||||
|
```
|
||||||
|
Entity not available: sensor.xyz
|
||||||
|
```
|
||||||
|
- **Solution** : Vérifier que l'entité existe (`États` dans les outils de développement), corriger le nom dans la carte
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Réseau / SSL
|
||||||
|
|
||||||
|
### `SSL CERTIFICATE_VERIFY_FAILED`
|
||||||
|
- **Cause** : Certificat auto-signé ou expiré
|
||||||
|
- **Solution** : Vérifier `verify_ssl: false` pour les connexions internes (non recommandé en prod), ou renouveler le certificat
|
||||||
|
- **Doc** : https://www.home-assistant.io/docs/configuration/securing/
|
||||||
|
|
||||||
|
### `Connection refused` / `Cannot connect to host`
|
||||||
|
- **Cause** : Service distant éteint ou port bloqué par firewall
|
||||||
|
- **Diagnostic** : `ping`, `telnet HOST PORT` depuis le host HA
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## YAML / Configuration
|
||||||
|
|
||||||
|
### Indentation YAML incorrecte
|
||||||
|
- **Erreur** : `mapping values are not allowed here`
|
||||||
|
- **Outil** : https://yaml-online-parser.appspot.com/
|
||||||
|
- **Conseil** : Utiliser 2 espaces, jamais de tabulations
|
||||||
|
|
||||||
|
### `!secret not found`
|
||||||
|
- **Cause** : La clé référencée n'existe pas dans `secrets.yaml`
|
||||||
|
- **Solution** : Ajouter la clé dans `/config/secrets.yaml`
|
||||||
|
|
||||||
|
### Config check
|
||||||
|
```bash
|
||||||
|
# HA OS
|
||||||
|
ha core check
|
||||||
|
# Docker
|
||||||
|
docker exec homeassistant python -m homeassistant --config /config --script check_config
|
||||||
|
```
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Collecte les infos système du host Home Assistant via SSH
|
||||||
|
# Usage: ./ha-system-info.sh [user@host]
|
||||||
|
|
||||||
|
HOST="${1:-root@homeassistant.local}"
|
||||||
|
|
||||||
|
echo "=== COLLECTE SYSTÈME HOME ASSISTANT ==="
|
||||||
|
echo "Hôte : $HOST"
|
||||||
|
echo "Date : $(date)"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "--- CPU ---"
|
||||||
|
ssh "$HOST" "cat /proc/cpuinfo | grep 'model name' | head -1 | cut -d: -f2 | xargs" 2>/dev/null || echo "N/A"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "--- MÉMOIRE ---"
|
||||||
|
ssh "$HOST" "free -h" 2>/dev/null || echo "N/A"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "--- DISQUE ---"
|
||||||
|
ssh "$HOST" "df -h" 2>/dev/null || echo "N/A"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "--- UPTIME ---"
|
||||||
|
ssh "$HOST" "uptime" 2>/dev/null || echo "N/A"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "--- TEMPÉRATURE CPU ---"
|
||||||
|
ssh "$HOST" "cat /sys/class/thermal/thermal_zone*/temp 2>/dev/null | awk '{printf \"%.1f°C\n\", \$1/1000}'" 2>/dev/null || echo "N/A"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "--- VERSION HOME ASSISTANT ---"
|
||||||
|
ssh "$HOST" "ha core info 2>/dev/null | grep version || grep -r 'homeassistant:' /config/configuration.yaml 2>/dev/null | head -5 || echo 'Utiliser lAPI REST pour la version'" 2>/dev/null
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "--- LOGS RÉCENTS (50 dernières erreurs/warnings) ---"
|
||||||
|
ssh "$HOST" "cat /config/home-assistant.log 2>/dev/null | grep -E '(ERROR|WARNING)' | tail -50" 2>/dev/null || \
|
||||||
|
ssh "$HOST" "journalctl -u hassio -n 100 --no-pager 2>/dev/null | grep -E '(ERROR|WARNING)'" 2>/dev/null || \
|
||||||
|
echo "Logs non accessibles via SSH — utiliser l'API REST"
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
# Suggestions d'amélioration Home Assistant
|
||||||
|
Généré le : {{DATE}}
|
||||||
|
Version HA : {{HA_VERSION}}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Automatisations suggérées
|
||||||
|
|
||||||
|
<!-- Pour chaque automatisation recommandée -->
|
||||||
|
### [Nom de l'automatisation]
|
||||||
|
|
||||||
|
- **Déclencheur** : [event, state, time, etc.]
|
||||||
|
- **Condition** : [si applicable]
|
||||||
|
- **Action** : [description]
|
||||||
|
- **Blueprint disponible** : [URL ou "Non"]
|
||||||
|
- **Exemple YAML** :
|
||||||
|
```yaml
|
||||||
|
automation:
|
||||||
|
alias: "[Nom]"
|
||||||
|
trigger:
|
||||||
|
- platform: [type]
|
||||||
|
# ...
|
||||||
|
action:
|
||||||
|
- service: [service]
|
||||||
|
# ...
|
||||||
|
```
|
||||||
|
- **Documentation** : [URL]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Améliorations des entités
|
||||||
|
|
||||||
|
### Nommage et organisation
|
||||||
|
|
||||||
|
| Entité actuelle | Nom suggéré | Raison |
|
||||||
|
|-----------------|-------------|--------|
|
||||||
|
| `sensor.xxx` | `sensor.pièce_appareil_mesure` | Convention de nommage |
|
||||||
|
|
||||||
|
### `friendly_name` manquants
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# À ajouter dans customize.yaml ou via l'UI
|
||||||
|
homeassistant:
|
||||||
|
customize:
|
||||||
|
sensor.nom_entite:
|
||||||
|
friendly_name: "Nom lisible"
|
||||||
|
icon: mdi:icone
|
||||||
|
```
|
||||||
|
|
||||||
|
### `device_class` recommandés
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
sensor:
|
||||||
|
- platform: template
|
||||||
|
sensors:
|
||||||
|
mon_capteur:
|
||||||
|
device_class: temperature # ou humidity, power, energy...
|
||||||
|
```
|
||||||
|
- **Doc** : https://www.home-assistant.io/docs/configuration/customizing-devices/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Optimisation de la base de données
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# configuration.yaml
|
||||||
|
recorder:
|
||||||
|
purge_keep_days: 7
|
||||||
|
commit_interval: 30
|
||||||
|
exclude:
|
||||||
|
domains:
|
||||||
|
- sun
|
||||||
|
- weather
|
||||||
|
entity_globs:
|
||||||
|
- sensor.*_signal_strength
|
||||||
|
- sensor.*_rssi
|
||||||
|
- sensor.*_lqi
|
||||||
|
entities:
|
||||||
|
# lister les entités à exclure
|
||||||
|
```
|
||||||
|
- **Économie estimée** : [X MB]
|
||||||
|
- **Documentation** : https://www.home-assistant.io/integrations/recorder/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Scripts réutilisables suggérés
|
||||||
|
|
||||||
|
### [Nom du script]
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
script:
|
||||||
|
nom_script:
|
||||||
|
alias: "[Nom lisible]"
|
||||||
|
sequence:
|
||||||
|
- service: [service]
|
||||||
|
# ...
|
||||||
|
```
|
||||||
|
- **Usage** : [où utiliser ce script]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration recommandée
|
||||||
|
|
||||||
|
### Logbook filtering
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
logbook:
|
||||||
|
exclude:
|
||||||
|
domains:
|
||||||
|
- sun
|
||||||
|
entity_globs:
|
||||||
|
- sensor.*_signal_strength
|
||||||
|
```
|
||||||
|
|
||||||
|
### History filtering
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
history:
|
||||||
|
exclude:
|
||||||
|
domains:
|
||||||
|
- sun
|
||||||
|
- weather
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pistes d'amélioration avancées
|
||||||
|
|
||||||
|
- [ ] [Amélioration 1 — description et lien doc]
|
||||||
|
- [ ] [Amélioration 2 — description et lien doc]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Suggestions générées par ha-log-investigator. Toutes les recommandations sont basées sur la documentation officielle HA {{HA_VERSION}}.*
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# Rapport de réparation Home Assistant
|
||||||
|
Généré le : {{DATE}}
|
||||||
|
Version HA : {{HA_VERSION}}
|
||||||
|
Instance : {{HA_URL}}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Résumé système
|
||||||
|
|
||||||
|
| Ressource | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| CPU | {{CPU_MODEL}} |
|
||||||
|
| RAM | {{RAM_USED}} / {{RAM_TOTAL}} ({{RAM_PCT}}%) |
|
||||||
|
| Disque | {{DISK_USED}} / {{DISK_TOTAL}} ({{DISK_PCT}}%) |
|
||||||
|
| Uptime | {{UPTIME}} |
|
||||||
|
| Temp. CPU | {{CPU_TEMP}} |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Problèmes critiques (à traiter en priorité)
|
||||||
|
|
||||||
|
<!-- Répéter ce bloc pour chaque ERROR trouvé -->
|
||||||
|
### [Composant X] — [description courte]
|
||||||
|
|
||||||
|
- **Symptôme** : `[message d'erreur exact extrait des logs]`
|
||||||
|
- **Fréquence** : [N occurrences depuis [date]]
|
||||||
|
- **Cause probable** : [explication claire]
|
||||||
|
- **Solution** :
|
||||||
|
1. [Étape 1]
|
||||||
|
2. [Étape 2]
|
||||||
|
- **Documentation officielle** : [URL https://www.home-assistant.io/...]
|
||||||
|
- **Compatibilité** : ✅ Confirmé pour HA {{HA_VERSION}}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Avertissements (WARNING)
|
||||||
|
|
||||||
|
<!-- Répéter ce bloc pour chaque WARNING significatif -->
|
||||||
|
### [Composant Y] — [description courte]
|
||||||
|
|
||||||
|
- **Symptôme** : `[message]`
|
||||||
|
- **Action recommandée** : [description]
|
||||||
|
- **Documentation** : [URL]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Intégrations en erreur
|
||||||
|
|
||||||
|
| Intégration | État | Action |
|
||||||
|
|-------------|------|--------|
|
||||||
|
| [nom] | setup_error | [action recommandée] |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Entités indisponibles ({{UNAVAILABLE_COUNT}} total)
|
||||||
|
|
||||||
|
### Par domaine
|
||||||
|
|
||||||
|
#### sensor ({{N}} entités)
|
||||||
|
- `sensor.nom_entite` — [raison probable]
|
||||||
|
|
||||||
|
#### switch ({{N}} entités)
|
||||||
|
- `switch.nom_entite` — [raison probable]
|
||||||
|
|
||||||
|
<!-- etc. -->
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prochaines étapes recommandées
|
||||||
|
|
||||||
|
1. [ ] Effectuer un backup complet avant toute modification
|
||||||
|
2. [ ] Traiter les problèmes critiques dans l'ordre ci-dessus
|
||||||
|
3. [ ] Redémarrer HA après chaque modification
|
||||||
|
4. [ ] Vérifier les logs après redémarrage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Rapport généré par ha-log-investigator. Les solutions proposées sont basées sur la documentation officielle Home Assistant.*
|
||||||
Reference in New Issue
Block a user