- EnergyArbitrator : public SmartChargingManager — raison documentée dans AGENTS.md §DÉCISIONS DE DESIGN - SmartChargingManager : protected slots + virtual update() + 3 accesseurs inline [ETM] - RuleBasedScheduler::getPlan() wraps planSurplusCharging/planSpotMarketCharging, annote chaque action d'un reason français - EvAdapter : ILoadAdapter concret pour evcharger — applyAction() implémenté, NON appelé en 3b (dispatch via adjustEvChargers() amont, iso-fonctionnel) - ETM_ARBITRATOR : commenté dans .pro — ne s'active qu'après preuve iso-fonctionnelle (3b-iv) - Doxygen \brief + invariants + contrats sur toutes les classes/méthodes publiques etm/ (DoD §5) - plan.h : timeSlots (pas slots, mot-clé Qt) ; commentaire JSON sérialisation "slots" OPTIMIZER_PROTOCOL §6 - .clangd : flags de repli Qt/nymea pour clangd via symlink ~/Schreibtisch/ - compile_commands.json gitignore (chemins absolus locaux) - Build : 0 erreurs, 0 warnings — libnymea_energypluginnymea.so 914 KB Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
32 lines
1.2 KiB
C++
32 lines
1.2 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// Copyright (C) 2025 - 2026, Patrick Schurig / ETM PowerSync
|
|
#pragma once
|
|
|
|
#include "../types/surpluscontext.h"
|
|
#include "../types/plan.h"
|
|
|
|
/*!
|
|
* \brief Interface pure du planificateur d'énergie.
|
|
*
|
|
* Les implémentations concrètes héritent de QObject + IScheduler.
|
|
*
|
|
* \invariant getPlan() retourne IMMÉDIATEMENT (modèle cache, AGENTS invariant 5).
|
|
* SocketScheduler retourne son dernier plan en cache et recalcule en arrière-plan.
|
|
* \invariant getPlan() retourne TOUJOURS un Plan valide (isValid() == true).
|
|
* SocketScheduler embarque un RuleBasedScheduler en fallback — jamais d'abstain
|
|
* qui remonterait à l'arbitre (AGENTS règle 6).
|
|
* \invariant Toute LoadAction du Plan retourné a \c reason non vide, en français.
|
|
*/
|
|
class IScheduler {
|
|
public:
|
|
virtual ~IScheduler() = default;
|
|
|
|
/*!
|
|
* \brief Calcule le plan d'optimisation à partir du contexte courant.
|
|
* \param ctx Contexte surplus (site, compteur, PV, batterie, charges, tarif).
|
|
* \return Plan avec au moins un Slot — jamais Plan::isValid() == false.
|
|
* \note Retourne immédiatement depuis le cache ; le recalcul est asynchrone.
|
|
*/
|
|
virtual Plan getPlan(const SurplusContext &ctx) = 0;
|
|
};
|