Implement node changed notifications for zigbee JSONRPC API

pull/365/head
Simon Stürz 2021-05-13 13:20:41 +02:00 committed by Michael Zanetti
parent eef44c78c6
commit 81f9889178
4 changed files with 54 additions and 2 deletions

View File

@ -252,6 +252,7 @@ ZigbeeHandler::ZigbeeHandler(ZigbeeManager *zigbeeManager, QObject *parent) :
connect(m_zigbeeManager, &ZigbeeManager::nodeJoined, this, &ZigbeeHandler::onNodeJoined);
connect(m_zigbeeManager, &ZigbeeManager::nodeAdded, this, &ZigbeeHandler::onNodeAdded);
connect(m_zigbeeManager, &ZigbeeManager::nodeChanged, this, &ZigbeeHandler::onNodeChanged);
connect(m_zigbeeManager, &ZigbeeManager::nodeRemoved, this, &ZigbeeHandler::onNodeRemoved);
}
@ -497,6 +498,11 @@ void ZigbeeHandler::onNodeJoined(const QUuid &networkUuid, ZigbeeNode *node)
void ZigbeeHandler::onNodeAdded(const QUuid &networkUuid, ZigbeeNode *node)
{
// Note: we emit the node changed signal here, since the node has been added internally after initialization.
onNodeChanged(networkUuid, node);
}
void ZigbeeHandler::onNodeChanged(const QUuid &networkUuid, ZigbeeNode *node)
{
QVariantMap params;
params.insert("networkUuid", networkUuid);
params.insert("zigbeeNode", packNode(node));

View File

@ -70,6 +70,7 @@ private:
private slots:
void onNodeJoined(const QUuid &networkUuid, ZigbeeNode *node);
void onNodeAdded(const QUuid &networkUuid, ZigbeeNode *node);
void onNodeChanged(const QUuid &networkUuid, ZigbeeNode *node);
void onNodeRemoved(const QUuid &networkUuid, ZigbeeNode *node);
signals:

View File

@ -205,8 +205,8 @@ ZigbeeManager::ZigbeeError ZigbeeManager::removeZigbeeNetwork(const QUuid &netwo
settings.beginGroup("ZigbeeNetworks");
settings.beginGroup(network->networkUuid().toString());
settings.remove("");
settings.endGroup();
settings.endGroup();
settings.endGroup(); // networkUuid
settings.endGroup(); // ZigbeeNetworks
qCDebug(dcZigbee()) << "Network removed successfully";
return ZigbeeManager::ZigbeeErrorNoError;
@ -547,7 +547,9 @@ void ZigbeeManager::addNetwork(ZigbeeNetwork *network)
connect(network, &ZigbeeNetwork::nodeJoined, this, [this, network](ZigbeeNode *node){
// The node has joined but is still initializing. Once the node has been initialized by the stack, the node added signal will be emitted.
qCDebug(dcZigbee()) << "Node joined the network" << network->networkUuid().toString() << node;
emit nodeJoined(network->networkUuid(), node);
setupNodeSignals(node);
});
connect(network, &ZigbeeNetwork::firmwareVersionChanged, this, [this, network](const QString &firmwareVersion){
@ -589,6 +591,10 @@ void ZigbeeManager::addNetwork(ZigbeeNetwork *network)
}
}
}
foreach (ZigbeeNode *node, network->nodes()) {
setupNodeSignals(node);
}
}
ZigbeeAdapter ZigbeeManager::convertUartAdapterToAdapter(const ZigbeeUartAdapter &uartAdapter)
@ -634,5 +640,42 @@ void ZigbeeManager::evaluateZigbeeAvailable()
emit availableChanged(m_available);
}
void ZigbeeManager::setupNodeSignals(ZigbeeNode *node)
{
// Connect signals while joining for initializing
connect(node, &ZigbeeNode::shortAddressChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
connect(node, &ZigbeeNode::stateChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
connect(node, &ZigbeeNode::manufacturerNameChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
connect(node, &ZigbeeNode::modelNameChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
connect(node, &ZigbeeNode::versionChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
connect(node, &ZigbeeNode::lqiChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
connect(node, &ZigbeeNode::lastSeenChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
connect(node, &ZigbeeNode::reachableChanged, this, [=](){
emit nodeChanged(node->networkUuid(), node);
});
}
}

View File

@ -114,6 +114,7 @@ private:
ZigbeeAdapter convertUartAdapterToAdapter(const ZigbeeUartAdapter &uartAdapter);
void evaluateZigbeeAvailable();
void setupNodeSignals(ZigbeeNode *node);
signals:
void availableChanged(bool available);
@ -127,6 +128,7 @@ signals:
void nodeJoined(const QUuid &networkUuid, ZigbeeNode *node);
void nodeAdded(const QUuid &networkUuid, ZigbeeNode *node);
void nodeChanged(const QUuid &networkUuid, ZigbeeNode *node);
void nodeRemoved(const QUuid &networkUuid, ZigbeeNode *node);
};