Clean up discovery and check if we need a grace period after discovery has finished

master
Simon Stürz 2022-08-08 08:02:50 +02:00
parent 9d3bb72849
commit 462535e359
2 changed files with 19 additions and 16 deletions

View File

@ -164,7 +164,7 @@ void IntegrationPluginKostal::setupThing(ThingSetupInfo *info)
thing->setStateValue(kostalMeterCurrentPowerStateTypeId, powerMeterTotalActivePower);
});
// TODO: set toal energy consumed/produced
// TODO: set total energy consumed/produced
connect(kostalConnection, &KostalModbusTcpConnection::powerMeterTotalActivePowerChanged, this, [thing](float powerMeterTotalActivePower){
thing->setStateValue(kostalMeterCurrentPowerStateTypeId, powerMeterTotalActivePower);

View File

@ -37,12 +37,7 @@ KostalDiscovery::KostalDiscovery(NetworkDeviceDiscovery *networkDeviceDiscovery,
m_port{port},
m_modbusAddress{modbusAddress}
{
m_gracePeriodTimer.setSingleShot(true);
m_gracePeriodTimer.setInterval(3000);
connect(&m_gracePeriodTimer, &QTimer::timeout, this, [this](){
qCDebug(dcKostal()) << "Discovery: SunnyWebBox: Grace period timer triggered.";
finishDiscovery();
});
}
void KostalDiscovery::startDiscovery()
@ -51,9 +46,9 @@ void KostalDiscovery::startDiscovery()
NetworkDeviceDiscoveryReply *discoveryReply = m_networkDeviceDiscovery->discover();
// Check any already discovered infos..
foreach (const NetworkDeviceInfo &networkDeviceInfo, discoveryReply->networkDeviceInfos()) {
// FIXME: this is not required any more once each discovery request receives it's own object getting the added signal for every info
foreach (const NetworkDeviceInfo &networkDeviceInfo, discoveryReply->networkDeviceInfos())
checkNetworkDevice(networkDeviceInfo);
}
// Imedialty check any new device gets discovered
connect(discoveryReply, &NetworkDeviceDiscoveryReply::networkDeviceInfoAdded, this, &KostalDiscovery::checkNetworkDevice);
@ -62,15 +57,25 @@ void KostalDiscovery::startDiscovery()
connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, this, [=](){
qCDebug(dcKostal()) << "Discovery: Network discovery finished. Found" << discoveryReply->networkDeviceInfos().count() << "network devices";
m_networkDeviceInfos = discoveryReply->networkDeviceInfos();
qCDebug(dcKostal()) << "Discovery: Network discovery finished. Start finishing discovery...";
// Send a report request to nework device info not sent already...
bool networkdevicesLeft = false;
foreach (const NetworkDeviceInfo &networkDeviceInfo, m_networkDeviceInfos) {
if (!m_verifiedNetworkDeviceInfos.contains(networkDeviceInfo)) {
networkdevicesLeft = true;
checkNetworkDevice(networkDeviceInfo);
}
}
m_gracePeriodTimer.start();
if (networkdevicesLeft) {
// Give the last connections added right before the network discovery finished a chance to check the device...
QTimer::singleShot(3000, this, [this](){
qCDebug(dcKostal()) << "Discovery: Grace period timer triggered.";
finishDiscovery();
});
} else {
finishDiscovery();
}
});
}
@ -107,6 +112,7 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI
cleanupConnection(connection);
return;
}
KostalDiscoveryResult result;
result.productName = connection->productName();
result.manufacturerName = connection->inverterManufacturer();
@ -129,12 +135,11 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI
cleanupConnection(connection);
});
// Initializing...
if (!connection->initialize()) {
qCDebug(dcKostal()) << "Discovery: Unable to initialize connection on" << networkDeviceInfo.address().toString() << "Continue...";;
cleanupConnection(connection);
}
// Initializing...
});
// If we get any error...skip this host...
@ -170,9 +175,7 @@ void KostalDiscovery::finishDiscovery()
foreach (KostalModbusTcpConnection *connection, m_connections)
cleanupConnection(connection);
qCInfo(dcKostal()) << "Discovery: Finished the discovery process. Found" << m_discoveryResults.count()
<< "Kostal Inverters in" << QTime::fromMSecsSinceStartOfDay(durationMilliSeconds).toString("mm:ss.zzz");
m_gracePeriodTimer.stop();
qCInfo(dcKostal()) << "Discovery: Finished the discovery process. Found" << m_discoveryResults.count() << "Kostal Inverters in" << QTime::fromMSecsSinceStartOfDay(durationMilliSeconds).toString("mm:ss.zzz");
emit discoveryFinished();
}