powersync-energy-plugin-etm/energyplugin/types/chargingschedule.cpp

161 lines
4.5 KiB
C++

// 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 <https://www.gnu.org/licenses/>.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "chargingschedule.h"
ChargingSchedule::ChargingSchedule() : TimeFrame()
{
}
ChargingSchedule::ChargingSchedule(const ThingId &evChargerId) :
TimeFrame(),
m_evChargerId{evChargerId}
{
}
ChargingSchedule::ChargingSchedule(const ThingId &evChargerId, const TimeFrame &timeFrame) :
TimeFrame(timeFrame),
m_evChargerId{evChargerId}
{
}
ThingId ChargingSchedule::evChargerId() const
{
return m_evChargerId;
}
void ChargingSchedule::setEvChargerId(const ThingId &evChargerId)
{
m_evChargerId = evChargerId;
}
ChargingAction ChargingSchedule::action() const
{
return m_action;
}
void ChargingSchedule::setAction(const ChargingAction &action)
{
m_action = action;
}
void ChargingSchedule::clear()
{
m_startDateTime = QDateTime();
m_endDateTime = QDateTime();
m_action = ChargingAction();
}
ChargingSchedules::ChargingSchedules()
{
}
QVariant ChargingSchedules::get(int index) const
{
return QVariant::fromValue(at(index));
}
void ChargingSchedules::put(const QVariant &variant)
{
append(variant.value<ChargingSchedule>());
}
ChargingSchedule ChargingSchedules::getChargingSchedule(const QDateTime &dateTime) const
{
foreach (const ChargingSchedule &schedule, *this) {
if (schedule.isActive(dateTime)) {
return schedule;
}
}
return ChargingSchedule();
}
uint ChargingSchedules::removeAllIssuer(ChargingAction::ChargingActionIssuer issuer)
{
uint count = 0;
foreach(const ChargingSchedule &schedule, *this) {
if (schedule.action().issuer() == issuer) {
this->removeAll(schedule);
count++;
}
}
return count;
}
ChargingSchedules ChargingSchedules::filterByIssuer(ChargingAction::ChargingActionIssuer issuer) const
{
ChargingSchedules schedules;
foreach(const ChargingSchedule &schedule, *this) {
if (schedule.action().issuer() == issuer) {
schedules.append(schedule);
}
}
return schedules;
}
QDebug operator<<(QDebug debug, const ChargingSchedule &chargingSchedule)
{
const QDebugStateSaver saver(debug);
debug.nospace() << "ChargingSchedule(" << chargingSchedule.startDateTime().toString("dd.MM.yyyy hh:mm");
debug.nospace() << " - "<< chargingSchedule.endDateTime().toString("dd.MM.yyyy hh:mm");
debug.nospace() << ", " << chargingSchedule.action().maxChargingCurrent() << "A";
debug.nospace() << ", Power: " << (chargingSchedule.action().chargingEnabled() ? "ON" : "OFF");
debug.nospace() << ", Issuer: ";
switch (chargingSchedule.action().issuer()) {
case ChargingAction::ChargingActionIssuerUnknown:
debug.nospace() << "Unknown";
break;
case ChargingAction::ChargingActionIssuerSurplusCharging:
debug.nospace() << "Surplus";
break;
case ChargingAction::ChargingActionIssuerSpotMarketCharging:
debug.nospace() << "Spot market";
break;
case ChargingAction::ChargingActionIssuerTimeRequirement:
debug.nospace() << "Time requirement";
break;
case ChargingAction::ChargingActionIssuerOverloadProtection:
debug.nospace() << "Overload protection";
break;
}
debug.nospace() << ")";
return debug;
}
QDebug operator<<(QDebug debug, const ChargingSchedules &chargingSchedules)
{
const QDebugStateSaver saver(debug);
debug.nospace() << "ChargingSchedule(" << chargingSchedules.count() << ")\n";
for (int i = 0; i < chargingSchedules.count(); i++) {
debug.nospace() << " - " << i << " -> " << chargingSchedules.at(i) << "\n";
}
return debug;
}