diff --git a/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.cpp b/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.cpp index a6f9dcb0..09cddf8e 100644 --- a/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.cpp +++ b/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.cpp @@ -46,6 +46,7 @@ ZigbeeHardwareResourceImplementation::ZigbeeHardwareResourceImplementation(Zigbe ZigbeeHardwareResource(parent), m_zigbeeManager(zigbeeManager) { + connect(m_zigbeeManager, &ZigbeeManager::zigbeeNetworkChanged, this, &ZigbeeHardwareResourceImplementation::onZigbeeNetworkChanged); connect(m_zigbeeManager, &ZigbeeManager::nodeAdded, this, &ZigbeeHardwareResourceImplementation::onZigbeeNodeAdded); connect(m_zigbeeManager, &ZigbeeManager::nodeRemoved, this, &ZigbeeHardwareResourceImplementation::onZigbeeNodeRemoved); connect(m_zigbeeManager, &ZigbeeManager::availableChanged, this, &ZigbeeHardwareResourceImplementation::onZigbeeAvailableChanged); @@ -78,6 +79,17 @@ ZigbeeNode *ZigbeeHardwareResourceImplementation::getNode(const QUuid &networkUu return network->getZigbeeNode(extendedAddress); } +void ZigbeeHardwareResourceImplementation::removeNodeFromNetwork(const QUuid &networkUuid, ZigbeeNode *node) +{ + ZigbeeNetwork *network = m_zigbeeManager->zigbeeNetworks().value(networkUuid); + if (!network) { + qCWarning(dcZigbeeResource()) << "Can not remove note from network" << networkUuid << "because there is no network with this uuid."; + return; + } + + network->removeZigbeeNode(node->extendedAddress()); +} + ZigbeeNetwork::State ZigbeeHardwareResourceImplementation::networkState(const QUuid &networkUuid) { ZigbeeNetwork *network = m_zigbeeManager->zigbeeNetworks().value(networkUuid); @@ -141,6 +153,11 @@ void ZigbeeHardwareResourceImplementation::onZigbeeAvailableChanged(bool availab emit availableChanged(available); } +void ZigbeeHardwareResourceImplementation::onZigbeeNetworkChanged(ZigbeeNetwork *network) +{ + emit networkStateChanged(network->networkUuid(), network->state()); +} + void ZigbeeHardwareResourceImplementation::onZigbeeNodeAdded(const QUuid &networkUuid, ZigbeeNode *node) { qCDebug(dcZigbeeResource()) << node << "joined the network" << m_zigbeeManager->zigbeeNetworks().value(networkUuid); diff --git a/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.h b/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.h index 1d3afb72..fa84f6a0 100644 --- a/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.h +++ b/libnymea-core/hardware/zigbee/zigbeehardwareresourceimplementation.h @@ -51,6 +51,8 @@ public: void registerHandler(ZigbeeHandler *handler, HandlerType type = HandlerTypeVendor) override; ZigbeeNode* getNode(const QUuid &networkUuid, const ZigbeeAddress &extendedAddress) override; + void removeNodeFromNetwork(const QUuid &networkUuid, ZigbeeNode *node) override; + ZigbeeNetwork::State networkState(const QUuid &networkUuid) override; public slots: @@ -62,6 +64,7 @@ protected: private slots: void onZigbeeAvailableChanged(bool available); + void onZigbeeNetworkChanged(ZigbeeNetwork *network); void onZigbeeNodeAdded(const QUuid &networkUuid, ZigbeeNode *node); void onZigbeeNodeRemoved(const QUuid &networkUuid, ZigbeeNode *node); diff --git a/libnymea/hardware/zigbee/zigbeehardwareresource.h b/libnymea/hardware/zigbee/zigbeehardwareresource.h index 157bf408..dcbe5e6a 100644 --- a/libnymea/hardware/zigbee/zigbeehardwareresource.h +++ b/libnymea/hardware/zigbee/zigbeehardwareresource.h @@ -56,6 +56,7 @@ public: virtual void registerHandler(ZigbeeHandler *handler, HandlerType type = HandlerTypeVendor) = 0; virtual ZigbeeNode* getNode(const QUuid &networkUuid, const ZigbeeAddress &extendedAddress) = 0; + virtual void removeNodeFromNetwork(const QUuid &networkUuid, ZigbeeNode *node) = 0; virtual ZigbeeNetwork::State networkState(const QUuid &networkUuid) = 0;