From ae18e793e60c250f79ed69b175f77a348f0bc816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Thu, 26 Nov 2020 13:13:30 +0100 Subject: [PATCH] Add multistate output cluster --- libnymea-zigbee/libnymea-zigbee.pro | 2 + .../general/zigbeeclustermultistateinput.h | 3 +- .../general/zigbeeclustermultistateoutput.cpp | 41 ++++++++++++ .../general/zigbeeclustermultistateoutput.h | 64 +++++++++++++++++++ libnymea-zigbee/zigbeenodeendpoint.cpp | 2 + libnymea-zigbee/zigbeenodeendpoint.h | 1 + 6 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.cpp create mode 100644 libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.h diff --git a/libnymea-zigbee/libnymea-zigbee.pro b/libnymea-zigbee/libnymea-zigbee.pro index f722533..13fa5c7 100644 --- a/libnymea-zigbee/libnymea-zigbee.pro +++ b/libnymea-zigbee/libnymea-zigbee.pro @@ -27,6 +27,7 @@ SOURCES += \ zcl/general/zigbeeclusteridentify.cpp \ zcl/general/zigbeeclusterlevelcontrol.cpp \ zcl/general/zigbeeclustermultistateinput.cpp \ + zcl/general/zigbeeclustermultistateoutput.cpp \ zcl/general/zigbeeclusteronoff.cpp \ zcl/general/zigbeeclusterpowerconfiguration.cpp \ zcl/hvac/zigbeeclusterthermostat.cpp \ @@ -91,6 +92,7 @@ HEADERS += \ zcl/general/zigbeeclusteridentify.h \ zcl/general/zigbeeclusterlevelcontrol.h \ zcl/general/zigbeeclustermultistateinput.h \ + zcl/general/zigbeeclustermultistateoutput.h \ zcl/general/zigbeeclusteronoff.h \ zcl/general/zigbeeclusterpowerconfiguration.h \ zcl/hvac/zigbeeclusterthermostat.h \ diff --git a/libnymea-zigbee/zcl/general/zigbeeclustermultistateinput.h b/libnymea-zigbee/zcl/general/zigbeeclustermultistateinput.h index fdcbaa5..a6e3570 100644 --- a/libnymea-zigbee/zcl/general/zigbeeclustermultistateinput.h +++ b/libnymea-zigbee/zcl/general/zigbeeclustermultistateinput.h @@ -35,11 +35,11 @@ class ZigbeeClusterMultistateInput : public ZigbeeCluster { Q_OBJECT -public: friend class ZigbeeNode; friend class ZigbeeNetwork; +public: enum Attribute { AttributeDescription = 0x001C, AttributeOutOfService = 0x0051, @@ -58,7 +58,6 @@ public: private: void setAttribute(const ZigbeeClusterAttribute &attribute) override; - }; #endif // ZIGBEECLUSTERMULTISTATEINPUT_H diff --git a/libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.cpp b/libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.cpp new file mode 100644 index 0000000..259e7b3 --- /dev/null +++ b/libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.cpp @@ -0,0 +1,41 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea-zigbee. +* This project including source code and documentation is protected by copyright law, and +* remains the property of nymea GmbH. All rights, including reproduction, publication, +* editing and translation, are reserved. The use of this project is subject to the terms of a +* license agreement to be concluded with nymea GmbH in accordance with the terms +* of use of nymea GmbH, available under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the terms of the GNU +* Lesser General Public License as published by the Free Software Foundation; version 3. +* this project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License along with this project. +* If not, see . +* +* For any further details and any questions please contact us under contact@nymea.io +* or see our FAQ/Licensing Information on https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "zigbeeclustermultistateoutput.h" +#include "loggingcategory.h" + +ZigbeeClusterMultistateOutput::ZigbeeClusterMultistateOutput(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent) : + ZigbeeCluster(network, node, endpoint, ZigbeeClusterLibrary::ClusterIdMultistateOutput, direction, parent) +{ + +} + +void ZigbeeClusterMultistateOutput::setAttribute(const ZigbeeClusterAttribute &attribute) +{ + qCDebug(dcZigbeeCluster()) << "Update attribute" << m_node << m_endpoint << this << static_cast(attribute.id()) << attribute.dataType(); + updateOrAddAttribute(attribute); +} diff --git a/libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.h b/libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.h new file mode 100644 index 0000000..8319b2e --- /dev/null +++ b/libnymea-zigbee/zcl/general/zigbeeclustermultistateoutput.h @@ -0,0 +1,64 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea-zigbee. +* This project including source code and documentation is protected by copyright law, and +* remains the property of nymea GmbH. All rights, including reproduction, publication, +* editing and translation, are reserved. The use of this project is subject to the terms of a +* license agreement to be concluded with nymea GmbH in accordance with the terms +* of use of nymea GmbH, available under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the terms of the GNU +* Lesser General Public License as published by the Free Software Foundation; version 3. +* this project is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; +* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +* See the GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License along with this project. +* If not, see . +* +* For any further details and any questions please contact us under contact@nymea.io +* or see our FAQ/Licensing Information on https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef ZIGBEECLUSTERMULTISTATEOUTPUT_H +#define ZIGBEECLUSTERMULTISTATEOUTPUT_H + +#include + +#include "zcl/zigbeecluster.h" + +class ZigbeeClusterMultistateOutput : public ZigbeeCluster +{ + Q_OBJECT + + friend class ZigbeeNode; + friend class ZigbeeNetwork; + +public: + enum Attribute { + AttributeStateText = 0x000E, + AttributeDescription = 0x001C, + AttributeNumberOfStates = 0x004A, + AttributeOutOfService = 0x0051, + AttributePresentValue = 0x0055, + AttributePriorityArray = 0x0057, + AttributeReliability = 0x0067, + AttributeRelinquishDefault = 0x0068, + AttributeStatusFlags = 0x006F, + AttributeApplicationType = 0x0100 + }; + Q_ENUM(Attribute) + + explicit ZigbeeClusterMultistateOutput(ZigbeeNetwork *network, ZigbeeNode *node, ZigbeeNodeEndpoint *endpoint, Direction direction, QObject *parent = nullptr); + +private: + void setAttribute(const ZigbeeClusterAttribute &attribute) override; + +}; + +#endif // ZIGBEECLUSTERMULTISTATEOUTPUT_H diff --git a/libnymea-zigbee/zigbeenodeendpoint.cpp b/libnymea-zigbee/zigbeenodeendpoint.cpp index 15f755a..162e3ee 100644 --- a/libnymea-zigbee/zigbeenodeendpoint.cpp +++ b/libnymea-zigbee/zigbeenodeendpoint.cpp @@ -191,6 +191,8 @@ ZigbeeCluster *ZigbeeNodeEndpoint::createCluster(ZigbeeClusterLibrary::ClusterId return new ZigbeeClusterBinaryValue(m_network, m_node, this, direction, this); case ZigbeeClusterLibrary::ClusterIdMultistateInput: return new ZigbeeClusterMultistateInput(m_network, m_node, this, direction, this); + case ZigbeeClusterLibrary::ClusterIdMultistateOutput: + return new ZigbeeClusterMultistateOutput(m_network, m_node, this, direction, this); // Measurement case ZigbeeClusterLibrary::ClusterIdIlluminanceMeasurement: diff --git a/libnymea-zigbee/zigbeenodeendpoint.h b/libnymea-zigbee/zigbeenodeendpoint.h index bb0a5e4..917ba9f 100644 --- a/libnymea-zigbee/zigbeenodeendpoint.h +++ b/libnymea-zigbee/zigbeenodeendpoint.h @@ -50,6 +50,7 @@ #include "zcl/general/zigbeeclusterbinaryoutput.h" #include "zcl/general/zigbeeclusterbinaryvalue.h" #include "zcl/general/zigbeeclustermultistateinput.h" +#include "zcl/general/zigbeeclustermultistateoutput.h" #include "zcl/closures/zigbeeclusterdoorlock.h"