Mainflux.mainflux/opcua
Dušan Borovčanin c3019fffb6
NOISSUE - Refactor messaging (#1141)
* Refactor messaging

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Rename SubscribeHandler to MessageHandler

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove `Auth` event logs

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update message pubsub APi

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix topics handling

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update CoAP adapter

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update Twins service

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update LoRa adapter

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update OPC UA adapter

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove broker package

Package `broker` is conceptually renamed to package `nats`.

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Update makefile

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Add comment explanation

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix MQTT adapter

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix typo

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Move NATS pub/sub implementation to pubsub pkg

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove an empty line in main methods

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Move messaging-related code to messaging package

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix Twins mocks

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Change Occurred back to Created

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix tranformer test

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix message proto commands

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Replace string literal with constant

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Remove alias from main method

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Change messaging pubsub alias

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Rename occured to created

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Handle NATS connection in the NATS PubSub

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Rename n to pub/pubSub

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>

* Fix typos

Signed-off-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>
2020-04-28 11:02:35 +02:00
..
api NOISSUE - Fix opc-ua message type handling (#1071) 2020-03-12 11:20:05 +01:00
db NOISSUE - Fix opc-ua subscriptions store (#1052) 2020-03-03 15:05:22 +01:00
gopcua NOISSUE - Refactor messaging (#1141) 2020-04-28 11:02:35 +02:00
redis MF-1129 - Use snake_case for Lora and OPC-UA metadata fields (#1130) 2020-04-21 17:49:17 +02:00
README.md MF-1096 - Fix AuthN and Things Auth ENVARS (#1066) 2020-04-07 12:02:17 +02:00
adapter.go MF-1129 - Use snake_case for Lora and OPC-UA metadata fields (#1130) 2020-04-21 17:49:17 +02:00
browser.go NOISSUE - Add opc-ua type handling and unsubscription (#1029) 2020-02-05 17:16:45 +01:00
eventstore.go MF-886 - Add OPC-UA adapter (#878) 2019-10-22 17:44:19 +02:00
routemap.go MF-886 - Add OPC-UA adapter (#878) 2019-10-22 17:44:19 +02:00
subscriber.go MF-886 - Add OPC-UA adapter (#878) 2019-10-22 17:44:19 +02:00

README.md

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 8180
MF_OPCUA_ADAPTER_LOG_LEVEL Service Log level error
MF_NATS_URL NATS instance URL nats://localhost:4222
MF_OPCUA_ADAPTER_INTERVAL_MS OPC-UA Server Interval in milliseconds 1000
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 name 0
MF_THINGS_ES_URL Things service event source URL localhost:6379
MF_THINGS_ES_PASS Things service event source password
MF_THINGS_ES_DB Things service event source DB 0
MF_OPCUA_ADAPTER_EVENT_CONSUMER Service event consumer 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: [Service Log Level]
      MF_NATS_URL: [NATS instance URL]
      MF_OPCUA_ADAPTER_INTERVAL_MS: [OPC-UA Server Interval (milliseconds)]
      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 name]
      MF_THINGS_ES_URL: [Things event source URL]
      MF_THINGS_ES_PASS: [Things event source password]
      MF_THINGS_ES_DB: [Things event source DB instance]
      MF_OPCUA_ADAPTER_EVENT_CONSUMER: [Service event consumer name]

To start the service outside of the container, execute the following shell script:

# download the latest version of the service
git clone https://github.com/mainflux/mainflux

cd 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_INTERVAL_MS: [OPC-UA Server Interval (milliseconds)] \
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 name] \
MF_THINGS_ES_URL=[Things service event source URL] \
MF_THINGS_ES_PASS=[Things service event source password] \
MF_THINGS_ES_DB=[Things service event source password] \
MF_OPCUA_ADAPTER_EVENT_CONSUMER=[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.