Integração da TTN com a TagoIO

   A integração da TTN com a TagoIO é uma das diversas opções de integrações possíveis com a TagoIO e se você tem uma cobertura da TTN disponível, certamente vai querer testar essa integração.

   A TTN no Brasil é muito fraca se comparado com as duas principais coberturas de LoRaWAN no Brasil que é a American Tower (Everynet) e a Helium network. Porém a TTN é ótima para quem é projetista ou estudante, pois como o uso é gratuito acaba ajudando muito essas duas grandes áreas.

Como fazer a integração TTN com a TagoIO?

   Para fazer essa primeiramente vamos precisar ir para TagoIO e criar um novo dispositivo com o conector especifico para TTN. Caso você não siga esse passo e tente já usar um dispositivo anteriormente criado, não irá funcionar.

    Para criar um dispositivo customizado para a TTN, basta ir em: Dispositivos, adicionar um novo dispositivo e selecionar o conector “Custom TTI / TTN” e pronto.

Criando um dispositivo customizado na TagoIO para a TTN

   Ao selecionar a opção descrita na imagem acima, será necessário colocar o DevEUI do dispositivo. Agora vamos criar uma autorização na TagoIO para que a TTN consiga inserir dados na sua conta Tago, para isso precisamos ir no painel da sua aplicação da Tago e clicar em ‘devices‘ depois ‘authorization‘.

Como adicionar uma autenticação para usar em integrações

   Em seguida irá aparecer um painel similar a esse, porém irá ter todas as autorizações geradas. Como você não irá ter nenhuma, será necessário criar. É bastante importante que não adicione absolutamente nada no item riscado abaixo, após concluído essa tarefa, copie a autorização que você acabou de criar.

Criando uma autenticação para uso de integrações para a TagoIO

Adicionando integração com a TagoIO na TTN

   Agora basta copiar a autorização respectiva a autorização que acabou de ser criada e em seguida ir na TTN na secção de integrações, webhooks e selecionar a TagoIO.

Adicionando um webhooks na TTN para fazer a integração com a TagoIO

   Ao fazer isso, será exibido um outro painel onde será necessário colocar um nome para essa integração e também a autenticação da TagoIO que criamos anteriormente.

Adicionando uma autenticação de webhooks na TTN para fazer a integração com a TagoIO

   Pronto, ao fazer isso concluirmos a integração da TTN com a TagoIO e após finalizar esse processo a própria TTN vai fazer “ping” da integração para validar se de fato deu certo ou não, se der certo aparecerá um status dizendo “healthy / saudável“.

Criando um formatador na TTN para TagoIO

   Como já virmos nos dois últimos posts sobre integrações para a TagoIO, a própria Tago já disponibiliza alguns exemplos de formatação de json para algumas aplicações, então devemos respeitar essas formatações para que possamos aproveitar ao máximo o dashboard, certo?

   Existem dois métodos para adicionarmos formatadores na TTN: 1. Adicionar para a própria aplicação, porém isso é algo massivo e para testes isolados talvez não faça tanto sentido; 2. Adicionar para o dispositivo especifico, esse método particularmente acho mais interessantes para fins de testes e é o que vamos usar aqui.

   Para adicionarmos um formatador ao dispositivo basta ir no dispositivo desejado e selecionar o tipo de formatador para “Custom JavaScript formatter” como na imagem abaixo:

Adicionando um formatador customizado na TTN

Problemas de formatação na TTN para a TagoIO

   Antes mesmo de já te mostrar qual é o código JavaScript usado para o mesmo exemplo que foi feito no post da Helium com a adaptação para a TTN, é preciso compreender o comportamento da própria TTN em relação a integração.

   Em comparação com a Helium, o que enviamos é aquilo que recebemos do outro lado (na Tago), porém na TTN não é bem assim que funciona, e para comprovar isso vamos fazer um teste usando a mesma estrutura de formatação de json para o uso do maps da TagoIO.

Exemplo de json para usar o map pin sample da TagoIO

   Então se criamos uma formatação idêntica ao modelo de cima que no caso vai replicar exatamente o que foi feito na integração da Helium o que da um resultado igual a esse abaixo:

Como não formatar um json da TTN para a TagoIO

   Porém se enviarmos o json dessa forma na TTN os resultados são completamente diferentes do que enviamos, o que o corre é uma desmembramento do que enviamos e até uma “correção”, veja só:

Erro de formatação da TTN para a TagoIO, aprenda como contornar isso.

Estratégia de correção de formatação de Json na TTN

   Com esse resultado acima podemos concluir que cada integração pode ter um resultado diferente uma da outra, mas com base nesse próprio resultado podemos criar uma modificação para ajustar os resultados ao ponto retornar a variável principal “device_location_location” para “device_location” por exemplo.

   Como já sabemos que o nome do array de localização acaba indo parar no nome da variável, sendo também corrigido e incrementado com o nome “location”, então podemos adotar essa estratégia a seguir:

JS de formatação de json da TTN para a TagoIO

   Usando essa formatação acima podemos concluir que o resultado terá como nome de variável “device_location” e o nome do array deixará de ser “device” e passará a ser “location”. Para verificarmos isso basta irmos no ‘live inspector” da TagoIO, veja só:

Demonstração de uma formatação ideal para a integração da TTN com a TagoIO

   Agora sim o json ficou mais arrumado e como esperado que ficasse, e como agora você já sabe o motivo das modificações no formatador basta pegar o código abaixo e usar para o teste que será feito mais a frente.

function convertByteToString(hexString){
  const byteArray = hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16));
  return String.fromCharCode(...byteArray);
}

function extractBytes(hexString, delimiter) {
  const bytes = hexString.split(delimiter);

  const beforeDelimiter = bytes[0];
  const afterDelimiter = bytes.slice(1).join(delimiter);
        
  return [beforeDelimiter, afterDelimiter];
}

function decodeUplink(input) {
  const a = input.bytes;
  const b = a.map(byte => byte.toString(16).padStart(2, '0')).join('');
  const extractedBytes = extractBytes(b, '3b');
  return {
    data:{
      device: {
        lat: parseFloat(convertByteToString(extractedBytes[0])),
        lng: parseFloat(convertByteToString(extractedBytes[1]))
      }
    }
  };
}

Podemos usar duas integrações diferentes para o mesmo dispositivo na TagoIO?

   Sim podemos, e vou te explicar como fazer isso. Já foi mencionado anteriormente que a TTN tem uma cobertura muito baixa no Brasil, mas é ideal para estudo da tecnologia LoRaWAN justamente por ser gratuita, então é comum que hora ou outra a gente acaba usando mais outro LNS para aplicações profissionais, porém como vamos integrar nossos dispositivos de LNS diferentes na TagoIO?

   A resposta é bastante simples, basta criamos o mesmo dispositivo porém para conectores diferentes na TagoIO. Pode parecer meio confuso isso, mas vou explicar melhor, particularmente uso tanto a TTN como também a Helium e em todos tutoriais relacionados a LoRaWAN uso os mesmos módulos LoRaWAN.

   Então para esse tutorial por exemplo, já havia um dispositivo para Helium (eui-0012f80000001e62), porém também usei ele neste tutorial e a única operação feita foi adicionar outro dispositivo para TTN que tivesse o mesmo endereço ficando dessa forma:

Duas integrações de diferentes LNS na TagoIO porém com o mesmo dispositivo

   O ruim desse método é que você terá que tratar como se fosse um dispositivo diferente mesmo embora seja o mesmo embora fisicamente seja um só.

Criando uma simulação de rastreamento no End device

  Para comprovar se de fato tudo se comunica de forma adequada, vamos criar uma simulação de rastreamento com LoRaWAN usando o módulo da Radioenge, um ESP32 e um gateway LoRaWAN da Radioenge que está apontando para a TTN.

Circuito para teste

   Para testes vamos usar literalmente um ESP32 e um módulo LoRaWAN da Radioenge que é um hardware amplamente usado aqui, mas você pode repetir esse mesmo processo com qualquer outro hardware que funcionará da mesma forma:

ESP32 com módulo LoRaWAN da Radioenge para emular um rastreamento na TagoIO

Código de simulação

   O código não tem nada complexo, nada além do que já foi mostrado em outros posts. De qualquer forma, por mais que seja uma simulação bastante simples você poderá modificar o código e adicionar um GPS e montar um rastreador LoRaWAN.

#include "LoRaWAN_Radioenge.h"
 
LoRaWAN_Radioenge LoRa(&Serial2);
 
void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
   
  LoRa.begin(true);
  LoRa.AJOIN(false);
  LoRa.printParameters();
 
  if(LoRa.JoinNetwork(OTAA, TTN, true, false)) 
    LoRa.SendString("-25.613268;-46.742196", 1);
   
   LoRa.pinMode(2, OUTPUT);
}
 
void loop() {
  LoRa.SendString("-24.613368;-45.722196", 1);
  delay(5000);
  LoRa.SendString("-23.613128;-44.752115", 1);
  delay(5000);
  LoRa.SendString("-23.613020;-43.782110", 1);
  delay(5000);
  LoRa.SendString("-21.613240;-42.742120", 1);
  delay(5000);
}

Funcionamento da integração da TTN e TagoIO

   No vídeo a seguir é possível notar algumas diferença se comparado com o da Helium, o “value” exibe os valores de “lat” e “lng”, e não uma legenda como do teste da Helium. De qualquer forma ainda assim funciona.

Deixe uma resposta

Descubra mais sobre elcereza

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue reading