1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-05-01 13:48:56 +08:00
Manuel Imperiale e16a025fba
MF-886 - Add OPC-UA adapter (#878)
* 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>
2019-10-22 17:44:19 +02:00
..
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00
2019-10-22 17:44:19 +02:00

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.