Comunicação com The Things Network via Driver MQTT.

Neste artigo, mostraremos como utilizar o Driver MQTT para permitir a comunicação do Elipse E3 com dispositivos conectados a The Things Network.

A The Things Network é uma rede aberta cujo objetivo é viabilizar a Internet das Coisas (IOT). Dessa forma, projetada sob um paradigma de baixa potência e longo alcance, a rede está sendo construída pela comunidade ao redor do mundo através da instalação de gateways aos quais os dispositivos podem se conectar sem custo.

As informações aqui presentes sobre a integração da The Thing Network com MQTT foram obtidas de sua documentação.

Configuração da Rede

A The Things Network permite que dispositivos de baixa potência utilizem gateways de longo alcance para se conectar a uma rede aberta e descentralizada, através da qual eles podem então comunicar-se com aplicações. Semelhantemente, é também possível estabelecer uma rede privada. Este artigo considera a utilização da rede aberta, também chamada rede comunitária; entretanto, a configuração do Driver para uma rede privada segue os mesmos princípios.

Para gerenciar seus dispositivos e aplicações na rede comunitária, utilize o Console fornecido pela The Things Network através de um navegador. Caso necessário, faça login ou então crie uma conta. Logo após, clique em Applications para gerenciar suas aplicações. Nesse contexto, uma aplicação gerencia dispositivos e suas integrações. Selecione a aplicação com a qual deseja se comunicar ou então crie uma nova. A página seguinte, exibida na Figura 1, mostra uma visão geral da aplicação, fornecendo algumas informações importantes para a configuração do Driver MQTT:

  • Application ID – nome único que identifica esta aplicação.
  • Handler – serviço responsável pelo direcionamento de mensagens de múltiplas aplicações.
  • Access Key – chave de acesso para a aplicação; ela é necessária para estabelecer a comunicação com esta aplicação.
Figura 1: The Things Network Console: página Application Overview.

Em seguida, clique em Devices no menu superior. Selecione o dispositivo com que deseja se comunicar ou crie um novo. A página seguinte, exibida na Figura 2, mostra as informações gerais do dispositivo. Além disso, a página permite enviar mensagens para o dispositivo (downlink) ou simular mensagens vindas do dispositivo (uplink). Para configurar o Driver, a seguinte informação é necessária:

  • Device ID – nome único dentro da aplicação que identifica o dispositivo.
Figura 2: The Things Network Console: página Device Overview.

Configuração do Driver

No Elipse E3, abra a janela de configuração do Driver MQTT. Logo após, acesse a aba Setup e certifique-se de que a camada física selecionada seja Ethernet.

Em seguida, na aba Ethernet, informe o endereço IP e a porta aos quais o Driver deve se conectar. Na rede comunitária da The Things Network, o endereço IP está associado ao handler: [region].thethings.network, onde [region] é a parte final do handler. Na aplicação exemplo, o handler é ttn-handler-brazil; portanto, o endereço é brazil.thethings.network. Ao utilizar uma rede privada, o endereço deve ser fornecido pelo administrador da rede. Por padrão, o protocolo MQTT utiliza a porta 1883. Da mesma forma, certifique-se também que a camada de transporte está configurada para TCP/IP.

Figura 3: Driver MQTT: Janela de configurações, aba Ethernet.

Finalmente, na aba General, configure o acesso a sua aplicação. No campo Client ID, informe um nome que este Driver utilizará para se identificar com o broker MQTT; assim, este nome deve ser único entre as conexões do broker. No campo User, insira o Application ID da sua aplicação e, no campo Password, insira sua Access Key. Essas informações foram obtidas anteriormente, na configuração da rede.

Figura 4: Driver MQTT: Janela de configurações, aba General.

Recebendo Dados

Na The Things Network, as mensagens enviadas por dispositivos para as aplicações são chamadas de uplink. O broker publica essas mensagens em um tópico com o seguinte nome: [AppID]/devices/[DevID]/up, onde [AppID] é o Application ID e [DevID] é o Device ID. Na aplicação exemplo, o tópico seria beal-app/devices/beal-dvc/up.

Essas mensagens são enviadas em forma de um objeto JSON. Uma mensagem exemplo é mostrada a seguir:

{
  "app_id":"beal-app",
  "dev_id":"beal-dvc",
  "hardware_serial":"00001111AAAAFFFF",
  "port":1,
  "counter":0,
  "payload_raw":"AQEB",
  "metadata":
  {
    "time":"2020-04-09T16:58:41.105992752Z"
  }
}

 

Declarando templates

O Driver MQTT permite a declaração de templates em diferentes formatos que atuam na decodificação das mensagens recebidas. Para declarar um template, abra a janela de configuração e acessa a aba Templates. Marque a opção “Apply local timezone to timestamps” para que a estampa de tempo extraída da mensagem seja mostrada no fuso-horário local. Insira um nome para o template, selecione o formato como JSON e clique em Add para criá-lo. Em seguida, clique em Edit para abrir a janela de edição do template. Para mais informações sobre a utilização de templates, consulte a documentação do driver.

Figura 5: Driver MQTT: Janela de configurações, aba Templates.

A seguir, vemos um template para a aplicação exemplo. Este template fornece os valores extraídos de três diferentes campos da mensagem recebida: “payload_raw”, “counter” e “port”. Além disso, o template lê a estampa de tempo da mensagem e a utiliza como estampa de tempo da própria tag de comunicação.

{
  "payload_raw":"V1",
  "counter":"V2",
  "port":"V3",	
  "metadata":
  {
    "time":"TS_TEXT(%Y-%m-%dT%H:%M:%S.%fZ)"
  }
}

 

No Elipse E3

Para receber dados no E3, crie um tag ou bloco de comunicação e configure-o como somente leitura: deixe marcada a caixa Leitura (propriedade AllowRead com valor True) e desmarque a caixa Escrita (propriedade AllowWrite com valor False). No campo Item, insira o nome do tópico a ser acessado, conforme descrito anteriormente, seguido do nome do template, separados por um “;” (ponto-e-vírgula). É possível ainda explicitar um valor específico do template, acrescentando mais um “;” (ponto-e-vírgula) e o identificador do campo utilizado no template (por exemplo, V1). A Figura 6 mostra diferentes maneiras de obter os valores recebidos por tags ou blocos de comunicação no E3.

Figura 6: E3 Studio: Exemplos de Tags e Blocos de Leitura.

Na Figura 6, a mensagem exibida foi enviada simulando um uplink pela página de informações gerais do dispositivo no Console, conforme visto na Figura 2. Observe que, nesse caso, o payload é informado como hexadecimal, mas transmitido e recebido como base 64. Ao utilizar um dispositivo real, é possível, através do Console, criar um decodificador que traduz os bytes enviados pelo dispositivo para um objeto JSON, facilitando assim a interpretação dos dados.

Enviando Dados

Na The Things Network, as mensagens enviadas de uma aplicação para um dispositivo são denominadas downlink. Para isso, elas devem ser publicadas no broker no seguinte tópico: [AppID]/devices/[DevID]/down, em que [AppID] é o Application ID e [DevID] é o Device ID. Na aplicação exemplo, o tópico ficaria beal-app/devices/beal-dvc/down.

Para enviar dados no E3, crie um Tag de Comunicação e configure-o como somente escrita: desmarque a caixa Leitura (propriedade AllowRead com valor False) e deixe marcada a caixa Escrita (propriedade AllowWrite com valor True). No campo Item, deve ser inserido o nome do tópico que se deseja acessar, conforme descrito anteriormente.

As mensagens devem ser enviadas pelo driver em um JSON com formato adequado, caso contrário o handler não as encaminhará para o dispositivo. Dois formatos válidos são mostrados a seguir.  Sugere-se montar o pacote a ser enviado através de um script.

{
  "port":1,                // Porta no dispositivo
  "confirmed":false,       // O dispositivo deve confirmar recepção?
  "payload_raw":"AQIDBA==" // Payload em base 64: [0x01, 0x02, 0x03, 0x04]
}
{
  "port":1,          // Porta no dispositivo
  "confirmed":false, // O dispositivo deve confirmar recepção?
  "payload_fields":  // Payload como objeto JSON
  {
    "led": true
  }
}

É possível verificar se as mensagens estão sendo recebidas corretamente através do Console, acessando o menu Data dentro do dispositivo. A Figura 7 registra o recebimento das duas mensagens acima, enviadas a partir do E3.

Figura 7 : The Things Network Console: página Device Data.
Este artigo foi útil? Was this post helpful?
Yes0
No0

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *