diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-20 12:16:50 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-20 12:16:50 +0100 |
| commit | 690db0fa630ac57d0ec99010862c7b7e4a7ac589 (patch) | |
| tree | b2e847f9c3dddc71d18be03f0c26090d3939ec25 /src/OpcUaMonitoredNode.h | |
| parent | 5b93aac1f802d0db838d3d12802f2863eb13e0f8 (diff) | |
| download | BobinkQtOpcUa-690db0fa630ac57d0ec99010862c7b7e4a7ac589.tar.gz BobinkQtOpcUa-690db0fa630ac57d0ec99010862c7b7e4a7ac589.zip | |
Implement OpcUaMonitoredNode attribute reading with OpcUaNodeInfo gadget
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 |
