mirror of
https://github.com/Fishwaldo/qt-openzwave.git
synced 2025-03-15 19:41:24 +00:00
add new association topic for nodes and export association memberships
This commit is contained in:
parent
9826d80f73
commit
a18fc443bf
10 changed files with 88 additions and 0 deletions
|
@ -1063,6 +1063,7 @@ See Also:
|
|||
This allows a MQTT Client to set a value on a Device. As OZW supports many different types of Values, you must ensure that the payload that you send matches the type of Value you are attempting to change (String, Integer etc)
|
||||
|
||||
**Params**:
|
||||
|
||||
"ValueIDKey" - the ValueID Key Number of the Value You want ot change
|
||||
|
||||
"Value" - The new Value to Set - Encoded as below:
|
||||
|
|
|
@ -164,6 +164,7 @@ Q_SIGNALS:
|
|||
void nodeProtocolInfo(quint8 node);
|
||||
void nodeEssentialNodeQueriesComplete(quint8 node);
|
||||
void nodeQueriesComplete(quint8 node);
|
||||
void nodeGroupChanged(quint8 node, quint8 group);
|
||||
void driverReady(quint32 homeID);
|
||||
void driverFailed(quint32 homeID);
|
||||
void driverReset(quint32 homeID);
|
||||
|
|
|
@ -75,6 +75,7 @@ class QTOZWManager {
|
|||
SIGNAL(nodeProtocolInfo(quint8 node))
|
||||
SIGNAL(nodeEssentialNodeQueriesComplete(quint8 node))
|
||||
SIGNAL(nodeQueriesComplete(quint8 node))
|
||||
SIGNAL(nodeGroupChanged(quint8 node, quint8 group))
|
||||
SIGNAL(driverReady(quint32 homeID))
|
||||
SIGNAL(driverFailed(quint32 homeID))
|
||||
SIGNAL(driverReset(quint32 homeID))
|
||||
|
|
|
@ -249,6 +249,7 @@ void QTOZWManager::connectSignals() {
|
|||
CONNECT_DPTR(nodeProtocolInfo);
|
||||
CONNECT_DPTR(nodeEssentialNodeQueriesComplete);
|
||||
CONNECT_DPTR(nodeQueriesComplete);
|
||||
CONNECT_DPTR(nodeGroupChanged);
|
||||
CONNECT_DPTR(driverReady);
|
||||
CONNECT_DPTR(driverFailed);
|
||||
CONNECT_DPTR(driverReset);
|
||||
|
|
|
@ -1166,6 +1166,8 @@ void QTOZWManager_Internal::pvt_nodeGroupChanged(quint8 node, quint8 group)
|
|||
|
||||
if (ia != nullptr)
|
||||
delete [] ia;
|
||||
|
||||
emit this->nodeGroupChanged(node, group);
|
||||
}
|
||||
void QTOZWManager_Internal::pvt_nodeNew(quint8 node)
|
||||
{
|
||||
|
|
32
qt-ozwdaemon/mqttAssociations.cpp
Normal file
32
qt-ozwdaemon/mqttAssociations.cpp
Normal file
|
@ -0,0 +1,32 @@
|
|||
|
||||
#include "qt-openzwave/qtozwmanager.h"
|
||||
#include "mqttAssociations.h"
|
||||
#include "qtrj.h"
|
||||
|
||||
|
||||
Q_LOGGING_CATEGORY(ozwmpassociation, "ozw.mqtt.publisher.association");
|
||||
|
||||
mqttAssociationModel::mqttAssociationModel(QObject *parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool mqttAssociationModel::populateJsonObject(rapidjson::Document &jsonobject, quint8 node, quint8 group, QTOZWManager *mgr) {
|
||||
Q_UNUSED(mgr);
|
||||
if (jsonobject.IsNull())
|
||||
jsonobject.SetObject();
|
||||
|
||||
QT2JS::SetString(jsonobject, "Name", getassocationData(node, group, QTOZW_Associations::associationColumns::GroupName).toString());
|
||||
QT2JS::SetString(jsonobject, "Help", getassocationData(node, group, QTOZW_Associations::associationColumns::GroupHelp).toString());
|
||||
QT2JS::SetUint(jsonobject, "MaxAssociations", getassocationData(node, group, QTOZW_Associations::associationColumns::MaxAssocations).toInt());
|
||||
QStringList members = getassocationData(node, group, QTOZW_Associations::associationColumns::Members).toStringList();
|
||||
rapidjson::Value N(rapidjson::kArrayType);
|
||||
for (int i = 0; i < members.size(); i++) {
|
||||
rapidjson::Value strVal;
|
||||
strVal.SetString(members.at(i).toStdString().c_str(), jsonobject.GetAllocator());
|
||||
N.PushBack(strVal, jsonobject.GetAllocator());
|
||||
}
|
||||
jsonobject.AddMember(rapidjson::Value("Members").Move(), N, jsonobject.GetAllocator());
|
||||
return true;
|
||||
}
|
17
qt-ozwdaemon/mqttAssociations.h
Normal file
17
qt-ozwdaemon/mqttAssociations.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#ifndef MQTTASSOC_H
|
||||
#define MQTTASSOC_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QVariant>
|
||||
#include <rapidjson/document.h>
|
||||
#include "qt-openzwave/qtozwassociationmodel.h"
|
||||
|
||||
class mqttAssociationModel : public QTOZW_Associations {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit mqttAssociationModel(QObject *parent = nullptr);
|
||||
bool populateJsonObject(rapidjson::Document &, quint8, quint8, QTOZWManager *);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -202,6 +202,13 @@ QString mqttpublisher::getValueTopic(QString topic, quint8 node, quint8 instance
|
|||
return t;
|
||||
}
|
||||
|
||||
QString mqttpublisher::getAssociationTopic(quint8 node, quint8 group) {
|
||||
QString t(MQTT_OZW_TOP_TOPIC);
|
||||
t = t.arg(settings->value("Instance", 1).toInt());
|
||||
t.append(QString(MQTT_OZW_ASSOCIATION_TOPIC).arg(static_cast<quint8>(node)).arg(static_cast<quint8>(group)));
|
||||
return t;
|
||||
}
|
||||
|
||||
QString mqttpublisher::getCommandTopic() {
|
||||
QString t(MQTT_OZW_TOP_TOPIC);
|
||||
t = t.arg(settings->value("Instance", 1).toInt());
|
||||
|
@ -225,6 +232,7 @@ void mqttpublisher::setOZWDaemon(qtozwdaemon *ozwdaemon) {
|
|||
|
||||
this->m_nodeModel = static_cast<mqttNodeModel *>(manager->getNodeModel());
|
||||
this->m_valueModel = static_cast<mqttValueIDModel *>(manager->getValueModel());
|
||||
this->m_assocModel = static_cast<mqttAssociationModel *>(manager->getAssociationModel());
|
||||
|
||||
connect(manager, &QTOZWManager::ready, this, &mqttpublisher::ready);
|
||||
connect(manager, &QTOZWManager::valueAdded, this, &mqttpublisher::valueAdded);
|
||||
|
@ -240,6 +248,7 @@ void mqttpublisher::setOZWDaemon(qtozwdaemon *ozwdaemon) {
|
|||
connect(manager, &QTOZWManager::nodeProtocolInfo, this, &mqttpublisher::nodeProtocolInfo);
|
||||
connect(manager, &QTOZWManager::nodeEssentialNodeQueriesComplete, this, &mqttpublisher::nodeEssentialNodeQueriesComplete);
|
||||
connect(manager, &QTOZWManager::nodeQueriesComplete, this, &mqttpublisher::nodeQueriesComplete);
|
||||
connect(manager, &QTOZWManager::nodeGroupChanged, this, &mqttpublisher::nodeGroupChanged);
|
||||
connect(manager, &QTOZWManager::driverReady, this, &mqttpublisher::driverReady);
|
||||
connect(manager, &QTOZWManager::driverReset, this, &mqttpublisher::driverReset);
|
||||
connect(manager, &QTOZWManager::driverFailed, this, &mqttpublisher::driverFailed);
|
||||
|
@ -359,6 +368,12 @@ void mqttpublisher::sendCommandUpdate(QString command, rapidjson::Document &js)
|
|||
return;
|
||||
}
|
||||
|
||||
void mqttpublisher::sendAssociationUpdate(quint8 node, quint8 group, rapidjson::Document &js) {
|
||||
QT2JS::SetUInt64(js, "TimeStamp", QDateTime::currentSecsSinceEpoch());
|
||||
this->m_client->publish(QMqttTopicName(getAssociationTopic(node, group)), QT2JS::getJSON(js), 0, false);
|
||||
return;
|
||||
}
|
||||
|
||||
bool mqttpublisher::delNodeTopic(quint8 node) {
|
||||
this->m_client->publish(QMqttTopicName(getNodeTopic(MQTT_OZW_NODE_TOPIC, node)), NULL, 0, true);
|
||||
return true;
|
||||
|
@ -565,6 +580,15 @@ void mqttpublisher::nodeQueriesComplete(quint8 node) {
|
|||
QT2JS::SetString(*this->m_nodes[node], "Event", "nodeQueriesComplete");
|
||||
this->sendNodeUpdate(node);
|
||||
}
|
||||
|
||||
void mqttpublisher::nodeGroupChanged(quint8 node, quint8 group) {
|
||||
qCDebug(ozwmp) << "Publishing Event nodeGroupChanged: " << node << " Group: " << group;
|
||||
rapidjson::Document *jsinstance = new rapidjson::Document(rapidjson::kObjectType);
|
||||
this->m_assocModel->populateJsonObject(*jsinstance, node, group, this->m_qtozwdeamon->getManager());
|
||||
this->sendAssociationUpdate(node, group, *jsinstance);
|
||||
delete jsinstance;
|
||||
}
|
||||
|
||||
void mqttpublisher::driverReady(quint32 homeID) {
|
||||
qCDebug(ozwmp) << "Publishing Event driverReady:" << homeID;
|
||||
QT2JS::SetString(this->m_ozwstatus, "Status", "driverReady");
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "qtozwdaemon.h"
|
||||
#include "mqttNodes.h"
|
||||
#include "mqttValues.h"
|
||||
#include "mqttAssociations.h"
|
||||
#include "mqttcommands/mqttcommands.h"
|
||||
|
||||
class MqttCommands;
|
||||
|
@ -22,6 +23,7 @@ class MqttCommands;
|
|||
#define MQTT_OZW_INSTANCE_TOPIC "node/%1/instance/%2/"
|
||||
#define MQTT_OZW_VID_TOPIC "node/%1/instance/%2/commandclass/%3/value/%4/"
|
||||
#define MQTT_OZW_COMMANDCLASS_TOPIC "node/%1/instance/%2/commandclass/%3/"
|
||||
#define MQTT_OZW_ASSOCIATION_TOPIC "node/%1/association/%2/"
|
||||
#define MQTT_OZW_COMMAND_TOPIC "command/%1/"
|
||||
#define MQTT_OZW_RESPONSE_TOPIC "event/%1/"
|
||||
|
||||
|
@ -34,6 +36,7 @@ public:
|
|||
void setOZWDaemon(qtozwdaemon *ozwdaemon);
|
||||
QTOZWManager *getQTOZWManager();
|
||||
void sendCommandUpdate(QString, rapidjson::Document &);
|
||||
void sendAssociationUpdate(quint8 node, quint8 group, rapidjson::Document &js);
|
||||
bool isValidNode(quint8 node);
|
||||
bool isValidValueID(quint64 vidKey);
|
||||
QVariant getValueData(quint64, mqttValueIDModel::ValueIdColumns);
|
||||
|
@ -55,6 +58,7 @@ public slots:
|
|||
void nodeProtocolInfo(quint8 node);
|
||||
void nodeEssentialNodeQueriesComplete(quint8 node);
|
||||
void nodeQueriesComplete(quint8 node);
|
||||
void nodeGroupChanged(quint8 node, quint8 group);
|
||||
void driverReady(quint32 homeID);
|
||||
void driverFailed(quint32 homeID);
|
||||
void driverReset(quint32 homeID);
|
||||
|
@ -86,6 +90,7 @@ private:
|
|||
QString getInstanceTopic(QString, quint8, quint8);
|
||||
QString getCommandClassTopic(QString, quint8, quint8, quint8);
|
||||
QString getValueTopic(QString, quint8, quint8, quint8, quint64);
|
||||
QString getAssociationTopic(quint8, quint8);
|
||||
QString getCommandTopic();
|
||||
QString getCommandResponseTopic(QString);
|
||||
bool sendStatusUpdate();
|
||||
|
@ -94,6 +99,7 @@ private:
|
|||
bool sendValueUpdate(quint64);
|
||||
bool sendInstanceUpdate(quint8, quint8);
|
||||
bool sendCommandClassUpdate(quint8, quint8, quint8);
|
||||
|
||||
bool delNodeTopic(quint8);
|
||||
bool delValueTopic(quint64);
|
||||
bool delInstanceTopic(quint8, quint8);
|
||||
|
@ -108,6 +114,7 @@ private:
|
|||
mqttNodeModel *m_nodeModel;
|
||||
QMap<quint64, rapidjson::Document *> m_values;
|
||||
mqttValueIDModel *m_valueModel;
|
||||
mqttAssociationModel *m_assocModel;
|
||||
|
||||
QMqttClient *m_client;
|
||||
qtozwdaemon *m_qtozwdeamon;
|
||||
|
|
|
@ -27,6 +27,7 @@ qtHaveModule(mqtt) {
|
|||
SOURCES += mqttpublisher.cpp \
|
||||
mqttNodes.cpp \
|
||||
mqttValues.cpp \
|
||||
mqttAssociations.cpp \
|
||||
qtrj.cpp \
|
||||
mqttcommands/mqttcommands.cpp \
|
||||
mqttcommands/ping.cpp \
|
||||
|
@ -69,6 +70,7 @@ qtHaveModule(mqtt) {
|
|||
qtrj.h \
|
||||
mqttNodes.h \
|
||||
mqttValues.h \
|
||||
mqttAssociations.h \
|
||||
mqttcommands/mqttcommands.h \
|
||||
mqttcommands/ping.h \
|
||||
mqttcommands/open.h \
|
||||
|
|
Loading…
Add table
Reference in a new issue