Elipse E3: envio de tags de comunicação para nuvem via MQTT

Uso o Elipse E3 para coletar informações de um CPL através de um driver Modbus e preciso enviar esses dados para nuvem via MQTT. Estou com dificuldades para configurar esse envio de informações do Elipse 3 para nuvem via MQTT. É possível realizar esse tipo de comunicação, ou seja, fazer o MQTT publicar dados coletou do Elipse E3?

Olá Luciana,

Em nossa base de conhecimento há um exemplo que realiza a leitura de dados via driver Elipse MQTT:
Aplicação exemplo: Driver MQTT em comunicação com Broker Mosquitto MQTT.

Para realizar a escrita, basta inserir o mesmo texto em Subscribe e no parâmetro Item do tag de comunicação.

Em caso de dúvidas, envie sua aplicação para o meu e-mail (delio@elipse.com.br).

Boa tarde,
Obrigada.
Era isso mesmo que eu precisava testar.
Att.

Boa tarde! Não estou conseguindo fazer a operação de publish. Se eu rodar apenas o teste do driver MQTT e escrever um valor direto no driver ele é publicado para o broker. Porém se eu fizer a associação do TAG do driver com um TAG contador, por exemplo, nada é publicado para o broker.

Rogers,

Qual é a versão do driver MQTT que você está utilizando?

Como exatamente você fez a associação? Poderia mandar um print?

Você está utilizando o E3 em modo demo?

Paulo,
A versão do driver MQTT é a 1.0.14.

Fiz uma associação reversa do valor de um tag contador com a value de um tag no driver, conforme abaixo:

E, sim, por enquanto só testei no modo demo do E3 v 4.6.162.

Rogers,

No modo Demo, a comunicação em runtime é permitida somente com 1 driver de nível 0. Não é o caso do Driver MQTT. Por isso, a comunicação só está funcionando pelo Studio.

Paulo,

Consegui testar a aplicação com uma licença runtime e funcionou perfeitamente. Muito obrigado pela ajuda.

1 Like

Olá Paulo,

Estava com o mesmo problema do Rogers e agora entendi o problema. Eu também estava com a licença demo.
Uma dúvida: Quais seriam os drivers a nível 0 e os a nível 1?

Abs…

Igor,

A grande maioria dos drivers são de nível 0. Alguns drivers específicos, como o MQTT, possuem um nível de proteção diferenciado.

Paulo,

Entendido! Muito obrigado!

Abs.

1 Like

Também estou esse problema no driver MQTT em modo demo. Vou testar com a licença de Studio. Seria interessante colocar essa nota em destaque no KB, pois os testes de drivers normalmente são realizados em modo demo.

Olá,

Escrevendo o valor na IOTag eu estou recebendo as mensagens no MQTT tranquilamente…
Mas surgiu a dúvida se consigo usar os templates para fazer o publish também…

Se sim, como seria?

Olá Régis,

Para realizar a escrita, basta inserir o mesmo texto em Subscribe e no parâmetro Item do tag de comunicação.

Em caso de dúvidas, envie sua aplicação para o meu e-mail (delio@elipse.com.br).

@delio

Bom dia, desculpa a demora na resposta.
Mas de qualquer maneira, obrigado.

Eu consegui fazer o que queria… na verdade, fiz até melhor kkkk
Consegui fazer a comunicação do ElipseE3 diretamente com RabbitMQ :slight_smile:

Obrigado!

Olá, pessoal!

Qual o procedimento para publicar em um tópico utilizando um template? Não consigo fazer essa operação. Preciso publicar os dados em um tópico específico, mas só consigo se não especificar um template. Testei com dois templates bem simples em formato JSON (ver abaixo) e não obtive sucesso na escrita

Template 1:
[{
“Value”: “V1”
}]

Template 2:
[{
“Value”: “E3VAL”
}]

Obrigado!

Boa tarde Rodrigo,

Sugiro que você crie um bloco de comunicação (configurar o bloco com AllowWrite = FALSE) com um elemento, atribua o valor e realize a escrita no bloco.

Exemplo:

Sub CommandButton3_Click()
Dim ArrayValor(1)
ArrayValor(0) = 10
Application.GetObject("Driver1.Bloco1").WriteEx ArrayValor
End Sub

Template utilizado:

Bloco:

Valor recebido em MQTTlens:
image

Já para publicar um template JSON que possui mais de um parâmetro, o modo esperado também seria configurar o bloco com AllowWrite = FALSE, e primeiro atribuir o valor aos elementos.
Por exemplo: Temperatura = 25 e Humidity = 44, e depois fazer o Write do Bloco.

Dim ArrayValor(2)
ArrayValor(0) = 25
ArrayValor(1) = 44
Application.GetObject("Driver1.[Sensor-001]").WriteEx ArrayValor

Template utilizado:

Se ainda tiver alguma dúvida, por gentileza envie a sua aplicação para o meu e-mail (delio@elipse.com.br), que irei analisar.

1 Like

Obrigado, Delio. Adaptando seu exemplo consegui uma forma que funciona.

O problema que notei é quando uso um template como o seguinte, com um bloco de comunicação de 1 elemento:

{
“CommandId”: 0, “WagoProtocol”:“1.5.0”,
“CommandParameters”: [
{
“Name”: “Parameter 0 from Cloud to PFC”,
“Value”: “E3VAL”
}]
}

Para resolver, precisei enviar todos os valores pelo vetor criado no script, utilizando um bloco de 4 elementos. Os 3 primeiros elementos são constantes e o 4º recebe uma variável. Dessa forma, funcionou com o seguinte template:

{
“CommandId”: “E3VAL”, “WagoProtocol”:“E3VAL”,
“CommandParameters”: [{
“Name”: “E3VAL”,
“Value”: “E3VAL”
}]
}

1 Like