mirror of https://github.com/nymea/nymea.git
Implement node changed notifications for zigbee JSONRPC API
parent
eef44c78c6
commit
81f9889178
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue