A simple asynchronous OPC UA plugin that registers for change events on OPC UA objects.
NOTE:
This plugin assumes the freeopcua is available at a specified location in the file system, see below.
This configuration of this plugin requires 3 parameters to be set
asset An asset name prefix that is added to the OPC UA variables retrieved from the OPC UA server
url
The URL used to connect the server, of the form opc.tcp://
subscribeById A toggle that determines of the subscriptions are to be treated as OPC UA node names or as browse names.
subscriptions An array of OPC UA node names that will control the subscription to variables in the OPC UA server.
If the subscribeById option is set then this is an array of node Id's. Each node Id should be of the form ns=..;s=... Where ns is a namespace index and s is the node id string identifier.
If the subscribeById option is not set then the array is an array of
browse names. The array may be empty, in which case all variables are
subscribed to in the server and will create assets in FogLAMP. Although
simple subscribing to everything will return a lot of data that may
not be of use. Alternatively a set of string may be give, the format
of the strings is
Configuration examples:
.. code-block:: console
{"subscriptions":["5:Simulation","2:MyLevel"]}
{"subscriptions":["5:Sinusoid1","2:MyLevel","5:Sawtooth1"]}
{"subscriptions":["2:Random.Double","2:Random.Boolean"]}
In the above examples
It's also possible to specify an empty subscription array:
.. code-block:: console
{"subscriptions":[]}
Note: depending on OPC UA server configuration (number of objects, number of variables) this empty configuration might take a while to be loaded.
Object names, variable names and NamespaceIndexes can be easily retrieved browsing the given OPC UA server using OPC UA clients, such as UaExpert
https://www.unified-automation.com/downloads/opc-ua-clients.html
As an examle the UA client shows:
.. code-block:: console
Node:
NodeId ns=5;s=85/0:Simulation
NodeClass [Object]
BrowseName 5:Simulation
Variables:
NodeId ns=5;s=Sinusoid1
NodeClass [Variable]
BrowseName 5:Sinusoid1
NodeId ns=2;s=MyLevel
NodeClass [Variable]
BrowseName 2:MyLevel
Most examples come from Object in ProSys OPC UA simulation server:
https://www.prosysopc.com/products/opc-ua-simulation-server/
To build freeopcua you must clone the freeopcua repository to a directory of your choice.
.. code-block:: console
$ git clone https://github.com/FreeOpcUa/freeopcua.git
$ cd freeopcua
$ export FREEOPCUA=pwd
$ mkdir build
Edit the OPCUA CMakeFiles.txt file and find the line
.. code-block:: console
option(SSL_SUPPORT_MBEDTLS "Support rsa-oaep password encryption using mbedtls library " ON)
and set it to OFF.
.. code-block:: console
option(SSL_SUPPORT_MBEDTLS "Support rsa-oaep password encryption using mbedtls library " OFF)
.. code-block:: console
The build options for the OPCUA libraries must be changed to create static libraries. To do this find the occurences of the add_library directive for opcuaclient, opcuacode and opcuaprotocol and add the option STATIC to it
.. code-block:: console
add_library(opcuaclient STATIC ...
add_library(opcuacore STATIC ...
add_library(opcuaprotocol STATIC ...
.. code-block:: console
$ cd build $ cmake .. $ make
The freeopcua library requires boost libraries that are not available in packaged form for the Raspbery Pi. Therefore it can not be built for the Raspbery Pi without first building these boost libraries.
Alternatively run the script requirements.sh to automate this and place a copy of the freeopcua project in your home directory.
.. code-block:: console
requirements.sh
If you require to place the freeopcua code elsewhere you may pass the requirements.sh script an argument of a directory name to use.
.. code-block:: console
requirements.sh ~/projects
To build the opcua plugin run the commands:
.. code-block:: console
$ mkdir build $ cd build $ cmake .. $ make
You may also pass one or more of the following options to cmake to override this default behaviour:
NOTE:
Examples:
no options
$ cmake ..
no options and FOGLAMP_ROOT set
$ export FOGLAMP_ROOT=/some_foglamp_setup
$ cmake ..
set FOGLAMP_SRC
$ cmake -DFOGLAMP_SRC=/home/source/develop/FogLAMP ..
set FOGLAMP_INCLUDE
$ cmake -DFOGLAMP_INCLUDE=/dev-package/include ..
set FOGLAMP_LIB
$ cmake -DFOGLAMP_LIB=/home/dev/package/lib ..
set FOGLAMP_INSTALL
$ cmake -DFOGLAMP_INSTALL=/home/source/develop/FogLAMP ..
$ cmake -DFOGLAMP_INSTALL=/usr/local/foglamp ..