Réglage `Optimizer/endpoint` (energy.conf), lu au démarrage par EnergyArbitrator::relireReglageOptimiseur() — lecture seule, la RPC viendra en T4. ABSENT : aucun SocketScheduler ni OptimizerClient n'existe, update() interroge le rule-based comme avant (decisions IDENTIQUE, 23 772 lignes). SocketScheduler (IScheduler) : à chaque cycle, le rule-based en OMBRE (effets de bord conservés), puis GetPlan envoyé sans attendre (getPlanParams + fil de l'arbitre : compteur racine, PV, phases, réserve, domaines, mesures, prévision réelle) ; si le plan en cache est valide pour CE cycle, ses actions remplacent celles de l'ombre (OptimizerPlan::substituer). Sinon rule-based : plan absent, invalide, expiré, abstention, connexion perdue. Un plan invalide vide le cache. Les actions passent par applyActionsToAdapters comme celles du rule-based ; apresDispatch() relit l'appliqué (Q3, Q4, clamped), avant la fusion L4. L4 et L2 inchangés : L4 garde le dernier mot, L2 suspend tout. Déclencheur réel (§5.1 trigger) : intent (ChargingInfo), load-change (Thing ajouté/retiré), config (SetLoadConfig, limites, réserve), forecast (révision nouvelle) ; le plus significatif l'emporte, consommé à l'envoi. Journal : le texte libre de l'optimiseur y va (assaini), jamais dans la télémétrie ; lignes en clair au changement seulement (stratégie, motifs, écrêtage). Version du moteur du handshake lue dans debian/changelog. Points d'accroche T4 : reponseJugee(), echecRequete(), strategieDuCycle(). INTERFACE.md : niveau unique « optimizer », budget/draw sous l'optimiseur, préséance L4 > indisponible/dégradé > optimiseur > éco|confort. Tests : suite etm-powersync-socketscheduler (12 fonctions, 43 passés) — faux optimiseur unix et tcp dans le processus, arbitre réel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
1.4 KiB
Prolog
43 lines
1.4 KiB
Prolog
# Brief 4 T3 — la stratégie optimiseur DANS l'arbitre réel : faux optimiseur du processus
|
|
# (tests/auto/common/etm-powersync-fakeoptimizer.h), serveur nymea et mocks de la suite
|
|
# `simulation`, cycles injectés.
|
|
#
|
|
# Suite À PART, et c'est délibéré : `decisions` recompile les scénarios de `simulation` pour la
|
|
# preuve « sans endpoint = identique au bit près ». Des scénarios AVEC endpoint y ajouteraient
|
|
# des cycles à la référence ; ici ils ne la touchent pas.
|
|
|
|
include(../common/common.pri)
|
|
include(../../../energyplugin/energyplugin.pri)
|
|
include(../../mocks/spotmarketprovider/spotmarketdataprovidermock.pri)
|
|
|
|
CONFIG += testcase
|
|
|
|
TARGET = etm-powersync-socketscheduler
|
|
|
|
DEFINES += ENERGY_SIMULATION
|
|
|
|
SIM = $$PWD/../simulation
|
|
INCLUDEPATH += $$SIM
|
|
|
|
RESOURCES += \
|
|
$$SIM/simulationresources.qrc
|
|
|
|
HEADERS += \
|
|
$$SIM/experience/energyexperienceenergymock.h \
|
|
$$SIM/experience/energyjsonhandler.h \
|
|
$$SIM/experience/energylogger.h \
|
|
$$SIM/experience/energymanagermock.h \
|
|
$$SIM/simulationbase.h \
|
|
$$PWD/../common/etm-powersync-fakeoptimizer.h
|
|
|
|
SOURCES += \
|
|
$$SIM/experience/energyexperienceenergymock.cpp \
|
|
$$SIM/experience/energyjsonhandler.cpp \
|
|
$$SIM/experience/energylogger.cpp \
|
|
$$SIM/experience/energymanagermock.cpp \
|
|
$$SIM/simulationbase.cpp \
|
|
testsocketscheduler.cpp
|
|
|
|
target.path = $$[QT_INSTALL_PREFIX]/bin
|
|
INSTALLS += target
|