From 0d7409454617f17beebd8f48d141a142649299f3 Mon Sep 17 00:00:00 2001 From: Boernsman Date: Thu, 20 Feb 2020 22:46:19 +0500 Subject: [PATCH] added session time state --- keba/integrationpluginkeba.cpp | 27 ++++++++++++++++++++++++++- keba/integrationpluginkeba.h | 2 ++ keba/integrationpluginkeba.json | 9 +++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/keba/integrationpluginkeba.cpp b/keba/integrationpluginkeba.cpp index ddbcf7db..ae0ad441 100644 --- a/keba/integrationpluginkeba.cpp +++ b/keba/integrationpluginkeba.cpp @@ -35,6 +35,7 @@ #include #include #include +#include IntegrationPluginKeba::IntegrationPluginKeba() { @@ -148,6 +149,20 @@ void IntegrationPluginKeba::updateData() keba->getReport2(); keba->getReport3(); } + + foreach (Device *device, myDevices().filterByDeviceClassId(wallboxDeviceClassId)) { + if (m_chargingSessionStartTime.contains(device->id())) { + QDateTime startTime = m_chargingSessionStartTime.value(device->id()); + + QTimeZone tz = QTimeZone(QTimeZone::systemTimeZoneId()); + QDateTime currentTime = QDateTime::currentDateTime().toTimeZone(tz); + + int minutes = (currentTime.toSecsSinceEpoch() - startTime.toSecsSinceEpoch())/60; + device->setStateValue(wallboxSessionTimeStateTypeId, minutes); + } else { + device->setStateValue(wallboxSessionTimeStateTypeId, 0); + } + } } void DevicePluginKeba::setDeviceState(Device *device, KeContact::State state) @@ -172,6 +187,16 @@ void DevicePluginKeba::setDeviceState(Device *device, KeContact::State state) device->setStateValue(wallboxActivityStateTypeId, "Authorization rejected"); break; } + + if (state == KeContact::StateCharging) { + //Set charging session + QTimeZone tz = QTimeZone(QTimeZone::systemTimeZoneId()); + QDateTime startedChargingSession = QDateTime::currentDateTime().toTimeZone(tz); + m_chargingSessionStartTime.insert(device->id(), startedChargingSession); + } else { + m_chargingSessionStartTime.remove(device->id()); + device->setStateValue(wallboxSessionTimeStateTypeId, 0); + } } void DevicePluginKeba::setDevicePlugState(Device *device, KeContact::PlugState plugState) @@ -211,6 +236,7 @@ void DevicePluginKeba::onConnectionChanged(bool status) void DevicePluginKeba::onCommandExecuted(QUuid requestId, bool success) { + updateData(); if (m_asyncActions.contains(requestId)) { KeContact *keba = static_cast(sender()); Device *device = myDevices().findById(m_kebaDevices.key(keba)); @@ -234,7 +260,6 @@ void DevicePluginKeba::onReportOneReceived(const KeContact::ReportOne &reportOne if (m_asyncSetup.contains(keba)) { DeviceSetupInfo *info = m_asyncSetup.value(keba); info->finish(Device::DeviceErrorNoError); - } else { qCDebug(dcKebaKeContact()) << "Report one received without an associated async setup"; } diff --git a/keba/integrationpluginkeba.h b/keba/integrationpluginkeba.h index 00b72e7a..44d6b70c 100644 --- a/keba/integrationpluginkeba.h +++ b/keba/integrationpluginkeba.h @@ -40,6 +40,7 @@ #include #include #include +#include class IntegrationPluginKeba : public IntegrationPlugin { @@ -65,6 +66,7 @@ private: QHash m_kebaDevices; QHash m_asyncSetup; QHash m_asyncActions; + QHash m_chargingSessionStartTime; void setDeviceState(Device *device, KeContact::State state); void setDevicePlugState(Device *device, KeContact::PlugState plugState); diff --git a/keba/integrationpluginkeba.json b/keba/integrationpluginkeba.json index 8be24382..c6567716 100644 --- a/keba/integrationpluginkeba.json +++ b/keba/integrationpluginkeba.json @@ -164,6 +164,15 @@ "unit": "MilliWatt", "defaultValue": 0 }, + { + "id": "a6f35ea0-aaea-438b-b818-6d161762611e", + "name": "sessionTime", + "displayName": "Session time", + "displayNameEvent": "Session time changed", + "type": "int", + "unit": "Minutes", + "defaultValue": 0 + }, { "id": "8e277efe-21ef-4536-bfc0-901b32d44d7c", "name": "EP",