Kostal: Update to networkdevice interface, add discovery params and use serialnumber as unique identifier
parent
36f9f3c512
commit
50efdb28be
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2022, nymea GmbH
|
* Copyright 2013 - 2024, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
@ -49,24 +49,34 @@ void IntegrationPluginKostal::discoverThings(ThingDiscoveryInfo *info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a discovery with the info as parent for auto deleting the object once the discovery info is done
|
// Create a discovery with the info as parent for auto deleting the object once the discovery info is done
|
||||||
KostalDiscovery *discovery = new KostalDiscovery(hardwareManager()->networkDeviceDiscovery(), 1502, 71, info);
|
KostalDiscovery *discovery = new KostalDiscovery(hardwareManager()->networkDeviceDiscovery(),
|
||||||
|
info->params().paramValue(kostalInverterDiscoveryPortParamTypeId).toUInt(),
|
||||||
|
info->params().paramValue(kostalInverterDiscoverySlaveIdParamTypeId).toUInt(), info);
|
||||||
|
|
||||||
connect(discovery, &KostalDiscovery::discoveryFinished, info, [=](){
|
connect(discovery, &KostalDiscovery::discoveryFinished, info, [=](){
|
||||||
foreach (const KostalDiscovery::KostalDiscoveryResult &result, discovery->discoveryResults()) {
|
foreach (const KostalDiscovery::KostalDiscoveryResult &result, discovery->discoveryResults()) {
|
||||||
|
|
||||||
ThingDescriptor descriptor(kostalInverterThingClassId, result.manufacturerName + " " + result.productName, "Serial: " + result.serialNumber + " - " + result.networkDeviceInfo.address().toString());
|
ThingDescriptor descriptor(kostalInverterThingClassId, result.manufacturerName + " " + result.productName,
|
||||||
|
"Serial: " + result.serialNumber + " - " + result.networkDeviceInfo.address().toString());
|
||||||
|
|
||||||
qCDebug(dcKostal()) << "Discovered:" << descriptor.title() << descriptor.description();
|
qCDebug(dcKostal()) << "Discovered:" << descriptor.title() << descriptor.description();
|
||||||
|
ParamList params;
|
||||||
|
params << Param(kostalInverterThingSerialNumberParamTypeId, result.serialNumber);
|
||||||
|
params << Param(kostalInverterThingMacAddressParamTypeId, result.networkDeviceInfo.thingParamValueMacAddress());
|
||||||
|
params << Param(kostalInverterThingHostNameParamTypeId, result.networkDeviceInfo.thingParamValueHostName());
|
||||||
|
params << Param(kostalInverterThingAddressParamTypeId, result.networkDeviceInfo.thingParamValueAddress());
|
||||||
|
// Note: if we discover also the port and modbusaddress, we must fill them in from the discovery here, for now everywhere the defaults...
|
||||||
|
descriptor.setParams(params);
|
||||||
|
|
||||||
// Check if we already have set up this device
|
// Check if we already have set up this device
|
||||||
Things existingThings = myThings().filterByParam(kostalInverterThingMacAddressParamTypeId, result.networkDeviceInfo.macAddress());
|
|
||||||
|
// Note: we introduced the serial number later, if the current thing has no serialnumber, we use the mac
|
||||||
|
Things existingThings = myThings().filterByParam(kostalInverterThingSerialNumberParamTypeId, result.serialNumber);
|
||||||
if (existingThings.count() == 1) {
|
if (existingThings.count() == 1) {
|
||||||
qCDebug(dcKostal()) << "This Kostal inverter already exists in the system:" << result.networkDeviceInfo;
|
qCDebug(dcKostal()) << "This Kostal inverter with this serial number already exists in the system:" << result.networkDeviceInfo;
|
||||||
descriptor.setThingId(existingThings.first()->id());
|
descriptor.setThingId(existingThings.first()->id());
|
||||||
}
|
}
|
||||||
|
|
||||||
ParamList params;
|
|
||||||
params << Param(kostalInverterThingMacAddressParamTypeId, result.networkDeviceInfo.macAddress());
|
|
||||||
// Note: if we discover also the port and modbusaddress, we must fill them in from the discovery here, for now everywhere the defaults...
|
|
||||||
descriptor.setParams(params);
|
|
||||||
info->addThingDescriptor(descriptor);
|
info->addThingDescriptor(descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,7 +113,7 @@ void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the monitor
|
// Create the monitor
|
||||||
NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(macAddress);
|
NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(thing);
|
||||||
m_monitors.insert(thing, monitor);
|
m_monitors.insert(thing, monitor);
|
||||||
|
|
||||||
QHostAddress address = monitor->networkDeviceInfo().address();
|
QHostAddress address = monitor->networkDeviceInfo().address();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2022, nymea GmbH
|
* Copyright 2013 - 2024, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"name": "Kostal",
|
"name": "Kostal",
|
||||||
"displayName": "Kostal",
|
"displayName": "Kostal",
|
||||||
"id": "51a2c7d5-084d-4474-a65a-e0447ab9ac45",
|
"id": "51a2c7d5-084d-4474-a65a-e0447ab9ac45",
|
||||||
"vendors": [
|
"vendors": [
|
||||||
{
|
{
|
||||||
"name": "kostal",
|
"name": "kostal",
|
||||||
"displayName": "KOSTAL Solar Electric",
|
"displayName": "KOSTAL Solar Electric",
|
||||||
|
|
@ -13,8 +13,24 @@
|
||||||
"displayName": "KOSTAL Inverter",
|
"displayName": "KOSTAL Inverter",
|
||||||
"id": "7dc6db14-6f5a-4ac8-9684-4c6a526bd0de",
|
"id": "7dc6db14-6f5a-4ac8-9684-4c6a526bd0de",
|
||||||
"createMethods": ["discovery", "user"],
|
"createMethods": ["discovery", "user"],
|
||||||
"interfaces": ["solarinverter", "connectable"],
|
"interfaces": ["solarinverter", "connectable", "networkdevice"],
|
||||||
"providedInterfaces": [ "energymeter", "energystorage"],
|
"providedInterfaces": [ "energymeter", "energystorage"],
|
||||||
|
"discoveryParamTypes": [
|
||||||
|
{
|
||||||
|
"id": "6cf2cb34-dc61-4ad1-9ae1-1177785f2d4a",
|
||||||
|
"name":"port",
|
||||||
|
"displayName": "Port",
|
||||||
|
"type": "int",
|
||||||
|
"defaultValue": 1502
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2a6d75d9-286d-48cb-83fd-acfb99258ba7",
|
||||||
|
"name":"slaveId",
|
||||||
|
"displayName": "Slave ID",
|
||||||
|
"type": "int",
|
||||||
|
"defaultValue": 71
|
||||||
|
}
|
||||||
|
],
|
||||||
"paramTypes": [
|
"paramTypes": [
|
||||||
{
|
{
|
||||||
"id": "906f6099-d0e1-4297-a2b3-f8ec4482c578",
|
"id": "906f6099-d0e1-4297-a2b3-f8ec4482c578",
|
||||||
|
|
@ -24,6 +40,29 @@
|
||||||
"inputType": "MacAddress",
|
"inputType": "MacAddress",
|
||||||
"defaultValue": ""
|
"defaultValue": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "c922c2ec-40d9-40cd-81dd-68141b178a0c",
|
||||||
|
"name": "hostName",
|
||||||
|
"displayName": "Host name",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "TextLine",
|
||||||
|
"defaultValue": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b8aeb35e-06e9-4e52-90ce-dd8712fb7527",
|
||||||
|
"name": "address",
|
||||||
|
"displayName": "IP address",
|
||||||
|
"type": "QString",
|
||||||
|
"inputType": "IPv4Address",
|
||||||
|
"defaultValue": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "7c701af9-a172-47a0-bb7b-30f37f63ac95",
|
||||||
|
"name": "serialNumber",
|
||||||
|
"displayName": "serialNumber",
|
||||||
|
"type": "QString",
|
||||||
|
"defaultValue": ""
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "9d2175af-afb9-4b31-b3dc-e53a369bad9e",
|
"id": "9d2175af-afb9-4b31-b3dc-e53a369bad9e",
|
||||||
"name":"port",
|
"name":"port",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2022, nymea GmbH
|
* Copyright 2013 - 2024, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
@ -44,23 +44,17 @@ void KostalDiscovery::startDiscovery()
|
||||||
{
|
{
|
||||||
qCInfo(dcKostal()) << "Discovery: Start searching for Kostal inverters in the network...";
|
qCInfo(dcKostal()) << "Discovery: Start searching for Kostal inverters in the network...";
|
||||||
NetworkDeviceDiscoveryReply *discoveryReply = m_networkDeviceDiscovery->discover();
|
NetworkDeviceDiscoveryReply *discoveryReply = m_networkDeviceDiscovery->discover();
|
||||||
|
m_startDateTime = QDateTime::currentDateTime();
|
||||||
|
|
||||||
// Imedialty check any new device gets discovered
|
// Imedialty check any new device gets discovered
|
||||||
connect(discoveryReply, &NetworkDeviceDiscoveryReply::networkDeviceInfoAdded, this, &KostalDiscovery::checkNetworkDevice);
|
connect(discoveryReply, &NetworkDeviceDiscoveryReply::hostAddressDiscovered, this, &KostalDiscovery::checkNetworkDevice);
|
||||||
|
|
||||||
// Check what might be left on finished
|
// Check what might be left on finished
|
||||||
connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, discoveryReply, &NetworkDeviceDiscoveryReply::deleteLater);
|
connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, discoveryReply, &NetworkDeviceDiscoveryReply::deleteLater);
|
||||||
connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, this, [=](){
|
connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, this, [=](){
|
||||||
qCDebug(dcKostal()) << "Discovery: Network discovery finished. Found" << discoveryReply->networkDeviceInfos().count() << "network devices";
|
qCDebug(dcKostal()) << "Discovery: Network discovery finished. Found" << discoveryReply->networkDeviceInfos().count() << "network devices";
|
||||||
m_networkDeviceInfos = discoveryReply->networkDeviceInfos();
|
m_networkDeviceInfos = discoveryReply->networkDeviceInfos();
|
||||||
|
|
||||||
// Send a report request to nework device info not sent already...
|
|
||||||
foreach (const NetworkDeviceInfo &networkDeviceInfo, m_networkDeviceInfos) {
|
|
||||||
if (!m_verifiedNetworkDeviceInfos.contains(networkDeviceInfo)) {
|
|
||||||
checkNetworkDevice(networkDeviceInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Give the last connections added right before the network discovery finished a chance to check the device...
|
// Give the last connections added right before the network discovery finished a chance to check the device...
|
||||||
QTimer::singleShot(3000, this, [this](){
|
QTimer::singleShot(3000, this, [this](){
|
||||||
qCDebug(dcKostal()) << "Discovery: Grace period timer triggered.";
|
qCDebug(dcKostal()) << "Discovery: Grace period timer triggered.";
|
||||||
|
|
@ -74,19 +68,15 @@ QList<KostalDiscovery::KostalDiscoveryResult> KostalDiscovery::discoveryResults(
|
||||||
return m_discoveryResults;
|
return m_discoveryResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceInfo)
|
void KostalDiscovery::checkNetworkDevice(const QHostAddress &address)
|
||||||
{
|
{
|
||||||
// Create a kostal connection and try to initialize it.
|
// Create a kostal connection and try to initialize it.
|
||||||
// Only if initialized successfully and all information have been fetched correctly from
|
// Only if initialized successfully and all information have been fetched correctly from
|
||||||
// the device we can assume this is what we are locking for (ip, port, modbus address, correct registers).
|
// the device we can assume this is what we are locking for (ip, port, modbus address, correct registers).
|
||||||
// We cloud tough also filter the result only for certain software versions, manufactueres or whatever...
|
// We cloud tough also filter the result only for certain software versions, manufactueres or whatever...
|
||||||
|
|
||||||
if (m_verifiedNetworkDeviceInfos.contains(networkDeviceInfo))
|
KostalModbusTcpConnection *connection = new KostalModbusTcpConnection(address, m_port, m_modbusAddress, this);
|
||||||
return;
|
|
||||||
|
|
||||||
KostalModbusTcpConnection *connection = new KostalModbusTcpConnection(networkDeviceInfo.address(), m_port, m_modbusAddress, this);
|
|
||||||
m_connections.append(connection);
|
m_connections.append(connection);
|
||||||
m_verifiedNetworkDeviceInfos.append(networkDeviceInfo);
|
|
||||||
|
|
||||||
connect(connection, &KostalModbusTcpConnection::reachableChanged, this, [=](bool reachable){
|
connect(connection, &KostalModbusTcpConnection::reachableChanged, this, [=](bool reachable){
|
||||||
if (!reachable) {
|
if (!reachable) {
|
||||||
|
|
@ -98,7 +88,7 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI
|
||||||
// Modbus TCP connected...ok, let's try to initialize it!
|
// Modbus TCP connected...ok, let's try to initialize it!
|
||||||
connect(connection, &KostalModbusTcpConnection::initializationFinished, this, [=](bool success){
|
connect(connection, &KostalModbusTcpConnection::initializationFinished, this, [=](bool success){
|
||||||
if (!success) {
|
if (!success) {
|
||||||
qCDebug(dcKostal()) << "Discovery: Initialization failed on" << networkDeviceInfo.address().toString() << "Continue...";;
|
qCDebug(dcKostal()) << "Discovery: Initialization failed on" << address.toString() << "Continue...";;
|
||||||
cleanupConnection(connection);
|
cleanupConnection(connection);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -110,7 +100,7 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI
|
||||||
result.articleNumber = connection->inverterArticleNumber();
|
result.articleNumber = connection->inverterArticleNumber();
|
||||||
result.softwareVersionIoController = connection->softwareVersionIoController();
|
result.softwareVersionIoController = connection->softwareVersionIoController();
|
||||||
result.softwareVersionMainController = connection->softwareVersionMainController();
|
result.softwareVersionMainController = connection->softwareVersionMainController();
|
||||||
result.networkDeviceInfo = networkDeviceInfo;
|
result.address = address;
|
||||||
m_discoveryResults.append(result);
|
m_discoveryResults.append(result);
|
||||||
|
|
||||||
qCDebug(dcKostal()) << "Discovery: --> Found" << result.manufacturerName << result.productName
|
qCDebug(dcKostal()) << "Discovery: --> Found" << result.manufacturerName << result.productName
|
||||||
|
|
@ -118,7 +108,7 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI
|
||||||
<< "Serial number:" << result.serialNumber
|
<< "Serial number:" << result.serialNumber
|
||||||
<< "Software version main controller:" << result.softwareVersionMainController
|
<< "Software version main controller:" << result.softwareVersionMainController
|
||||||
<< "Software version IO controller:" << result.softwareVersionIoController
|
<< "Software version IO controller:" << result.softwareVersionIoController
|
||||||
<< result.networkDeviceInfo;
|
<< result.address.toString();
|
||||||
|
|
||||||
|
|
||||||
// Done with this connection
|
// Done with this connection
|
||||||
|
|
@ -127,7 +117,7 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI
|
||||||
|
|
||||||
// Initializing...
|
// Initializing...
|
||||||
if (!connection->initialize()) {
|
if (!connection->initialize()) {
|
||||||
qCDebug(dcKostal()) << "Discovery: Unable to initialize connection on" << networkDeviceInfo.address().toString() << "Continue...";;
|
qCDebug(dcKostal()) << "Discovery: Unable to initialize connection on" << address.toString() << "Continue...";;
|
||||||
cleanupConnection(connection);
|
cleanupConnection(connection);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -135,14 +125,14 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI
|
||||||
// If we get any error...skip this host...
|
// If we get any error...skip this host...
|
||||||
connect(connection->modbusTcpMaster(), &ModbusTcpMaster::connectionErrorOccurred, this, [=](QModbusDevice::Error error){
|
connect(connection->modbusTcpMaster(), &ModbusTcpMaster::connectionErrorOccurred, this, [=](QModbusDevice::Error error){
|
||||||
if (error != QModbusDevice::NoError) {
|
if (error != QModbusDevice::NoError) {
|
||||||
qCDebug(dcKostal()) << "Discovery: Connection error on" << networkDeviceInfo.address().toString() << "Continue...";;
|
qCDebug(dcKostal()) << "Discovery: Connection error on" << address.toString() << "Continue...";;
|
||||||
cleanupConnection(connection);
|
cleanupConnection(connection);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// If check reachability failed...skip this host...
|
// If check reachability failed...skip this host...
|
||||||
connect(connection, &KostalModbusTcpConnection::checkReachabilityFailed, this, [=](){
|
connect(connection, &KostalModbusTcpConnection::checkReachabilityFailed, this, [=](){
|
||||||
qCDebug(dcKostal()) << "Discovery: Check reachability failed on" << networkDeviceInfo.address().toString() << "Continue...";;
|
qCDebug(dcKostal()) << "Discovery: Check reachability failed on" << address.toString() << "Continue...";;
|
||||||
cleanupConnection(connection);
|
cleanupConnection(connection);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -161,11 +151,15 @@ void KostalDiscovery::finishDiscovery()
|
||||||
{
|
{
|
||||||
qint64 durationMilliSeconds = QDateTime::currentMSecsSinceEpoch() - m_startDateTime.toMSecsSinceEpoch();
|
qint64 durationMilliSeconds = QDateTime::currentMSecsSinceEpoch() - m_startDateTime.toMSecsSinceEpoch();
|
||||||
|
|
||||||
|
// Fill in all network device infos we have
|
||||||
|
for (int i = 0; i < m_discoveryResults.count(); i++)
|
||||||
|
m_discoveryResults[i].networkDeviceInfo = m_networkDeviceInfos.get(m_discoveryResults.at(i).address);
|
||||||
|
|
||||||
// Cleanup any leftovers...we don't care any more
|
// Cleanup any leftovers...we don't care any more
|
||||||
foreach (KostalModbusTcpConnection *connection, m_connections)
|
foreach (KostalModbusTcpConnection *connection, m_connections)
|
||||||
cleanupConnection(connection);
|
cleanupConnection(connection);
|
||||||
|
|
||||||
qCInfo(dcKostal()) << "Discovery: Finished the discovery process. Found" << m_discoveryResults.count() << "Kostal Inverters in" << QTime::fromMSecsSinceStartOfDay(durationMilliSeconds).toString("mm:ss.zzz");
|
qCInfo(dcKostal()) << "Discovery: Finished the discovery process. Found" << m_discoveryResults.count()
|
||||||
|
<< "Kostal Inverters in" << QTime::fromMSecsSinceStartOfDay(durationMilliSeconds).toString("mm:ss.zzz");
|
||||||
emit discoveryFinished();
|
emit discoveryFinished();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
*
|
*
|
||||||
* Copyright 2013 - 2022, nymea GmbH
|
* Copyright 2013 - 2024, nymea GmbH
|
||||||
* Contact: contact@nymea.io
|
* Contact: contact@nymea.io
|
||||||
*
|
*
|
||||||
* This file is part of nymea.
|
* This file is part of nymea.
|
||||||
|
|
@ -50,6 +50,7 @@ public:
|
||||||
QString articleNumber;
|
QString articleNumber;
|
||||||
QString softwareVersionMainController;
|
QString softwareVersionMainController;
|
||||||
QString softwareVersionIoController;
|
QString softwareVersionIoController;
|
||||||
|
QHostAddress address;
|
||||||
NetworkDeviceInfo networkDeviceInfo;
|
NetworkDeviceInfo networkDeviceInfo;
|
||||||
} KostalDiscoveryResult;
|
} KostalDiscoveryResult;
|
||||||
|
|
||||||
|
|
@ -64,17 +65,14 @@ private:
|
||||||
NetworkDeviceDiscovery *m_networkDeviceDiscovery = nullptr;
|
NetworkDeviceDiscovery *m_networkDeviceDiscovery = nullptr;
|
||||||
quint16 m_port;
|
quint16 m_port;
|
||||||
quint16 m_modbusAddress;
|
quint16 m_modbusAddress;
|
||||||
|
|
||||||
QDateTime m_startDateTime;
|
QDateTime m_startDateTime;
|
||||||
|
|
||||||
NetworkDeviceInfos m_networkDeviceInfos;
|
NetworkDeviceInfos m_networkDeviceInfos;
|
||||||
NetworkDeviceInfos m_verifiedNetworkDeviceInfos;
|
|
||||||
|
|
||||||
QList<KostalModbusTcpConnection *> m_connections;
|
QList<KostalModbusTcpConnection *> m_connections;
|
||||||
|
|
||||||
QList<KostalDiscoveryResult> m_discoveryResults;
|
QList<KostalDiscoveryResult> m_discoveryResults;
|
||||||
|
|
||||||
void checkNetworkDevice(const NetworkDeviceInfo &networkDeviceInfo);
|
void checkNetworkDevice(const QHostAddress &address);
|
||||||
void cleanupConnection(KostalModbusTcpConnection *connection);
|
void cleanupConnection(KostalModbusTcpConnection *connection);
|
||||||
|
|
||||||
void finishDiscovery();
|
void finishDiscovery();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue