diff --git a/amperfied/connecthomediscovery.cpp b/amperfied/connecthomediscovery.cpp index ed377b0..a8e90c4 100644 --- a/amperfied/connecthomediscovery.cpp +++ b/amperfied/connecthomediscovery.cpp @@ -85,6 +85,13 @@ void ConnectHomeDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDe cleanupConnection(connection); return; } + + if (connection->version() < 0x100 || connection->version() > 0x2ff) { + qCInfo(dcAmperfied()) << "Skipping invalid/unsupported AMPERFIED version" << connection->version(); + cleanupConnection(connection); + return; + } + Result result; result.firmwareVersion = connection->version(); result.networkDeviceInfo = networkDeviceInfo; diff --git a/amperfied/integrationpluginamperfied.cpp b/amperfied/integrationpluginamperfied.cpp index 02e2182..f6ff59c 100644 --- a/amperfied/integrationpluginamperfied.cpp +++ b/amperfied/integrationpluginamperfied.cpp @@ -44,8 +44,6 @@ IntegrationPluginAmperfied::IntegrationPluginAmperfied() void IntegrationPluginAmperfied::discoverThings(ThingDiscoveryInfo *info) { - hardwareManager()->modbusRtuResource(); - if (info->thingClassId() == energyControlThingClassId) { EnergyControlDiscovery *discovery = new EnergyControlDiscovery(hardwareManager()->modbusRtuResource(), info); @@ -270,6 +268,11 @@ void IntegrationPluginAmperfied::setupRtuConnection(ThingSetupInfo *info) { Thing *thing = info->thing(); ModbusRtuMaster *master = hardwareManager()->modbusRtuResource()->getModbusRtuMaster(thing->paramValue(energyControlThingRtuMasterParamTypeId).toUuid()); + if (!master) { + qCWarning(dcAmperfied()) << "The Modbus Master is not available any more."; + info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("The modbus RTU connection is not available.")); + return; + } quint16 slaveId = thing->paramValue(energyControlThingSlaveIdParamTypeId).toUInt(); AmperfiedModbusRtuConnection *connection = new AmperfiedModbusRtuConnection(master, slaveId, thing);