This is an automated email from the ASF dual-hosted git repository.

justinchen pushed a commit to branch new_opc_server
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/new_opc_server by this push:
     new 696fa71d966 draft
696fa71d966 is described below

commit 696fa71d966017bace43a1958e53bd0a65e7bab6
Author: Caideyipi <[email protected]>
AuthorDate: Mon Dec 1 16:35:40 2025 +0800

    draft
---
 .../java/org/apache/iotdb/opcua/ClientExample.java |   2 +-
 .../java/org/apache/iotdb/opcua/ClientTest.java    | 108 +++++----------------
 2 files changed, 24 insertions(+), 86 deletions(-)

diff --git 
a/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientExample.java
 
b/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientExample.java
index 6b7f6997763..63240815a67 100644
--- 
a/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientExample.java
+++ 
b/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientExample.java
@@ -31,7 +31,7 @@ import java.util.function.Predicate;
 public interface ClientExample {
 
   default String getEndpointUrl() {
-    return "opc.tcp://127.0.0.1:12686/iotdb";
+    return "opc.tcp://localhost:49320";
   }
 
   default Predicate<EndpointDescription> endpointFilter() {
diff --git 
a/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientTest.java 
b/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientTest.java
index cc09a7dc7bb..76068b58290 100644
--- 
a/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientTest.java
+++ 
b/example/pipe-opc-ua-sink/src/main/java/org/apache/iotdb/opcua/ClientTest.java
@@ -20,29 +20,18 @@
 package org.apache.iotdb.opcua;
 
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
-import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
-import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscription;
-import org.eclipse.milo.opcua.stack.core.AttributeId;
-import org.eclipse.milo.opcua.stack.core.Identifiers;
-import org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject;
-import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
-import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
-import org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode;
+import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode;
+import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
+import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned;
+import org.eclipse.milo.opcua.stack.core.types.enumerated.BrowseDirection;
 import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
-import org.eclipse.milo.opcua.stack.core.types.structured.ContentFilter;
-import org.eclipse.milo.opcua.stack.core.types.structured.EventFilter;
-import 
org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateRequest;
-import org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters;
-import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
-import 
org.eclipse.milo.opcua.stack.core.types.structured.SimpleAttributeOperand;
+import org.eclipse.milo.opcua.stack.core.types.structured.BrowseDescription;
+import org.eclipse.milo.opcua.stack.core.types.structured.BrowseResult;
+import org.eclipse.milo.opcua.stack.core.types.structured.ReferenceDescription;
 
-import java.util.Collections;
-import java.util.List;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-
-import static 
org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint;
 
 public class ClientTest implements ClientExample {
 
@@ -52,79 +41,28 @@ public class ClientTest implements ClientExample {
     new ClientExampleRunner(example).run();
   }
 
-  private final AtomicLong clientHandles = new AtomicLong(1L);
-
   @Override
   public void run(OpcUaClient client, CompletableFuture<OpcUaClient> future) 
throws Exception {
     // synchronous connect
     client.connect().get();
+    System.out.println("✅ 连接成功");
 
-    // create a subscription and a monitored item
-    final UaSubscription subscription =
-        client.getSubscriptionManager().createSubscription(200.0).get();
-
-    final ReadValueId readValueId =
-        new ReadValueId(
-            Identifiers.Server, AttributeId.EventNotifier.uid(), null, 
QualifiedName.NULL_VALUE);
-
-    // client handle must be unique per item
-    final UInteger clientHandle = uint(clientHandles.getAndIncrement());
-
-    final EventFilter eventFilter =
-        new EventFilter(
-            new SimpleAttributeOperand[] {
-              new SimpleAttributeOperand(
-                  Identifiers.BaseEventType,
-                  new QualifiedName[] {new QualifiedName(0, "Time")},
-                  AttributeId.Value.uid(),
-                  null),
-              new SimpleAttributeOperand(
-                  Identifiers.BaseEventType,
-                  new QualifiedName[] {new QualifiedName(0, "Message")},
-                  AttributeId.Value.uid(),
-                  null),
-              new SimpleAttributeOperand(
-                  Identifiers.BaseEventType,
-                  new QualifiedName[] {new QualifiedName(0, "SourceName")},
-                  AttributeId.Value.uid(),
-                  null),
-              new SimpleAttributeOperand(
-                  Identifiers.BaseEventType,
-                  new QualifiedName[] {new QualifiedName(0, "SourceNode")},
-                  AttributeId.Value.uid(),
-                  null)
-            },
-            new ContentFilter(null));
-
-    final MonitoringParameters parameters =
-        new MonitoringParameters(
-            clientHandle,
-            0.0,
-            ExtensionObject.encode(client.getStaticSerializationContext(), 
eventFilter),
-            uint(10000),
-            true);
-
-    final MonitoredItemCreateRequest request =
-        new MonitoredItemCreateRequest(readValueId, MonitoringMode.Reporting, 
parameters);
-
-    final List<UaMonitoredItem> items =
-        subscription
-            .createMonitoredItems(TimestampsToReturn.Both, 
Collections.singletonList(request))
-            .get();
+    // 读取标签值
+    NodeId nodeId = new NodeId(2, "chan2.grass.glasia");
 
-    // do something with the value updates
-    final UaMonitoredItem monitoredItem = items.get(0);
+    // 1. 先读取当前值确认节点可访问
+    DataValue readValue = client.readValue(0, TimestampsToReturn.Both, 
nodeId).get();
+    System.out.println("读取当前值: " + readValue.getValue().getValue());
+    System.out.println("读取状态: " + readValue.getStatusCode());
 
-    final AtomicInteger eventCount = new AtomicInteger(0);
+    // 2. 尝试写入新值
+    Variant newValue = new Variant(42.0);
+    DataValue writeValue = new DataValue(newValue, null, null);
 
-    monitoredItem.setEventConsumer(
-        (item, vs) -> {
-          eventCount.incrementAndGet();
-          System.out.println("Event Received from " + 
item.getReadValueId().getNodeId());
+    System.out.println("尝试写入值: " + newValue.getValue());
 
-          for (int i = 0; i < vs.length; i++) {
-            System.out.println(("\tvariant[" + i + "]: " + vs[i].getValue()));
-          }
-        });
+    StatusCode writeStatus = client.writeValue(nodeId, writeValue).get();
+    System.out.println("写入状态: " + writeStatus);
+    client.disconnect().get();
   }
 }

Reply via email to