summaryrefslogtreecommitdiffstats
path: root/src/OpcUaMonitoredNode.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/OpcUaMonitoredNode.h')
-rw-r--r--src/OpcUaMonitoredNode.h55
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