diff options
Diffstat (limited to 'src/OpcUaMonitoredNode.h')
| -rw-r--r-- | src/OpcUaMonitoredNode.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/OpcUaMonitoredNode.h b/src/OpcUaMonitoredNode.h index 9d093b5..53e9537 100644 --- a/src/OpcUaMonitoredNode.h +++ b/src/OpcUaMonitoredNode.h @@ -8,9 +8,44 @@ #ifndef OPCUAMONITOREDNODE_H #define OPCUAMONITOREDNODE_H +#include <QDateTime> #include <QObject> +#include <QOpcUaNode> #include <QQmlEngine> #include <QQmlParserStatus> +#include <QVariant> + +/** + * @brief Metadata bundle for a monitored OPC UA node. + * + * Exposed as a single Q_PROPERTY on OpcUaMonitoredNode so that + * the QML API stays simple (only `value` is top-level). + * Advanced users can access fields via dot notation: + * node.info.displayName, node.info.status, etc. + */ +struct OpcUaNodeInfo +{ + Q_GADGET + Q_PROPERTY (QString displayName MEMBER displayName) + Q_PROPERTY (QString description MEMBER description) + Q_PROPERTY (QString nodeClass MEMBER nodeClass) + Q_PROPERTY (QString dataType MEMBER dataType) + Q_PROPERTY (quint32 accessLevel MEMBER accessLevel) + Q_PROPERTY (QString status MEMBER status) + Q_PROPERTY (QDateTime sourceTimestamp MEMBER sourceTimestamp) + Q_PROPERTY (QDateTime serverTimestamp MEMBER serverTimestamp) + +public: + QString displayName; + QString description; + QString nodeClass; + QString dataType; + quint32 accessLevel = 0; + QString status; + QDateTime sourceTimestamp; + QDateTime serverTimestamp; +}; +Q_DECLARE_METATYPE (OpcUaNodeInfo) class OpcUaMonitoredNode : public QObject, public QQmlParserStatus { @@ -21,6 +56,8 @@ class OpcUaMonitoredNode : public QObject, public QQmlParserStatus Q_PROPERTY (QString nodeId READ nodeId WRITE setNodeId NOTIFY nodeIdChanged) Q_PROPERTY ( bool monitored READ monitored WRITE setMonitored NOTIFY monitoredChanged) + Q_PROPERTY (QVariant value READ value NOTIFY valueChanged) + Q_PROPERTY (OpcUaNodeInfo info READ info NOTIFY infoChanged) public: explicit OpcUaMonitoredNode (QObject *parent = nullptr); @@ -31,17 +68,35 @@ public: bool monitored () const; void setMonitored (bool monitored); + QVariant value () const; + OpcUaNodeInfo info () const; + void classBegin () override; void componentComplete () override; signals: void nodeIdChanged (); void monitoredChanged (); + void valueChanged (); + void infoChanged (); + +private slots: + void handleAttributeUpdated (QOpcUa::NodeAttribute attr, + const QVariant &value); + void handleValueUpdated (const QVariant &value); + void handleClientConnectedChanged (); private: + void setupNode (); + void teardownNode (); + QString m_nodeId; bool m_monitored = true; bool m_componentComplete = false; + + QOpcUaNode *m_node = nullptr; + QVariant m_value; + OpcUaNodeInfo m_info; }; #endif // OPCUAMONITOREDNODE_H |
