From c1e563d40b48a45894b9a9eaaa3d3075a668fe7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 2 Feb 2023 00:36:30 +0100 Subject: [PATCH] go-eCharger: Set energy states to 0 if not connected --- goecharger/integrationplugingoecharger.cpp | 31 +++++++++++++++++++--- goecharger/integrationplugingoecharger.h | 1 + 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/goecharger/integrationplugingoecharger.cpp b/goecharger/integrationplugingoecharger.cpp index a5a2c32c..d006ed64 100644 --- a/goecharger/integrationplugingoecharger.cpp +++ b/goecharger/integrationplugingoecharger.cpp @@ -223,11 +223,17 @@ void IntegrationPluginGoECharger::postSetupThing(Thing *thing) case ApiVersion1: if (m_mqttChannelsV1.contains(thing)) { thing->setStateValue("connected", m_mqttChannelsV1.value(thing)->isConnected()); + if (!m_mqttChannelsV1.value(thing)->isConnected()) { + markAsDisconnected(thing); + } } break; case ApiVersion2: if (m_mqttChannelsV2.contains(thing)) { thing->setStateValue("connected", m_mqttChannelsV2.value(thing)->isConnected()); + if (!m_mqttChannelsV2.value(thing)->isConnected()) { + markAsDisconnected(thing); + } } break; } @@ -1449,7 +1455,7 @@ void IntegrationPluginGoECharger::refreshHttp() if (reply->error() != QNetworkReply::NoError) { qCWarning(dcGoECharger()) << "HTTP status reply error for thing" << thing->name() << reply->errorString() << "Request was:" << request.url().toString(); - thing->setStateValue("connected", false); + markAsDisconnected(thing); return; } @@ -1458,7 +1464,7 @@ void IntegrationPluginGoECharger::refreshHttp() QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { qCWarning(dcGoECharger()) << "Failed to parse status data for thing" << thing->name() << qUtf8Printable(data) << error.errorString() << "Request was:" << request.url().toString(); - thing->setStateValue("connected", false); + markAsDisconnected(thing); return; } @@ -1502,7 +1508,7 @@ void IntegrationPluginGoECharger::onMqttClientV1Disconnected(MqttChannel *channe } qCDebug(dcGoECharger()) << thing << "connected"; - thing->setStateValue("connected", false); + markAsDisconnected(thing); } void IntegrationPluginGoECharger::onMqttPublishV1Received(MqttChannel *channel, const QString &topic, const QByteArray &payload) @@ -1550,5 +1556,22 @@ void IntegrationPluginGoECharger::onMqttClientV2Disconnected(MqttChannel *channe } qCDebug(dcGoECharger()) << thing << "connected"; - thing->setStateValue("connected", false); + markAsDisconnected(thing); +} + +void IntegrationPluginGoECharger::markAsDisconnected(Thing *thing) +{ + qCDebug(dcGoECharger()) << "Mark device as disconnected" << thing; + thing->setStateValue("connected", false); + thing->setStateValue("currentPower", 0); + thing->setStateValue("voltagePhaseA", 0); + thing->setStateValue("voltagePhaseB", 0); + thing->setStateValue("voltagePhaseC", 0); + thing->setStateValue("currentPhaseA", 0); + thing->setStateValue("currentPhaseB", 0); + thing->setStateValue("currentPhaseC", 0); + thing->setStateValue("currentPowerPhaseA", 0); + thing->setStateValue("currentPowerPhaseB", 0); + thing->setStateValue("currentPowerPhaseC", 0); + thing->setStateValue("frequency", 0); } diff --git a/goecharger/integrationplugingoecharger.h b/goecharger/integrationplugingoecharger.h index 656d8adb..0ad21dc3 100644 --- a/goecharger/integrationplugingoecharger.h +++ b/goecharger/integrationplugingoecharger.h @@ -143,6 +143,7 @@ private slots: void onMqttClientV2Connected(MqttChannel* channel); void onMqttClientV2Disconnected(MqttChannel* channel); + void markAsDisconnected(Thing *thing); }; #endif // INTEGRATIONPLUGINGOECHARGER_H