// 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 "types/energytimeslot.h" #include "types/manualslotconfig.h" #include "adapters/loadadapterregistry.h" class SmartChargingManager; class SpotMarketManager; class SchedulerManager; class NymeaEnergyJsonHandler : public JsonHandler { Q_OBJECT public: explicit NymeaEnergyJsonHandler(SpotMarketManager *spotMarketManager, SmartChargingManager *smartChargingManager, SchedulerManager *schedulerManager, LoadAdapterRegistry *adapterRegistry = 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); // --- Scheduler API (NymeaEnergy v10) --- // Timeline visualisation Q_INVOKABLE JsonReply *GetEnergyTimeline(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetFlexibleLoads(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetSchedulerStatus(const QVariantMap ¶ms); // Scheduler configuration Q_INVOKABLE JsonReply *SetSchedulerStrategy(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetSchedulerConfig(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetLoadConfig(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *OverrideSlot(const QVariantMap ¶ms); // --- Manual slot API (NymeaEnergy v11) --- Q_INVOKABLE JsonReply *GetManualSlots(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetManualSlot(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *RemoveManualSlot(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *ClearManualSlots(const QVariantMap ¶ms); // --- Installer Setup API (NymeaEnergy v12) --- Q_INVOKABLE JsonReply *GetSetupStatus(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *GetCompatibleThings(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *AssignThingToRole(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *UnassignRole(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *SetRoleEnabled(const QVariantMap ¶ms); Q_INVOKABLE JsonReply *TestRoleConnection(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); // Scheduler push notifications void TimelineUpdated(const QVariantMap ¶ms); void SlotActivated(const QVariantMap ¶ms); void OverrideConflict(const QVariantMap ¶ms); // Manual slot push notification void ManualSlotActivated(const QVariantMap ¶ms); // Installer setup push notifications (v12) void SetupStatusChanged(const QVariantMap ¶ms); void ConnectionTestResult(const QVariantMap ¶ms); void ThingBecameCompatible(const QVariantMap ¶ms); private: SpotMarketManager *m_spotMarketManager; SmartChargingManager *m_smartChargingManager = nullptr; SchedulerManager *m_schedulerManager = nullptr; LoadAdapterRegistry *m_adapterRegistry = nullptr; void sendSpotMarketConfigurationChangedNotification(); QVariantMap buildTimelineSummary(const QList &timeline) const; // Helper: convert a timeline slot to QVariantMap for JSON-RPC QVariantMap slotToVariantMap(const EnergyTimeSlot &slot) const; // Helper: access the registered ManualStrategy (null if not registered) class ManualStrategy *manualStrategy() const; // Installer setup serialization helpers QVariantMap setupStatusToVariant(const SetupStatus &status) const; QVariantMap roleStatusToVariant(const RoleStatus &rs) const; QVariantMap thingInfoToVariant(const ThingInfo &info) const; }; #endif // NYMEAENERGYJSONHANDLER_H