// 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. * * nymea is 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 is 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. If not, see . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #ifndef SUNSPECSTORAGELOGIC_H #define SUNSPECSTORAGELOGIC_H #include #include /* Decision logic of the storage (model 124) handling, kept free of the * integration framework so it can be exercised without a running nymea. * * readStates() maps a storage block update onto the state values the plugin * publishes. Having it in one place is what makes it possible to check that a * state is fed from the very register the matching action writes to. */ namespace SunSpecStorageLogic { struct StorageStates { /* Percent of WChaMax, from InWRte / OutWRte - the very registers the * chargingRate / dischargingRate actions write to. */ double chargingRate = 0; double dischargingRate = 0; /* Percent of WChaMax per second, from WChaGra / WDisChaGra. A different * quantity from the two above, and read only on several inverters. */ double chargeGradient = 0; double dischargeGradient = 0; /* Both flags are reconciled from StorCtl_Mod. Reconciling only one lets the * other drift silently as soon as the inverter changes it on its own. */ bool enableCharging = false; bool enableDischarging = false; bool gridCharging = false; int batteryLevel = 0; bool batteryCritical = false; }; /* Value range of the InWRte / OutWRte setpoints of model 124. */ const double MinimumRatePercent = -100.0; const double MaximumRatePercent = 100.0; StorageStates readStates(SunSpecStorageModel *storage); } #endif // SUNSPECSTORAGELOGIC_H