mirror of
https://github.com/Fishwaldo/qt-openzwave.git
synced 2025-03-15 19:41:24 +00:00
128 lines
4.6 KiB
C++
128 lines
4.6 KiB
C++
#ifndef MQTTPUBLISHER_H
|
|
#define MQTTPUBLISHER_H
|
|
|
|
#include <QObject>
|
|
|
|
#include <QtMqtt/QMqttClient>
|
|
#include <QTimer>
|
|
#include <rapidjson/document.h>
|
|
|
|
#include "qtozwdaemon.h"
|
|
#include "mqttNodes.h"
|
|
#include "mqttValues.h"
|
|
#include "mqttAssociations.h"
|
|
#include "mqttcommands/mqttcommands.h"
|
|
|
|
class MqttCommands;
|
|
|
|
#define MQTT_OZW_TOP_TOPIC "OpenZWave/%1/"
|
|
#define MQTT_OZW_STATS_TOPIC "statistics/"
|
|
#define MQTT_OZW_STATS_NODE_TOPIC "node/%1/statistics/"
|
|
#define MQTT_OZW_STATUS_TOPIC "status/"
|
|
#define MQTT_OZW_NODE_TOPIC "node/%1/"
|
|
#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/"
|
|
|
|
|
|
class mqttpublisher : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit mqttpublisher(QSettings *setting, QObject *parent = nullptr);
|
|
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);
|
|
bool setValue(quint64, QVariant);
|
|
signals:
|
|
|
|
public slots:
|
|
void ready();
|
|
void valueAdded(quint64 vidKey);
|
|
void valueRemoved(quint64 vidKey);
|
|
void valueChanged(quint64 vidKey);
|
|
void valueRefreshed(quint64 vidKey);
|
|
void nodeNew(quint8 node);
|
|
void nodeAdded(quint8 node);
|
|
void nodeRemoved(quint8 node);
|
|
void nodeReset(quint8 node);
|
|
void nodeNaming(quint8 node);
|
|
void nodeEvent(quint8 node, quint8 event);
|
|
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);
|
|
void driverRemoved(quint32 homeID);
|
|
void driverAllNodesQueriedSomeDead();
|
|
void driverAllNodesQueried();
|
|
void driverAwakeNodesQueried();
|
|
void controllerCommand(quint8 node, NotificationTypes::QTOZW_Notification_Controller_Cmd command, NotificationTypes::QTOZW_Notification_Controller_State state, NotificationTypes::QTOZW_Notification_Controller_Error error);
|
|
void ozwNotification(quint8 node, NotificationTypes::QTOZW_Notification_Code event);
|
|
void ozwUserAlert(quint8 node, NotificationTypes::QTOZW_Notification_User event, quint8 retry);
|
|
void manufacturerSpecificDBReady();
|
|
|
|
void starting();
|
|
void started(quint32 homeID);
|
|
void stopped(quint32 homeID);
|
|
// void error(QTOZWErrorCodes errorcode);
|
|
|
|
private slots:
|
|
void updateLogStateChange();
|
|
void brokerDisconnected();
|
|
void doStats();
|
|
void cleanTopics(QMqttMessage msg);
|
|
void brokerError(QMqttClient::ClientError error);
|
|
|
|
private:
|
|
|
|
QString getTopic(QString);
|
|
QString getNodeTopic(QString, quint8);
|
|
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();
|
|
bool clearStatusUpdate();
|
|
bool sendNodeUpdate(quint8);
|
|
bool sendValueUpdate(quint64);
|
|
bool sendInstanceUpdate(quint8, quint8);
|
|
bool sendCommandClassUpdate(quint8, quint8, quint8);
|
|
|
|
bool delNodeTopic(quint8);
|
|
bool delValueTopic(quint64);
|
|
bool delInstanceTopic(quint8, quint8);
|
|
bool delCommandClassTopic(quint8, quint8, quint8);
|
|
rapidjson::Document *getInstanceJSON(quint8, quint8);
|
|
rapidjson::Document *getCommandClassJSON(quint8, quint8, quint8);
|
|
|
|
rapidjson::Document m_ozwstatus;
|
|
QMap<quint8, rapidjson::Document *> m_nodes;
|
|
QMap<quint8, QMap<quint8, rapidjson::Document *> > m_instances;
|
|
QMap<quint8, QMap<quint8, QMap <quint8, rapidjson::Document *> > > m_CommandClasses;
|
|
mqttNodeModel *m_nodeModel;
|
|
QMap<quint64, rapidjson::Document *> m_values;
|
|
mqttValueIDModel *m_valueModel;
|
|
mqttAssociationModel *m_assocModel;
|
|
|
|
QMqttClient *m_client;
|
|
qtozwdaemon *m_qtozwdeamon;
|
|
QSettings *settings;
|
|
QTimer m_statsTimer;
|
|
MqttCommands *m_commands;
|
|
QMqttSubscription *m_cleanTopicSubscription;
|
|
QDateTime m_currentStartTime;
|
|
};
|
|
|
|
#endif // MQTTPUBLISHER_H
|