‹ Les 3 types de fichiers
/homeassistant/sensors/P1_clim_chauffage/P1_kWh/P1_kWh_clim_chauffage.yaml
p1_master_gestion_clim.yaml — script partagé (A) + (B)

    
01 — Avant-propos

Home Assistant ReBuild

Refonte complete de zero. Architecture rigoureuse, entites 100% tracables, documentation embarquee. Energie - Chauffage - Eclairage - Presence.

0 Poles separation stricte
0 Vignettes 13 sous-pages
0 Compteurs lampes 19 x 4 cycles AMHQ
0 Fichiers config indexes RAG *
0 Niveaux chaine dependances
0
Utility Meters pour l'eclairage seul

19 ampoules x 4 cycles (annuel, mensuel, hebdo, quotidien). Chaque ampoule a son propre compteur kWh avec template relais et moyenne Watts. Granularite maximale.

P3_UM_AMHQ P3_ENERGIE_TPL
0%
Tracabilite materiel vers dashboard

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.

5 niveaux zero entite orpheline
0
Poles - separation architecturale stricte

Energie, Chauffage, Prises, Eclairage, Presence. Jamais melanges dans un meme fichier YAML. Chaque pole a sa propre arborescence et ses propres prefixes.

P0_ P1_ P2_ P3_ P4_
RAG *
Documentation config searchable par IA

454 fichiers YAML, Markdown et JSON indexes dans AnythingLLM. La config entiere est interrogeable en langage naturel. Backup Git automatique depuis HA vers GitHub.

AnythingLLM Git auto-sync

* 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.

02 — Apercu

Le dashboard en production

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.

Valeurs d'exemple non contractuelles - les vignettes reproduisent fidelement l'interface reelle.
Survolez une vignette pour simuler ses differents etats.

Operateur F 4G 72%
L1 — Environnement & Thermique
Meteo
Ensoleille
26.9°C
Conditions simulees - survol actif
Courbes Temperature
Balcon N.33.5°C34.6%
Salon26.7°C47.4%
Cellier24.1°C58.2%
Cuisine27.4°C47.2%
Bureau26.6°C50.3%
SdB26.9°C79.4%
Chambre26.4°C51.9%
Seuils reels - survol actif
Commande Clim.
T Appart. -----26.8°C
Δ Ademe ------6.1°C
Mode →Cool.
SalonCool26.0°C
CuisineOff25.0°C
BureauCool27.0°C
SdBOff21.0°C
ChambreCool27.0°C
Seuils reels - survol actif
L2 — Consommation Energetique
Conso. Appart.
Mini -- Réel (W) -- Maxi
93 W
952 W
3977 W
Couts Total = H.P. + H.C.
1.54 €
0.79 €
0.76 €
Seuils reels - survol actif
Consommation CLIM
Salon2.71 kWh120.27 kWh
Cuisine0 Wh5.00 kWh
Bureau1.28 kWh48.43 kWh
SdB Sft0 Wh0 Wh
SdB SeS0 Wh0 Wh
Chambre1.32 kWh49.19 kWh
TOTAL5.31 kWh222.89 kWh
Seuils reels - survol actif
Consommation LAMPES
Appart.14 Wh693 Wh
Salon173 Wh6.79 kWh
Cuisine27 Wh1.47 kWh
Bureau0 Wh1.28 kWh
SdB53 Wh4.39 kWh
Chambre60 Wh1.22 kWh
TOTAL327 Wh15.84 kWh
Seuils reels - survol actif
L3 — Commandes
Commande LAMPES
Appart.Eteint0/2
SalonSalon1/2
CuisineEteint0/1
BureauSynchro1/2
SdBEteint0/1
ChambreEco.0/1
Seuils reels - survol actif
Commande eCO.
HorlogeAllume
SalonAllume
TV SalonEteint
PC BureauAllume
TV ChambreEteint
Tete de LitEteint
Seuils reels - survol actif
Commande Stores
PieceFenetresStores
SalonFermeFerme
CuisineFerme-
BureauFermeFerme
ChambreFerme-
Seuils reels - survol actif
L4 — Reseau & Systeme
Proxmox
🖥️
51.0°C
PVE CPU2.3%
PVE HostONLINE
PVE RAM42.6%
PVE Storage62.9%
Seuils reels - survol actif
Mini - P.C.
💻
51.0°C
CPU2.3%
Power8.5 W
RAM42.6%
SSD62.9%
Seuils reels - survol actif
Software | modules
🏠
Tout est a jour
Seuils reels - survol actif
L5 — Maintenance Materielle
Etat des Piles & Batteries
100%
75%
50%
25%
/!\
HUE
6
1
0
4
8
IKEA
7
0
1
0
11
SONOFF
11
0
0
0
Seuils reels - survol actif
Etat Batterie Portables
POCO_E58%🟡
POCO_G63%🟡
1+10P_E68%🟡
1+10P_G67%🟡
GM1901100%🟢
SM-A5398%🟢
Tablette74%🟡
Seuils reels - survol actif
MariaDB
1036.0
MiB
MARIADB
Seuils reels - survol actif
L6 — Qualite & Alertes
Qualite de l'Air ambiant
Salon PM2.54 μg/m³
Bureau PM2.54 μg/m³
Chambre PM2.55 μg/m³
Salon tCOV119 ppb
Bureau tCOV153 ppb
Chambre tCOV138 ppb
Seuils reels - survol actif
Pollution & Pollen
Air 4 / Pollen 2
😷
Seuils reels - survol actif
Vigieau - Restriction Eau
💧
Crise
Seuils reels - survol actif
03 — Config YAML

Les 3 types de fichiers

Chaque fichier a sa place, son rôle, son cycle de vie. On ne mélange pas.

👆
01 · Config YAML
Sensors · Templates · UM
DOCS/01_docs_config_system/H:\Docs\
  • sensors/
    • P0_Energie_total/ P0
    • P1_clim_chauffage/ P1
    • P2_prise/ P2
    • P3_eclairage/ P3
    • Air_quality/ · meteo/ · MP_*
    platform: statistics · integration · ping
  • templates/
    • Jinja2 : textes, icônes, statuts
    • Stores · Tendance T° · Air quality
  • utility_meter/
    • P0 → P3 — cycles A M H Q
    • 1 équipement × 4 cycles = 4 compteurs
    !include_dir_merge_named ← dict obligatoire
  • command_line/ · groups/ · ...
👆
02 · Automations
YAML + documentation
DOCS/03_docs_automations/H:\Docs\
  • automations.yaml
    • Fichier unique — toutes les automations
    • Jamais modifié à la main
    Modification → UI HA uniquement
  • docs_automations_YAML/
    • automation_presence_chauffage.yaml
    • automation_alertes_conso.yaml
    • ... (1 fichier = 1 automation)
  • docs_automations_MD/
    • automation_presence_chauffage.md
    • Description · logique · déclencheurs

Chaque automation : un .yaml (code) + un .md (doc).

👆
03 · Dashboard YAML
Vignettes · Pages · Complet
DOCS/02_docs_dashboard/H:\Docs\
  • Dashboard_COMPLET/
    • Dashboard_2026_08_01.yaml
    • Dashboard_2026_07_18.yaml
    Snapshot export UI HA — conservation illimitée (16 versions à ce jour)
  • L1C1_01_Meteo/ · L1C2_02_Temperatures/ ...
    • vignette_L1C1_meteo_2026-05-16.yaml
    • page_L1C1_meteo_2026-06-13.yaml
    • card_duree_du_jour_2026-05-23.yaml
    Max 3 versions par vignette/page — doc .md séparée dans dashboard_docs_MD/
  • PAGE_Home/ · PAGE_RASPI/
    • card_meteocss_home_2026-06-28.yaml
    • card_presence_home_2026-06-13.yaml
    Pages hors-matrice — cartes individuelles, pas de pattern vignette/page
  • 18 vignettes (L1C1 → L6C3) + 2 pages hors-matrice
Attends... t'as vraiment lu jusqu'ici ?
👆 04 — Process & Cascade de verite →
Bon. Tu mérites de voir la suite. Clique.

01 · Config YAML

Sensors · Templates · UM
DOCS/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.

🔌 Sensors
Collecte & mesure

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).

Merge : !include_dir_merge_list
⚙️ Templates
Calcule & transforme

Calcule les couts, les ratios HP/HC, les etats textuels, les labels Jinja2. Rien de brut ici - uniquement du derive.

Merge : !include_dir_merge_list
📈 Utility Meter
Comptabilise par cycle

Remet a zero automatiquement : Annuel / Mensuel / Hebdo / Quotidien. Chaque compteur = une cle nommee (dict), pas une liste.

Merge : !include_dir_merge_named

Voila comment sont organises Sensors · Templates · Utility Meter

100% 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_*/           ← kWh cumulatif + mini/maxi + Genelec
│   ├── P1_clim_chauffage/            ← DUT history_stats + integration W→kWh (cuisine)
│   ├── P2_prise/                     ← kWh prises, veilles, mini-pc
│   ├── P3_eclairage/                 ← kWh ampoules (unite / zone / total)
│   └── 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
La formule magique — dans le fichier "configuration.yaml"
# --- 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.
04 — Conventions

La descente en enfer

Les règles que chaque fichier YAML doit respecter. Sans exception.

1 — Numérotation officielle des pôles

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.

P0ENERGIE
P1CLIM
P2PRISES
P3ECLAIRAGE
P4PRESENCE
🔋
Pole 0
Energie Globale
Compteur Linky, bilans HP/HC, couts journaliers.
MyElectricalData
Index Linky + ratio HC/HP mensuel
🌡️
Pole 1
Chauffage / Clim
Clim salon, bureau, chambre · soufflant SDB · radiateur cuisine. Strategie thermique T° ext → cible.
Zigbee
7 equipements · 28 compteurs
🔌
Pole 2
Prises Connectees
TV, PC, lave-linge, frigo, congel, airfryer. Monitoring natif Z2M — aucun PowerCalc ici.
NOUS · IKEA · Zigbee2MQTT
19 equipements · 76 compteurs
💡
Pole 3
Eclairage
19 lampes Hue + relais SDB Sonoff. 76 utility meters (4 cycles). Templates kWh + moyennes Watts.
Philips Hue
19 lampes · 76 UM · 5 niveaux
📍
Pole 4
Groupe Presence
Wi-Fi, reseau mobile, localisation. 4 etats : Absent, UserM seule, UserE seul, Tous les deux.
Portable · Trackers
4 etats nommes · automations liees
1 fonction = 1 fichier, par pôle

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.

2 — Numérotation officielle des pièces

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.

1.ENTREE
2.CELLIER
3.TOILETTE
4.SALON
5.CUISINE
6.COULOIR
7.BUREAU
8.SDB
9.CHAMBRE

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.

3 — Convention de nommage : Abréviations officielles

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.

Répertoires — "ou je suis née" — le répertoire détermine la plateforme HA qui charge le fichier
3 piliers principaux · Sensors · Templates · Utility Meter
SNSsensors/ — capteur statistique, Riemann, commande shell retournant une valeur. Merge : !include_dir_merge_list
UMutility_meter/ — compteur a remise a zero automatique par cycle — consomme _energy et génère des _um. Merge : !include_dir_merge_named
TPLtemplates/ — entité calculée par formule Jinja2, aucun hardware direct. Merge : !include_dir_merge_list
Secondaires
CMDcommand_line/ — sensor via script bash ; le résultat texte/JSON est interprété par HA comme valeur d'entité
IBinput_booleans/ — stockage d'état on/off pour les BV. Chaque IB est appairé a un SW template. Pas utilisé seul.
SHshell_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)
GRP_groups/ — groupes d'entités par constructeur (batteries Hue, IKEA, Sonoff). Ex : GRP_01_batteries_hue.yaml
Natifs — données brutes exposées directement par le hardware, aucune transformation
POWER_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.
ENERGIE_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.
Pseudo-natifs — P3 uniquement — PowerCalc estime l'énergie là où le hardware n'expose rien nativement
ENERGIE_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).
Calculs — entités produites par transformation d'une source brute, d'un UM, ou d'un autre sensor
kWhIntégration numérique W → kWh (méthode Riemann) — utilisé quand le hardware n'expose pas de _energy natif. Cas exceptionnel. Pattern fichier : {P}_kWh_{description}.yaml. Voir la section "Spécial Riemann" ci-dessous.
DUTDuration Under Threshold — durée pendant laquelle une valeur (typiquement une température) reste sous un seuil donné. Usage : analyse thermique P1 (confort vs consigne).
DIAGDiagnostic cycle en cours (1 seul cycle actif) — snapshot temporaire pour analyser une conso sur une période glissante non clôturée. Fichier de travail, non archivé à terme.
AVGMoyenne de puissance en W sur un cycle — calculée depuis _um_kwh_tpl en P3, directement depuis _um en P0/P1/P2. Permet d'évaluer la puissance réelle moyenne consommée.
TOTALAgrégat de plusieurs entités du même type sur un périmètre défini — somme de zones, de pôles, etc. Toujours suffixé _AMHQ si le fichier couvre les 4 cycles.
HP / HCHeures Pleines / Heures Creuses — sous-entités générées automatiquement par HA quand un Utility Meter est configuré en mode tarif différencié. Source : Linky via MyElectricalData (P0). Suffixes _hp et _hc dans les unique_id.
MINI_MAXI_AVGStats min / max / moyenne sur une fenêtre temporelle fixe et glissante (ex: 24h, 7 jours). Distinct de AVG cycle UM : ici la fenêtre est continue et non remise à zéro à minuit. Ex : P0_MINI_MAXI_AVG_Genelec_appart.yaml.
Cycles
AMHQAnnuel / Mensuel / Hebdomadaire / Quotidien — les 4 cycles de remise à zéro des Utility Meters. Présent dans le nom de fichier si les 4 cycles sont couverts. Dans les unique_id : forme complète (annuel, mensuel, hebdomadaire, quotidien), jamais l'abréviation.
Reste
BVBouton Virtuel — interrupteur logique sans hardware. Toujours une paire IB + SW (voir ci-dessous). Sans numéro dans le nom — la description seule discrimine.
IBInput Boolean — stockage de l'état on/off du BV. Fichier dans input_booleans/. Pattern : {P}_BV_IB_{description}.yaml. Sans IB, le template switch n'a nulle part où persister son état.
SWSwitch — template switch exposé à l'utilisateur (dashboard, automations). Lit et écrit dans l'IB associé. Fichier dans templates/Inter_BP_Virtuel/. Pattern : {P}_BV_IB_SW_{description}.yaml.
ACSArrêt Clim Sécurisé — input_boolean transitoire (×3, un par pièce) indiquant qu'un arrêt de sécurité clim est en cours, pour éviter les boucles de relance automatique. Fichier : P1_ACS_IB_01_arret_clim_securises.yaml. Écrit par les automations P1 clim, lu par (A)/(B) comme condition de blocage.
ui_dashboardTemplates d'affichage uniquement (texte formaté, couleurs, icônes dynamiques, états custom) — aucun calcul kWh/W/DUT ici. Pattern fichier : {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.
LxCxAdresse matricielle d'une vignette du tableau de bord — Ligne x, Colonne x (ex: L2C2 = Conso Clim). Utilisé dans les chaînes de dépendances pour tracer où une entité est consommée visuellement.
utilitairestemplates/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.
Préfixes hors-pôles — remplacent P{n} pour les fichiers sans pôle énergie
M_Météo & environnement extérieur — alertes, vent, foudre, tendances T°. Ex : M_04_tendances_th_ext_card.yaml.
A_Air quality — qualité de l'air intérieur (PM2.5, tCOV). Ex : A_01_AIR_QUALITY.yaml.
S_Stores — volets motorisés, templates d'état. Ex : S_01_STORES.yaml.
MP_Mini-PC — répertoire réservé, aucun YAML actif. Seul fichier existant : #MP_01_monitor_temp.sh.# dans .scripts/ (script actif sur Raspberry Pi, nommé #...# pour que HA l'ignore). ⛔ Ne pas renommer.
Spécial — Énergie Riemann — intégration numérique W → kWh, dernier recours quand pas de _energy natif

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, mais fonctionnel quand le hardware ne fournit pas d'index cumulatif. Actuellement 2 fichiers en prod :

P1_kWh_clim_chauffage.yamlsensors/ — Riemann sur les clims/soufflants (source : prises NOUS P1, _power W)
P1_kWh_riemann_cuisine.yamltemplates/ — Riemann sur radiateur cuisine (Shelly 1PM Gen4, bug firmware : kWh natif non fonctionnel)

4 — Convention de nommage : la chaîne de suffixes

Le suffixe du unique_id documente la dernière transformation subie. Chaque étape ajoute sa marque dans le nom.

source brute
{slug}_energy
Natif HA - Z2M / Hue / Shelly
Utility Meter
{slug}_{cycle}_um
Remis à zéro par cycle A/M/H/Q
Relais kWh (unité + zone)
{slug}_{cycle}_um_kwh_tpl
Par lampe OU agrégat zone
Agrégat total
{zone}_{cycle}_kwh_tpl
Sans _um_ — total appart uniquement
Règle absolue

Tout sensor sorti d'un UM finit par _um. Template kWh (lampe ou zone) : _um_kwh_tpl.

Règle d'agrégation

_kwh_tpl (sans _um_) = réservé au total appart entier. Ne jamais l'utiliser à un autre niveau.

P3 — suffixe AVG

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.

5 — Convention de nommage : exemples de nommage de fichiers YAML

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}].yamlP1_UM_AMHQ.yaml
TPL{P}_TPL_AMHQ_{niveau}.yamlP3_TPL_AMHQ_1_UNITE.yaml
AVG{P}_AVG_AMHQ[_{variante}].yamlP2_AVG_AMHQ_prises.yaml
TOTAL{P}_TOTAL_AMHQ.yamlP1_TOTAL_AMHQ.yaml
kWh{P}_kWh_{description}.yamlP1_kWh_clim_chauffage.yaml
DUT{P}_DUT_{description}.yamlP1_DUT_clim_chauffage.yaml
DIAG{P}_DIAG_{description}_{cycle}.yamlP0_DIAG_conso_hebdomadaire.yaml
POWER{P}_POWER_{niveau}.yamlP3_POWER_3_TOTAL_ZONE.yaml
BV_IB{P}_BV_IB_{description}.yamlP3_BV_IB_inter_smorig_salon.yaml
BV_IB_SW{P}_BV_IB_SW_{description}.yamlP3_BV_IB_SW_inter_smorig_salon.yaml
MINI_MAXI_AVG{P}_MINI_MAXI_AVG_{description}.yamlP0_MINI_MAXI_AVG_Genelec_appart.yaml
ui_dashboard{P}_ui_dashboard.yamlP3_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)
- Hors-poles : {LETTRE}_{index}_{description}.yaml — ex: M_04_tendances_th_ext_card.yaml
- Groupes : GRP_{index}_{description}.yaml
- 1 fichier = 1 seul pole — jamais deux poles dans le meme fichier
- ⛔ ui_dashboard : templates d'affichage uniquement — jamais de calculs kWh/W/DUT
- Fichiers legacy non conformes : renommer uniquement si le fichier est modifié pour autre chose
- ⚠️ Exception legacy TOTAL : P0_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é
- 🧊 Cas particulier en attente : P2_current_all_standby.yaml — puissance totale veilles, TYPE non encore formalisé

Construction d'un fichier .yaml

S'applique aux fichiers 01 · Config YAMLSensors · Templates · Utility Meter deployés dans /homeassistant/. Les 4 sections qui suivent détaillent ce que doit contenir chaque fichier, dans cet ordre.

1 — Bordures ASCII

Chaque fichier YAML commence par une boîte ASCII. Deux niveaux : titre principal du fichier, titre secondaire par pièce.

Titre principal — coins arrondis

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.

Titre secondaire — coins carrés

Caractères : ┌─┐ / └─┘
Largeur : 37 caractères
Texte : MAJUSCULES, numérotation officielle 1-9
Un titre secondaire par pièce dans le fichier.
 

# titre principal - coins arrondis - 78 car. [exemple a 60 car.] # ╭──────────────────────────────────────────────────────────╮ # │ POLE 1 - UTILITY METER AMHQ : CHAUFFAGE CLIM │ # ╰──────────────────────────────────────────────────────────╯ # titre secondaire - coins carres - 37 car. # ┌───────────────────────────────────┐ # │ 4. SALON │ # └───────────────────────────────────┘

2 — Les 5 headers obligatoires

Juste sous la boîte ASCII principale, dans cet ordre exact. Toujours les 5 — même si une section est vide.

📝
## 📝 DESCRIPTION :
Ce que fait le fichier, ce qu'il produit comme entités.
🧮
## 🧮 CALCUL & SOURCES :
Formules utilisées, entités sources, méthode de calcul (Riemann, statistics, mean...).
🔗
## 🔗 CHAÎNE DE DÉPENDANCES :
Tableau à 4 colonnes : une ligne par entité produite par ce fichier.
MATÉRIEL
CAPTEUR BRUT
CE FICHIER
AVAL
Device physique ou intégration HA. Si calculé : [calculé]
Entité source exacte utilisée dans source: ou entity_id:
unique_id exact de l'entité produite par ce fichier
Fichier(s) consommateurs + vignette. Ex : P1_UM.yaml → L2C2
⚠️
## ⚠️ IMPORTANT (PIÈGES) :
Comportements contre-intuitifs, dépendances critiques, bugs connus. Ce qui peut casser HA si oublié.
🖥️
## 🖥️ TABLEAU DE BORD (VIGNETTES PRINCIPALES) :
Quelle(s) vignette(s) consomment les entités de ce fichier. Ex : L2C2 Conso Énergie Clim.
# ## 📝 DESCRIPTION : # Ce que fait le fichier... # # ## 🧮 CALCUL & SOURCES : # sensor.source_brute → calcul → résultat # # ## 🔗 CHAÎNE DE DÉPENDANCES : # # | MATÉRIEL | CAPTEUR BRUT (source) | CE FICHIER (unique_id) | AVAL | # |:------------|:-------------------------------|:------------------------|:-------| # | Nodon (Z2M) | sensor.general_electric_power | genelec_conso_mini_24h | L2C1 | # # ## ⚠️ IMPORTANT (PIÈGES) : # - Point d'attention critique... # # ## 🖥️ TABLEAU DE BORD (VIGNETTES PRINCIPALES) : # - L2C1 Conso Énergie Générale

3 — Slug tertiaire

Commentaire 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.

Format

# --- 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.

Cas particulier : Utility_meter

Un slug par entrée de cycle : annuel, mensuel, hebdomadaire, quotidien.
Interdit : un slug groupé pour les 4 cycles.

4 — name & unique_id

Toujours en paire. Même sens, deux formats. Cohérence croisée obligatoire : ils doivent décrire exactement la même chose.

name - format humain

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.

unique_id - format machine

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.

Exemple concret — P3 eclairage
# 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
PowerCalc est une integration HACS qui génère automatiquement un 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.

NOTA: PHILOSOPHIE — Zero Helper UI

Aucun input_boolean, input_number ou input_select pour la logique metier. Tout est en YAML — versionnable, auditable, rollbackable sur Git.

Approche Helper UI
input_number.seuil_cool: 26.5 — modifiable librement dans l'UI HA
Valeur stockee en base HA — non versionnee sur Git
Diff illisible : "entity changed" sans contexte ni justification
Source de verite : l'interface graphique — aucun audit possible
Impossible de savoir pourquoi le seuil a change il y a 3 mois
Si HA crash et restore : les helpers reviennent a leur valeur par defaut
Approche Template YAML
Seuils hardcodes dans la value_template: — dans le fichier YAML
Chaque modification = commit Git avec date et contexte
Diff lisible : t >= 26.5t >= 27 — intention claire
Source de verite : DOCS/01_docs_config_system/config_system_YAML/ — auditable sans HA
Rollback instantane si un seuil cause un probleme
Restore HA : les seuils reviennent exacts — definis dans les fichiers
05 — Automation

AUTOMATION

Règles de codage, standards de notification et canaux actifs en prod.

02 · Automations

YAML + documentation
DOCS/03_docs_automations/H:\Docs\

1 — Règles de codage strictes

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.

⛔ Interdit
Jamais de tiret "-" devant le premier alias — bloc objet, pas liste.
Jamais d'id: au niveau global — laisser HA le gérer.
✅ Obligatoire
alias en MAJUSCULES pour chaque sous-bloc (trigger, condition, action).
id: autorisé UNIQUEMENT à l'intérieur des déclencheurs (ciblage d'actions).
Annoter chaque ligne modifiée : # "[L...] modif" + bloc # annotations_log: en fin.

2 — Standards de notification

Cible : Tel. portable UserE (ecran carre, emojis limites).

TITRE title:

Max 21 caractères.
MAJUSCULES recommandées.
Ex: SDB : ARRET (11 car.)

MESSAGE message:

Texte pur ASCII de préférence.
Éviter les emojis → ! / [ ] / OK / >>.
Info critique dans les 20 premiers caractères.

Canaux actifs en prod
Canal Service Usage
Mobile UserE notify.mobile_app_userE 22 automations + 5 scripts
Fichiers log notify.send_message → entité File 3 automations (logs .txt)
⛔ Breaking change 2026 — notify.file

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.

/homeassistant/notifs/diag_conso_elec.txt ← DIAG - ENREGISTREMENT JOURNALIER
/homeassistant/notifs/ecart_liky_vs_nodon.txt ← Log Écart Linky vs Nodon
/homeassistant/.logs/zone_userE.txt ← [P4] userE - Log Zones

3 — Vue d'ensemble des automations

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 A - Gestion Intelligente Soufflant - Régulation T° + auto-off 60 min
D - Watchdog Sécurité Radiateur ⚠️ Watchdog SDB Dérive thermique
E - Minuterie Sèche-Serv. (2h) Sèche-Serv. OFF Timer absolu 2h
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é
(log fichier) = notify vers fichier HA (notify.file_* / notify.zone_*), pas vers mobile.

YAML sources — docs_automations_YAML/

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 A - Gestion Intelligente Soufflant a_2026_02_01_salle_de_bain_gestion_intelligente_soufflant.yaml P1_BV_01_SW_inter_souflant_sdb.yaml · input_select.yaml
D - Watchdog Securite Radiateur d_salle_de_bain_watchdog_securite_radiateur.yaml -
E - Minuterie Seche Serviettes (2h) e_minuterie_seche_serviettes_salle_de_bain_timer_absolu_2h.yaml -
P2 Prises ECO Prises Dynamique eco_prises_dinamique_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 -
06 — Dashboard YAML

DASHBOARD YAML

Versioning, nommage et inventaire réel des 18 vignettes + 2 pages hors-matrice.

03 · Dashboard YAML

Vignettes · Pages · Complet
DOCS/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, l'horodate (nom de version), le stocke dans DOCS/02_docs_dashboard/dashboard_docs_YAML/L{x}C{x}_.../, et supprime la version la plus ancienne des 3 — après validation.

1 — Versioning et nommage

Un sous-dossier par vignette (L{ligne}C{colonne}_{index}_{Nom}/) — jamais plus de 3 versions par type de fichier.

Type Pattern Conservation
Dashboard complet Dashboard_COMPLET/Dashboard_YYYY_MM_DD.yaml Illimitée (16 versions à ce jour, 2026-03-16 → 2026-08-01)
Vignette L{x}C{x}_.../vignette_L{x}C{x}_{nom}_YYYY-MM-DD.yaml Max 3 versions
Page L{x}C{x}_.../page_L{x}C{x}_{nom}_YYYY-MM-DD.yaml Max 3 versions
Carte isolée L{x}C{x}_.../card_{nom}_YYYY-MM-DD.yaml Sous-composant réutilisé dans une page
⚠️ Anomalie relevée à l'audit

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.

2 — Inventaire réel des 18 vignettes + 2 hors-matrice

Relevé direct du dossier local (2026-08-02). Dernière vignette/page par emplacement.

L5C3_15_MariaDB/Script sh/ (script bash) et les deux sous-dossiers d'assets de PAGE_Home/ (Météo/, www_meteocons/) ne suivent pas la convention .yaml — présents mais hors périmètre des règles de nommage.

⚠️ Écart YAML ↔ MD relevé

PAGE_RASPI a son propre dossier côté YAML (PAGE_RASPI/) mais côté MD, sa doc est colocalisée dans L4C2_MINI_PC/ — pas de dossier dédié. Asymétrie à connaître si tu cherches ce fichier.

Matrice Nom Dernière vignette Dernière page Note
L0C0PAGE_Home--Page d'accueil — 7 card_* individuelles (foudre, lave-linge, presence...)
L1C1Météo2026-05-162026-06-13+ card_duree_du_jour
L1C2Températures2026-05-122026-07-14⚠️ .bak résiduel présent
L1C3Commandes Clim2026-07-182026-07-18+ 6 card_prog_* (par appareil)
L2C1Énergie Générale2026-06-182026-06-183 pages (mensuel/principale/temps réel)
L2C2Énergie Clim2026-05-132026-07-14-
L2C3Énergie Éclairage2026-05-132026-05-131 seule version de chaque (récent)
L3C1Commandes Éclairage2026-05-132026-05-222 pages (gauche/droite)
L3C2Commandes Prises2026-05-142026-05-14-
L3C3Stores + Fenêtres2026-05-142026-06-02-
L4C1Proxmox (PVE)2026-06-182026-06-18+ card_services_ha_z2m_mariadb
L4C2Mini PC (NUC)2026-06-182026-06-18+ card_popup_memory
L4C3Mises à jour HA2026-05-142026-06-152 pages legacy (gauche/droite) + 1 fusionnée
L5C1Piles / Batteries2026-05-142026-05-14-
L5C2Batteries Portables2026-05-122026-05-122 pages (gauche/droite)
L5C3MariaDB2026-05-102026-06-15+ 4 card_audit_* + page_systeme_reserve
L6C1Qualité Air2026-05-142026-05-23-
L6C2Pollution / Pollen2026-05-142026-06-13-
L6C3Vigilance Eau2026-05-142026-05-14-
PAGE_RASPI-2026-05-03Hors-matrice — page unique, pas de pattern L{x}C{x}
04 — Process

Ce qui tourne autour

Le code, c'est la partie visible. Voila ce qui verifie, deploie et garde une trace du reste.

1 — Cascade de verite et audit MD5

Home Assistant (prod live) est la reference absolue. GitHub home_assistant_re-build en est le reflet, pousse automatiquement depuis HA a chaque changement. Le local ReBuild/ est le poste de travail : il doit converger vers prod, jamais l'inverse.

Perimetre Comparaison Criticite
Config YAML (sensors/templates/UM/command_line) GitHub vs Local Critique
Automations (alias automations.yaml) GitHub vs Local Critique
Dashboard YAML Local vs H:\Docs\ Secondaire

Audit complet 1x/semaine minimum, et avant toute session de travail majeure. MD5 different sur un meme nom = conflit, HA fait foi.

2 — Les slash commands

7 commandes utilitaires, plus une qui merite sa propre place.

👆
🕸
La colonne vertebrale
/sync_index et DEPENDANCES_GLOBALES.md

La "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.
/statusResume l'avancement du projet en 3 points.
/histoJournal de bord compact, sauvegarde dans historique/. (a faire a la fin de chaque session)
/ha_new_yamlGenere un squelette YAML conforme (bordures, headers, slug, unique_id).
/ha_push_yamlPousse un fichier YAML valide vers la prod H:\.
/ha_push_docsSynchronise les docs locales DOCS/ vers H:\Docs\.
/ha_resync_treeResynchronise le local depuis GitHub, audit MD5 a l'appui.
3 — Protocole de debut de session

A chaque ouverture de session, une question avant tout travail : "As-tu fait des modifications depuis la derniere session (autre outil, etc.) ?" Si oui, l'audit MD5 complet se lance avant toute autre tache.

4 — TODO.txt

Le backlog vit dans un seul fichier texte versionne, jamais dans la memoire d'une conversation. Ce qui n'est pas ecrit la est perdu a la fermeture de la session.

5 — Bonus : YAML Intelligents

Des templates qui decident, calculent et s'adaptent — pas de simples conversions d'unites.

Bascule automatique heat / off / cool

La 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.

✓ ResultatToutes les automations clim lisent sensor.mode_ete_hiver — un seul point de verite. Modifier le seuil = changer la valeur d'un sensor, le template suit automatiquement.
P1_01_MASTER · reel
# --- mode_ete_hiver ---
- name: "Mode Ete/Hiver"
unique_id: mode_ete_hiver
state: >
{% set t = states('sensor.th_balcon_nord_temperature') | float(-999) %}
{% set nc = states('sensor.seuil_non_chauffage') | float(18) %}
{% set ncl = states('sensor.seuil_non_clim') | float(28) %}
{% if t == -999 %} unknown {# sonde hors ligne #}
{% elif t < nc %} heat
{% elif t < ncl %} off
{% else %} cool
{% endif %}

Chaine thermique — 6 sensors en cascade

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.

✓ Chaine completemode_ete_hiverconsigne_de_basetemperature_differentielletemperature_cibletemperature_confort_jourtemperature_confort_nuit
P1_01_MASTER · etape 4/6
# --- temperature_cible ---
- name: "Temperature Cible"
unique_id: temperature_cible
unit_of_measurement: "°C"
state: >
{% set t = states('sensor.th_balcon_nord_temperature') | float(0) %}
{% set base = states('sensor.consigne_de_base') | float(18) %}
{% set d5 = states('sensor.delta_5') | float(5) %}
{% set d7 = states('sensor.delta_7') | float(7) %}
{% if t < 12 %} {{ (base + 1) | int }} {# froid → +1 #}
{% elif t > 40 %} {{ (t - d7) | int }} {# canicule #}
{% elif t > 32 %} {{ (t - d5) | int }} {# forte chaleur #}
{% else %} {{ base | int }}
{% endif %}

Labels semantiques — groupes Hue, pas lampes individuelles

Le 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.

✓ Resultat"Salon" = salon allume, table eteinte. "Table" = table seule. Bureau : "Allume & Sync." = lampes ON + Hue Sync Box active. Dashboard toujours coherent avec la realite physique.
etats_status.yaml · reel
# --- lumiere_salon_etat ---
- name: "Lumiere Salon Etat"
unique_id: lumiere_salon_etat
state: >
{% if is_state('light.salon','on') and is_state('light.table','on') %} Allume
{% elif is_state('light.salon','off') and is_state('light.table','off') %} Eteint
{% elif is_state('light.salon','on') and is_state('light.table','off') %} Salon
{% elif is_state('light.salon','off') and is_state('light.table','on') %} Table
{% else %} erreur {% endif %}
# Bureau : 3 sensors imbriquest, 6 etats possibles :
# Eco. / Ecran / Allume / Allume & Sync. / Synchro. / Eteint

Chaine P4 → Absence → Switch → Card disparait

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.

✓ Chaine completeP4 presence_maison = Absent → automation → switch OFF → conditional card → carte masquee. En parallele : sensor.lumiere_ecran_etat passe a Eco. dans le badge Bureau.
Dashboard L3C1 · reel
# Carte Ecran — visible UNIQUEMENT si Hue Sync Box ON
type: conditional
conditions:
- condition: state
entity: switch.ecran_p_c_3_play_hue # Hue Play Sync Box
state: "on"
# switch OFF → carte masquee (etat "Eco." dans badge)
# Heading Tetes de Lit — visibility si prise ON
visibility:
- condition: state
entity: switch.prise_tete_de_lit_chambre
state: "on"
# P4 absence → automation coupe ces 2 switches → 2 cartes disparaissent

Consignes eco quand il n'y a personne

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.

✓ Chaine completesensor.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.
P1_01_MASTER · reel
# --- temperature_eco_hiver_corrige ---
- name: "Temperature eCO. Hiver Corrige"
unique_id: temperature_eco_hiver_corrige
state: >
{% set t_ext = states('sensor.th_balcon_nord_temperature') | float(0) %}
{% set eco = states('sensor.temperature_eco_hiver') | float(17) %}
{% if t_ext < 8 %} {{ eco + 2 }} {# -> 19°C #}
{% elif t_ext < 12 %} {{ eco + 1 }} {# -> 18°C #}
{% else %} {{ eco }} {# 17°C #}
{% endif %}
# --- temperature_eco_ete_corrige ---
- name: "Temperature eCO. Ete Corrige"
unique_id: temperature_eco_ete_corrige
state: >
{% set t_ext = states('sensor.th_balcon_nord_temperature') | float(0) %}
{% set eco = states('sensor.temperature_eco_ete') | float(27) %} {# sensor different du bloc hiver #}
{% if t_ext >= 28 %} {{ eco }}
{% else %} {{ eco - 1 }} {# vrai fichier: eco - delta_1 #}
{% endif %}