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;
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;

View File

@ -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;

View File

@ -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);
}