aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThomas Vanbesien <tvanbesi@proton.me>2026-02-24 16:51:06 +0100
committerThomas Vanbesien <tvanbesi@proton.me>2026-02-24 16:51:06 +0100
commit0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52 (patch)
treef3b6ab7101e0540d5b94be0c491db99c4bc35509 /src
parent4ac860baa81f30e3e1fc9aaa42a3f0bb0537543a (diff)
downloadBobinkQtOpcUa-0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52.tar.gz
BobinkQtOpcUa-0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52.zip
Fix writeValueAtRange sending scalar for single-element range writes
OPC UA requires an array value when using an index range, even for a single element. Strict servers reject a scalar with BadIndexRangeNoData. Wrap the coerced value in a QVariantList when it isn't one already.
Diffstat (limited to 'src')
-rw-r--r--src/OpcUaMonitoredNode.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/OpcUaMonitoredNode.cpp b/src/OpcUaMonitoredNode.cpp
index 922ad43..c5f1dc0 100644
--- a/src/OpcUaMonitoredNode.cpp
+++ b/src/OpcUaMonitoredNode.cpp
@@ -568,6 +568,12 @@ OpcUaMonitoredNode::writeValueAtRange (const QVariant &value,
return;
}
+ // OPC UA requires an array value for index-range writes, even for a
+ // single element. Wrap scalars in a one-element list so strict
+ // servers don't reject with BadIndexRangeNoData.
+ if (coerced.metaType ().id () != QMetaType::QVariantList)
+ coerced = QVariant::fromValue (QVariantList{ coerced });
+
m_pendingRangeWrite = true;
if (!m_node->writeAttributeRange (QOpcUa::NodeAttribute::Value, coerced,