goe: Improve parallel discovery and IP assignment

This commit is contained in:
Simon Stürz 2026-06-09 17:20:31 +02:00
parent 1da9322e81
commit 083176f5a6
3 changed files with 16 additions and 9 deletions

View File

@ -167,7 +167,7 @@ void GoeDiscovery::checkHostAddressApiV1(const QHostAddress &address)
GoeDiscovery::Result result; GoeDiscovery::Result result;
result.serialNumber = responseMap.value("sse").toString(); result.serialNumber = responseMap.value("sse").toString();
result.firmwareVersion = responseMap.value("fwv").toString(); result.firmwareVersion = responseMap.value("fwv").toString();
//result.networkDeviceInfo = networkDeviceInfo; result.address = address;
result.apiAvailableV1 = true; result.apiAvailableV1 = true;
m_discoveryResults[address] = result; m_discoveryResults[address] = result;
} }
@ -214,7 +214,7 @@ void GoeDiscovery::checkHostAddressApiV2(const QHostAddress &address)
result.manufacturer = responseMap.value("oem").toString(); result.manufacturer = responseMap.value("oem").toString();
result.product = responseMap.value("typ").toString(); result.product = responseMap.value("typ").toString();
result.friendlyName = responseMap.value("fna").toString(); result.friendlyName = responseMap.value("fna").toString();
//result.networkDeviceInfo = networkDeviceInfo; result.address = address;
result.discoveryMethod = DiscoveryMethodNetwork; result.discoveryMethod = DiscoveryMethodNetwork;
result.apiAvailableV2 = true; result.apiAvailableV2 = true;

View File

@ -50,9 +50,9 @@ public:
QString friendlyName; QString friendlyName;
QString serialNumber; QString serialNumber;
QString firmwareVersion; QString firmwareVersion;
DiscoveryMethod discoveryMethod; DiscoveryMethod discoveryMethod = DiscoveryMethodNetwork;
NetworkDeviceInfo networkDeviceInfo; // Network discovery NetworkDeviceInfo networkDeviceInfo; // Network discovery
QHostAddress address; // ZeroConf QHostAddress address;
bool apiAvailableV1 = false; bool apiAvailableV1 = false;
bool apiAvailableV2 = false; bool apiAvailableV2 = false;
} Result; } Result;

View File

@ -82,12 +82,13 @@ void IntegrationPluginGoECharger::discoverThings(ThingDiscoveryInfo *info)
ParamList params; ParamList params;
QString description = "Serial: " + result.serialNumber + ", V: " + result.firmwareVersion; 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(goeHomeThingMacAddressParamTypeId, result.networkDeviceInfo.thingParamValueMacAddress());
params << Param(goeHomeThingHostNameParamTypeId, result.networkDeviceInfo.thingParamValueHostName()); params << Param(goeHomeThingHostNameParamTypeId, result.networkDeviceInfo.thingParamValueHostName());
params << Param(goeHomeThingAddressParamTypeId, result.networkDeviceInfo.thingParamValueAddress()); params << Param(goeHomeThingAddressParamTypeId, result.networkDeviceInfo.thingParamValueAddress());
description.append(" - " + result.networkDeviceInfo.address().toString()); description.append(" - " + result.networkDeviceInfo.address().toString());
} else { } else if (!result.address.isNull()) {
params << Param(goeHomeThingAddressParamTypeId, result.address.toString());
description.append(" - " + result.address.toString()); description.append(" - " + result.address.toString());
} }
@ -575,8 +576,15 @@ QNetworkRequest IntegrationPluginGoECharger::buildStatusRequest(Thing *thing, bo
QHostAddress IntegrationPluginGoECharger::getHostAddress(Thing *thing) QHostAddress IntegrationPluginGoECharger::getHostAddress(Thing *thing)
{ {
if (m_monitors.contains(thing)) if (m_monitors.contains(thing)) {
return m_monitors.value(thing)->networkDeviceInfo().address(); 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()) { foreach (const ZeroConfServiceEntry &serviceEntry, m_serviceBrowser->serviceEntries()) {
if (GoeDiscovery::isGoeCharger(serviceEntry) && serviceEntry.protocol() == QAbstractSocket::IPv4Protocol) { if (GoeDiscovery::isGoeCharger(serviceEntry) && serviceEntry.protocol() == QAbstractSocket::IPv4Protocol) {
@ -1714,4 +1722,3 @@ void IntegrationPluginGoECharger::markAsDisconnected(Thing *thing)
thing->setStateValue("currentPowerPhaseC", 0); thing->setStateValue("currentPowerPhaseC", 0);
thing->setStateValue("frequency", 0); thing->setStateValue("frequency", 0);
} }