Résultats ajoutés SOUS la prédiction, sans y toucher. 4.0 — La première tentative a révélé un blocage circulaire dans ECS-412, pas dans le banc. Point de méthode consigné : la prédiction annonçait « sonde éteinte sous +etm3 » et elle l'était, mais pour la mauvaise raison. Sans test de falsification cherchant POURQUOI elle se vérifiait, ce relevé aurait coché la prédiction et conclu à tort. Une prédiction juste peut être confirmée par un mécanisme faux. 4.1 — Volet 1 mesuré sous +etm4. Le contraste attendu entre les deux versions a été observé au sein d'un même binaire, sur deux cycles consécutifs au même budget (~3200 W) : verrou actif → chauffe-eau maintenu à 3500 W, résidu −198 W, sonde éteinte ; verrou expiré → palier 3000 W, résidu +201 W, sonde allumée. Le cycle à verrou expiré reproduit ce que ferait +etm2, le clamp d'ECS-306 n'ayant alors rien à contraindre. Arithmétique vérifiée à 2 W près du prédit, recrédit de la sonde compris. Les deux prédictions tiennent, y compris la secondaire : la PAC de rang 2 n'a pas changé d'état — sans la charge sonde, le relevé aurait conclu « aucun effet observable ». Reste à mesurer : +etm2 réellement installé, et le volet 2 (commutations). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
8.3 KiB
Relevé banc — ECS-306 et commutations par relais
Dépôt : etm-powersync-energy-plugin-etm · Banc : 192.168.1.75 (nymea-dev-rpi)
Installation émulée : specs/spec_ecs.md §4.0 (INST-100), cf. INST-104.
Ce document est publié AVANT la mesure. La section « Prédiction » est horodatée du 2026-08-09 et commitée avant tout profil lancé. Une reconstruction analytique publiée après coup ne vaut rien ; publiée avant, elle est falsifiable. Les résultats viendront s'ajouter en dessous, sans jamais réécrire la prédiction — si elle est fausse, elle reste, et c'est le renseignement utile.
1. Dispositif
Trois charges, un seul budget de surplus, cascade par rang ascendant.
| Charge | Rang | Adaptateur | Paliers / états | Verrous |
|---|---|---|---|---|
chauffe-eau |
1 | relay-router — Relay1/2/3 (500/1000/2000 W) |
0…3500 W, 8 valeurs | minOnS/minOffS = 60 s (300 s pour le volet 1, cf. §3) |
| PAC SG-Ready | 2 | sg-ready — Relay4/5, codé en dur |
P3 = 1500 W, P4 = 3000 W | minStateHoldS = 300 s |
sonde-residu |
3 | relay-router — Relay6, 1 relais, 100 W |
0 / 100 W | minOnS/minOffS = 10 s |
La sonde est un instrument de mesure, pas une charge. Aucune résistance n'est câblée sur Relay6 : le relais claque, rien ne consomme. Ce qu'elle rend observable est une décision d'allocation — le résidu que le waterfall laisse à la charge suivante — et non une puissance. Son palier à 100 W est choisi très au-dessous de l'écart attendu (500 W) pour que le basculement soit franc.
Pilotage du surplus : banc/cmd/manual {"grandeur":"pv","mode":true,"value":<W>}
sur le broker 192.168.1.131, modele.py:178. banc/cmd/pause fige l'horloge du
modèle et rend le profil reproductible.
2. Prédiction — 2026-08-09, avant mesure
Pourquoi la télémétrie ne discrimine pas
Les Things sont des relais GPIO : leur ThingClass n'expose pas currentPower.
RelayRouter::telemetry() retombe donc sur le nominal commandé
(relayrouter.cpp:113-114), et currentPowerW == palier commandé en permanence.
Conséquence : budget_charge = budget + palier_courant. Tant que le budget reste
positif, les deux versions choisissent le même palier et laissent le même résidu.
La divergence n'apparaît qu'en import net, budget signé négatif.
Volet 1 — point de fonctionnement discriminant
Surplus 3600 W jusqu'à ce que le chauffe-eau atteigne 3500 W et arme minOn,
puis chute à −300 W maintenue.
budget_charge = −300 + 3500 = 3200
| Palier retenu | Résidu annoncé | PAC (rang 2) | Sonde (rang 3) | |
|---|---|---|---|---|
+etm2 |
3000 (plus haut ≤ 3200) | +200 W | état 2 (200 < P3) | ALLUMÉE (100 ≤ 200) |
+etm3 |
3500 (forcé par lockMinPowerW) |
−300 W | état 2 | ÉTEINTE (100 > −300) |
Sous +etm2, le routeur écrête malgré tout à 3500 W (verrou interne) : 500 W
sont consommés de plus que comptés, et ce sont ces 500 W que la sonde révèle.
Prédiction falsifiable : la sonde s'allume sous +etm2, reste éteinte sous
+etm3. Si elle s'allume sous +etm3, le raisonnement est faux.
Prédiction secondaire : la PAC ne changera pas d'état entre les deux versions — 200 W comme −300 W sont tous deux sous P3 = 1500 W. Le volet 1 ne montrera donc rien sur la PAC ; c'est la sonde qui porte la démonstration. Sans elle, ce relevé aurait conclu « aucun effet observable » à tort.
Volet 2 — commutations par relais
Balayage complet 0 → 3500 W puis retour, plateaux ≥ 90 s (minOnS = 60 s).
Comptage attendu sur un aller simple :
| Relais | Commutations | Part |
|---|---|---|
| R500 | 7 | bit de poids faible |
| R1000 | 3 | |
| R2000 | 1 | |
| total | 11 |
La transition 1500 → 2000 W ({R500,R1000} → {R2000}) bascule les trois
relais, soit 3 des 11 commutations à elle seule. C'est la seule du câblage
dans ce cas.
Piège prédit — le cliquet. currentPowerW valant le nominal commandé, le
budget rendu à la charge inclut toujours son propre palier : un profil qui ne
fait que décroître en surplus positif ne fera jamais redescendre le palier.
Il faut des plateaux à surplus négatif pour provoquer la descente, sinon le
chauffe-eau reste à 3500 W du début à la fin et le relevé est vide.
3. Protocole
Deux campagnes séparées, jamais fusionnées : si un résultat surprend, il faut pouvoir dire lequel des deux réglages en est la cause.
Volet 1 — minOnS du chauffe-eau porté à 300 s le temps de l'essai, pour
élargir la fenêtre d'observation. Écart de réglage assumé et déclaré ; remis à
60 s après.
Volet 2 — minOnS à 60 s, plateaux ≥ 90 s, avec plateaux à surplus négatif.
Ordre d'exécution : +etm3 étant déjà installé, mesurer l'après d'abord,
puis descendre en +etm2, refaire le même profil, puis remonter en +etm3.
Vérification obligatoire au retour en +etm2 : relire paliers et rangs par
NymeaEnergy.GetLoadConfig avant de lancer le profil. La configuration a été
écrite par +etm3 ; si +etm2 la rejetait — silencieusement ou non — on
mesurerait deux dispositifs différents sans le voir.
4. Résultats
4.0 — Un défaut trouvé avant toute mesure (2026-08-09)
La première tentative a révélé un blocage circulaire dans ECS-412, pas dans le
banc : la charge sonde restait figée à 0 W sous 4 kW de surplus disponible. Un
horodatage de dernière commutation nul servait de sentinelle « écoulé = 0 » à
chaque cycle, si bien que toute charge démarrant relais ouverts avec minOffS > 0
ne pouvait jamais s'enclencher.
La prédiction du §2 annonçait « sonde éteinte sous +etm3 » — et elle l'était,
mais pour la mauvaise raison. Sans un test de falsification cherchant pourquoi
elle se vérifiait, ce relevé aurait coché la prédiction et conclu à tort. Une
prédiction juste peut être confirmée par un mécanisme faux ; c'est la limite de
l'exercice, et elle mérite d'être écrite ici.
Corrigé en 1.15.2+etm4 (armement paresseux et transitoire), couvert par
testEcsColdStartLockExpires. Vérifié au banc après déploiement : sonde
éteinte deux cycles, puis enclenchée — le verrou court puis expire.
4.1 — Volet 1, expérience naturelle sous +etm4
Le contraste attendu entre +etm2 et +etm3 a été observé au sein d'un même
binaire, sur deux cycles consécutifs au même budget : l'un verrou actif, l'autre
verrou expiré. Le cycle à verrou expiré reproduit exactement ce que ferait
+etm2, puisque sans verrou le clamp d'ECS-306 n'a rien à contraindre.
| Budget charge | Chauffe-eau | Résidu annoncé | Sonde (rang 3) | |
|---|---|---|---|---|
| Verrou minOn ACTIF | 3202 W | maintenu 3500 W | −198 W | éteinte |
| Verrou EXPIRÉ | 3201 W | 3000 W (plus haut ≤ budget) | +201 W | allumée |
Traces brutes :
"chauffe-eau" → "Verrou minOn — chauffe-eau maintenue à 3500 W
(puissance engagée, budget 3202 W) ; le résidu en tient compte"
"sonde-residu" → "Verrou minOn — sonde residu maintenue à 0 W (budget -198 W)"
"chauffe-eau" → "Surplus PV 3201 W — chauffe-eau consigne 3000 W (palier)"
"sonde-residu" → "Surplus PV 201 W — sonde residu consigne 100 W (palier)"
Arithmétique vérifiée, à 2 W près du prédit :
3202 − 3500 = −298, puis recrédit de la sonde elle-même (100 W, alors allumée)
→ −198. Côté verrou expiré : 3201 − 3000 = +201, sonde éteinte donc aucun
recrédit → +201, au-dessus de son palier de 100 W.
La prédiction du §2 est confirmée sur le fond : sans ECS-306, 500 W sont consommés de plus que comptés, et la charge suivante s'allume sur un résidu qui n'existe pas.
La prédiction secondaire est confirmée aussi : la PAC de rang 2 est restée en état 4 sur les deux cycles. Sans la charge sonde, ce relevé aurait conclu « aucun effet observable ».
4.2 — Ce qui reste à mesurer
+etm2réellement installé, pour confirmer que le cycle « verrou expiré » est bien un substitut fidèle. L'expérience naturelle est convaincante mais elle n'est pas la comparaison demandée.- Volet 2 — relevé de commutations par relais : non commencé.