From 404124090247ee50fed62aa25278bbd3569463ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 26 Aug 2024 09:56:57 +0200 Subject: [PATCH] INRO: Fix intial read after connection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Simon Stürz --- inro/integrationplugininro.cpp | 16 ++++++++++++++-- inro/integrationplugininro.h | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/inro/integrationplugininro.cpp b/inro/integrationplugininro.cpp index 7dc2d11..daa5c7d 100644 --- a/inro/integrationplugininro.cpp +++ b/inro/integrationplugininro.cpp @@ -277,6 +277,8 @@ void IntegrationPluginInro::thingRemoved(Thing *thing) connection->deleteLater(); } + m_initReadRequired.remove(thing); + // Unregister related hardware resources if (m_monitors.contains(thing)) hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing)); @@ -325,13 +327,14 @@ void IntegrationPluginInro::setupConnection(ThingSetupInfo *info) } }); - connect(connection, &Pantabox::initializationFinished, thing, [thing, connection](bool success){ + connect(connection, &Pantabox::initializationFinished, thing, [this, thing, connection](bool success){ if (success) { thing->setStateValue(pantaboxModbusTcpVersionStateTypeId, Pantabox::modbusVersionToString(connection->modbusTcpVersion())); + m_initReadRequired[thing] = true; } }); - connect(connection, &Pantabox::updateFinished, thing, [thing, connection](){ + connect(connection, &Pantabox::updateFinished, thing, [this, thing, connection](){ qCDebug(dcInro()) << "Update finished for" << thing; qCDebug(dcInro()) << connection; @@ -381,6 +384,15 @@ void IntegrationPluginInro::setupConnection(ThingSetupInfo *info) thing->setStateValue(pantaboxFirmwareVersionStateTypeId, connection->firmwareVersion()); thing->setStateValue(pantaboxTotalEnergyConsumedStateTypeId, connection->absoluteEnergy() / 1000.0); // Wh + // Sync states only right after the connection + if (m_initReadRequired.value(thing, false)) { + qCDebug(dcInro()) << "Set initial charging current and charging enabled values."; + m_initReadRequired.remove(thing); + if (connection->maxChargingCurrent() > 0) { + thing->setStateValue(pantaboxMaxChargingCurrentStateTypeId, connection->maxChargingCurrent()); + } + thing->setStateValue(pantaboxPowerStateTypeId, connection->chargingEnabled()); + } }); m_connections.insert(thing, connection); diff --git a/inro/integrationplugininro.h b/inro/integrationplugininro.h index 58aa8e2..17bb5a0 100644 --- a/inro/integrationplugininro.h +++ b/inro/integrationplugininro.h @@ -58,6 +58,8 @@ private: PluginTimer *m_refreshTimer = nullptr; QHash m_connections; QHash m_monitors; + QHash m_initReadRequired; + void setupConnection(ThingSetupInfo *info); };