// 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 . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "sunspecstoragelogic.h" #include namespace SunSpecStorageLogic { StorageStates readStates(SunSpecStorageModel *storage) { StorageStates states; if (!storage) return states; /* InWRte / OutWRte are what the chargingRate / dischargingRate actions * write. Reading the gradients here instead would mean the user writes one * quantity and reads back another. */ states.chargingRate = storage->inWRte(); states.dischargingRate = storage->outWRte(); /* The gradients stay available, under names that cannot be mistaken for the * setpoints above. */ states.chargeGradient = storage->wChaGra(); states.dischargeGradient = storage->wDisChaGra(); const SunSpecStorageModel::Storctl_modFlags controlMode = storage->storCtlMod(); states.enableCharging = controlMode.testFlag(SunSpecStorageModel::Storctl_modCharge); states.enableDischarging = controlMode.testFlag(SunSpecStorageModel::Storctl_modDiScharge); states.gridCharging = (storage->chaGriSet() == SunSpecStorageModel::ChagrisetGrid); states.batteryLevel = qRound(storage->chaState()); states.batteryCritical = storage->chaState() < 5; return states; } }