From 0a3a5c241e0de6587f0c19fd3ef73024fa1d4b52 Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Tue, 24 Feb 2026 16:51:06 +0100 Subject: 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. --- src/OpcUaMonitoredNode.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/OpcUaMonitoredNode.cpp') 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, -- cgit v1.2.3