# 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 | Service Log level | 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 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: ```yaml 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_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 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: ```bash # 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_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 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 `/docker/addons/opcua-adapter/docker-compose.yml`. In order to run Mainflux opcua-adapter, execute the following command: ```bash 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](https://mainflux.readthedocs.io/en/latest/opcua/).