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.ymlInsira 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.jsonConfigure 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