docs(ev): Min+PV sert bien le plancher — prouvé par deux comptages, et boundBy ne prouve rien
+etm58 posé (au-delà de +etm57 annoncé). Trois vérifications.
1. ANCRAGE DES INSTANTS : livré et observable. Les trois champs ISO de la trame
portent le marqueur Z, `command.since` compris —
`{divergent, expectedW, observedW, since: "2026-09-07T14:37:00Z"}`.
2. MIN+PV : livré. La voiture a chargé toute la journée sans jamais quitter
ChargingModeEcoWithMinCurrent, et deux comptages sans source commune
concordent à 4 % :
surplus MAX du jour 536 W — 0 quart d'heure sur 71 au-dessus de 4140
fenêtre 08:45 -> 15:15 16,2 kWh dont 14,2 au-dessus de la base (539 W)
sessionEnergy de la V2C 1,06 -> 14,72 kWh, soit +13,7 kWh
Le surplus n'ayant jamais dépassé 536 W, tout a été acheté au réseau : c'est
le plancher demandé.
3. `boundBy` : ABSENT, et cette absence ne prouve rien — le seul ECO_FLOOR_GRID
de la trame est celui du chauffe-eau, dont le plancher vient d'une obligation
quotidienne et non d'un minimum matériel ; et la borne est sortie de loads[]
(pluggedIn: false). Un `grep -c boundBy` valant 0 aurait fait conclure
« non livré » à l'instant où la mesure prouve le contraire. À revoir voiture
branchée.
Et une affirmation de CLAUDE.md devenue FAUSSE, corrigée : le plafond de
soutirage du §10 existe désormais —
"draw": { "authorisedW": 6000.4, "committedW": 103.2, "remainingW": 5897.2,
"binding": "connection", "bindingPhase": "A", "perPhaseBound": true }
`binding` nomme ce qui contraint et `bindingPhase` la phase qui mord : le
plafond se dit donc avec sa source, la condition qu'on avait posée pour
l'afficher. Aucun écran ne le lit encore, et rien n'est câblé — l'écran du §10
n'est pas validé.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKM8FDNHZWogAsjjfB8pSw
This commit is contained in:
parent
a44c84a037
commit
0c5f0ee30d
41
CLAUDE.md
41
CLAUDE.md
@ -101,7 +101,28 @@ Min+PV + échéance → ChargingModeEcoMinWithTargetTime + targetPercentage +
|
||||
> minimum** — la règle tient, mais pour une meilleure raison qu'avant : une limite matérielle
|
||||
> se lit sur le matériel, elle ne se demande pas à l'utilisateur.
|
||||
>
|
||||
> 🔴 **Et le mode ne fait rien pour l'instant.** Sémantique voulue (Patrick, 2026-09-07) :
|
||||
> ✅ **LIVRÉ ET MESURÉ le 2026-09-07 (`+etm58`).** Le mode fait ce qu'il annonce. Preuve par
|
||||
> deux comptages indépendants, la voiture ayant chargé toute la journée en Min+PV sans jamais
|
||||
> passer en Boost (`chargingMode` resté `ChargingModeEcoWithMinCurrent`) :
|
||||
>
|
||||
> | | |
|
||||
> |---|---|
|
||||
> | surplus **maximum** du jour | **536 W** — 0 quart d'heure sur 71 au-dessus de 4 140 W |
|
||||
> | fenêtre de forte consommation | 08:45 → 15:15, 16,2 kWh dont **14,2 kWh** au-dessus de la base (539 W) |
|
||||
> | `sessionEnergy` de la V2C | 1,06 kWh à 08:30 → **14,72 kWh** à 16:40, soit **+13,7 kWh** |
|
||||
>
|
||||
> 14,2 kWh vus au compteur contre 13,7 kWh vus par la borne : deux mesures qui ne partagent
|
||||
> aucune source, à 4 % près. Et comme le surplus n'a jamais dépassé 536 W, **tout cela a été
|
||||
> acheté au réseau** — c'est exactement le plancher demandé.
|
||||
>
|
||||
> ⚠️ **`boundBy` reste invérifié**, et son absence ne prouve rien : le seul `ECO_FLOOR_GRID`
|
||||
> de la trame est celui du chauffe-eau, dont le plancher vient d'une **obligation
|
||||
> quotidienne**, pas d'un minimum matériel. La borne, elle, est sortie de `loads[]`
|
||||
> (`pluggedIn: false` — voiture débranchée), donc son niveau `eco` n'est pas observable. À
|
||||
> revoir voiture branchée : c'est le seul endroit où le marqueur est attendu.
|
||||
>
|
||||
> 🔴 **Ce que le mode faisait AVANT `+etm57`** — gardé parce que le symptôme reviendra sur
|
||||
> toute box non mise à jour. Sémantique voulue (Patrick, 2026-09-07) :
|
||||
> Min+PV charge **toujours** au minimum de la borne, acheté au réseau s'il le faut, **et
|
||||
> ajoute le surplus par-dessus** — 400 W d'injection sur un plancher de 4 140 W donnent
|
||||
> 4 540 W. Mesuré sur `.75` : la borne ne reçoit **qu'un niveau `comfort`**, aucun niveau
|
||||
@ -341,15 +362,23 @@ installations déjà déployées.
|
||||
> (`evReservedW: 0` pendant qu'un `EV_GRID_START` partage entre les deux vrais compteurs).
|
||||
> **Ne réconcilier aucun total dessus, jamais** — la nature du champ l'interdit.
|
||||
|
||||
**`draw.committedW`** (`+etm31`) est publié dans la **même trame que `budget`**, et **seul** :
|
||||
`authorisedW`, `remainingW`, `binding`, `perPhaseBound` sont **absents, pas à zéro** — le
|
||||
plafond de soutirage du §10 n'existe pas encore, et un `authorisedW: 0` afficherait un plafond
|
||||
fictif avec sa source.
|
||||
**`draw` porte désormais le PLAFOND du §10** — corrigé le 2026-09-07 contre `.75` en
|
||||
`+etm58`. La phrase précédente (« `authorisedW`, `remainingW`, `binding`, `perPhaseBound` sont
|
||||
absents, le plafond du §10 n'existe pas encore ») **est périmée** et enverrait un agent
|
||||
chercher un champ qui est là :
|
||||
|
||||
```jsonc
|
||||
"budget": { … }, "draw": { "committedW": 0 }
|
||||
"draw": { "authorisedW": 6000.4, "committedW": 103.2, "remainingW": 5897.2,
|
||||
"binding": "connection", "bindingPhase": "A", "perPhaseBound": true }
|
||||
```
|
||||
|
||||
`binding` nomme **ce qui contraint** (`"connection"` = le raccordement) et `bindingPhase` la
|
||||
phase qui mord — donc le plafond se dit avec sa source, ce qui était la condition posée pour
|
||||
l'afficher. **Aucun écran ne le lit encore** : `LoadTelemetry` ne modélise que
|
||||
[drawCommittedW]. À câbler quand l'écran du §10 sera validé, pas avant.
|
||||
|
||||
`draw.committedW` seul (`+etm31`) reste la forme des box entre `+etm31` et `+etm57`.
|
||||
|
||||
> **Publié même quand rien n'est acheté**, et **`counts` publié même à zéro avec sa
|
||||
> destination** (`{"budget.allocatedW": 0}` sur une charge non servie — le cas le plus
|
||||
> fréquent). Donc l'**absence** vaut « box antérieure », jamais « rien ce cycle » : **zéro est
|
||||
|
||||
@ -873,7 +873,13 @@ class LoadTelemetry {
|
||||
|
||||
/// `draw.committedW` — **les watts achetés du cycle**, né en `+etm31`.
|
||||
///
|
||||
/// Publié dans la même trame que [budget], et **seul** : `authorisedW`, `remainingW`,
|
||||
/// ⚠️ **Le reste de `draw` existe depuis `+etm57`** — `authorisedW`, `remainingW`,
|
||||
/// `binding` (`"connection"`), `bindingPhase`, `perPhaseBound` — et n'est **pas** modélisé
|
||||
/// ici : aucun écran du §10 n'est validé. Vu sur `.75` en `+etm58` le 2026-09-07. La note
|
||||
/// ci-dessous décrit les box **antérieures**, où ces clés sont absentes et non à zéro.
|
||||
///
|
||||
/// Publié dans la même trame que [budget], et sur une box d'avant `+etm57` **seul** :
|
||||
/// `authorisedW`, `remainingW`,
|
||||
/// `binding` et `perPhaseBound` (le plafond de soutirage du §10) sont **absents, pas à
|
||||
/// zéro** — un `authorisedW: 0` afficherait un plafond qui n'existe pas, avec sa source.
|
||||
///
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user