Patrick Schurig e21ab6a0f1 docs(recap): le paquet est déjà sorti du conteneur, la reprise part de là
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XPUo3RMr8SzK6qbFtfBm8H
2026-08-26 18:08:49 +02:00

4.4 KiB

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 et sorti du conteneur, dans etm-powersync-deploy/
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 :

# Le paquet est DÉJÀ sorti du conteneur — il est ici, prêt :
cd ~/projects/etm-powersync/etm-powersync-deploy
./deploy.sh --dry-run powersync-energy-plugin-nymea_1.15.2+etm21_arm64.deb   # puis sans --dry-run
# puis : exercer LM-1204-b (specs/spec_loadmodel.md)

Si le fichier a disparu, le reconstruire n'est pas nécessaire — il est encore dans le conteneur : lxc exec build-cross-arm64 -- cat /root/powersync-energy-plugin-nymea_1.15.2+etm21_arm64.deb > <cible>.


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.