docs : mentions de la démo neutralisées (commentaires et design seulement)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HE6X3TcKdiuCucBHA2XX4n
This commit is contained in:
Patrick Schurig 2026-10-25 11:42:34 +01:00
parent 21b71a691a
commit b5ef257a36
3 changed files with 5 additions and 5 deletions

View File

@ -281,8 +281,8 @@ aucune ne change le code.
| D5 | Seuil de « la voiture charge réellement » : 230 W sur la somme des bornes (§3.2) ? | **Accepté.** | | D5 | Seuil de « la voiture charge réellement » : 230 W sur la somme des bornes (§3.2) ? | **Accepté.** |
| D6 | Plugin SunSpec : une action « limite de décharge » en une séquence (`planBatteryMode(NO_DISCHARGE)`), et `enableDischarging` renommé ou redécrit (§3.1, §7) ? | **Oui aux deux**, dans le dépôt du plugin, à la charge de l'orchestrateur. Le garde ne change pas : il reste compatible avec les deux actions actuelles (`dischargingRate` puis `enableDischarging`). | | D6 | Plugin SunSpec : une action « limite de décharge » en une séquence (`planBatteryMode(NO_DISCHARGE)`), et `enableDischarging` renommé ou redécrit (§3.1, §7) ? | **Oui aux deux**, dans le dépôt du plugin, à la charge de l'orchestrateur. Le garde ne change pas : il reste compatible avec les deux actions actuelles (`dischargingRate` puis `enableDischarging`). |
| D7 | À quelle puissance la borne charge-t-elle en heures creuses (lot e2) ? | **À la pleine puissance permise**, et non plus au plancher. La session finit plus tôt, et la décharge de la batterie n'est bloquée que pendant ce temps-là : ensuite, elle couvre la maison pour le reste de la nuit. Détail en §8.1. | | D7 | À quelle puissance la borne charge-t-elle en heures creuses (lot e2) ? | **À la pleine puissance permise**, et non plus au plancher. La session finit plus tôt, et la décharge de la batterie n'est bloquée que pendant ce temps-là : ensuite, elle couvre la maison pour le reste de la nuit. Détail en §8.1. |
| D8 | *(2026-10-25)* Près de la limite de phase, la consigne de la borne alterne à chaque cycle (16, 7, 16, 7 A sous 25 A). Corriger avant la vitrine ? | **Oui, maintenant.** En heures creuses, le plafond de la borne lui rend ce qu'elle tire, **mesuré**, moins 1 A par phase. Détail en §8.2. Le même jour : la borne **tenue au plancher** en surcharge (L4 décide de couper) est **confirmée** ; les écarts 3 et 4 de §8.1 sont reportés. | | D8 | *(2026-10-25)* Près de la limite de phase, la consigne de la borne alterne à chaque cycle (16, 7, 16, 7 A sous 25 A). Corriger avant la démo ? | **Oui, maintenant.** En heures creuses, le plafond de la borne lui rend ce qu'elle tire, **mesuré**, moins 1 A par phase. Détail en §8.2. Le même jour : la borne **tenue au plancher** en surcharge (L4 décide de couper) est **confirmée** ; les écarts 3 et 4 de §8.1 sont reportés. |
| D9 | *(2026-10-25, suite)* L'écart 4 n'est pas qu'un défaut de publication : à l'aube, le surplus s'ajoute au plafond, qui porte la limite de phase. Borner la somme avant la vitrine ? | **Oui, avant la vitrine.** La somme éco + confort ne dépasse jamais `declared.maxPowerW`, et l'achat publié ne dépasse pas ce qui est réellement acheté. Détail en §8.3. La dérogation sans heure creuse, les phases étiquetées : plus tard, chacune dans son lot. Le compteur en retard sur la borne est accepté tel quel. | | D9 | *(2026-10-25, suite)* L'écart 4 n'est pas qu'un défaut de publication : à l'aube, le surplus s'ajoute au plafond, qui porte la limite de phase. Borner la somme avant la démo ? | **Oui, avant la démo.** La somme éco + confort ne dépasse jamais `declared.maxPowerW`, et l'achat publié ne dépasse pas ce qui est réellement acheté. Détail en §8.3. La dérogation sans heure creuse, les phases étiquetées : plus tard, chacune dans son lot. Le compteur en retard sur la borne est accepté tel quel. |
La mesure du minuteur de retour sur un vrai GEN24 (hypothèse AC-10 du plugin, §3.4) reste La mesure du minuteur de retour sur un vrai GEN24 (hypothèse AC-10 du plugin, §3.4) reste
ouverte : elle relève du plugin et d'un essai sur matériel réel. ouverte : elle relève du plugin et d'un essai sur matériel réel.

View File

@ -335,7 +335,7 @@ NymeaEnergyJsonHandler::NymeaEnergyJsonHandler(SpotMarketManager *spotMarketMana
// [ETM] Journal court des délestages. Hors de la télémétrie, parce qu'il la doublerait : vingt // [ETM] Journal court des délestages. Hors de la télémétrie, parce qu'il la doublerait : vingt
// épisodes portant chacun deux charges utiles de mécanisme, émis à chaque battement. La // épisodes portant chacun deux charges utiles de mécanisme, émis à chaque battement. La
// télémétrie n'en porte que le résumé (shedding.revision, shedding.open) — c'est lui qui // télémétrie n'en porte que le résumé (shedding.revision, shedding.open) — c'est lui qui
// notifie. Même droit que GetLoadTelemetry : c'est de la lecture d'état, la vitrine la lit. // notifie. Même droit que GetLoadTelemetry : c'est de la lecture d'état, un compte sans droit la lit.
params.clear(); returns.clear(); params.clear(); returns.clear();
description = "Get the short log of load-shedding episodes: the last 'capacity' episodes of " description = "Get the short log of load-shedding episodes: the last 'capacity' episodes of "
"overload protection, oldest first, EV chargers and cascade loads alike. ONE " "overload protection, oldest first, EV chargers and cascade loads alike. ONE "

View File

@ -2202,7 +2202,7 @@ void TestCharging::testNymeaEnergyPermissionScopes()
{"GetSpotMarketScoreEntries", none}, {"GetSpotMarketScoreEntries", none},
{"GetLoadConfig", none}, {"GetLoadConfig", none},
{"GetLoadTelemetry", none}, {"GetLoadTelemetry", none},
{"GetSheddingLog", none}, // même droit que la télémétrie : la vitrine le lit {"GetSheddingLog", none}, // même droit que la télémétrie : un compte sans droit le lit
{"GetEnergyRatios", none}, {"GetEnergyRatios", none},
{"GetPvForecast", none}, {"GetPvForecast", none},
{"GetForecastSite", none}, {"GetForecastSite", none},
@ -2329,7 +2329,7 @@ void TestCharging::testNymeaEnergyPermissionsEnforced()
QVERIFY2(reussi(r), qPrintable(m + " : " + QJsonDocument::fromVariant(r).toJson(QJsonDocument::Compact))); QVERIFY2(reussi(r), qPrintable(m + " : " + QJsonDocument::fromVariant(r).toJson(QJsonDocument::Compact)));
} }
QCOMPARE(appeler(lecteur, "GetTariff").value("params"), tarifAvant); // la vraie valeur, pas une coquille QCOMPARE(appeler(lecteur, "GetTariff").value("params"), tarifAvant); // la vraie valeur, pas une coquille
// Le journal des délestages : un compte sans aucun droit — celui de la vitrine — le lit en entier. // Le journal des délestages : un compte sans aucun droit le lit en entier.
QCOMPARE(appeler(lecteur, "GetSheddingLog").value("params"), lireAdmin("GetSheddingLog")); QCOMPARE(appeler(lecteur, "GetSheddingLog").value("params"), lireAdmin("GetSheddingLog"));
QVERIFY(appeler(lecteur, "GetSheddingLog").value("params").toMap().contains("events")); QVERIFY(appeler(lecteur, "GetSheddingLog").value("params").toMap().contains("events"));
QVERIFY(refuse(appeler(lecteur, "SetTariff", {{"zones", QVariantList()}}))); QVERIFY(refuse(appeler(lecteur, "SetTariff", {{"zones", QVariantList()}})));