// 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;
}
}