// SPDX-License-Identifier: GPL-3.0-or-later /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2013 - 2024, nymea GmbH * Copyright (C) 2024 - 2025, chargebyte austria GmbH * * This file is part of nymea-energy-plugin-nymea. * * nymea-energy-plugin-nymea.s free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * nymea-energy-plugin-nymea.s distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with nymea-energy-plugin-nymea. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef NYMEAENERGYJSONHANDLER_H #define NYMEAENERGYJSONHANDLER_H #include #include #include "types/scoreentry.h" #include "etm/ratios/energyratioscalculator.h" class SmartChargingManager; class SpotMarketManager; class LoadConfigStore; class EnergyManager; class NymeaEnergyJsonHandler : public JsonHandler { Q_OBJECT public: explicit NymeaEnergyJsonHandler(SpotMarketManager *spotMarketManager, SmartChargingManager *smartChargingManager, LoadConfigStore *loadConfigStore = nullptr, EnergyManager *energyManager = nullptr, QObject *parent = nullptr); QString name() const override; Q_INVOKABLE JsonReply *GetPhasePowerLimit(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetPhasePowerLimit(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetAcquisitionTolerance(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetAcquisitionTolerance(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetBatteryLevelConsideration(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetBatteryLevelConsideration(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetChargingInfos(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetChargingInfo(const QVariantMap ¶ms, const JsonContext &context); Q_INVOKABLE JsonReply *GetLockOnUnplug(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetLockOnUnplug(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetAvailableSpotMarketProviders(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetSpotMarketConfiguration(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetSpotMarketConfiguration(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetSpotMarketScoreEntries(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetChargingSchedules(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetLoadConfig(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetLoadConfig(const QVariantMap ¶ms); // [Phase 2] Ratios canoniques (autoconsommation / autonomie), % [0,100]. Q_INVOKABLE JsonReply *GetEnergyRatios(const QVariantMap ¶ms); /*! * \brief [ETM] Lève le verrou de défaut d'une charge pilotée (ECS-410). * \param params \c {"loadId": string}. * \return \c energyError — \c EnergyErrorNoError si la charge existe et son défaut est * levé, \c EnergyErrorInvalidParameter si l'identifiant est inconnu. * \note Acte DÉLIBÉRÉ de l'opérateur : le défaut d'ECS-410 est collant par conception, et * cet appel est le seul moyen de le lever hors reconstruction de l'adaptateur. Il est * journalisé côté arbitre — c'est ce qui rend le diagnostic possible après coup. */ Q_INVOKABLE JsonReply *ClearLoadFault(const QVariantMap ¶ms); signals: void PhasePowerLimitChanged(const QVariantMap ¶ms); void AcquisitionToleranceChanged(const QVariantMap ¶ms); void LockOnUnplugChanged(const QVariantMap ¶ms); void ChargingInfoAdded(const QVariantMap ¶ms); void ChargingInfoRemoved(const QVariantMap ¶ms); void ChargingInfoChanged(const QVariantMap ¶ms); void SpotMarketConfigurationChanged(const QVariantMap ¶ms); void SpotMarketScoreEntriesChanged(const QVariantMap ¶ms); void ChargingSchedulesChanged(const QVariantMap ¶ms); void BatteryLevelConsiderationChanged(const QVariantMap ¶ms); void LoadConfigChanged(const QVariantMap ¶ms); void EnergyRatiosChanged(const QVariantMap ¶ms); private slots: void onPowerBalanceChanged(); private: SpotMarketManager *m_spotMarketManager; SmartChargingManager *m_smartChargingManager = nullptr; LoadConfigStore *m_loadConfigStore = nullptr; EnergyManager *m_energyManager = nullptr; EnergyRatiosCalculator m_ratiosCalculator; EnergyRatiosCalculator::Ratios m_lastRatios; bool m_lastRatiosValid = false; // un calcul a-t-il déjà été émis ? QVariantMap currentEnergyRatios(); void sendSpotMarketConfigurationChangedNotification(); }; #endif // NYMEAENERGYJSONHANDLER_H