LoadAction (kind+funding+§6 fields), LoadDescriptor, SurplusContext (§5), Plan/Slot, ILoadAdapter, IScheduler — noms de champs = OPTIMIZER_PROTOCOL.md. energyplugin.pri inclut etm/etm.pri. Build Qt6 vert, aucun fichier upstream touché. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
38 lines
1.4 KiB
C++
38 lines
1.4 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
// Copyright (C) 2025 - 2026, Patrick Schurig / ETM PowerSync
|
|
#pragma once
|
|
|
|
#include <QDateTime>
|
|
#include "../types/loadaction.h"
|
|
#include "../types/loaddescriptor.h"
|
|
#include "../types/surpluscontext.h"
|
|
|
|
// Vue runtime minimale qu'un adaptateur expose à l'arbitre.
|
|
struct LoadTelemetry {
|
|
double currentPowerW = 0;
|
|
bool available = true; // faux si l'appareil nymea est absent/erreur
|
|
QDateTime lastActionAt;
|
|
};
|
|
|
|
// Interface pure — les implémentations concrètes héritent de QObject + ILoadAdapter.
|
|
// Signaux (telemetryChanged, descriptorChanged) déclarés dans les classes concrètes.
|
|
class ILoadAdapter {
|
|
public:
|
|
virtual ~ILoadAdapter() = default;
|
|
|
|
// Déclaration statique : capacités, limites, priorité, needs.
|
|
virtual LoadDescriptor descriptor() const = 0;
|
|
|
|
// Télémétrie runtime (courant, disponibilité, dernière action).
|
|
virtual LoadTelemetry telemetry() const = 0;
|
|
|
|
// Construit l'entrée §5 loads[] pour SurplusContext.
|
|
// Inclut declared, telemetry type-spécifique, learned courant.
|
|
virtual LoadContext toLoadContext() const = 0;
|
|
|
|
// Applique l'action. Retourne ce qui a réellement été appliqué
|
|
// (après écrêtage matériel). L'arbitre a déjà écrêté selon les limites
|
|
// et le budget — c'est le second filet.
|
|
virtual LoadAction applyAction(const LoadAction &action) = 0;
|
|
};
|