From e641f289dbccbf57a0e5cec6ffa83e1ba8d7415d Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Tue, 9 Jun 2026 23:46:27 +0200 Subject: [PATCH] =?UTF-8?q?[3e-=C3=A9tape]=20=C3=89TAT=20:=203e=20FAITE=20?= =?UTF-8?q?(suite=2019/19)=20+=20r=C3=A9cap=20capacit=C3=A9s=20moteur=20+?= =?UTF-8?q?=20liste=20diff=C3=A9r=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Point d'étape : EV proxy + ECS + SG-Ready sur budget unifié trié par priorité, protection compresseur, watchdog L2/mode dégradé. Différé : Waveshare (session dédiée Modbus), 3d/3f/3g, config priorités API+UI, arm64 CI, test terrain vendredi. Co-Authored-By: Claude Opus 4.8 (1M context) --- AGENTS.md | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 7d4d1d7..9c7d201 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -18,7 +18,7 @@ vers un gestionnaire d'énergie complet (EV, ECS, PAC SG-Ready, batterie). | 3a — structs protocole + interfaces | ✅ FAITE | `4ae1939` | | 3b — EnergyArbitrator + scheduler + adapter | ✅ FAITE — iso-fonctionnalité prouvée | `5f49e4c`, `d8ebd65`, `[3b-iv]` | | 3c — EcsRelayAdapter + waterfall ECS | ✅ FAITE — suite 18/18 + charging 46/46 | `6298d5d`→`54ba229` | -| 3e — SgReadyAdapter | ⏳ À VENIR (plan en discussion) | — | +| 3e — SgReadyAdapter | ✅ FAITE — suite 19/19 | `83d5ad9`→`d8079e8` | **Détail 3b** : - `EnergyArbitrator : public SmartChargingManager` — justification dans `## DÉCISIONS DE DESIGN` @@ -50,9 +50,36 @@ vers un gestionnaire d'énergie complet (EV, ECS, PAC SG-Ready, batterie). - **arm64 cross : NON vérifié dans le sandbox dev** (pas de toolchain/Qt6-aarch64/docker) → relève de l'infra de build CI (`etm-powersync-deploy`). À confirmer là-bas. -**PROCHAINE ACTION** : 3e — `SgReadyAdapter` (plan en discussion, validation avant code). -Puis plugin device Waveshare D8 (séparé, sous l'adaptateur). 3d (SocketScheduler) et -3f (BatteryAdapter) restent planifiés. +**3e CLÔTURÉE** (commits `83d5ad9` types → `d8079e8` testSgReadySurplus) : +- `SgReadyAdapter` : 4 états normés (kind:State), encodage 2 bits, `lockWindow` symétrique + (`minStateHold`, protection court-cycling PAC), **atomicité de transition** (`transientHarm` : + passe par le neutre/reco, jamais par blocage/forcé — contrat transport déporté). +- Scheduler : **mapping sémantique** (≥P4×1,2→forcé, hystérésis 1,2/1,0 ; ≥P3→reco ; sinon + normal ; état 1 jamais via surplus) + **waterfall UNIFIÉ** ECS+SG-Ready (un seul budget, + trié par priorité). Mode dégradé L2 → état 2 (mains off, jamais blocage ; SAFETY.md corrigé). +- Tests : `testSgReadySurplus` (montée · hystérésis · court-cycling · **budget partagé ECS↔PAC + avec inversion de priorité**). Suite simulation **19/19**, plugin prod 0/0. +- **DoD 3e** : amd64 0/0 ✓ · simulation 19/19 ✓ · `decisionReason` français (forcé/reco/normal/ + verrou) ✓ · arm64 → CI (idem 3c). + +### Ce que le moteur sait faire aujourd'hui +- **Arbitrage central unique** : un budget de surplus net signé, cascade par **priorité** (rang). +- **Charges** : EV (proxy amont, décision B), **ECS** (paliers, `Stage`), **SG-Ready PAC** + (4 états, `State`) — ECS+PAC classables ensemble sur le budget partagé. +- **Sécurité** : protection compresseur (verrous lock-aware `minStage/maxState`, seam de temps + unifié) ; watchdog L2 (compteur muet >90 s → mode dégradé conservateur, planif suspendue, + reprise par recalcul) ; `verifyOverloadProtection()` amont intacte ; `degradedMode` notifié. +- **Local-first** : zéro cloud (invariant 10). + +### DÉFÉRÉ (ordre indicatif) +- **Waveshare D8** : plugin DEVICE (8 powerswitch) sous l'adaptateur — **session dédiée** + (nouveau chantier transport Modbus). +- **3d** SocketScheduler (handshake/heartbeat/repli optimiseur). +- **3f** BatteryAdapter (constraints + charge réseau plafonnée) + waterfall grid-funding. +- **3g** transplantation EV dans le waterfall unifié → toutes charges classables ensemble. +- **Couche config priorités** (API JSON-RPC + UI Flutter drag-and-drop) — cf. `## ROADMAP`. +- **arm64** cross-compile (pré-déploiement, infra CI) + **test terrain vendredi** (Palier 1, + things génériques sur `nymea-dev` arm64). **Remotes git** : - `origin` (`https://git.etm-powersync.fr/...`) = remote de travail — push normal