A The Things Network é uma rede aberta cujo objetivo é viabilizar a Internet das Coisas (IOT). 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.
Neste artigo, mostraremos como utilizar o Driver MQTT para permitir que o Elipse E3 se comunique com dispositivos conectados a The Things Network. As informações sobre a integração da The Thing Network por MQTT foram obtidas de sua documentação.
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 podem comunicar-se com aplicações. É possível, também, estabelecer uma rede privada. Este artigo considera a utilização da rede aberta, também chamada rede comunitária, porém 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 crie uma conta. Na sequência, 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 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 esta aplicação, necessária para estabelecer a comunicação com a mesma.
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.
No Elipse E3, abra a janela de configuração do Driver MQTT. Na aba Setup, 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, em que [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. 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 com o qual este Driver se identificará para o broker MQTT; 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 a Access Key da mesma. Essas informações foram obtidas anteriormente na configuração da rede.
Figura 4 – Driver MQTT: Janela de configurações, aba General.
Na The Things Network, as mensagens enviados por dispositivos para a aplicações são denominadas uplink. O broker publica essas mensagens num tópico com o seguinte nome: [AppID]/devices/[DevID]/up, em que [AppID] é o Application ID e [DevID] é o Device ID. Na aplicação exemplo, o tópico ficaria 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",
"payload_raw":"AQEB",
"time":"2020-04-09T16:58:41.105992752Z"
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.
Um template para a aplicação exemplo é mostrado a seguir. Este template fornece os valores extraídos de três 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",
"time":"TS_TEXT(%Y-%m-%dT%H:%M:%S.%fZ)"
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, deve ser inserido o nome do tópico que se deseja acessar, 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, mostrada 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.
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 formato 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
É 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.