From 0b216f99a85dc8a636601eeb4c2e264447787b6a Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Wed, 26 Aug 2026 18:04:48 +0200 Subject: [PATCH] =?UTF-8?q?docs(recap):=20reprise=20de=203g-1=20=E2=80=94?= =?UTF-8?q?=20le=20code=20est=20complet,=20rien=20n'est=20d=C3=A9ploy?= =?UTF-8?q?=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Session arrêtée sur contexte saturé. Le paquet 1.15.2+etm21 est CONSTRUIT mais le banc tourne encore etm20 : la transplantation n'a jamais tourné une seule fois, sur un banc qui porte une Terra AC réelle. C'est la première chose à faire, et LM-1204-b avec. Le RECAP porte la commande exacte de reprise, les cinq points à vérifier au redéploiement, et ce qui reste ouvert — dont la bascule 0,4 / 0,9 devenue possible depuis que SunSpec déclare energystorage, et jamais faite. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01XPUo3RMr8SzK6qbFtfBm8H --- docs/RECAP_3g.md | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 docs/RECAP_3g.md diff --git a/docs/RECAP_3g.md b/docs/RECAP_3g.md new file mode 100644 index 0000000..ded453f --- /dev/null +++ b/docs/RECAP_3g.md @@ -0,0 +1,87 @@ +# RECAP — reprise de session, 3g-1 + +**Arrêt** : 2026-08-26, contexte saturé. **Branche** : `feature/beta-rulebased`. +**Dernier commit** : `1478d8f` — *feat(3g-1) : les bornes entrent dans le waterfall*. + +--- + +## 1. État exact à la reprise + +| | | +|---|---| +| Code 3g-1 | **complet**, compile 0 erreur / 0 warning, `tests/auto/loadmodel` 15/15 | +| Paquet `1.15.2+etm21` | **construit** dans le conteneur, à `/root/powersync-energy-plugin-nymea_1.15.2+etm21_arm64.deb` | +| Déployé sur `.75` | **NON** — le banc tourne encore `1.15.2+etm20` | +| Critère LM-1204-b | **NON exercé** — c'est la première chose à faire | + +**Reprendre exactement ici** : + +```bash +# 1. sortir le paquet du conteneur +lxc exec build-cross-arm64 -- cat /root/powersync-energy-plugin-nymea_1.15.2+etm21_arm64.deb > /tmp/etm21.deb +# 2. déployer +cd ~/projects/etm-powersync/etm-powersync-deploy && ./deploy.sh /tmp/etm21.deb +# 3. exercer LM-1204-b (specs/spec_loadmodel.md) +``` + +--- + +## 2. Ce que 3g-1 contient + +**Les bornes entrent dans le waterfall.** Elles partagent le budget, décrémentent la cascade, +et portent un rang qui a enfin un sens. + +Le défaut corrigé n'était pas théorique : `planSurplusCharging()` calculait l'allocation **une +fois avant la boucle** et ne la décrémentait jamais — chaque borne recevait la **totalité** du +surplus. Le rattrapage venait du compteur au cycle suivant, pas de l'arbitrage. + +Trois motifs EV **supprimés** (pas remplacés) : `EV_SURPLUS` → `SURPLUS_SETPOINT`, `EV_ECO_MIN` +→ le **plancher** du §12, `EV_IDLE` → `BELOW_MIN_POWER` / `SURPLUS_INSUFFICIENT`. + +**Restent au proxy, délibérément** : échéance de départ, spot market, protection de surcharge, +estimation de SoC. `evReservedW` est **restreint** au financement réseau, pas supprimé. + +--- + +## 3. À vérifier en priorité au redéploiement + +> **3g-1 touche le chemin EV en production sur un banc avec une Terra AC réelle.** Rien de +> tout ceci n'a encore tourné une seule fois. + +1. **LM-1204-b** — surplus ≈ 4 kW, deux bornes à ≈ 1,4 kW de plancher. Attendu : la première + servie à fond, la seconde à 0 si le reliquat est sous son plancher. **Discriminant : le + motif publié** — `BELOW_MIN_POWER` prouve que l'arbitre a refusé ; une borne à 0 W *sans* + motif de plancher prouve que c'est le matériel, donc que le test ne prouve rien. +2. **Inversion de rang** entre les deux bornes → la charge servie doit changer. +3. **`loads[]` contient-il les bornes**, et la somme des `allocatedW` retombe-t-elle sur + `budget.allocatedW` ? (Ce n'était pas vrai avant 3g-1 — c'est le changement de contrat.) +4. **Le nombre de phases** : vérifier que le plancher publié correspond au nombre **visé**. + C'est le piège le plus silencieux du lot. +5. **Aucune double commande** : une borne servie par l'échéance ne doit pas recevoir en plus + une allocation de surplus (`gridFundedEvs`). + +--- + +## 4. Ce qui reste ouvert + +- **§12 / `BELOW_MIN_POWER` sur le banc** : ✅ observé le 2026-08-26 — + `chauffe-eau 0 W {budgetW: 249, minPowerW: 500}` et le budget a cascadé vers la PAC. +- **`BATTERY_RESERVE`** : observé, **et corrigé à cette occasion** — il était publié avec + `withheldW: 0` sur un surplus négatif. Conditionné à `withheldW > 0` depuis. **La correction + n'a pas été revérifiée sur machine.** +- **Bascule `batteryLevelConsideration` 0,4 / 0,9** : jamais faite avec une batterie visible. + Elle est possible depuis `nymea-plugin-sunspec-etm01 1.15.2+etm11`, qui déclare enfin + `energystorage`. **Le banc est resté à 0,9.** À faire dans les deux sens, journaux à l'appui. +- **§10 éco/confort** : ne part pas sans l'extension du délestage au waterfall (précondition + écrite, `specs/spec_loadmodel.md` §10). +- **Brief ouvert chez le plugin SunSpec** : `etm-powersync-plugins-modbus`, + `BRIEF_sunspec_energystorage.md` — la partie `energystorage` est faite ; la **question §5** + (l'onduleur ne publie aucun cumul, ce qui gèle `totalProduction`) reste ouverte. + +--- + +## 5. Documents à lire à la reprise, dans cet ordre + +1. `docs/DESIGN_3g.md` — ce qui se transporte et les trois choses qui ne se transportent pas. +2. `specs/spec_loadmodel.md` §12 (plancher), LM-1203-b (réserve annulée), LM-1204-b (critère). +3. `docs/RELEVE_LOTD.md` — la méthode de relevé attendue : machine / test / lecture, distingués.