From 3a8eb5da862c76b37615160687e7fb5002f73ec0 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Tue, 9 Jun 2026 21:26:38 +0200 Subject: [PATCH] =?UTF-8?q?[3c-docs]=20d=C3=A9fauts=20minOn/minOff=20par?= =?UTF-8?q?=20type=20+=20s=C3=A9paration=20budget/verrou=20(protection=20c?= =?UTF-8?q?ompresseur)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Décision Patrick : délestage strict au budget, MAIS minOn/minOff (protection compresseur, anti court-cycling) bornent le palier via l'adaptateur, pas le budget. Paramètres par charge (config installateur, jamais hardcodé) + défauts indicatifs par type (résistif / thermodynamique-PAC / SG-Ready). Note seam de temps unifié. Co-Authored-By: Claude Opus 4.8 (1M context) --- AGENTS.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 60a5e65..e5fb8fb 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -289,6 +289,37 @@ publique propre, l'héritage pourrait être remplacé par composition. --- +### Verrous minOn/minOff — protection compresseur (décision Patrick) + +Le délestage du waterfall est **strict au niveau budget** (surplus net signé : en import, +budget négatif → palier 0). Mais une charge à compresseur (PAC, ballon thermodynamique) +ou un VE ont un **temps de fonctionnement minimum incompressible** : ce n'est pas du +confort, c'est de la **protection matérielle** (le court-cycling détruit le compresseur). + +**Séparation des responsabilités** : +- Le **scheduler** décide le palier idéal selon le budget (peut vouloir « palier 0 »). +- L'**adaptateur** borne ce choix via `minStage`/`maxStage` (fenêtre `lockWindow()` évaluée + au temps de cycle) : une charge verrouillée ON garde son palier ; l'import transitoire + est **borné par minOn**, pas illimité. Le scheduler clampe et décrémente le budget au + palier réel (puissance engagée non-coupable) → budget correct pour les charges suivantes. +- `minOnS`/`minOffS` sont des **paramètres par charge** (constructeur `EcsRelayAdapter`, + config installateur) — **jamais codés en dur**. + +**Défauts indicatifs par type** (à affiner à la mise en service) : + +| Type de charge | minOn | minOff | Raison | +|----------------|-------|--------|--------| +| Ballon résistif (ECS simple) | ~60 s | ~60 s | anti-rebond relais seul | +| Ballon thermodynamique / PAC | ~300–600 s | ~300 s | **protection compresseur** (anti court-cycling) | +| SG-Ready PAC (3e) | `minStateHoldS` ~900 s | — | maintien d'état imposé constructeur | + +**Seam de temps** : `minStage`/`maxStage` (décision) ET le verrou de `applyAction` +(exécution) partagent le **même `now = ctx.timestamp`** via `lockWindow()` — source unique, +divergence impossible par construction, injectable en simulation. Voir `iloadadapter.h` +(contrat « temps = paramètre, jamais l'horloge »). + +--- + ## MODÈLE DE SÉCURITÉ (décision Patrick — immuable) Cinq couches indépendantes. Chacune est conçue pour qu'une défaillance des couches