diff --git a/include/bonjour/DiscoveryRecord.h b/include/bonjour/DiscoveryRecord.h index 333030320..6c22462c9 100644 --- a/include/bonjour/DiscoveryRecord.h +++ b/include/bonjour/DiscoveryRecord.h @@ -35,7 +35,7 @@ class DiscoveryRecord { public: - enum Service { Unknown = 0, HyperHDR, WLED, PhilipsHue, Pico, ESP32_S2, ESP, SerialPort, REFRESH_ALL }; + enum Service { Unknown = 0, HyperHDR, WLED, PhilipsHue, HomeAssistant, Pico, ESP32_S2, ESP, SerialPort, REFRESH_ALL }; Service type; QString hostName; diff --git a/include/bonjour/DiscoveryWrapper.h b/include/bonjour/DiscoveryWrapper.h index f96e3e822..0e33aadbe 100644 --- a/include/bonjour/DiscoveryWrapper.h +++ b/include/bonjour/DiscoveryWrapper.h @@ -50,6 +50,7 @@ class DiscoveryWrapper : public QObject public slots: QList getPhilipsHUE(); + QList getHomeAssistant(); QList getWLED(); QList getHyperHDRServices(); QList getAllServices(); @@ -66,5 +67,5 @@ public slots: void cleanUp(QList& target); // contains all current active service sessions - QList _hyperhdrSessions, _wledDevices, _hueDevices, _espDevices, _picoDevices, _esp32s2Devices; + QList _hyperhdrSessions, _wledDevices, _hueDevices, _homeAssistantDevices, _espDevices, _picoDevices, _esp32s2Devices; }; diff --git a/sources/bonjour/BonjourServiceHelper.cpp b/sources/bonjour/BonjourServiceHelper.cpp index 485f67c94..e0ddcac36 100644 --- a/sources/bonjour/BonjourServiceHelper.cpp +++ b/sources/bonjour/BonjourServiceHelper.cpp @@ -38,7 +38,8 @@ BonjourServiceHelper::BonjourServiceHelper(BonjourServiceRegister* parent, QStri has_ipv6 = 0; _scanService = (1 << DiscoveryRecord::Service::HyperHDR) | (1 << DiscoveryRecord::Service::WLED) | - (1 << DiscoveryRecord::Service::PhilipsHue); + (1 << DiscoveryRecord::Service::PhilipsHue) | + (1 << DiscoveryRecord::Service::HomeAssistant); _running = true; @@ -506,7 +507,8 @@ int BonjourServiceHelper::service_mdns(QString hostname, QString serviceName, in { for (auto scanner :{ DiscoveryRecord::Service::HyperHDR, DiscoveryRecord::Service::WLED, - DiscoveryRecord::Service::PhilipsHue }) + DiscoveryRecord::Service::PhilipsHue, + DiscoveryRecord::Service::HomeAssistant }) { if (_scanService & (1 << scanner)) { diff --git a/sources/bonjour/BonjourServiceRegister.cpp b/sources/bonjour/BonjourServiceRegister.cpp index 7a3336795..6db762edd 100644 --- a/sources/bonjour/BonjourServiceRegister.cpp +++ b/sources/bonjour/BonjourServiceRegister.cpp @@ -89,6 +89,7 @@ void BonjourServiceRegister::requestToScanHandler(DiscoveryRecord::Service type) case (DiscoveryRecord::Service::HyperHDR): _helper->_scanService |= (1 << DiscoveryRecord::Service::HyperHDR); break; case (DiscoveryRecord::Service::WLED): _helper->_scanService |= (1 << DiscoveryRecord::Service::WLED); break; case (DiscoveryRecord::Service::PhilipsHue): _helper->_scanService |= (1 << DiscoveryRecord::Service::PhilipsHue); break; + case (DiscoveryRecord::Service::HomeAssistant): _helper->_scanService |= (1 << DiscoveryRecord::Service::HomeAssistant); break; default: break; } } @@ -102,6 +103,8 @@ void BonjourServiceRegister::messageFromFriendHandler(bool isExists, QString mdn type = DiscoveryRecord::Service::WLED; else if (mdnsString.indexOf(DiscoveryRecord::getmDnsHeader(DiscoveryRecord::Service::PhilipsHue)) >= 0) type = DiscoveryRecord::Service::PhilipsHue; + else if (mdnsString.indexOf(DiscoveryRecord::getmDnsHeader(DiscoveryRecord::Service::HomeAssistant)) >= 0) + type = DiscoveryRecord::Service::HomeAssistant; else if (mdnsString.indexOf(DiscoveryRecord::getmDnsHeader(DiscoveryRecord::Service::HyperHDR)) >= 0) type = DiscoveryRecord::Service::HyperHDR; diff --git a/sources/bonjour/DiscoveryRecord.cpp b/sources/bonjour/DiscoveryRecord.cpp index cd9d56cd8..a447d72db 100644 --- a/sources/bonjour/DiscoveryRecord.cpp +++ b/sources/bonjour/DiscoveryRecord.cpp @@ -33,6 +33,7 @@ const QString DiscoveryRecord::getmDnsHeader(Service service) switch (service) { case(Service::PhilipsHue): return QLatin1String("_hue._tcp"); break; + case(Service::HomeAssistant): return QLatin1String("_home-assistant._tcp"); break; case(Service::WLED): return QLatin1String("_wled._tcp"); break; case(Service::HyperHDR): return QLatin1String("_hyperhdr-http._tcp"); break; default: return "SERVICE_UNKNOWN"; @@ -49,6 +50,7 @@ const QString DiscoveryRecord::getName(Service _type) switch (_type) { case(Service::PhilipsHue): return "Hue bridge"; break; + case(Service::HomeAssistant): return "Home Assistant"; break; case(Service::WLED): return "WLED"; break; case(Service::HyperHDR): return "HyperHDR"; break; case(Service::Pico): return "Pico/RP2040"; break; diff --git a/sources/bonjour/DiscoveryWrapper.cpp b/sources/bonjour/DiscoveryWrapper.cpp index 24282c496..250147085 100644 --- a/sources/bonjour/DiscoveryWrapper.cpp +++ b/sources/bonjour/DiscoveryWrapper.cpp @@ -88,6 +88,15 @@ QList DiscoveryWrapper::getPhilipsHUE() return _hueDevices; } +QList DiscoveryWrapper::getHomeAssistant() +{ + cleanUp(_homeAssistantDevices); + + emit GlobalSignals::getInstance()->SignalDiscoveryRequestToScan(DiscoveryRecord::Service::HomeAssistant); + + return _homeAssistantDevices; +} + QList DiscoveryWrapper::getWLED() { cleanUp(_wledDevices); @@ -104,7 +113,7 @@ QList DiscoveryWrapper::getHyperHDRServices() QList DiscoveryWrapper::getAllServices() { - return _hyperhdrSessions + _esp32s2Devices + _espDevices + _hueDevices + _picoDevices + _wledDevices; + return _hyperhdrSessions + _esp32s2Devices + _espDevices + _hueDevices + _homeAssistantDevices + _picoDevices + _wledDevices; } void DiscoveryWrapper::requestServicesScan() @@ -113,6 +122,8 @@ void DiscoveryWrapper::requestServicesScan() emit GlobalSignals::getInstance()->SignalDiscoveryRequestToScan(DiscoveryRecord::Service::WLED); cleanUp(_hueDevices); emit GlobalSignals::getInstance()->SignalDiscoveryRequestToScan(DiscoveryRecord::Service::PhilipsHue); + cleanUp(_homeAssistantDevices); + emit GlobalSignals::getInstance()->SignalDiscoveryRequestToScan(DiscoveryRecord::Service::HomeAssistant); cleanUp(_hyperhdrSessions); emit GlobalSignals::getInstance()->SignalDiscoveryRequestToScan(DiscoveryRecord::Service::HyperHDR); @@ -172,6 +183,8 @@ void DiscoveryWrapper::signalDiscoveryEventHandler(DiscoveryRecord message) gotMessage(_wledDevices, message); else if (message.type == DiscoveryRecord::Service::PhilipsHue) gotMessage(_hueDevices, message); + else if (message.type == DiscoveryRecord::Service::HomeAssistant) + gotMessage(_homeAssistantDevices, message); else if (message.type == DiscoveryRecord::Service::Pico) gotMessage(_picoDevices, message); else if (message.type == DiscoveryRecord::Service::ESP32_S2)