Integração OPCUA & S.IoT

Integrando OPCUA com o S.IoT por middleware.

Acesse a imagem do middleware do docker em:

https://hub.docker.com/r/konztec/siot-middleware-opcua

Como executar esta imagem

Crie um diretório e um arquivo docker-compose.yml:

$ mkdir siot-middleware-opcua
$ cd siot-middleware-opcua
$ touch docker-compose.yml

Insira o seguinte exemplo no arquivo docker-compose.yml e altere as variáveis de ambiente:

version: "3"

services:
  middleware_opcua_siot:
    image:  konztec/siot-middleware-opcua:2.21
    container_name: middleware_opcua_siot
    restart: always
    volumes:
      - ./dockervolume/logs:/app/logs
      - ./dockervolume/databuffered:/app/databuffered
      - ./config:/app/config
    network_mode: 'host'
    environment:
      - TIME_SEND_MACHINE=300000  #tempo em milisegundos para envio de status da máquina
      - TIME_SEND_SENSOR=10000  #tempo em milisegundos para envio de status e valor do sensor
      - TIME_SEND_BUFFER=600000  #tempo em milisegundos para envio de dados do buffer
      - TIME_RECONNECT=10000  #tempo em milisegundos para reconectar ao OPCUA, caso o mesmo falhe
      - ONE_MACHINE_TIME=true   #enviar sinal de uma máquina por vez
      - READ_ALL_SENSORS_BEFORE_SUBSCRIPTION=true #ler todos os sensores antes de iniciar a subscrição
      - APP_ID=123 #identificador para sua aplicação executar
      - PROTOCOL=MQTT #protocolo para envio ao SIOT. Protocolos suportados (MQTT, HTTP)  ** Importante: protocolo MQTT é suportado a partir da versão 2.0
      - HOST_SIOT_PUB=https://pub.host-example.com/api/v1  #endpoint SIoT caso protocolo seja (HTTP)
      - MQTT_BROKER_URL=mqtt://broker-siot.example.com:1883 #endpoint SIoT broker caso protocolo seja (MQTT)

Crie um diretório config e um arquivo config.json:

$ mkdir config
$ cd config
$ touch config.json

Configure a integração entre OPCUA e o SIoT como no exemplo abaixo:

[
  {
    "hostOPCUA": "opc.tcp://opcua.host-example.com:4840", // OPCUA
    "machineId": "id_cadastro_da_maquina", // Identificador máquina SIoT
    "token": "token_de_integracao_maquina",// Token integração da máquina SIoT
    "items": [
            {
        //obrigatório
        "description": "Máquina Ligada", // descrição sensor
        "sensorId": "ligarMaquina", // identificador do sensor no SIoT
        "signalId": "ligado", // identificador do sinal do sensor no SIoT
        "nodeId": "ns=4;i=4", // endereço da variável no OPCUA

        // opcionais
        "isSubscription": true, // (opcional) subscreve o endereço da variável no OPCUA, quando muda a variável do sensor é enviado para o SIoT

        "noInterval": true, // (opcional) caso 'true' a leitura ciclica da variável não é realizada

        "intervalSecondsSameValueSend": 60,  // (opcional) tempo em segundos para enviar enquanto a variável tem o mesmo valor

        "filterCriteria": { // (opcional) funciona apenas com `isSubscription: true`, mais detalhes em https://reference.opcfoundation.org/v104/Core/docs/Part4/5.12.1/
          "samplingInterval": 3000, // (opcional) Intervalo de tempo
          "discardOldest": true, // (opcional) caso true discarta o último valor
          "queueSize": 10 // (opcional) Tamanho da fila
        }
      },
      {
        "description": "Velocidade", 
        "nodeId": "ns=4;i=5",  
        "sensorId": "speed", 
        "signalId": "actual" 
      }
    ]
  }
]

Retorne ao diretório principal e execute:

$ cd ..
$ docker-compose up -d