From 5c2a8df6d69b0f8ce03aef3b490260bd7fa60b84 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sun, 25 Oct 2026 09:41:52 +0100 Subject: [PATCH] =?UTF-8?q?docs=20:=20heures=20creuses=20et=20batterie=20?= =?UTF-8?q?=E2=80=94=20d=C3=A9cision=20D9,=20la=20somme=20=C3=A9co=20+=20c?= =?UTF-8?q?onfort=20tient=20dans=20le=20plafond?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §8 : D9 (2026-10-25, suite) — l'écart 4 est corrigé pour la pleine puissance d'heures creuses ; la dérogation sans heure creuse et les phases étiquetées restent à leur lot ; le compteur en retard est accepté. §8.1 : l'écart 4 renvoie à §8.3 ; ce qui reste de la dérogation y est dit. §8.3 : la règle, les mesures avant/après, les preuves — dont la garde de bascule de §8.2, désormais éprouvée. Co-Authored-By: Claude Opus 5.5 --- docs/DESIGN_HC_BATTERIE.md | 59 ++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/docs/DESIGN_HC_BATTERIE.md b/docs/DESIGN_HC_BATTERIE.md index 821d2b2..5b95c27 100644 --- a/docs/DESIGN_HC_BATTERIE.md +++ b/docs/DESIGN_HC_BATTERIE.md @@ -282,6 +282,7 @@ aucune ne change le code. | D6 | Plugin SunSpec : une action « limite de décharge » en une séquence (`planBatteryMode(NO_DISCHARGE)`), et `enableDischarging` renommé ou redécrit (§3.1, §7) ? | **Oui aux deux**, dans le dépôt du plugin, à la charge de l'orchestrateur. Le garde ne change pas : il reste compatible avec les deux actions actuelles (`dischargingRate` puis `enableDischarging`). | | D7 | À quelle puissance la borne charge-t-elle en heures creuses (lot e2) ? | **À la pleine puissance permise**, et non plus au plancher. La session finit plus tôt, et la décharge de la batterie n'est bloquée que pendant ce temps-là : ensuite, elle couvre la maison pour le reste de la nuit. Détail en §8.1. | | D8 | *(2026-10-25)* Près de la limite de phase, la consigne de la borne alterne à chaque cycle (16, 7, 16, 7 A sous 25 A). Corriger avant la vitrine ? | **Oui, maintenant.** En heures creuses, le plafond de la borne lui rend ce qu'elle tire, **mesuré**, moins 1 A par phase. Détail en §8.2. Le même jour : la borne **tenue au plancher** en surcharge (L4 décide de couper) est **confirmée** ; les écarts 3 et 4 de §8.1 sont reportés. | +| D9 | *(2026-10-25, suite)* L'écart 4 n'est pas qu'un défaut de publication : à l'aube, le surplus s'ajoute au plafond, qui porte la limite de phase. Borner la somme avant la vitrine ? | **Oui, avant la vitrine.** La somme éco + confort ne dépasse jamais `declared.maxPowerW`, et l'achat publié ne dépasse pas ce qui est réellement acheté. Détail en §8.3. La dérogation sans heure creuse, les phases étiquetées : plus tard, chacune dans son lot. Le compteur en retard sur la borne est accepté tel quel. | La mesure du minuteur de retour sur un vrai GEN24 (hypothèse AC-10 du plugin, §3.4) reste ouverte : elle relève du plugin et d'un essai sur matériel réel. @@ -334,14 +335,12 @@ décide de la couper, comme pour la dérogation. On n'est pas revenu au « rien borne triphasée est encore comparé à la marge d'**une** phase de la maison (le double écrêtage que `LM-1500-h` refuse ailleurs). L'étendre changerait des décisions sans tarif : **lot à part**. -- *Écart 4 — le partage achat/surplus en heures creuses.* À l'aube, le surplus s'ajoute au - niveau éco : la consigne (`estimatedPowerW`) peut dépasser le plafond de cycle, par exemple - 3 680 + 2 000 W. L'adaptateur écrête au courant maximal de la borne, et le partage publié entre - achat et surplus surestime l'achat. Le même cumul existe pour la dérogation. Ce cumul n'est - pas borné par le plafond de phase déjà servi au niveau éco : constaté au lot D8 avec un - compteur qui ne voit pas la borne (le recrédit y fabrique du surplus), plafond 15 A, consigne - 16 A. Avec un vrai surplus, seul L4 rattraperait un dépassement. **À reprendre avec la - dérogation.** +- *Écart 4 — le partage achat/surplus en heures creuses.* **Corrigé pour la pleine puissance + d'heures creuses (D9, §8.3).** À l'aube, le surplus s'ajoutait au niveau éco : la consigne + (`estimatedPowerW`) pouvait dépasser le plafond de cycle, et donc la limite de phase qu'il porte. + La dérogation, elle, ne cumule pas (sa passe confort est sautée) ; son achat publié reste + entier quand le soleil la finance en partie — c'est la conséquence comptable déjà écrite dans + le code, et elle reste à reprendre avec la dérogation. - *L'oscillation près de la limite de phase* était le troisième point de cette liste. Elle est corrigée : §8.2. @@ -429,3 +428,47 @@ L4) ; `testOffPeakFullPowerStaysUnderTheLimitOnABlindMeter` (écrêtage à zéro `testBlockedDischargeShowsAtTheMeterAndL4Decides`, la borne en dépassement finit à son plancher (L4 la ramène de 16 à 13 A, la stratégie laisse 9 A, L4 la ramène à 6 A) au lieu d'être coupée : l'assertion attend désormais « plancher ou coupée ». + +### 8.3 D9 — la somme éco + confort tient dans le plafond (2026-10-25, suite) + +**Le défaut (écart 4).** En heures creuses, le niveau éco d'une borne vaut son plafond de cycle +(`declared.maxPowerW`), qui porte la limite de phase. À l'aube, la passe confort lui ajoutait le +surplus, et seul le courant maximal de la borne écrêtait la somme. Mesuré en simulation : borne +monophasée sur A, limite 16 A, maison à 2 A sur A, phases B et C exportant 1 500 W chacune. Le +plafond vaut 13 A ; la consigne montait à 16 A, et la phase A à **18 A pour 16**. Le partage +publiait 2 990 W achetés quand le compteur n'en importait que 450. + +**La règle.** Pour une borne servie à pleine puissance en heures creuses +(`EV_OFF_PEAK_FULL_POWER`) : + +- la passe confort sert le surplus **dans** le plafond, et non par-dessus ; +- l'achat **cède** ce que le surplus finance : achat = plafond − part confort, jamais négatif. + La somme reste donc le plafond, et l'achat publié (`gridW`, `draw.committedW`, `counts`) est ce + qui reste à acheter ; +- la part confort n'a pas de plancher : le plancher porte sur la somme, qui vaut le plafond, donc + jamais moins que lui. Sans cela, un surplus sous le plancher serait refusé, ou démarré par + `EV_GRID_START` — un second achat en plus du premier. + +Le motif suit la règle de la part majoritaire : à l'aube, quand le surplus finance plus de la +moitié du plafond, la décision publiée est celle du confort ; le niveau éco reste lisible dans +`levels`. La marge de soutirage du reste de la cascade est décomptée comme avant (prudence +inchangée). Hors heures creuses et sans tarif, rien ne change : la règle ne s'applique qu'aux +bornes qui portent `EV_OFF_PEAK_FULL_POWER`. + +| Cas (simulation) | Avant | Après | +|---|---|---| +| Aube, 2 540 W de surplus | 16 A, phase A à 18 A ; 2 990 W achetés | 13 A, phase A à 15 A ; 450 W achetés, 2 540 W de surplus | +| Plein soleil, surplus > plafond | 16 A | 13 A ; 0 W acheté, 2 990 W de surplus | +| Nuit | 13 A ; 2 990 W achetés | inchangé | +| Compteur aveugle aussi au total | 13, 16, 16… A | 13, 15, 15… A | + +Avec un compteur aveugle au total, le surplus est **fabriqué** par le recrédit : la consigne +tient le plafond, mais le partage publié, lui, ne peut pas être juste — le compteur ne dit pas ce +qui est acheté. + +**Preuves.** `testOffPeakFullPowerAtDawnStaysInTheCeiling` (nuit, aube, plein soleil, quatre +cycles chacun : consigne et phase, somme, achat ≤ import du compteur) ; +`testOffPeakFullPowerStaysUnderTheLimitOnABlindMeter`, étendu au total aveugle. La garde de +bascule de §8.2 est désormais éprouvée : `testOffPeakFullPowerGivesNothingBackWhileSwitchingPhases` +(borne en monophasé à 10 A qui bascule en triphasé, maison à 12 A sur B, limite 25 A : 12 A, et B +à 24 A ; sans la garde, 15 A et B à 27 A).