From 083176f5a6d04fabba5dd2ce7ef7646bd0ae5850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Tue, 9 Jun 2026 17:20:31 +0200 Subject: [PATCH] goe: Improve parallel discovery and IP assignment --- goecharger/goediscovery.cpp | 4 ++-- goecharger/goediscovery.h | 4 ++-- goecharger/integrationplugingoecharger.cpp | 17 ++++++++++++----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/goecharger/goediscovery.cpp b/goecharger/goediscovery.cpp index 19060ce2..30d4603c 100644 --- a/goecharger/goediscovery.cpp +++ b/goecharger/goediscovery.cpp @@ -167,7 +167,7 @@ void GoeDiscovery::checkHostAddressApiV1(const QHostAddress &address) GoeDiscovery::Result result; result.serialNumber = responseMap.value("sse").toString(); result.firmwareVersion = responseMap.value("fwv").toString(); - //result.networkDeviceInfo = networkDeviceInfo; + result.address = address; result.apiAvailableV1 = true; m_discoveryResults[address] = result; } @@ -214,7 +214,7 @@ void GoeDiscovery::checkHostAddressApiV2(const QHostAddress &address) result.manufacturer = responseMap.value("oem").toString(); result.product = responseMap.value("typ").toString(); result.friendlyName = responseMap.value("fna").toString(); - //result.networkDeviceInfo = networkDeviceInfo; + result.address = address; result.discoveryMethod = DiscoveryMethodNetwork; result.apiAvailableV2 = true; diff --git a/goecharger/goediscovery.h b/goecharger/goediscovery.h index 3693f214..e3edfc5d 100644 --- a/goecharger/goediscovery.h +++ b/goecharger/goediscovery.h @@ -50,9 +50,9 @@ public: QString friendlyName; QString serialNumber; QString firmwareVersion; - DiscoveryMethod discoveryMethod; + DiscoveryMethod discoveryMethod = DiscoveryMethodNetwork; NetworkDeviceInfo networkDeviceInfo; // Network discovery - QHostAddress address; // ZeroConf + QHostAddress address; bool apiAvailableV1 = false; bool apiAvailableV2 = false; } Result; diff --git a/goecharger/integrationplugingoecharger.cpp b/goecharger/integrationplugingoecharger.cpp index 26c1b051..25a3683f 100644 --- a/goecharger/integrationplugingoecharger.cpp +++ b/goecharger/integrationplugingoecharger.cpp @@ -82,12 +82,13 @@ void IntegrationPluginGoECharger::discoverThings(ThingDiscoveryInfo *info) ParamList params; QString description = "Serial: " + result.serialNumber + ", V: " + result.firmwareVersion; - if (result.discoveryMethod == GoeDiscovery::DiscoveryMethodNetwork) { + if (result.networkDeviceInfo.isValid()) { params << Param(goeHomeThingMacAddressParamTypeId, result.networkDeviceInfo.thingParamValueMacAddress()); params << Param(goeHomeThingHostNameParamTypeId, result.networkDeviceInfo.thingParamValueHostName()); params << Param(goeHomeThingAddressParamTypeId, result.networkDeviceInfo.thingParamValueAddress()); description.append(" - " + result.networkDeviceInfo.address().toString()); - } else { + } else if (!result.address.isNull()) { + params << Param(goeHomeThingAddressParamTypeId, result.address.toString()); description.append(" - " + result.address.toString()); } @@ -575,8 +576,15 @@ QNetworkRequest IntegrationPluginGoECharger::buildStatusRequest(Thing *thing, bo QHostAddress IntegrationPluginGoECharger::getHostAddress(Thing *thing) { - if (m_monitors.contains(thing)) - return m_monitors.value(thing)->networkDeviceInfo().address(); + if (m_monitors.contains(thing)) { + QHostAddress address = m_monitors.value(thing)->networkDeviceInfo().address(); + if (!address.isNull()) + return address; + } + + QHostAddress address(thing->paramValue(goeHomeThingAddressParamTypeId).toString()); + if (!address.isNull()) + return address; foreach (const ZeroConfServiceEntry &serviceEntry, m_serviceBrowser->serviceEntries()) { if (GoeDiscovery::isGoeCharger(serviceEntry) && serviceEntry.protocol() == QAbstractSocket::IPv4Protocol) { @@ -1714,4 +1722,3 @@ void IntegrationPluginGoECharger::markAsDisconnected(Thing *thing) thing->setStateValue("currentPowerPhaseC", 0); thing->setStateValue("frequency", 0); } -