
* NOISSUE- Add OPC-UA adapter Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * NOISSUE - Add opc-adapter PoC, docker and vendor Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Convert OPC messages to SenML Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add gopcua package Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * lora-adapter typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add OPC Reader Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Typo fix Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Update copyright headers Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix reviews Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add opc config Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add all opc envars in the config Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Config typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add route map Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Use opcua package instead of opc Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix OPCUA typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Rm MQTT sub Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Move interefaces to root Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Fix revieews and typo Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Update Gopkg.toml Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com> * Add all envars into .env Signed-off-by: Manuel Imperiale <manuel.imperiale@gmail.com>
OPC-UA Adapter
Adapter between Mainflux IoT system and an OPC-UA Server.
This adapter sits between Mainflux and an OPC-UA server and just forwards the messages from one system to another.
OPC-UA Server is used for connectivity layer and the data is pushed via this adapter service to Mainflux, where it is persisted and routed to other protocols via Mainflux multi-protocol message broker. Mainflux adds user accounts, application management and security in order to obtain the overall end-to-end OPC-UA solution.
Configuration
The service is configured using the environment variables presented in the following table. Note that any unset variables will be replaced with their default values.
Variable | Description | Default |
---|---|---|
MF_OPCUA_ADAPTER_HTTP_PORT | Service HTTP port | 8188 |
MF_OPCUA_ADAPTER_LOG_LEVEL | Log level for the OPC-UA Adapter | error |
MF_NATS_URL | NATS instance URL | nats://localhost:4222 |
MF_OPCUA_ADAPTER_SERVER_URI | OPC-UA Server subscription URI | opc.tcp://opcua.rocks:4840 |
MF_OPCUA_ADAPTER_NODE_NAMESPACE | OPC-UA Server Node Namespace | 0 |
MF_OPCUA_ADAPTER_NODE_IDENTIFIER | OPC-UA Server Node Identifier | 2256 |
MF_OPCUA_ADAPTER_POLICY | OPC-UA Server Policy | |
MF_OPCUA_ADAPTER_MODE | OPC-UA Server Mode | |
MF_OPCUA_ADAPTER_CERT_FILE | OPC-UA Server Certificate file | |
MF_OPCUA_ADAPTER_KEY_FILE | OPC-UA Server Key file | |
MF_OPCUA_ADAPTER_ROUTE_MAP_URL | Route-map database URL | localhost:6379 |
MF_OPCUA_ADAPTER_ROUTE_MAP_PASS | Route-map database password | |
MF_OPCUA_ADAPTER_ROUTE_MAP_DB | Route-map instance that should be used | 0 |
MF_THINGS_ES_URL | Things service event store URL | localhost:6379 |
MF_THINGS_ES_PASS | Things service event store password | |
MF_THINGS_ES_DB | Things service event store db | 0 |
MF_OPCUA_ADAPTER_ROUTE_MAP_NAME | OPC-UA adapter instance name | opcua |
Deployment
The service is distributed as Docker container. The following snippet provides a compose file template that can be used to deploy the service container locally:
version: "2"
services:
adapter:
image: mainflux/opcua:[version]
container_name: [instance name]
environment:
MF_OPCUA_ADAPTER_HTTP_PORT: [Service HTTP port]
MF_OPCUA_ADAPTER_LOG_LEVEL: [OPC-UA Adapter Log Level]
MF_NATS_URL: [NATS instance URL]
MF_OPCUA_ADAPTER_SERVER_URI: [OPC-UA Server subscription URI]
MF_OPCUA_ADAPTER_NODE_NAMESPACE: [OPC-UA Server Node Namespace]
MF_OPCUA_ADAPTER_NODE_IDENTIFIER: [OPC-UA Server Node Identifier]
MF_OPCUA_ADAPTER_POLICY: [OPC-UA Server Policy]
MF_OPCUA_ADAPTER_MODE: [OPC-UA Server Mode]
MF_OPCUA_ADAPTER_CERT_FILE: [OPC-UA Server Certificate file]
MF_OPCUA_ADAPTER_KEY_FILE: [OPC-UA Server Key file]
MF_OPCUA_ADAPTER_ROUTE_MAP_URL: [Route-map database URL]
MF_OPCUA_ADAPTER_ROUTE_MAP_PASS: [Route-map database password]
MF_OPCUA_ADAPTER_ROUTE_MAP_DB: [Route-map instance that should be used]
MF_THINGS_ES_URL: [Things service event store URL]
MF_THINGS_ES_PASS: [Things service event store password]
MF_THINGS_ES_DB: [Things service event store db]
MF_OPCUA_ADAPTER_ROUTE_MAP_NAME: [OPC-UA adapter instance name]
To start the service outside of the container, execute the following shell script:
# download the latest version of the service
go get github.com/mainflux/mainflux
cd $GOPATH/src/github.com/mainflux/mainflux
# compile the opcua-adapter
make opcua
# copy binary to bin
make install
# set the environment variables and run the service
MF_OPCUA_ADAPTER_HTTP_PORT=[Service HTTP port] MF_OPCUA_ADAPTER_LOG_LEVEL=[OPC-UA Adapter Log Level] MF_NATS_URL=[NATS instance URL] MF_OPCUA_ADAPTER_SERVER_URI=[OPC-UA Server subscription URI] MF_OPCUA_ADAPTER_NODE_NAMESPACE=[OPC-UA Server Node Namespace] MF_OPCUA_ADAPTER_NODE_IDENTIFIER=[OPC-UA Server Node Identifier] MF_OPCUA_ADAPTER_POLICY=[OPC-UA Server Policy] MF_OPCUA_ADAPTER_MODE=[OPC-UA Server Mode] MF_OPCUA_ADAPTER_CERT_FILE=[OPC-UA Server Certificate file] MF_OPCUA_ADAPTER_KEY_FILE=[OPC-UA Server Key file] MF_OPCUA_ADAPTER_ROUTE_MAP_URL=[Route-map database URL] MF_OPCUA_ADAPTER_ROUTE_MAP_PASS=[Route-map database password] MF_OPCUA_ADAPTER_ROUTE_MAP_DB=[Route-map instance that should be used] MF_THINGS_ES_URL=[Things service event store URL] MF_THINGS_ES_PASS=[Things service event store password] MF_THINGS_ES_DB=[Things service event store db] MF_OPCUA_ADAPTER_ROUTE_MAP_NAME=[OPC-UA adapter instance name] $GOBIN/mainflux-opcua
Using docker-compose
This service can be deployed using docker containers.
Docker compose file is available in <project_root>/docker/addons/opcua-adapter/docker-compose.yml
. In order to run Mainflux opcua-adapter, execute the following command:
docker-compose -f docker/addons/opcua-adapter/docker-compose.yml up -d
Usage
For more information about service capabilities and its usage, please check out the Mainflux documentation.