From 67016525878577b3972f5a6c12b1a5833a2563d7 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 27 Jul 2023 13:29:38 +0200 Subject: [PATCH] Schrack: Fix a crash when the setup of the wallbox fails --- schrack/integrationpluginschrack.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/schrack/integrationpluginschrack.cpp b/schrack/integrationpluginschrack.cpp index 9be9271..03aa247 100644 --- a/schrack/integrationpluginschrack.cpp +++ b/schrack/integrationpluginschrack.cpp @@ -101,6 +101,10 @@ void IntegrationPluginSchrack::setupThing(ThingSetupInfo *info) } CionModbusRtuConnection *cionConnection = new CionModbusRtuConnection(hardwareManager()->modbusRtuResource()->getModbusRtuMaster(uuid), address, this); + if (!info->isInitialSetup()) { + m_cionConnections.insert(thing, cionConnection); + info->finish(Thing::ThingErrorNoError); + } connect(cionConnection, &CionModbusRtuConnection::reachableChanged, thing, [cionConnection, thing](bool reachable){ qCDebug(dcSchrack()) << "Reachable state changed" << reachable; @@ -112,15 +116,16 @@ void IntegrationPluginSchrack::setupThing(ThingSetupInfo *info) }); connect(cionConnection, &CionModbusRtuConnection::initializationFinished, info, [=](bool success){ - qCDebug(dcSchrack()) << "Initialisation finsihed" << success; - if (success) { - qCDebug(dcSchrack) << "DIP switche states:" << cionConnection->dipSwitches(); - m_cionConnections.insert(thing, cionConnection); - info->finish(Thing::ThingErrorNoError); - info->thing()->setStateValue(cionCurrentVersionStateTypeId, cionConnection->firmwareVersion()); - } else { - delete cionConnection; - info->finish(Thing::ThingErrorHardwareNotAvailable); + qCDebug(dcSchrack()) << "Initialisation finished" << success << "DIP switche states:" << cionConnection->dipSwitches(); + if (info->isInitialSetup()) { + if (success) { + m_cionConnections.insert(thing, cionConnection); + info->finish(Thing::ThingErrorNoError); + info->thing()->setStateValue(cionCurrentVersionStateTypeId, cionConnection->firmwareVersion()); + } else { + delete cionConnection; + info->finish(Thing::ThingErrorHardwareNotAvailable); + } } });