You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampipes.apache.org by bo...@apache.org on 2021/03/02 14:25:01 UTC

[incubator-streampipes-extensions] branch dev updated (5dc0f66 -> c39de86)

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

bossenti pushed a change to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git.


    from 5dc0f66  Merge branch 'dev' of github.com:apache/incubator-streampipes-extensions into dev
     new 2e465a3  [STREAMPIPES-301] move code to OpcUaUtil
     new 0a3278f  [STREAMPIPES-301] extend functionality of OpcNode
     new 61396e5  [STREAMPIPES-306] create OPC Pull Adapter
     new d83517e  [STREAMPIPES-306] adapt namespaces
     new e75f7e4  [STREAMPIPES-306] small adaptions
     new c39de86  [STREAMPIPES-306] add resources

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../streampipes/connect/ConnectAdapterInit.java    |   6 +-
 .../connect/adapters/opcua/OpcNode.java            |   6 +
 .../streampipes/connect/adapters/opcua/OpcUa.java  |  16 +--
 .../connect/adapters/opcua/OpcUaPullAdapter.java   | 158 +++++++++++++++++++++
 ...aAdapter.java => OpcUaSubscriptionAdapter.java} |  95 ++-----------
 .../connect/adapters/opcua/utils/OpcUaConnect.java |  30 ----
 .../connect/adapters/opcua/utils/OpcUaUtil.java    | 131 +++++++++++++++++
 .../documentation.md                               |   8 +-
 .../icon.png                                       | Bin
 .../strings.en                                     |   9 +-
 .../documentation.md                               |   4 +-
 .../icon.png                                       | Bin
 .../strings.en                                     |   4 +-
 .../extensions/all/jvm/AllExtensionsInit.java      |   6 +-
 14 files changed, 337 insertions(+), 136 deletions(-)
 create mode 100644 streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaPullAdapter.java
 rename streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/{OpcUaAdapter.java => OpcUaSubscriptionAdapter.java} (68%)
 delete mode 100644 streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaConnect.java
 create mode 100644 streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java
 copy streampipes-connect-adapters/src/main/resources/{org.apache.streampipes.connect.adapters.opcua => org.apache.streampipes.connect.adapters.opcua.pull}/documentation.md (93%)
 copy streampipes-connect-adapters/src/main/resources/{org.apache.streampipes.connect.adapters.opcua => org.apache.streampipes.connect.adapters.opcua.pull}/icon.png (100%)
 copy streampipes-connect-adapters/src/main/resources/{org.apache.streampipes.connect.adapters.opcua => org.apache.streampipes.connect.adapters.opcua.pull}/strings.en (75%)
 rename streampipes-connect-adapters/src/main/resources/{org.apache.streampipes.connect.adapters.opcua => org.apache.streampipes.connect.adapters.opcua.subscription}/documentation.md (95%)
 rename streampipes-connect-adapters/src/main/resources/{org.apache.streampipes.connect.adapters.opcua => org.apache.streampipes.connect.adapters.opcua.subscription}/icon.png (100%)
 rename streampipes-connect-adapters/src/main/resources/{org.apache.streampipes.connect.adapters.opcua => org.apache.streampipes.connect.adapters.opcua.subscription}/strings.en (82%)


[incubator-streampipes-extensions] 01/06: [STREAMPIPES-301] move code to OpcUaUtil

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bossenti pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git

commit 2e465a3bb87d1a1b1386338a568b3c65b73382e4
Author: bossenti <bo...@posteo.de>
AuthorDate: Tue Mar 2 14:54:05 2021 +0100

    [STREAMPIPES-301] move code to OpcUaUtil
---
 .../streampipes/connect/adapters/opcua/OpcUa.java  |  12 +-
 .../connect/adapters/opcua/OpcUaAdapter.java       |  85 +-------------
 .../connect/adapters/opcua/utils/OpcUaConnect.java |  30 -----
 .../connect/adapters/opcua/utils/OpcUaUtil.java    | 130 +++++++++++++++++++++
 4 files changed, 141 insertions(+), 116 deletions(-)

diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java
index 0e5c6a3..45c16b4 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java
@@ -23,8 +23,8 @@ import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.
 import static org.eclipse.milo.opcua.stack.core.util.ConversionUtil.toList;
 
 import org.apache.streampipes.connect.adapter.exception.AdapterException;
-import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaConnect;
-import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaConnect.OpcUaLabels;
+import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaUtil;
+import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaUtil.OpcUaLabels;
 import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaNodeVariants;
 import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaTypes;
 import org.apache.streampipes.model.connect.adapter.AdapterDescription;
@@ -129,13 +129,13 @@ public class OpcUa {
         if (useURL && unauthenticated){
 
             String serverAddress = extractor.singleValueParameter(OpcUaLabels.OPC_SERVER_URL.name(), String.class);
-            serverAddress = OpcUaConnect.formatServerAddress(serverAddress);
+            serverAddress = OpcUaUtil.formatServerAddress(serverAddress);
 
             return new OpcUa(serverAddress, namespaceIndex, nodeId, selectedNodeNames);
 
         } else if(!useURL && unauthenticated){
             String serverAddress = extractor.singleValueParameter(OpcUaLabels.OPC_SERVER_HOST.name(), String.class);
-            serverAddress = OpcUaConnect.formatServerAddress(serverAddress);
+            serverAddress = OpcUaUtil.formatServerAddress(serverAddress);
             int port = extractor.singleValueParameter(OpcUaLabels.OPC_SERVER_PORT.name(), int.class);
 
             return new OpcUa(serverAddress, port, namespaceIndex, nodeId, selectedNodeNames);
@@ -146,12 +146,12 @@ public class OpcUa {
 
             if (useURL) {
                 String serverAddress = extractor.singleValueParameter(OpcUaLabels.OPC_SERVER_URL.name(), String.class);
-                serverAddress = OpcUaConnect.formatServerAddress(serverAddress);
+                serverAddress = OpcUaUtil.formatServerAddress(serverAddress);
 
                 return new OpcUa(serverAddress, namespaceIndex, nodeId, username, password, selectedNodeNames);
             } else {
                 String serverAddress = extractor.singleValueParameter(OpcUaLabels.OPC_SERVER_HOST.name(), String.class);
-                serverAddress = OpcUaConnect.formatServerAddress(serverAddress);
+                serverAddress = OpcUaUtil.formatServerAddress(serverAddress);
                 int port = extractor.singleValueParameter(OpcUaLabels.OPC_SERVER_PORT.name(), int.class);
 
                 return new OpcUa(serverAddress, port, namespaceIndex, nodeId, username, password, selectedNodeNames);
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
index c79ddf7..d52c7d7 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
@@ -22,16 +22,14 @@ import org.apache.streampipes.connect.adapter.Adapter;
 import org.apache.streampipes.connect.adapter.exception.AdapterException;
 import org.apache.streampipes.connect.adapter.exception.ParseException;
 import org.apache.streampipes.connect.adapter.model.specific.SpecificDataStreamAdapter;
-import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaConnect.OpcUaLabels;
+import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaUtil;
+import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaUtil.OpcUaLabels;
 import org.apache.streampipes.container.api.ResolvesContainerProvidedOptions;
 import org.apache.streampipes.model.AdapterType;
 import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
-import org.apache.streampipes.model.schema.EventProperty;
-import org.apache.streampipes.model.schema.EventSchema;
 import org.apache.streampipes.model.staticproperty.Option;
 import org.apache.streampipes.sdk.StaticProperties;
-import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
 import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
 import org.apache.streampipes.sdk.helpers.*;
@@ -40,7 +38,6 @@ import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 
-import java.net.URI;
 import java.util.*;
 
 public class OpcUaAdapter extends SpecificDataStreamAdapter implements ResolvesContainerProvidedOptions {
@@ -103,7 +100,7 @@ public class OpcUaAdapter extends SpecificDataStreamAdapter implements ResolvesC
 
     public void onSubscriptionValue(UaMonitoredItem item, DataValue value) {
 
-        String key = getRuntimeNameOfNode(item.getReadValueId().getNodeId());
+        String key = OpcUaUtil.getRuntimeNameOfNode(item.getReadValueId().getNodeId());
 
         OpcNode currNode = this.allNodes.stream()
                 .filter(node -> key.equals(node.getNodeId().getIdentifier().toString()))
@@ -161,44 +158,7 @@ public class OpcUaAdapter extends SpecificDataStreamAdapter implements ResolvesC
     @Override
     public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException, ParseException {
 
-        GuessSchema guessSchema = new GuessSchema();
-        EventSchema eventSchema = new EventSchema();
-        List<EventProperty> allProperties = new ArrayList<>();
-
-        OpcUa opc = OpcUa.from(this.adapterDescription);
-
-        try {
-            opc.connect();
-            List<OpcNode> res =  opc.browseNode(true);
-
-            if (res.size() > 0) {
-                for (OpcNode opcNode : res) {
-                    if (opcNode.opcUnitId == 0) {
-                        allProperties.add(PrimitivePropertyBuilder
-                                .create(opcNode.getType(), opcNode.getLabel())
-                                .label(opcNode.getLabel())
-                                .build());
-                    } else {
-                        allProperties.add(PrimitivePropertyBuilder
-                                .create(opcNode.getType(), opcNode.getLabel())
-                                .label(opcNode.getLabel())
-                                .measurementUnit(new URI(OpcUa.mapUnitIdToQudt(opcNode.opcUnitId)))
-                                .build());
-                    }
-                }
-            }
-
-            opc.disconnect();
-        } catch (Exception e) {
-
-            throw new AdapterException("Could not guess schema for opc node! " + e.getMessage());
-
-        }
-
-        eventSchema.setEventProperties(allProperties);
-        guessSchema.setEventSchema(eventSchema);
-
-        return guessSchema;
+        return OpcUaUtil.getSchema(adapterDescription);
     }
 
     @Override
@@ -209,41 +169,6 @@ public class OpcUaAdapter extends SpecificDataStreamAdapter implements ResolvesC
     @Override
     public List<Option> resolveOptions(String requestId, StaticPropertyExtractor parameterExtractor) {
 
-        try {
-            parameterExtractor.selectedAlternativeInternalId(OpcUaLabels.OPC_HOST_OR_URL.name());
-            parameterExtractor.selectedAlternativeInternalId(OpcUaLabels.ACCESS_MODE.name());
-        } catch (NullPointerException npe){
-            return new ArrayList<>();
-        }
-
-        OpcUa opc = OpcUa.from(parameterExtractor);
-
-        List<Option> nodes = new ArrayList<>();
-        try {
-            opc.connect();
-            this.allNodes =  opc.browseNode(false);
-
-            for (OpcNode opcNode: this.allNodes) {
-                nodes.add(new Option(opcNode.getLabel(), opcNode.nodeId.getIdentifier().toString()));
-            }
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return nodes;
-    }
-
-    private String getRuntimeNameOfNode(NodeId nodeId) {
-        String[] keys = nodeId.getIdentifier().toString().split("\\.");
-        String key;
-
-        if (keys.length > 0) {
-            key = keys[keys.length - 1];
-        } else {
-            key = nodeId.getIdentifier().toString();
-        }
-
-        return key;
+        return OpcUaUtil.resolveOptions(requestId, parameterExtractor);
     }
 }
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaConnect.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaConnect.java
deleted file mode 100644
index d56bcbf..0000000
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaConnect.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.apache.streampipes.connect.adapters.opcua.utils;
-
-public class OpcUaConnect {
-
-    public static String formatServerAddress(String serverAddress) {
-
-        if (!serverAddress.startsWith("opc.tcp://")) {
-            serverAddress = "opc.tcp://" + serverAddress;
-        }
-
-        return serverAddress;
-    }
-
-    public enum OpcUaLabels {
-        OPC_HOST_OR_URL,
-        OPC_URL,
-        OPC_HOST,
-        OPC_SERVER_URL,
-        OPC_SERVER_HOST,
-        OPC_SERVER_PORT,
-        NAMESPACE_INDEX,
-        NODE_ID,
-        ACCESS_MODE,
-        USERNAME_GROUP,
-        USERNAME,
-        PASSWORD,
-        UNAUTHENTICATED,
-        AVAILABLE_NODES;
-    }
-}
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java
new file mode 100644
index 0000000..4de5b79
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java
@@ -0,0 +1,130 @@
+package org.apache.streampipes.connect.adapters.opcua.utils;
+
+import org.apache.streampipes.connect.adapter.exception.AdapterException;
+import org.apache.streampipes.connect.adapter.exception.ParseException;
+import org.apache.streampipes.connect.adapters.opcua.OpcNode;
+import org.apache.streampipes.connect.adapters.opcua.OpcUa;
+import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
+import org.apache.streampipes.model.connect.guess.GuessSchema;
+import org.apache.streampipes.model.schema.EventProperty;
+import org.apache.streampipes.model.schema.EventSchema;
+import org.apache.streampipes.model.staticproperty.Option;
+import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
+import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+public class OpcUaUtil {
+
+    public static String formatServerAddress(String serverAddress) {
+
+        if (!serverAddress.startsWith("opc.tcp://")) {
+            serverAddress = "opc.tcp://" + serverAddress;
+        }
+
+        return serverAddress;
+    }
+
+    public static GuessSchema getSchema(SpecificAdapterStreamDescription adapterStreamDescription) throws AdapterException, ParseException {
+        GuessSchema guessSchema = new GuessSchema();
+        EventSchema eventSchema = new EventSchema();
+        List<EventProperty> allProperties = new ArrayList<>();
+
+        OpcUa opcUa = OpcUa.from(adapterStreamDescription);
+
+        try {
+            opcUa.connect();
+            List<OpcNode> selectedNodes = opcUa.browseNode(true);
+
+            if (!selectedNodes.isEmpty()) {
+                for (OpcNode opcNode : selectedNodes) {
+                    if (opcNode.hasUnitId()) {
+                        allProperties.add(PrimitivePropertyBuilder
+                            .create(opcNode.getType(), opcNode.getLabel())
+                            .label(opcNode.getLabel())
+                            .measurementUnit(new URI(OpcUa.mapUnitIdToQudt(opcNode.getOpcUnitId())))
+                            .build());
+                    } else {
+                        allProperties.add(PrimitivePropertyBuilder
+                            .create(opcNode.getType(), opcNode.getLabel())
+                            .label(opcNode.getLabel())
+                            .build());
+                    }
+
+                }
+            }
+
+            opcUa.disconnect();
+
+        } catch (Exception e) {
+            throw new AdapterException("Could not guess schema for opc node! " + e.getMessage());
+        }
+
+        eventSchema.setEventProperties(allProperties);
+        guessSchema.setEventSchema(eventSchema);
+
+        return guessSchema;
+
+    }
+
+
+    public static List<Option> resolveOptions (String requestId, StaticPropertyExtractor parameterExtractor) {
+
+        try {
+            parameterExtractor.selectedAlternativeInternalId(OpcUaLabels.OPC_HOST_OR_URL.name());
+            parameterExtractor.selectedAlternativeInternalId(OpcUaLabels.ACCESS_MODE.name());
+        } catch (NullPointerException nullPointerException) {
+            return new ArrayList<>();
+        }
+
+        OpcUa opcUa = OpcUa.from(parameterExtractor);
+
+        List<Option> nodeOptions = new ArrayList<>();
+        try{
+            opcUa.connect();
+
+            for(OpcNode opcNode: opcUa.browseNode(false)) {
+                nodeOptions.add(new Option(opcNode.getLabel(), opcNode.getNodeId().getIdentifier().toString()));
+            }
+
+            opcUa.disconnect();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return nodeOptions;
+    }
+
+    public static String getRuntimeNameOfNode(NodeId nodeId) {
+        String[] keys = nodeId.getIdentifier().toString().split("\\.");
+        String key;
+
+        if (keys.length > 0) {
+            key = keys[keys.length - 1];
+        } else {
+            key = nodeId.getIdentifier().toString();
+        }
+
+        return key;
+    }
+
+    public enum OpcUaLabels {
+        OPC_HOST_OR_URL,
+        OPC_URL,
+        OPC_HOST,
+        OPC_SERVER_URL,
+        OPC_SERVER_HOST,
+        OPC_SERVER_PORT,
+        NAMESPACE_INDEX,
+        NODE_ID,
+        ACCESS_MODE,
+        USERNAME_GROUP,
+        USERNAME,
+        PASSWORD,
+        UNAUTHENTICATED,
+        AVAILABLE_NODES;
+    }
+}


[incubator-streampipes-extensions] 05/06: [STREAMPIPES-306] small adaptions

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bossenti pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git

commit e75f7e47c67ffb6e3e5a0cef1202c1eafea64ef8
Author: bossenti <bo...@posteo.de>
AuthorDate: Tue Mar 2 15:01:09 2021 +0100

    [STREAMPIPES-306] small adaptions
---
 .../java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java     | 4 ++--
 .../apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java    | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java
index 45c16b4..48bed89 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUa.java
@@ -389,7 +389,7 @@ public class OpcUa {
     }
 
 
-    public void createListSubscription(List<NodeId> nodes, OpcUaAdapter opcUaAdapter) throws Exception {
+    public void createListSubscription(List<NodeId> nodes, OpcUaSubscriptionAdapter opcUaSubscriptionAdapter) throws Exception {
         /*
          * create a subscription @ 1000ms
          */
@@ -434,7 +434,7 @@ public class OpcUa {
 
         BiConsumer<UaMonitoredItem, Integer> onItemCreated =
                 (item, id) -> {
-                    item.setValueConsumer(opcUaAdapter::onSubscriptionValue);
+                    item.setValueConsumer(opcUaSubscriptionAdapter::onSubscriptionValue);
                 };
 
         List<UaMonitoredItem> items = subscription.createMonitoredItems(
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java
index 4de5b79..1fadfb6 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/utils/OpcUaUtil.java
@@ -125,6 +125,7 @@ public class OpcUaUtil {
         USERNAME,
         PASSWORD,
         UNAUTHENTICATED,
-        AVAILABLE_NODES;
+        AVAILABLE_NODES,
+        POLLING_INTERVAL;
     }
 }


[incubator-streampipes-extensions] 04/06: [STREAMPIPES-306] adapt namespaces

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bossenti pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git

commit d83517e8e742a5dcc5f01b7eaf91809db194ef28
Author: bossenti <bo...@posteo.de>
AuthorDate: Tue Mar 2 15:00:29 2021 +0100

    [STREAMPIPES-306] adapt namespaces
---
 .../{OpcUaAdapter.java => OpcUaSubscriptionAdapter.java}    |  10 +++++-----
 .../documentation.md                                        |   0
 .../icon.png                                                | Bin
 .../strings.en                                              |   4 ++--
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaSubscriptionAdapter.java
similarity index 95%
rename from streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
rename to streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaSubscriptionAdapter.java
index d52c7d7..51a389a 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaAdapter.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaSubscriptionAdapter.java
@@ -40,9 +40,9 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 
 import java.util.*;
 
-public class OpcUaAdapter extends SpecificDataStreamAdapter implements ResolvesContainerProvidedOptions {
+public class OpcUaSubscriptionAdapter extends SpecificDataStreamAdapter implements ResolvesContainerProvidedOptions {
 
-    public static final String ID = "org.apache.streampipes.connect.adapters.opcua";
+    public static final String ID = "org.apache.streampipes.connect.adapters.opcua.subscription";
 
     private Map<String, Object> event;
     private List<OpcNode> allNodes;
@@ -50,12 +50,12 @@ public class OpcUaAdapter extends SpecificDataStreamAdapter implements ResolvesC
 
     private int numberProperties;
 
-    public OpcUaAdapter() {
+    public OpcUaSubscriptionAdapter() {
         this.event = new HashMap<>();
         this.numberProperties = 0;
     }
 
-    public OpcUaAdapter(SpecificAdapterStreamDescription adapterDescription) {
+    public OpcUaSubscriptionAdapter(SpecificAdapterStreamDescription adapterDescription) {
         super(adapterDescription);
 
         this.opcUa = OpcUa.from(this.adapterDescription);
@@ -152,7 +152,7 @@ public class OpcUaAdapter extends SpecificDataStreamAdapter implements ResolvesC
 
     @Override
     public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
-        return new OpcUaAdapter(adapterDescription);
+        return new OpcUaSubscriptionAdapter(adapterDescription);
     }
 
     @Override
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md
similarity index 100%
rename from streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/documentation.md
rename to streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/icon.png
similarity index 100%
rename from streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/icon.png
rename to streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/icon.png
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/strings.en
similarity index 82%
rename from streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/strings.en
rename to streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/strings.en
index 2080992..22262ab 100644
--- a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua/strings.en
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/strings.en
@@ -1,5 +1,5 @@
-org.apache.streampipes.connect.adapters.opcua.title=OPC UA
-org.apache.streampipes.connect.adapters.opcua.description=Reads values from an OPC-UA server
+org.apache.streampipes.connect.adapters.opcua.subscription.title=OPC UA Subscription
+org.apache.streampipes.connect.adapters.opcua.subscription.description=Reads values from an OPC-UA server only on changes
 
 
 OPC_HOST_OR_URL.title=OPC Server


[incubator-streampipes-extensions] 02/06: [STREAMPIPES-301] extend functionality of OpcNode

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bossenti pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git

commit 0a3278fdb56f1a07edabd62462282e00ef0f64cd
Author: bossenti <bo...@posteo.de>
AuthorDate: Tue Mar 2 14:56:26 2021 +0100

    [STREAMPIPES-301] extend functionality of OpcNode
---
 .../java/org/apache/streampipes/connect/adapters/opcua/OpcNode.java | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcNode.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcNode.java
index cde2143b..6903a33 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcNode.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcNode.java
@@ -64,4 +64,10 @@ public class OpcNode {
     public void setNodeId(NodeId nodeId) {
         this.nodeId = nodeId;
     }
+
+    public int getOpcUnitId() {return this.opcUnitId;}
+
+    public boolean hasUnitId() {return this.opcUnitId !=0; }
+
+
 }


[incubator-streampipes-extensions] 03/06: [STREAMPIPES-306] create OPC Pull Adapter

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bossenti pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git

commit 61396e5fae4c72de64f54c5bbc9f706794d25769
Author: bossenti <bo...@posteo.de>
AuthorDate: Tue Mar 2 15:00:02 2021 +0100

    [STREAMPIPES-306] create OPC Pull Adapter
---
 .../streampipes/connect/ConnectAdapterInit.java    |   6 +-
 .../connect/adapters/opcua/OpcUaPullAdapter.java   | 158 +++++++++++++++++++++
 .../extensions/all/jvm/AllExtensionsInit.java      |   6 +-
 3 files changed, 166 insertions(+), 4 deletions(-)

diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java
index aa78a07..34b0e20 100644
--- a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/ConnectAdapterInit.java
@@ -24,6 +24,7 @@ import org.apache.streampipes.connect.adapters.iss.IssAdapter;
 import org.apache.streampipes.connect.adapters.flic.FlicMQTTAdapter;
 import org.apache.streampipes.connect.adapters.netio.NetioMQTTAdapter;
 import org.apache.streampipes.connect.adapters.netio.NetioRestAdapter;
+import org.apache.streampipes.connect.adapters.opcua.OpcUaPullAdapter;
 import org.apache.streampipes.connect.adapters.plc4x.modbus.Plc4xModbusAdapter;
 import org.apache.streampipes.connect.adapters.simulator.machine.MachineDataStreamAdapter;
 import org.apache.streampipes.connect.adapters.ti.TISensorTag;
@@ -36,7 +37,7 @@ import org.apache.streampipes.connect.adapters.influxdb.InfluxDbSetAdapter;
 import org.apache.streampipes.connect.adapters.influxdb.InfluxDbStreamAdapter;
 import org.apache.streampipes.connect.adapters.mysql.MySqlSetAdapter;
 import org.apache.streampipes.connect.adapters.mysql.MySqlStreamAdapter;
-import org.apache.streampipes.connect.adapters.opcua.OpcUaAdapter;
+import org.apache.streampipes.connect.adapters.opcua.OpcUaSubscriptionAdapter;
 import org.apache.streampipes.connect.adapters.plc4x.s7.Plc4xS7Adapter;
 import org.apache.streampipes.connect.adapters.ros.RosBridgeAdapter;
 import org.apache.streampipes.connect.adapters.simulator.random.RandomDataSetAdapter;
@@ -82,7 +83,8 @@ public class ConnectAdapterInit extends AdapterWorkerContainer {
             .add(new WikipediaEditedArticlesAdapter())
             .add(new WikipediaNewArticlesAdapter())
             .add(new RosBridgeAdapter())
-            .add(new OpcUaAdapter())
+            .add(new OpcUaSubscriptionAdapter())
+            .add(new OpcUaPullAdapter())
             .add(new InfluxDbStreamAdapter())
             .add(new InfluxDbSetAdapter())
             .add(new TISensorTag())
diff --git a/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaPullAdapter.java b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaPullAdapter.java
new file mode 100644
index 0000000..f218040
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/java/org/apache/streampipes/connect/adapters/opcua/OpcUaPullAdapter.java
@@ -0,0 +1,158 @@
+package org.apache.streampipes.connect.adapters.opcua;
+
+import org.apache.streampipes.connect.adapter.Adapter;
+import org.apache.streampipes.connect.adapter.exception.AdapterException;
+import org.apache.streampipes.connect.adapter.exception.ParseException;
+import org.apache.streampipes.connect.adapter.util.PollingSettings;
+import org.apache.streampipes.connect.adapters.PullAdapter;
+import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaUtil;
+import org.apache.streampipes.connect.adapters.opcua.utils.OpcUaUtil.OpcUaLabels;
+import org.apache.streampipes.container.api.ResolvesContainerProvidedOptions;
+import org.apache.streampipes.model.AdapterType;
+import org.apache.streampipes.model.connect.adapter.SpecificAdapterStreamDescription;
+import org.apache.streampipes.model.connect.guess.GuessSchema;
+import org.apache.streampipes.model.staticproperty.Option;
+import org.apache.streampipes.sdk.StaticProperties;
+import org.apache.streampipes.sdk.builder.adapter.SpecificDataStreamAdapterBuilder;
+import org.apache.streampipes.sdk.extractor.StaticPropertyExtractor;
+import org.apache.streampipes.sdk.helpers.Alternatives;
+import org.apache.streampipes.sdk.helpers.Labels;
+import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.sdk.utils.Assets;
+import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
+import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
+
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+public class OpcUaPullAdapter extends PullAdapter implements ResolvesContainerProvidedOptions {
+
+    public static final String ID = "org.apache.streampipes.connect.adapters.opcua.pull";
+
+    private int pollingIntervalInSeconds;
+    private OpcUa opcUa;
+    private List<OpcNode> allNodes;
+
+    public OpcUaPullAdapter() {
+        super();
+    }
+
+    public OpcUaPullAdapter(SpecificAdapterStreamDescription adapterStreamDescription) {
+        super(adapterStreamDescription);
+    }
+
+    @Override
+    protected void before() throws AdapterException {
+
+        StaticPropertyExtractor extractor =
+                StaticPropertyExtractor.from(this.adapterDescription.getConfig(), new ArrayList<>());
+
+        this.pollingIntervalInSeconds = extractor.singleValueParameter(OpcUaLabels.POLLING_INTERVAL.name(), int.class);
+
+        this.opcUa = OpcUa.from(this.adapterDescription);
+
+        try {
+            this.opcUa.connect();
+            this.allNodes = this.opcUa.browseNode(true);
+        } catch (Exception e) {
+            throw new AdapterException("The Connection to the OPC UA server could not be established.");
+        }
+
+    }
+
+    @Override
+    protected void pullData() {
+
+        Map<String, Object> event = new HashMap<>();
+
+        for (OpcNode opcNode : this.allNodes) {
+            CompletableFuture response = this.opcUa.getClient().readValue(0, TimestampsToReturn.Both, opcNode.getNodeId());
+            try {
+
+                Object value = ((DataValue) response.get()).getValue().getValue();
+
+                event.put(opcNode.getLabel(), value);
+
+            } catch (InterruptedException | ExecutionException ie) {
+                ie.printStackTrace();
+            }
+        }
+
+        adapterPipeline.process(event);
+
+    }
+
+    @Override
+    protected PollingSettings getPollingInterval() {
+        return PollingSettings.from(TimeUnit.SECONDS, this.pollingIntervalInSeconds);
+    }
+
+    @Override
+    public SpecificAdapterStreamDescription declareModel() {
+
+        SpecificAdapterStreamDescription description = SpecificDataStreamAdapterBuilder
+                .create(ID)
+                .withAssets(Assets.DOCUMENTATION, Assets.ICON)
+                .withLocales(Locales.EN)
+                .category(AdapterType.Generic, AdapterType.Manufacturing)
+                .requiredIntegerParameter(Labels.withId(OpcUaLabels.POLLING_INTERVAL.name()))
+                .requiredAlternatives(Labels.withId(OpcUaLabels.ACCESS_MODE.name()),
+                        Alternatives.from(Labels.withId(OpcUaLabels.UNAUTHENTICATED.name())),
+                        Alternatives.from(Labels.withId(OpcUaLabels.USERNAME_GROUP.name()),
+                                StaticProperties.group(
+                                        Labels.withId(OpcUaLabels.USERNAME_GROUP.name()),
+                                        StaticProperties.stringFreeTextProperty(Labels.withId(OpcUaLabels.USERNAME.name())),
+                                        StaticProperties.secretValue(Labels.withId(OpcUaLabels.PASSWORD.name()))
+                                ))
+                )
+                .requiredAlternatives(Labels.withId(OpcUaLabels.OPC_HOST_OR_URL.name()),
+                        Alternatives.from(
+                                Labels.withId(OpcUaLabels.OPC_URL.name()),
+                                StaticProperties.stringFreeTextProperty(Labels.withId(OpcUaLabels.OPC_SERVER_URL.name())))
+                        ,
+                        Alternatives.from(Labels.withId(OpcUaLabels.OPC_HOST.name()),
+                                StaticProperties.group(
+                                        Labels.withId("host-port"),
+                                        StaticProperties.stringFreeTextProperty(Labels.withId(OpcUaLabels.OPC_SERVER_HOST.name())),
+                                        StaticProperties.stringFreeTextProperty(Labels.withId(OpcUaLabels.OPC_SERVER_PORT.name()))
+                                ))
+                )
+                .requiredTextParameter(Labels.withId(OpcUaLabels.NAMESPACE_INDEX.name()))
+                .requiredTextParameter(Labels.withId(OpcUaLabels.NODE_ID.name()))
+                .requiredMultiValueSelectionFromContainer(
+                        Labels.withId(OpcUaLabels.AVAILABLE_NODES.name()),
+                        Arrays.asList(OpcUaLabels.POLLING_INTERVAL.name(), OpcUaLabels.NAMESPACE_INDEX.name(), OpcUaLabels.NODE_ID.name())
+                )
+                .build();
+
+        description.setAppId(ID);
+
+        return description;
+    }
+
+    @Override
+    public Adapter getInstance(SpecificAdapterStreamDescription adapterDescription) {
+        return new OpcUaPullAdapter(adapterDescription);
+    }
+
+    @Override
+    public GuessSchema getSchema(SpecificAdapterStreamDescription adapterDescription) throws AdapterException, ParseException {
+
+        return OpcUaUtil.getSchema(adapterDescription);
+    }
+
+    @Override
+    public String getId() {
+        return ID;
+    }
+
+    @Override
+    public List<Option> resolveOptions(String requestId, StaticPropertyExtractor parameterExtractor) {
+
+        return OpcUaUtil.resolveOptions(requestId, parameterExtractor);
+
+    }
+
+}
diff --git a/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java b/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java
index dd67855..6e06b5d 100644
--- a/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java
+++ b/streampipes-extensions-all-jvm/src/main/java/org/apache/streampipes/extensions/all/jvm/AllExtensionsInit.java
@@ -31,7 +31,8 @@ import org.apache.streampipes.connect.adapters.mysql.MySqlSetAdapter;
 import org.apache.streampipes.connect.adapters.mysql.MySqlStreamAdapter;
 import org.apache.streampipes.connect.adapters.netio.NetioMQTTAdapter;
 import org.apache.streampipes.connect.adapters.netio.NetioRestAdapter;
-import org.apache.streampipes.connect.adapters.opcua.OpcUaAdapter;
+import org.apache.streampipes.connect.adapters.opcua.OpcUaSubscriptionAdapter;
+import org.apache.streampipes.connect.adapters.opcua.OpcUaPullAdapter;
 import org.apache.streampipes.connect.adapters.plc4x.modbus.Plc4xModbusAdapter;
 import org.apache.streampipes.connect.adapters.plc4x.s7.Plc4xS7Adapter;
 import org.apache.streampipes.connect.adapters.ros.RosBridgeAdapter;
@@ -245,7 +246,8 @@ public class AllExtensionsInit extends ExtensionsModelSubmitter {
                 .add(new WikipediaEditedArticlesAdapter())
                 .add(new WikipediaNewArticlesAdapter())
                 .add(new RosBridgeAdapter())
-                .add(new OpcUaAdapter())
+                .add(new OpcUaSubscriptionAdapter())
+                .add(new OpcUaPullAdapter())
                 .add(new InfluxDbStreamAdapter())
                 .add(new InfluxDbSetAdapter())
                 .add(new TISensorTag())


[incubator-streampipes-extensions] 06/06: [STREAMPIPES-306] add resources

Posted by bo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bossenti pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampipes-extensions.git

commit c39de8602e50d88f1c9fa9a976039a218f84e0c1
Author: bossenti <bo...@posteo.de>
AuthorDate: Tue Mar 2 15:05:49 2021 +0100

    [STREAMPIPES-306] add resources
---
 .../documentation.md                               |   8 +++-
 .../icon.png                                       | Bin 0 -> 5087 bytes
 .../strings.en                                     |  49 +++++++++++++++++++++
 .../documentation.md                               |   4 +-
 4 files changed, 57 insertions(+), 4 deletions(-)

diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/documentation.md
similarity index 93%
copy from streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md
copy to streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/documentation.md
index 383eb8f..75b3eac 100644
--- a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/documentation.md
@@ -16,7 +16,7 @@
   ~
   -->
 
-## OPC-UA
+## OPC-UA Pull Adapter
 
 <p align="center"> 
     <img src="icon.png" width="150px;" class="pe-image-documentation"/>
@@ -26,7 +26,7 @@
 
 ## Description
 
-Read values from an OPC-UA server
+Reads values from an OPC-UA server repeatedly
 
 ***
 
@@ -36,6 +36,10 @@ Read values from an OPC-UA server
 
 ## Configuration
 
+### Polling Interval
+
+Duration of the polling interval in seconds
+
 ### Anonymous vs. Username/Password
 
 Choose whether you want to connect anonymously or authenticate using your credentials.
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/icon.png b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/icon.png
new file mode 100644
index 0000000..ab68d43
Binary files /dev/null and b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/icon.png differ
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/strings.en b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/strings.en
new file mode 100644
index 0000000..34f3a81
--- /dev/null
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.pull/strings.en
@@ -0,0 +1,49 @@
+org.apache.streampipes.connect.adapters.opcua.pull.title=OPC UA Pull
+org.apache.streampipes.connect.adapters.opcua.pull.description=Reads values from an OPC-UA server repeatedly
+
+
+OPC_HOST_OR_URL.title=OPC Server
+OPC_HOST_OR_URL.description=
+
+OPC_URL.title=URL
+OPC_URL.description=
+
+OPC_HOST.title=Host/Port
+OPC_HOST.description=
+
+OPC_SERVER_URL.title=URL
+OPC_SERVER_URL.description=Example: opc.tcp://test-server.com:4840,
+
+OPC_SERVER_HOST.title=Host
+OPC_SERVER_HOST.description=Example: test-server.com, opc.tcp://test-server.com)
+
+OPC_SERVER_PORT.title=Port
+OPC_SERVER_PORT.description=Example: 4840
+
+NAMESPACE_INDEX.title=Namespace Index
+NAMESPACE.INDEX.description=Example: 2
+
+NODE_ID.title=Node ID
+NODE_ID.description=Id of the Node to read the values from
+
+
+ACCESS_MODE.title=Access Mode
+ACCESS_MODE.description=
+
+USERNAME_GROUP.title=Username/Password
+USERNAME_GROUP.description=
+
+UNAUTHENTICATED.title=Unauthenticated
+UNAUTHENTICATED.description=
+
+USERNAME.title=Username
+USERNAME.description=
+
+PASSWORD.title=Password
+PASSWORD.description=
+
+AVAILABLE_NODES.title=Available Nodes
+AVAILABLE_NODES.description=Select the nodes that are relevant for you. Please ensure to select one option each for access mode and OPC UA server and to specify the polling interval
+
+POLLING_INTERVAL.title=Polling Interval
+POLLING_INTERVAL.description=Timespan between data are polled, in seconds
\ No newline at end of file
diff --git a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md
index 383eb8f..8cc959a 100644
--- a/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md
+++ b/streampipes-connect-adapters/src/main/resources/org.apache.streampipes.connect.adapters.opcua.subscription/documentation.md
@@ -16,7 +16,7 @@
   ~
   -->
 
-## OPC-UA
+## OPC-UA Subscription Adapter
 
 <p align="center"> 
     <img src="icon.png" width="150px;" class="pe-image-documentation"/>
@@ -26,7 +26,7 @@
 
 ## Description
 
-Read values from an OPC-UA server
+Read values from an OPC-UA server on value changes
 
 ***