From eee810aa4d6454c894f28c4a38bf49ab7efc0cbf Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 21 Oct 2021 18:48:55 +0200 Subject: [PATCH] Add api to set the zigbee channel during network setup --- libnymea-core/jsonrpc/zigbeehandler.cpp | 12 +++++++++++- libnymea-core/zigbee/zigbeemanager.cpp | 2 +- libnymea-core/zigbee/zigbeemanager.h | 3 ++- nymea.pro | 2 +- server/server.pro | 3 +++ tests/auto/api.json | 6 ++++-- 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/libnymea-core/jsonrpc/zigbeehandler.cpp b/libnymea-core/jsonrpc/zigbeehandler.cpp index 15453b96..eab8bb7c 100644 --- a/libnymea-core/jsonrpc/zigbeehandler.cpp +++ b/libnymea-core/jsonrpc/zigbeehandler.cpp @@ -128,6 +128,7 @@ ZigbeeHandler::ZigbeeHandler(ZigbeeManager *zigbeeManager, QObject *parent) : params.insert("serialPort", enumValueName(String)); params.insert("baudRate", enumValueName(Uint)); params.insert("backend", enumValueName(String)); + params.insert("o:channelMask", enumValueName(Uint)); returns.insert("zigbeeError", enumRef()); returns.insert("o:networkUuid", enumValueName(Uuid)); registerMethod("AddNetwork", description, params, returns); @@ -300,7 +301,16 @@ JsonReply *ZigbeeHandler::AddNetwork(const QVariantMap ¶ms) return createReply(returnMap); } - QPair result = m_zigbeeManager->createZigbeeNetwork(serialPort, baudRate, ZigbeeAdapter::backendNames().key(backendString)); + ZigbeeChannelMask channelMask = ZigbeeChannelMask::ChannelConfigurationAllChannels; + if (params.contains("channelMask")) { + channelMask = params.value("channelMask").toUInt() & ZigbeeChannelMask::ChannelConfigurationAllChannels; + if (channelMask == ZigbeeChannelMask::ChannelConfigurationNoChannel) { + returnMap.insert("zigbeeError", enumValueName(ZigbeeManager::ZigbeeErrorInvalidChannel)); + return createReply(returnMap); + } + } + + QPair result = m_zigbeeManager->createZigbeeNetwork(serialPort, baudRate, ZigbeeAdapter::backendNames().key(backendString), channelMask); if (result.first == ZigbeeManager::ZigbeeErrorNoError) { returnMap.insert("networkUuid", result.second); } diff --git a/libnymea-core/zigbee/zigbeemanager.cpp b/libnymea-core/zigbee/zigbeemanager.cpp index beea7a1e..3b5a68fe 100644 --- a/libnymea-core/zigbee/zigbeemanager.cpp +++ b/libnymea-core/zigbee/zigbeemanager.cpp @@ -149,7 +149,7 @@ QHash ZigbeeManager::zigbeeNetworks() const QPair ZigbeeManager::createZigbeeNetwork(const QString &serialPort, uint baudRate, ZigbeeAdapter::ZigbeeBackendType backendType, ZigbeeChannelMask channelMask) { - qCDebug(dcZigbee()) << "Start creating network for" << serialPort << baudRate << backendType << channelMask; + qCDebug(dcZigbee()) << "Creating network for" << serialPort << baudRate << backendType << channelMask; // Make sure we don't have aleardy a network for this adapter foreach (ZigbeeNetwork *existingNetwork, m_zigbeeNetworks.values()) { diff --git a/libnymea-core/zigbee/zigbeemanager.h b/libnymea-core/zigbee/zigbeemanager.h index ce59aeef..b3cae493 100644 --- a/libnymea-core/zigbee/zigbeemanager.h +++ b/libnymea-core/zigbee/zigbeemanager.h @@ -62,7 +62,8 @@ public: ZigbeeErrorNetworkOffline, ZigbeeErrorUnknownBackend, ZigbeeErrorNodeNotFound, - ZigbeeErrorForbidden + ZigbeeErrorForbidden, + ZigbeeErrorInvalidChannel, }; Q_ENUM(ZigbeeError) diff --git a/nymea.pro b/nymea.pro index 0794868b..d7a63840 100644 --- a/nymea.pro +++ b/nymea.pro @@ -5,7 +5,7 @@ NYMEA_VERSION_STRING=$$system('dpkg-parsechangelog | sed -n -e "s/^Version: //p" # define protocol versions JSON_PROTOCOL_VERSION_MAJOR=5 -JSON_PROTOCOL_VERSION_MINOR=7 +JSON_PROTOCOL_VERSION_MINOR=8 JSON_PROTOCOL_VERSION="$${JSON_PROTOCOL_VERSION_MAJOR}.$${JSON_PROTOCOL_VERSION_MINOR}" LIBNYMEA_API_VERSION_MAJOR=7 LIBNYMEA_API_VERSION_MINOR=2 diff --git a/server/server.pro b/server/server.pro index a4b21100..a952594a 100644 --- a/server/server.pro +++ b/server/server.pro @@ -10,6 +10,9 @@ INSTALLS += target QT += sql xml websockets bluetooth dbus network +CONFIG += link_pkgconfig +PKGCONFIG += nymea-zigbee + LIBS += -L$$top_builddir/libnymea/ -lnymea \ -L$$top_builddir/libnymea-core -lnymea-core \ -lnymea-remoteproxyclient diff --git a/tests/auto/api.json b/tests/auto/api.json index 9d6b39ad..33368d35 100644 --- a/tests/auto/api.json +++ b/tests/auto/api.json @@ -1,4 +1,4 @@ -5.7 +5.8 { "enums": { "BasicType": [ @@ -411,7 +411,8 @@ "ZigbeeErrorNetworkOffline", "ZigbeeErrorUnknownBackend", "ZigbeeErrorNodeNotFound", - "ZigbeeErrorForbidden" + "ZigbeeErrorForbidden", + "ZigbeeErrorInvalidChannel" ], "ZigbeeNetworkState": [ "ZigbeeNetworkStateOffline", @@ -2119,6 +2120,7 @@ "params": { "backend": "String", "baudRate": "Uint", + "o:channelMask": "Uint", "serialPort": "String" }, "returns": {