Refonte complete de zero. Architecture rigoureuse, entites 100% tracables, documentation embarquee. Energie - Chauffage - Eclairage - Presence.
19 ampoules x 4 cycles (annuel, mensuel, hebdo, quotidien). Chaque ampoule a son propre compteur kWh avec template relais et moyenne Watts. Granularite maximale.
Chaque entite porte un unique_id norme et documente. Du firmware Hue jusqu'a la vignette L2C3, la chaine est versionnee dans DEPENDANCES_GLOBALES.md.
Energie, Chauffage, Prises, Eclairage, Presence. Jamais melanges dans un meme fichier YAML. Chaque pole a sa propre arborescence et ses propres prefixes.
513 fichiers YAML, Markdown et JSON dans docs/, indexes dans AnythingLLM. La config entiere est interrogeable en langage naturel. Backup Git automatique depuis HA vers GitHub.
* RAG non actif - necessite un modele 27B minimum pour des recherches pertinentes.
* RAG non actif actuellement — necessite un modele 27B minimum pour des recherches pertinentes.
Ce que produit concrètement l'architecture décrite sur cette page.
18 vignettes temps réel, organisées en 6 lignes × 3 colonnes.
Chaque vignette affiche des valeurs synthétiques — un clic ouvre la page correspondante
avec le détail des valeurs et les commandes associées.
Chaque fichier a sa place, son rôle, son cycle de vie. On ne mélange pas.
DOCS/01_docs_config_system/ → H:\Docs\DOCS/03_docs_automations/ → H:\Docs\
Chaque automation : un .yaml (code) + un .md (doc).
Scripts — DOCS/04_docs_scripts/ → H:\Docs\
docs_scripts_YAML/ (p1_master_gestion_clim.yaml · sdb_soufflant_demarrer.yaml · correct_linky.py)
· docs_scripts_SH/ (audit_md5.sh · ha_git_backup.sh)
· fiches .md dans docs_scripts_YAML_MD/ et docs_scripts_SH_MD/
Meme regle que les automations : jamais modifie dans le fichier, on passe par l'UI HA.
DOCS/02_docs_dashboard/ → H:\Docs\.bak_AAAA_MM_JJ_HHhMMmSSs (10 max le jour même), consolidées le lendemain en .bak_AAAA_MM_JJ (3 max) par /histo ; doc .md séparée dans dashboard_docs_MD/Sensors · Templates · UMDOCS/01_docs_config_system/ → H:\Docs\
Claude a un accès direct aux fichiers .yaml sous /config sur le serveur HA : à chaque modification, c'est lui qui récupère le fichier changé et qui le stocke individuellement dans DOCS/01_docs_config_system/config_system_YAML/{pole}/, une fois validé par le créateur. Pour les automations (regroupées dans un seul automations.yaml), l'injection se fait toujours à la main dans l'UI HA ; une fois la modification validée, Claude ne fait que récupérer le bloc changé et le stocke individuellement. Le dashboard, lui, n'est pas un fichier .yaml accessible de la même façon — limitation technique qui oblige le créateur à le récupérer à la main.
Stats 24h qualite air (PM2.5 · tCOV) · meteo · foudre Blitzortung · min/max/avg P0 · DUT history_stats P1 · integration W→kWh (firmware relais cuisine sans cumul natif).
!include_dir_merge_listCalcule les couts, les ratios HP/HC, les etats textuels, les labels Jinja2. Rien de brut ici - uniquement du derive.
!include_dir_merge_listRemet a zero automatiquement : Annuel / Mensuel / Hebdo / Quotidien. Chaque compteur = une cle nommee (dict), pas une liste.
!include_dir_merge_named100% eclate - zero fichier monolithique. Chaque fichier = 1 responsabilite, 1 pole, 1 dossier.
/config/ ├── configuration.yaml ← point d'entree (includes, integrations) ├── automations.yaml ← toutes les automations (UI editeur) │ ├── sensors/ │ ├── P0_Energie_total_min_maxi_diag/ ← kWh cumulatif + mini/maxi + Genelec │ ├── P1_clim_chauffage/ ← DUT history_stats + integration W→kWh (cuisine) │ └── Air_quality/ meteo/ ← stats PM2.5, tCOV, Blitzortung │ ├── templates/ │ ├── P0_Energie_total_diag/ ← couts HP/HC, ratios, Linky, diag │ ├── P1_clim_chauffage/ ← ★ mode heat/off/cool, courbe cible │ ├── P2_prise/ ← AVG veilles, all_standby │ ├── P3_eclairage/ ← ★ labels eclairage, AVG W, ui_dashboard │ ├── P4_groupe_presence/ ← Absent / Seul / Tous les deux │ ├── Stores/ Inter_BP_Virtuel/ ← volets motorises, soufflant SdB │ └── meteo/ utilitaires/ ← alertes, vent, tendances, MAJ HA │ └── utility_meter/ ├── P0_Energie_total/ ← index kWh + HP/HC Linky ├── P1_clim_chauffage/ ← 6 equip. x 4 cycles = 24 UM ├── P2_prise/ ← 19 prises x 4 cycles = 76 UM └── P3_eclairage/ ← 19 lampes x 4 cycles = 76 UM
# --- sensor --- sensor: !include_dir_merge_list sensors/ #sensor: !include sensors.yaml # --- template --- template: !include_dir_merge_list templates/ #template: !include templates.yaml # --- utility_meter --- utility_meter: !include_dir_merge_named utility_meter/ #utility_meter: !include utility_meter.yaml # --- command_line --- command_line: !include_dir_merge_list command_line/ #command_line: !include command_line.yaml # --- shell_command --- shell_command: !include_dir_merge_named shell_command/ #shell_command: !include shell_command.yaml # --- camera (DESACTIVE - obsolete) --- #camera: !include camera.yaml #camera: !include_dir_merge_list camera/ # --- input_button --- input_button: !include input_button.yaml #input_button: !include_dir_merge_list input_button/ # renvoi au repertoire groups/ group: !include_dir_merge_named groups/ #group: !include groups.yaml # renvoi au fichier sql.yaml sql: !include sql.yaml # renvoi au fichier input_select.yaml input_select: !include input_select.yaml # --- input_boolean --- input_boolean: !include_dir_merge_named input_booleans/ # --- input_number --- input_number: !include_dir_merge_named input_number/ # --- input_datetime --- input_datetime: !include input_datetime.yaml
!include_dir_merge_list fusionne tous les fichiers du dossier en une seule liste — parfait pour sensor: et template:.!include_dir_merge_named est obligatoire pour utility_meter: dont chaque compteur est une cle nommee (dict), pas un item de liste.
Les règles que chaque fichier YAML doit respecter. Sans exception.
5 pôles, préfixés P0 à P4. Chaque fichier YAML appartient à un seul pôle — jamais deux pôles dans le même fichier.
Chaque fichier YAML ne fait qu'une seule chose : mesurer, compter, calculer, ou afficher. On ne mélange jamais les pôles dans un même fichier. Une prise connectée ne cohabite pas avec un radiateur. L'approche monolithique est interdite.
Index fixe de 1 à 9 pour chaque pièce. Cet index précède le nom dans tous les titres secondaires de chaque fichier YAML, quel que soit le pôle.
Exemple : la boite ┌ 4. SALON ┐ dans un fichier P1 signifie "ce bloc appartient au pôle Chauffage, pièce SALON (index 4)". La numérotation garantit l'ordre et l'unicité dans tout le projet.
Toutes les abréviations utilisées dans les noms de fichiers et les unique_id. Organisées par rôle dans la chaine de traitement. Hors de cette liste = interdit.
sensors/ — capteur statistique, Riemann, commande shell retournant une valeur. Merge : !include_dir_merge_listutility_meter/ — compteur a remise a zero automatique par cycle — consomme _energy et génère des _um. Merge : !include_dir_merge_namedtemplates/ — entité calculée par formule Jinja2, aucun hardware direct. Merge : !include_dir_merge_listcommand_line/ — sensor via script bash ; le résultat texte/JSON est interprété par HA comme valeur d'entitéinput_booleans/ — stockage d'état on/off pour les BV. Chaque IB est appairé a un SW template. Pas utilisé seul.shell_command/ - commandes shell déclenchées par HA (boutons, automations). Execution pure, pas de valeur retournée. (pas d'abréviation dans les noms de fichiers)groups/ — groupes d'entités par constructeur (batteries Hue, IKEA, Sonoff). Ex : GRP_01_batteries_hue.yaml_power — puissance instantanée en W, lue en temps réel via Z2M ou Shelly. Ne s'accumule pas. Sert de source aux calculs AVG et aux totaux de puissance._energy Z2M — énergie cumulée en kWh, index qui ne fait qu'augmenter. Source directe des Utility Meters. Périmètre : P0 (Nodon pince générale), P1 (prises NOUS chauffage), P2 (prises NOUS/IKEA). ⛔ Ne pas confondre avec la variante PowerCalc ci-dessous._energy PowerCalc (P3) — énergie estimée générée par PowerCalc pour les ampoules Hue (bridge Zigbee, aucun kWh natif). Même suffixe _energy que les natifs Z2M, mais la source est l'état on/off multiplié par un wattage connu — pas une mesure réelle. Exception : relais_lumiere_sdb_sonoff (ZBMINIR2) → 10W fixe. ⛔ PowerCalc interdit sur P0/P1/P2 (monitoring natif Z2M présent)._energy natif. Cas exceptionnel. Pattern fichier : {P}_kWh_{description}.yaml. Voir la section "Spécial Riemann" ci-dessous._um_kwh_tpl en P3, directement depuis _um en P0/P1/P2. Permet d'évaluer la puissance réelle moyenne consommée._AMHQ si le fichier couvre les 4 cycles._hp et _hc dans les unique_id.P0_MINI_MAXI_AVG_Genelec_appart.yaml.unique_id : forme complète (annuel, mensuel, hebdomadaire, quotidien), jamais l'abréviation.input_booleans/. Pattern : {P}_BV_IB_{description}.yaml. Sans IB, le template switch n'a nulle part où persister son état.templates/Inter_BP_Virtuel/. Pattern : {P}_BV_IB_SW_{description}.yaml.P1_ACS_IB_01_arret_clim_securises.yaml. Écrit par les automations P1 clim, lu par (A)/(B) comme condition de blocage.{P}_ui_dashboard.yaml. Ex: P3_etats_status.yaml retourne l'état d'allumage combiné quand plusieurs points d'éclairage coexistent — sert la vignette et la page commandes éclairage (L3C1), pas les vignettes conso.templates/utilitaires/ — sous-répertoire fourre-tout pour templates transversaux sans pôle : données simples (jour/nuit, nb fenêtres ouvertes, MAJ HA). Valeurs binaires ou compteurs basiques.P{n} pour les fichiers sans pôle énergieM_04_meteo_tendances/.A_01_AIR_QUALITY.yaml.S_01_STORES.yaml.#MP_01_monitor_temp.sh.# dans .scripts/ (script actif sur Raspberry Pi, nommé #...# pour que HA l'ignore). ⛔ Ne pas renommer.HA intègre la puissance (W) dans le temps via la méthode des trapèzes pour reconstituer un kWh estimé : moins précis qu'un compteur natif, utilisé quand le hardware ne fournit pas d'index cumulatif. Cette méthode n'est plus employée en production : les deux fichiers Riemann (sensors/ et templates/) ont été supprimés le 2026-09-24, après le correctif firmware du Shelly. Ce qui existe à la place :
P1_DUT_clim_chauffage.yaml — sensors/ — history_stats : durée d'utilisation par clim (sources : sensor.*_power_status)P1_UM_AMHQ.yaml — utility_meter/ — compteurs kWh alimentés par la source directe (kWh natif Z2M, plus de Riemann)Le suffixe du unique_id documente la dernière transformation subie. Chaque étape ajoute sa marque dans le nom.
_um_ — total appart uniquementTout sensor sorti d'un UM finit par _um. Template kWh (lampe ou zone) : _um_kwh_tpl.
_kwh_tpl (sans _um_) = réservé au total appart entier. Ne jamais l'utiliser à un autre niveau.
P3 : AVG calculé depuis _um_kwh_tpl — pas depuis _um directement. Suffixe : _avg_watts_{cycle}.
P0 + P1 + P2 : AVG calculé directement depuis _um — pas de _um_kwh_tpl intermédiaire.
Pattern general : {POLE}_{TYPE}[_AMHQ][_{VARIANTE}].yaml — pour la definition de chaque TYPE, voir section 3.
| TYPE | Pattern complet | Exemple |
|---|---|---|
| UM | {P}_UM_AMHQ[_{variante}].yaml | P1_UM_AMHQ.yaml |
| TPL | {P}_TPL_AMHQ_{niveau}.yaml | P3_TPL_AMHQ_1_UNITE.yaml |
| AVG | {P}_AVG_AMHQ[_{variante}].yaml | P2_AVG_AMHQ_prises.yaml |
| TOTAL | {P}_TOTAL_AMHQ.yaml | P1_TOTAL_AMHQ.yaml |
| kWh | {P}_DUT_{description}.yaml | P1_DUT_clim_chauffage.yaml |
| DUT | {P}_DUT_{description}.yaml | P1_DUT_clim_chauffage.yaml |
| DIAG | {P}_DIAG_{description}_{cycle}.yaml | P0_diag_conso_hebdomadaire_en_cours.yaml |
| POWER | {P}_POWER_{niveau}.yaml | P3_POWER_3_TOTAL_ZONE.yaml |
| BV_IB | {P}_BV_IB_{description}.yaml | P3_BV_IB_inter_smorig_salon.yaml |
| BV_IB_SW | {P}_BV_IB_SW_{description}.yaml | P3_BV_IB_SW_inter_smorig_salon.yaml |
| MINI_MAXI_AVG | {P}_MINI_MAXI_AVG_{description}.yaml | P0_MINI_MAXI_AVG_Genelec_appart.yaml |
| ui_dashboard | {P}_ui_dashboard.yaml | P3_ui_dashboard.yaml |
_AMHQ : present si le fichier couvre les 4 cycles (Annuel/Mensuel/Hebdo/Quotidien)_VARIANTE : discriminant si plusieurs fichiers du meme TYPE dans le meme pole — nom fonctionnel minuscules (prises, mini_pc) ou niveau numéroté (1_UNITE, 2_ZONE, 3_TOTAL){LETTRE}_{index}_{description}.yaml — ex: M_04_meteo_tendances/GRP_{index}_{description}.yamlui_dashboard : templates d'affichage uniquement — jamais de calculs kWh/W/DUTP0_total_pour_les_7_postes.yaml agrège les 7 postes (chauffage/hygiène/multimédia...) sur 4 cycles — devrait s'appeler P0_TOTAL_AMHQ.yaml mais nom d'origine conservéP2_current_all_standby.yaml — puissance totale veilles, TYPE non encore formaliséS'applique aux fichiers 01 · Config YAML — Sensors · Templates · Utility Meter deployés dans /homeassistant/. Les 4 sections qui suivent détaillent ce que doit contenir chaque fichier, dans cet ordre.
Chaque fichier YAML commence par une boîte ASCII. Deux niveaux : titre principal du fichier, titre secondaire par pièce.
Caractères : ╭─╮ / ╰─╯
Largeur : 78 caractères
Texte : MAJUSCULES
Si le texte dépasse 74 car. : élargir la boîte (76, 80+).
Ne jamais supprimer les références techniques du titre.
Caractères : ┌─┐ / └─┘
Largeur : 37 caractères
Texte : MAJUSCULES, numérotation officielle 1-9
Un titre secondaire par pièce dans le fichier.
Juste sous la boîte ASCII principale, dans cet ordre exact. Toujours les 5 — même si une section est vide.
[calculé]source: ou entity_id:unique_id exact de l'entité produite par ce fichierP1_UM.yaml → L2C2Commentaire repère positionné juste au-dessus de chaque bloc d'entité. Doit être l'image exacte du unique_id qui suit - ni plus, ni moins.
# --- unique_id_exact ---
Position : juste au-dessus de chaque bloc d'entité individuel.
Le slug est l'image exacte du unique_id - pas de variation, pas de raccourci.
Un slug par entrée de cycle : annuel, mensuel, hebdomadaire, quotidien.
Interdit : un slug groupé pour les 4 cycles.
Toujours en paire. Même sens, deux formats. Cohérence croisée obligatoire : ils doivent décrire exactement la même chose.
Format : "Préfixe Nom Lisible Période"
Majuscules initiales sur chaque mot.
Préfixe pôle obligatoire en premier mot.
Période ou cycle lisible à la fin si applicable.
Format : prefixe_nom_lisible_periode
Tout en minuscules, séparateurs underscores.
Doit décrire la même chose que name.
Aucune abréviation inventée hors liste officielle.
# UTILITY_METER — P3_UM_AMHQ_1_UNITE.yaml # --- hue_white_lamp_entree_annuel_um --- hue_white_lamp_entree_annuel_um: source: sensor.hue_white_lamp_entree_energy <- créé par PowerCalc name: "Hue White Lamp Entree Annuel UM" unique_id: hue_white_lamp_entree_annuel_um # --- hue_white_lamp_entree_quotidien_um --- hue_white_lamp_entree_quotidien_um: source: sensor.hue_white_lamp_entree_energy <- créé par PowerCalc name: "Hue White Lamp Entree Quotidien UM" unique_id: hue_white_lamp_entree_quotidien_um cycle: daily # TEMPLATE — P3_TPL_AMHQ_1_UNITE.yaml # --- hue_white_lamp_entree_annuel_um_kwh_tpl --- - name: "Hue White Lamp Entree Annuel Um Kwh Tpl" unique_id: hue_white_lamp_entree_annuel_um_kwh_tpl source: sensor.hue_white_lamp_entree_annuel_um <- Depuis utility meter # --- hue_white_lamp_entree_quotidien_um_kwh_tpl --- - name: "Hue White Lamp Entree Quotidien Um Kwh Tpl" unique_id: hue_white_lamp_entree_quotidien_um_kwh_tpl source: sensor.hue_white_lamp_entree_quotidien_um <- Depuis utility meter
sensor.*_energy (kWh) pour les appareils sans monitoring natif — notamment les ampoules Hue qui n'exposent pas de capteur de consommation direct. Il calcule l'énergie par modele de puissance fixe (ex: 10W) ou par profil constructeur. Sans PowerCalc, ces ampoules n'auraient aucune entité source pour le Utility Meter.
Aucun input_boolean, input_number ou input_select pour la logique metier. Tout est en YAML — versionnable, auditable, rollbackable sur Git.
input_number.seuil_cool: 26.5 — modifiable librement dans l'UI HAvalue_template: — dans le fichier YAMLt >= 26.5 → t >= 27 — intention claireDOCS/01_docs_config_system/config_system_YAML/ — auditable sans HARègles de codage, standards de notification et canaux actifs en prod.
YAML + documentationDOCS/03_docs_automations/ → H:\Docs\
Ces règles s'appliquent à chaque fichier automation dans DOCS/03_docs_automations/docs_automations_YAML/. Jamais de modification directe d'automations.yaml — passer par l'UI HA, un par un.
-" devant le premier alias — bloc objet, pas liste.id: au niveau global — laisser HA le gérer.alias en MAJUSCULES pour chaque sous-bloc (trigger, condition, action).id: autorisé UNIQUEMENT à l'intérieur des déclencheurs (ciblage d'actions).# "[L...] modif" + bloc # annotations_log: en fin.Cible : Tel. portable UserE (ecran carre, emojis limites).
title:
Max 21 caractères.
MAJUSCULES recommandées.
Ex: SDB : ARRET (11 car.)
message:
Texte pur ASCII de préférence.
Éviter les emojis → ! / [ ] / OK / >>.
Info critique dans les 20 premiers caractères.
| Canal | Service | Usage |
|---|---|---|
| Mobile UserE | notify.mobile_app_userE | 22 automations + 5 scripts |
| Fichiers log | notify.send_message → entité File | 3 automations (logs .txt) |
Plateforme notify.file interdite en YAML. Les cibles fichier passent par l'intégration File créée dans l'UI, appelée via notify.send_message.
49 automations en prod (relevé 2026-07-18). 25 avec notify. 24 sans notify.
Côté HA, tout vit dans un seul fichier automations.yaml — c'est lui que l'UI HA lit et réécrit. Mais on ne versionne jamais ce fichier entier : l'injection d'une modification se fait toujours à la main dans l'UI HA, automation par automation. Une fois validée, c'est Claude qui récupère uniquement le bloc YAML qui vient de changer et qui le stocke individuellement dans docs_automations_YAML/{Pole}/ — un fichier = une automation. Chaque fichier a sa doc miroir dans docs_automations_MD/{POLE}/.
| Pole | Automation | Titre notify | Note |
|---|---|---|---|
| Backup | [00] Alerte si KO 15 min | BACKUP KO | Alerte mobile si KO > 15 min |
| [01] Git hourly H+10 | - | Shell → ha_git_backup.sh (horaire) | |
| [02] Git daily (03:00) | - | Shell → ha_git_backup.sh (daily) | |
| [03] Git weekly (dim 01h30) | BACKUP WEEKLY | Hebdo OK + tag GitHub | |
| [04] Git push manuel | - | Shell → ha_git_backup.sh "Manuel" | |
| [05] Git push weekly manuel | - | Shell → ha_git_backup.sh weekly | |
| [06] Git au demarrage HA | - | Trigger homeassistant.start | |
| Bouton Virtuel P3 Salon |
Bouton IKEA INTER SALON (4) | - | MQTT → light.salon ON/OFF |
| Bouton IKEA SOMRIG — msg ON/OFF | - | MQTT → light.salon ON/OFF | |
| Stores | Store Bureau (optimise) | - | Gestion optimisée soleil/vent |
| Store Salon (matin/soir) | - | Gestion horaire simple | |
| MariaDB VSCode |
DB Purge MariaDB + Repack | - | Purge + repack hebdo |
| Économie VS Code CPU/Inactivité | ALERTE VSC CPU / INAC / ARRETE | CPU >10% 10min ou inactif 15min | |
| Météo | Alerte cartes MF actualisation | - | update_entity cameras MF |
| Dernier impact foudre (MàJ) | - | Set input_datetime.dernier_eclair | |
| Notification foudre | /!\ Attention foudre /!\ | Distance, direction, impacts | |
| Update previous humidity | - | Set input_number humidity prev. | |
| Update previous temperature | - | Set input_number temperature prev. | |
| P0 Énergie | DIAG Enregistrement journalier | (log fichier) | notify.file_diag_log_file |
| Log écart Linky vs Nodon | (log fichier) | notify.log_ecart_energie | |
| Basculement Tarif HC/HP | - | Gestion tarif EDF HP/HC | |
| P1 Clim | (A) Clim Jour 7h30-21h | [AJ] ... | Via script — préfixe [AJ] + présence / erreur |
Script p1_master_gestion_clim — prefix [AJ] si jour, [AN] si nuit — titres : [AX] ATTENTE CAPTEURS / [AX] CLIM JOUR/NUIT COUPÉE / [AX] sensor.presence
|
|||
| (B) Clim Nuit 21h-7h30 | [AN] ... | Via script — préfixe [AN] + présence / erreur | |
| (C) Notif. Jour 7h30-21h | [Automa. Notif. Jrs] | Relai sensor message clim | |
| (D) Notif. Nuit 21h-7h30 | [Automa. Notif. Nuit] | Relai sensor message clim | |
| (E) Fermeture fenêtres | Fermeture en cours | Par fenêtre + global | |
| (F) Arrêt Clim | ARRÊT CLIM | Map sur climate.clim_* | |
| (G) Changement Eté/Hiver | CHANGEMENT DE MODE | sensor.mode_ete_hiver_etat | |
| (H) DEBUG Force Mode / Sécurité | SÉCURITÉ CLIM / CORRECTION MODE | Force retour OFF / bon mode | |
(H) = watchdog — interdit la remise en marche si input_boolean.clim_*_arret_securise_en_cours = on ou prise OFF. Corrige aussi le mauvais mode saison.
|
|||
| (I) Synchro prise coupée | CLIM COUPÉE | Prise ext. éteinte | |
| (J) DEBUG Notif. message clim (désactivé) | Notif. Mobile debug | Watchdog msg clim | |
| P1 Cuisine | A - Chauffage Cuisine (planification) | (sans titre) | ON/OFF selon T° + horaires |
| B - Chauffage Cuisine Vacances | (sans titre) | ON/OFF selon T° + horaires | |
| P1 SDB | Z - Gestion Intelligente Soufflant | - | Régulation T° + auto-off 60 min (automation maitre) |
| A - Bouton IKEA Rodret (soufflant) | Appui bouton | MQTT → interrupteur inter_soufflant_sdb | |
| B - Routage interrupteur | Interrupteur ON/OFF | Routage vers les séquences du script | |
| D - Watchdog Sécurité Soufflant | ⚠️ Watchdog SDB | Dérive thermique (capteur par pas de 0,2) | |
| E - Décompte 60 min (timer) | Soufflant en marche | Coupe à la fin du timer 60 mn | |
| F - Rattrapage au démarrage HA | Démarrage de HA | Relance le timer 10 mn si encore en marche | |
| G - Minuterie Sèche-Serv. (2h) | Sèche-Serv. en marche | Timer absolu 2h (ancienne, doublon actif avec H) | |
| H - Décompte 2 h (timer) | Puissance > 50 W | Coupe à la fin du timer 2 h | |
| I - Rattrapage au démarrage HA | Démarrage de HA | Relance le timer 10 mn si la prise est en marche | |
| P2 Prises | ECO Prises Dynamique | ECO PRISES: {{ g | upper }} | 7 prises — absent_only sur TV/PC |
| Gestion PC Bureau | Veille détectée | Scène de fin PC bureau | |
| Gestion TV Chambre | Veille détectée | Scène de fin TV chambre | |
| P3 Éclairage | Bureau - Activation ecran synchro | - | Sync écran PC bureau |
| Bureau - Bouton Rodret toggle blanches | - | MQTT → hue_white_bureau 1+2 | |
| Bureau - Forcer Play ON si PC tourne | - | Play si PC actif | |
| Bureau - Watchdog sync lampes blanches | - | Watchdog lampes blanches bureau | |
| Entree - Allumage lumiere | - | Contact → lumière entrée | |
| SDB - Sync miroir lampe et relais | - | Sync hue SDB + relais Sonoff | |
| P4 Présence | P4 Log Zones Eric | (log fichier) | notify.zone_eric |
| Système | Watchdog Piles | 🪫 Alerte Pile Faible (<10%) | Liste appareils + % restant |
| Z2M last_seen | ⚠️ Problème capteur Zigbee | Zigbee silencieux | |
| Veille GitHub nouvelle release | RELEASE GITHUB / ! BREAKING CHANGE ! | Breaking change détecté | |
| Pole | Automation | Automation YAML | Config YAML associé |
|---|---|---|---|
| Backup GitHub |
[00] Alerte si KO 15 min | 00_backup_alerte_si_ko_15_min.yaml | github_maintenance.yaml |
| [01] Git hourly H+10 | 01_backup_git_hourly_h_10.yaml | backup_github.yaml · ha_git_backup.sh | |
| [02] Git daily (03:00) | 02_backup_git_daily_03_00.yaml | backup_github.yaml · ha_git_backup.sh | |
| [03] Git weekly (dim 01:30) | 03_backup_git_weekly_dim_01_30.yaml | backup_github.yaml · ha_git_backup.sh | |
| [04] Git push manuel | 04_backup_git_push_manuel.yaml | backup_github.yaml · ha_git_backup.sh | |
| [05] Git push weekly manuel | 05_backup_git_push_weekly_manuel.yaml | backup_github.yaml · ha_git_backup.sh | |
| [06] Git au demarrage HA | git_push_au_demarrage_ha.yaml | backup_github.yaml · ha_git_backup.sh | |
| Bouton Virtuel P3 Salon |
Bouton IKEA INTER SALON (4) | p3_salon_bouton_ikea_inter_salon.yaml | - |
| Bouton IKEA SOMRIG — msg ON/OFF | p3_salon_bouton_ikea_somrig.yaml | - | |
| Stores | Store Bureau (optimise) | gestion_optimisee_du_store_bureau.yaml | - |
| Store Salon (matin/soir) | gestion_simple_du_store_salon_matin_soir.yaml | - | |
| MariaDB VSCode |
DB Purge MariaDB + Repack | db_purge_mariadb_repack.yaml | - |
| Economie Energie VS Code | systeme_economie_energie_vs_code.yaml | - | |
| Météo | Alerte cartes MF actualisation | alerte_meteo_france_actualisation_des_cartes.yaml | carte_meteo_france.yaml |
| Dernier impact foudre (MàJ) | mettre_a_jour_le_temps_du_dernier_impact_de_foudre.yaml | - | |
| Notification foudre | notification_de_la_foudre.yaml | M_meteo_sensors_blitzortung.yaml | |
| Update previous humidity | update_previous_humidity.yaml | input_number/input_number.yaml | |
| Update previous temperature | update_previous_temperature.yaml | input_number/input_number.yaml | |
| P0 Energie | DIAG Enregistrement journalier (7 postes + DUT) | diag_enregistrement_journalier.yaml | - |
| Log ecart Linky vs Nodon | log_ecart_linky_vs_nodon.yaml | - | |
| Basculement Tarif HC/HP Genelec Appart | auto_energie_basculement_tarif_hc_hp_genelec_appart.yaml | - | |
| P1 Clim | (A) Clim Jour | a_0_2026_01_11_automatisation_clim_jour_07h30_21h00.yaml | scripts.yaml · P1_01_clim_logique_system_autom.yaml |
| (B) Clim Nuit | b_0_2026_01_11_automatisation_clim_nuit_21h00_07h30.yaml | scripts.yaml · P1_01_clim_logique_system_autom.yaml | |
| (C) Notif. Jour | c_notification_temperature_up_ou_down_7h30_21h00.yaml | P1_02_automation_message_clim_7h30_21h.yaml | |
| (D) Notif. Nuit | d_notification_temperature_up_ou_down_21h00_7h30.yaml | P1_03_automation_message_clim_21h_7h30.yaml | |
| (E) Fermeture fenetres | e_clim_notification_de_fermeture_des_fenetres.yaml | nb_fenetre_ouvert_ferme_autom.yaml | |
| (F) Arret Clim | f_clim_automatisation_arret_clim_notification.yaml | - | |
| (G) Changement mode | g_clim_notification_de_changement_de_mode_ete_fan_hiver.yaml | P1_01_clim_logique_system_autom.yaml | |
| (H) Watchdog securite | h_clim_debug_force_mode_correct_securite.yaml | P1_01_clim_logique_system_autom.yaml · P1_ACS_IB_01_arret_clim_securises.yaml | |
| (I) Synchro prise | i_synchro_notif_clim_si_prise_coupee.yaml | - | |
| (J) DEBUG | j_debug_notifier_les_changements_de_message_clim_mobile.yaml | P1_02_automation_message_clim_7h30_21h.yaml | |
| P1 Cuisine | A - Chauffage Cuisine (planification) | a_chauffage_cuisine_entre_4h45_7h_lmmj_ou_5_45h_8h_vsd_avec_t_19_9.yaml | - |
| B - Chauffage Cuisine Vacances | b_chauffage_cuisine_vacances.yaml | - | |
| P1 SDB | Z - Gestion Intelligente Soufflant | a_2026_02_01_salle_de_bain_gestion_intelligente_soufflant.yaml | P1_BV_IB_SW_inter_souflant_sdb.yaml · input_select.yaml |
| A - Bouton IKEA Rodret | i_soufflant_sdb_bouton_rodret.yaml | inter_soufflant_salle_de_bain (MQTT) | |
| B - Routage interrupteur | h_soufflant_sdb_routage.yaml | script soufflant demarrer / arreter | |
| D - Watchdog Sécurité Soufflant | d_salle_de_bain_watchdog_securite_radiateur.yaml | nom de fichier inchange | |
| E - Décompte 60 min (timer) | e_sdb_soufflant_decompte_60min_timer.yaml | timer.soufflant_sdb_60mn · _10mn | |
| F - Rattrapage au démarrage HA | f_sdb_soufflant_rattrapage_demarrage_ha_timer.yaml | timer.soufflant_sdb_10mn | |
| G - Minuterie Sèche-Serviettes 2h | e_minuterie_seche_serviettes_salle_de_bain_timer_absolu_2h.yaml | doublon actif avec H | |
| H - Décompte 2 h (timer) | h_sdb_seche_serviettes_decompte_2h_timer.yaml | timer.seche_serviettes_sdb_2h · _10mn | |
| I - Rattrapage au démarrage HA | i_sdb_seche_serviettes_rattrapage_demarrage_ha_timer.yaml | timer.seche_serviettes_sdb_10mn | |
| P2 Prises | ECO Prises Dynamique | eco_prises_dynamique_by_presence_groupe.yaml | P2_eco_prises_config.yaml · P4_groupe_presence.yaml |
| Gestion PC Bureau | gestion_pc_bureau_scene_de_fin_notif.yaml | - | |
| Gestion TV Chambre | gestion_tv_chambre_scene_de_fin_notif.yaml | - | |
| P3 Eclairage | Bureau - Activation ecran synchro | p3_bureau_activation_ecran_synchro.yaml | - |
| Bureau - Bouton Rodret toggle blanches | p3_bureau_bouton_rodret_toggle_blanches.yaml | - | |
| Bureau - Forcer Play ON si PC tourne | p3_bureau_forcer_play_on_si_pc_tourne.yaml | - | |
| Bureau - Watchdog sync lampes blanches | p3_bureau_watchdog_synchronisation_lampes_blanches.yaml | - | |
| Entree - Allumage lumiere | p3_entree_allumage_lumiere.yaml | - | |
| SDB - Sync miroir lampe et relais | p3_sdb_sync_miroir_lampe_et_relais_sdb.yaml | - | |
| P4 Presence | [P4] Eric - Log Zones | P4_log_zones_eric.yaml | - |
| Système | Watchdog Piles (HUE / IKEA / SONOFF) | systeme_watchdog_piles_hue_ikea_sonoff.yaml | - |
| Z2M last_seen | z2m_last_seen.yaml | - | |
| Veille GitHub - Nouvelle release | veille_github_nouvelle_release_detectee.yaml | - |
Versioning, nommage et inventaire réel des 18 vignettes + 2 pages hors-matrice.
Vignettes · Pages · CompletDOCS/02_docs_dashboard/ → H:\Docs\
Même principe que pour les automations, à une différence près : côté dashboard, il n'y a pas d'extraction automatique. C'est moi qui récupère à la main, dans l'UI HA (Paramètres → Tableau de bord → Modifier en YAML), le code de chaque vignette ou page modifiée. Claude vérifie ensuite le fichier, le stocke sous son nom de travail, sans date, dans DOCS/02_docs_dashboard/dashboard_docs_YAML/L{x}C{x}_.../ en créant une sauvegarde .bak_AAAA_MM_JJ.yaml de la version précédente — 3 au maximum, au-delà envoi à la corbeille Windows — après validation.
Chaque vignette du tableau de bord a son dossier. Dans ce dossier il n'y a qu'un seul fichier de travail : son nom ne change jamais et ne porte jamais de date. Avant chaque modification, une copie de la version precedente est deposee a cote, avec l'heure dans son nom. On sait donc toujours quel fichier est en vigueur (celui qui n'a pas d'horodatage), et on peut revenir a la version d'avant.
Dossier L1C1_01_Meteo/, la page Meteo.
Au repos : page_L1C1_meteo.yaml. C'est le fichier de travail, celui que le tableau de bord utilise.
Une modification, le 10/10 a 15h04 : la version precedente part en page_L1C1_meteo.bak_2026_10_10_15h04m12s.yaml, et le fichier de travail garde son nom.
Deux modifications de plus le meme jour : deux sauvegardes de plus. Au-dela de 10 sauvegardes pour un meme fichier dans la journee, la plus ancienne part a la corbeille Windows.
Le lendemain, /histo range : la plus recente devient page_L1C1_meteo.bak_2026_10_10.yaml, les autres partent a la corbeille. Jamais plus de 3 journees d'historique pour un meme fichier.
Pourquoi ces regles : un nom sans date dit d'un coup d'oeil quel fichier est en service ; l'horodatage permet de revenir en arriere ; le plafond empeche les dossiers de gonfler sans fin.
| Type | Pattern | Conservation |
|---|---|---|
| Dashboard complet | Dashboard_COMPLET/Dashboard_YYYY_MM_DD.yaml | Illimitée (21 versions à ce jour, 2026-03-16 → 2026-10-04) |
| Vignette | L{x}C{x}_.../vignette_L{x}C{x}_{nom}.yaml | 1 fichier de travail + sauvegardes : 10 max le jour même (.bak_AAAA_MM_JJ_HHhMMmSSs), 3 max après consolidation |
| Page | L{x}C{x}_.../page_L{x}C{x}_{nom}.yaml | 1 fichier de travail + sauvegardes : 10 max le jour même (.bak_AAAA_MM_JJ_HHhMMmSSs), 3 max après consolidation |
| Carte isolée | L{x}C{x}_.../card_{nom}.yaml | Sous-composant réutilisé dans une page — mêmes règles de sauvegarde |
Ce qui part en production : le fichier de travail seulement. Les sauvegardes restent en local — mettre plusieurs versions d'un meme objet en production ne sert a rien et remplit le disque pour rien.
L'exception : Dashboard_COMPLET/ garde une photographie du tableau de bord entier par jour, sous Dashboard_YYYY_MM_DD.yaml, sans limite de nombre. Ce sont des photos datees, pas des versions de travail : on ne les renomme pas et on ne les efface pas.
Un fichier .bak oublié dans L1C2_02_Temperatures/ : page_L1C2_temperatures_2026-05-22.yaml.bak — résidu d'édition, à supprimer (hors convention de nommage).
3 fichiers md5_compare_*.txt à la racine de dashboard_docs_YAML/ (md5_compare_2026-05-23.txt, md5_compare_2026-05-31.txt, md5_compare_TREECORRIGE_2026-05-24.txt) — rapports d'audit MD5 oubliés hors du dossier prévu, ne suivent aucun des 4 patterns ci-dessus.
Relevé direct du dossier local (2026-10-10). Dernière vignette/page par emplacement.
L5C3_15_MariaDB/Script sh/ (script bash) et les sous-dossiers d'assets de PAGE_Home (L0C0)/ — un dossier par carte (Carte Météo/ avec meteocss-card.js et www_meteocons/, Carte Présence/, Congélateur/, Détecteur de fuite/, Impacte de Foudre/, Lave Linge/, Lave Vaisselle/, Studio Code Server/) — ne suivent pas la convention .yaml : présents, mais hors périmètre des règles de nommage.
PAGE_RASPI a son propre dossier côté YAML (PAGE_RASPI/) mais côté MD, sa doc est colocalisée dans L4C1_MINI_PC/ — pas de dossier dédié. Asymétrie à connaître si tu cherches ce fichier.
| Matrice | Nom | Fichier vignette | Fichier(s) page | Note |
|---|---|---|---|---|
| L0C0 | PAGE_Home | - | - | Page d'accueil — 8 card_* individuelles (météo, présence, congélateur, fuite, foudre, lave-linge, lave-vaisselle, vscode) |
| L1C1 | Météo | vignette_L1C1_meteo.yaml | page_L1C1_meteo.yaml | + card_duree_du_jour |
| L1C2 | Températures | vignette_L1C2_temperatures.yaml | page_L1C2_temperatures.yaml | ⚠️ .bak résiduel présent |
| L1C3 | Commandes Clim | vignette_L1C3_clim.yaml | page_L1C3_clim.yaml | + 6 card_prog_* (par appareil) |
| L2C1 | Énergie Générale | vignette_L2C1_energie.yaml | page_L2C1_energie_mensuel.yaml, page_L2C1_energie_principale.yaml, page_L2C1_energie_temps_reel.yaml | 3 pages |
| L2C2 | Énergie Clim | vignette_L2C2_energie_clim.yaml | page_L2C2_energie_clim.yaml | - |
| L2C3 | Énergie Éclairage | vignette_L2C3_energie_eclairage.yaml | page_L2C3_energie_eclairage.yaml | 1 seule version de chaque |
| L3C1 | Commandes Éclairage | vignette_L3C1_eclairage.yaml | page_L3C1_eclairage_droite.yaml, page_L3C1_eclairage_gauche.yaml | 2 pages |
| L3C2 | Commandes Prises | vignette_L3C2_prises.yaml | page_L3C2_prises.yaml | - |
| L3C3 | Stores + Fenêtres | vignette_L3C3_stores.yaml | page_L3C3_stores.yaml | - |
| L4C1 | Mini PC (NUC) | vignette_L4C1_mini_pc.yaml | page_L4C1_mini_pc.yaml | + card_popup_memory |
| L4C2 | Proxmox (PVE) | vignette_L4C2_proxmox.yaml | page_L4C2_proxmox.yaml | + card_services_ha_z2m_mariadb |
| L4C3 | Mises à jour HA | vignette_L4C3_maj_ha.yaml | page_L4C3_maj_ha.yaml, page_L4C3_maj_ha_droite.yaml, page_L4C3_maj_ha_gauche.yaml | 2 pages legacy (gauche/droite) + 1 fusionnée |
| L5C1 | Piles / Batteries | vignette_L5C1_batteries_piles.yaml | page_L5C1_batteries_piles.yaml | - |
| L5C2 | Batteries Portables | vignette_L5C2_batteries_portables.yaml | page_L5C2_batteries_portables_droite.yaml, page_L5C2_batteries_portables_gauche.yaml | 2 pages |
| L5C3 | MariaDB | vignette_L5C3_mariadb.yaml | page_L5C3_mariadb.yaml, page_L5C3_systeme_reserve.yaml | + 4 card_audit_* |
| L6C1 | Qualité Air | vignette_L6C1_air_qualite.yaml | page_L6C1_air_qualite.yaml | - |
| L6C2 | Pollution / Pollen | vignette_L6C2_pollution_pollen.yaml | page_L6C2_pollution_pollen.yaml | - |
| L6C3 | Vigilance Eau | vignette_L6C3_vigieau.yaml | page_L6C3_vigieau.yaml | - |
| — | PAGE_RASPI | - | - | Hors-matrice — page unique, pas de pattern L{x}C{x} |
Le code, c'est la partie visible. Voila ce qui verifie, deploie et garde une trace du reste.
Trois niveaux, trois outils. Home Assistant (prod live) est ce qui tourne ; GitHub home_assistant_re-build en est le reflet, pousse automatiquement depuis HA. Depuis le workflow local-first du 2026-10-04, le local ReBuild/ est le point d'edition : on modifie en local, on pousse vers H:\, et l'auto-backup HA remonte vers GitHub. Source de verite = le local : un ecart local vers prod veut dire que la prod est en retard, un ecart prod vers depot que le depot est en retard.
| Outil | Comparaison | Perimetre | Criticite |
|---|---|---|---|
| audit_md5_yaml.sh sur HA |
PROD vs GITHUB | Config YAML : sensors, templates, utility_meter, command_line, shell_command, packages, groups, input_booleans, input_number + automations.yaml, scripts.yaml, configuration.yaml, sql.yaml, input_*.yaml et les .sh de .scripts/ |
Critique |
| audit_md5_md_yaml.sh sur HA |
PROD vs GITHUB | Tous les docs de /config/docs/ : .md + .yaml + .sh |
Secondaire |
| /trigul a la main |
LOCAL vs PROD vs GITHUB | docs/**/*.md + Github/README.md + Github/INDEX_GLOBAL.md — rapport dans historique\MD5\ |
Reference |
Audit complet 1x/semaine minimum, et avant toute session de travail majeure. MD5 different sur un meme nom = divergence a trancher : depuis le local-first, un ecart LOCAL vs GitHub veut le plus souvent dire « push local vers H:\ pas encore fait », pas « extraction manquee depuis HA ».
9 commandes utilitaires, plus une qui merite sa propre place.
Les commandes de push et de resynchronisation (/ha_push_yaml, /ha_push_docs, /ha_push_md, /ha_resync_docs) sont lancees par l'assistant, tout seul, des qu'une modification les rend necessaires : tu n'as pas a les appeler. Il en va de meme pour /sync_index et /histo, qui ferment le travail : /histo enchaine d'elle-meme le /sync_index et le push des docs qu'elle a mis a jour (voir plus bas). Les autres se declenchent a ta demande.
/sync_index et DEPENDANCES_GLOBALES.mdLa "memoire interne" qui dit ou retrouver quoi quand ca foire. A chaque modif YAML qui touche une vignette, une page ou une automation, /sync_index met a jour la chaine de dependances (entite -> fichier source -> vignette dashboard, automation) et passe le statut de 🔲 a ✅. Sans cette mise a jour, un fichier peut etre "valide" alors que sa doc de dependance est perimee -- et dans ce cas la tache n'est jamais consideree terminee.
/fix_fileAnalyse une erreur HA, retourne uniquement le bloc YAML corrige./ha_statusResume l'avancement du projet en 3 points./histoAuto (assistant) — Journal de bord compact, sauvegarde dans historique/. Enchaine elle-meme le /sync_index (DEPENDANCES_GLOBALES, INDEX_GLOBAL), la copie Obsidian, le menage des .bak, le tree et le push sur H:. (a faire a la fin de chaque session)/ha_new_yamlGenere un squelette YAML conforme (bordures, headers, slug, unique_id)./ha_push_yamlAuto (assistant) — Pousse un fichier YAML valide vers la prod H:\./ha_push_docsAuto (assistant) — Synchronise les docs locales DOCS/ vers H:\Docs\./ha_resync_docsAuto (assistant) — Resynchronise le local depuis GitHub, audit MD5 a l'appui./ha_push_mdAuto (assistant) — Pousse uniquement les fichiers .md de documentation vers H:\Docs./trigulTriangulation MD5 des docs (local vs prod vs GitHub), rapport dans historique\MD5\. Seule commande sans fichier dans .claude/commands/ — le skill ha-trigul fait le travail.A chaque ouverture de session, une question avant tout travail : "As-tu fait des modifications depuis la derniere session (avec un autre outil, Deepseek, etc.) ?" Si oui, lancer les deux audits MD5 (audit_md5_yaml.sh et audit_md5_md_yaml.sh) avant toute autre tache ; si non, continuer directement.
Le backlog vit dans un seul fichier Markdown versionne, TODO/TODO.md : lu en debut de session, mis a jour apres chaque item traite. Jamais dans la memoire d'une conversation. Ce qui n'est pas ecrit la est perdu a la fermeture de la session.
Des templates qui decident, calculent et s'adaptent — pas de simples conversions d'unites.
heat / off / coolLa T° exterieure pilote le mode via deux sensors de seuil — pas de valeurs hardcodees. seuil_non_chauffage (18°C) et seuil_non_clim (27°C) sont des sensors HA modifiables sans toucher au template. Le fallback -999 detecte une sonde hors ligne et retourne unknown au lieu de forcer un mode errone.
sensor.mode_ete_hiver — un seul point de verite. Modifier le seuil = changer la valeur d'un sensor, le template suit automatiquement.La cible confort n'est pas un template unique. C'est une chaine de 6 sensors qui se lisent les uns les autres. Chaque etape a un role clair et un unique_id propre — auditable et debuggable individuellement. Les paliers utilisent des sensors delta (delta_1...delta_7) au lieu de valeurs hardcodees.
mode_ete_hiver → consigne_de_base → temperature_differentielle → temperature_cible → temperature_confort_jour → temperature_confort_nuitLe template lit des groupes Hue natifs (light.salon, light.table), pas les ampoules une a une. 4 etats propres : Allume / Salon / Table / Eteint. Pour le bureau : 3 sensors imbriquest (lumiere_bureau_etat, lumiere_ecran_etat, bureau_etat) avec 6+ etats selon la combinaison PC / Hue Sync / lampes.
La carte Ecran (Hue Play) disparait du dashboard quand switch.ecran_p_c_3_play_hue = off. Ce switch est coupe par une automation d'absence declenchee depuis binary_sensor.presence_maison (P4). La carte Tetes de Lit + son heading entier disparaissent de la meme facon via switch.prise_tete_de_lit_chambre.
P3 et P4 restent dans des fichiers YAML strictement separes — c'est uniquement la conditional card du dashboard qui croise les poles.
P4 presence_maison = Absent → automation → switch OFF → conditional card → carte masquee. En parallele : sensor.lumiere_ecran_etat passe a Eco. dans le badge Bureau.Meme logique de sensors corriges que la chaine confort, mais pour le mode absence. temperature_eco_hiver_corrige part d'une base de 17°C et remonte a 18°C si T°ext < 12°C, 19°C si T°ext < 8°C. temperature_eco_ete_corrige fait l'inverse en ete. Ces deux sensors sont lus par le script p1_master_gestion_clim.yaml quand sensor.groupe vaut groupe_1 — personne a la maison.
sensor.groupe = groupe_1 (Absent) → script lit temperature_eco_hiver_corrige / _eco_ete_corrige → consigne eco appliquee aux climatiseurs, pas besoin d'automation dediee en plus.