Continue node api development

This commit is contained in:
Simon Stürz 2021-04-26 13:29:27 +02:00 committed by Michael Zanetti
parent a0169b179d
commit eef44c78c6
4 changed files with 541 additions and 476 deletions

View File

@ -199,6 +199,27 @@ ZigbeeHandler::ZigbeeHandler(ZigbeeManager *zigbeeManager, QObject *parent) :
returns.insert("zigbeeError", enumRef<ZigbeeManager::ZigbeeError>()); returns.insert("zigbeeError", enumRef<ZigbeeManager::ZigbeeError>());
registerMethod("RemoveNode", description, params, returns); registerMethod("RemoveNode", description, params, returns);
// NodeAdded
params.clear();
description = "Emitted whenever a new ZigBee node has joined the network with the given \'networkUuid\'.";
params.insert("networkUuid", enumValueName(Uuid));
params.insert("zigbeeNode", objectRef("ZigbeeNode"));
registerNotification("NodeAdded", description, params);
// NodeRemoved
params.clear();
description = "Emitted whenever a ZigBee node has removed from the network with the given \'networkUuid\'.";
params.insert("networkUuid", enumValueName(Uuid));
params.insert("zigbeeNode", objectRef("ZigbeeNode"));
registerNotification("NodeRemoved", description, params);
// NodeChanged
params.clear();
description = "Emitted whenever a ZigBee node has changed.";
params.insert("networkUuid", enumValueName(Uuid));
params.insert("zigbeeNode", objectRef("ZigbeeNode"));
registerNotification("NodeChanged", description, params);
connect(m_zigbeeManager, &ZigbeeManager::availableAdapterAdded, this, [this](const ZigbeeAdapter &adapter){ connect(m_zigbeeManager, &ZigbeeManager::availableAdapterAdded, this, [this](const ZigbeeAdapter &adapter){
QVariantMap params; QVariantMap params;
params.insert("adapter", pack(adapter)); params.insert("adapter", pack(adapter));
@ -228,6 +249,11 @@ ZigbeeHandler::ZigbeeHandler(ZigbeeManager *zigbeeManager, QObject *parent) :
params.insert("networkUuid", networkUuid); params.insert("networkUuid", networkUuid);
emit NetworkRemoved(params); emit NetworkRemoved(params);
}); });
connect(m_zigbeeManager, &ZigbeeManager::nodeJoined, this, &ZigbeeHandler::onNodeJoined);
connect(m_zigbeeManager, &ZigbeeManager::nodeAdded, this, &ZigbeeHandler::onNodeAdded);
connect(m_zigbeeManager, &ZigbeeManager::nodeRemoved, this, &ZigbeeHandler::onNodeRemoved);
} }
QString ZigbeeHandler::name() const QString ZigbeeHandler::name() const
@ -241,9 +267,9 @@ JsonReply *ZigbeeHandler::GetAvailableBackends(const QVariantMap &params)
QVariantMap returnMap; QVariantMap returnMap;
QVariantList backendsList; QVariantList backendsList;
foreach (const QString &backendName, ZigbeeAdapter::backendNames().values()) foreach (const QString &backendName, ZigbeeAdapter::backendNames().values()) {
backendsList << backendName; backendsList << backendName;
}
returnMap.insert("backends", backendsList); returnMap.insert("backends", backendsList);
return createReply(returnMap); return createReply(returnMap);
} }
@ -460,4 +486,29 @@ QVariantMap ZigbeeHandler::packNode(ZigbeeNode *node)
return nodeMap; return nodeMap;
} }
void ZigbeeHandler::onNodeJoined(const QUuid &networkUuid, ZigbeeNode *node)
{
QVariantMap params;
params.insert("networkUuid", networkUuid);
params.insert("zigbeeNode", packNode(node));
emit NodeAdded(params);
}
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.
QVariantMap params;
params.insert("networkUuid", networkUuid);
params.insert("zigbeeNode", packNode(node));
emit NodeChanged(params);
}
void ZigbeeHandler::onNodeRemoved(const QUuid &networkUuid, ZigbeeNode *node)
{
QVariantMap params;
params.insert("networkUuid", networkUuid);
params.insert("zigbeeNode", packNode(node));
emit NodeRemoved(params);
}
} }

View File

@ -67,12 +67,19 @@ public:
private: private:
ZigbeeManager *m_zigbeeManager = nullptr; ZigbeeManager *m_zigbeeManager = nullptr;
private slots:
void onNodeJoined(const QUuid &networkUuid, ZigbeeNode *node);
void onNodeAdded(const QUuid &networkUuid, ZigbeeNode *node);
void onNodeRemoved(const QUuid &networkUuid, ZigbeeNode *node);
signals: signals:
void AdapterAdded(const QVariantMap &params); void AdapterAdded(const QVariantMap &params);
void AdapterRemoved(const QVariantMap &params); void AdapterRemoved(const QVariantMap &params);
void NetworkAdded(const QVariantMap &params); void NetworkAdded(const QVariantMap &params);
void NetworkRemoved(const QVariantMap &params); void NetworkRemoved(const QVariantMap &params);
void NetworkChanged(const QVariantMap &params); void NetworkChanged(const QVariantMap &params);
void NodeAdded(const QVariantMap &params); void NodeAdded(const QVariantMap &params);
void NodeRemoved(const QVariantMap &params); void NodeRemoved(const QVariantMap &params);
void NodeChanged(const QVariantMap &params); void NodeChanged(const QVariantMap &params);

View File

@ -343,19 +343,19 @@ void ZigbeeManager::loadZigbeeNetworks()
void ZigbeeManager::checkPlatformConfiguration() void ZigbeeManager::checkPlatformConfiguration()
{ {
/* Example platform configurations /* Example platform configurations
* *
* serialPort=/dev/ttymxc2 * serialPort=/dev/ttymxc2
* baudRate=115200 * baudRate=115200
* backend=nxp * backend=nxp
* autoSetup=false * autoSetup=false
* *
* serialPort=/dev/ttyS0 * serialPort=/dev/ttyS0
* baudRate=38400 * baudRate=38400
* backend=deconz * backend=deconz
* autoSetup=false * autoSetup=false
* *
* autoSetup=true * autoSetup=true
*/ */
QFileInfo platformConfigurationFileInfo(NymeaSettings::settingsPath() + QDir::separator() + "zigbee-platform.conf"); QFileInfo platformConfigurationFileInfo(NymeaSettings::settingsPath() + QDir::separator() + "zigbee-platform.conf");
if (platformConfigurationFileInfo.exists()) { if (platformConfigurationFileInfo.exists()) {
@ -544,6 +544,12 @@ void ZigbeeManager::addNetwork(ZigbeeNetwork *network)
emit nodeRemoved(network->networkUuid(), node); emit nodeRemoved(network->networkUuid(), node);
}); });
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);
});
connect(network, &ZigbeeNetwork::firmwareVersionChanged, this, [this, network](const QString &firmwareVersion){ connect(network, &ZigbeeNetwork::firmwareVersionChanged, this, [this, network](const QString &firmwareVersion){
qCDebug(dcZigbee()) << "Network adapter firmware version changed for" << network << firmwareVersion; qCDebug(dcZigbee()) << "Network adapter firmware version changed for" << network << firmwareVersion;
emit zigbeeNetworkChanged(network); emit zigbeeNetworkChanged(network);

View File

@ -125,6 +125,7 @@ signals:
void zigbeeNetworkRemoved(const QUuid networkUuid); void zigbeeNetworkRemoved(const QUuid networkUuid);
void zigbeeNetworkChanged(ZigbeeNetwork *zigbeeNetwork); void zigbeeNetworkChanged(ZigbeeNetwork *zigbeeNetwork);
void nodeJoined(const QUuid &networkUuid, ZigbeeNode *node);
void nodeAdded(const QUuid &networkUuid, ZigbeeNode *node); void nodeAdded(const QUuid &networkUuid, ZigbeeNode *node);
void nodeRemoved(const QUuid &networkUuid, ZigbeeNode *node); void nodeRemoved(const QUuid &networkUuid, ZigbeeNode *node);
}; };