Visualizando dados de um Nó LoRa com Node-red e Grafana

Adail Silva

TTN_Teresina TTN_Tianguá

Posted on 15-09-2020

Este tutorial mostra como usar os dados coletados dos nós LoRa em belos gráficos e visualizações usando Node-red e Grafana.

Nosso backhaul será wi-fi e será gerenciado pelo venerável Raspberry Pi 3.

Instalando o InfluxDB:
O Influx db é um dos mais famosos bancos de dados de série temporal, que é rápido, confiável e também suporta alta disponibilidade por meio de clustering. Não iremos nos aprofundar em muitos detalhes por enquanto. Para instalar o Influxdb em seu sistema, siga as etapas abaixo:

OS X (via Homebrew)
brew update
brew install influxdb

Docker Image

docker pull influxdb
Ubuntu & Debian SHA256:

wget https://dl.influxdata.com/influxdb/releases/influxdb_1.4.2_amd64.deb
sudo dpkg -i influxdb_1.4.2_amd64.deb
RedHat & CentOS SHA256:

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.4.2.x86_64.rpm
sudo yum localinstall influxdb-1.4.2.x86_64.rpm
Windows Binaries (64-bit) SHA256:

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.4.2_windows_amd64.zip
unzip influxdb-1.4.2_windows_amd64.zip

Assumiremos que o instalaremos em uma máquina Linux.

Networking
Por padrão, o InfluxDB usa as seguintes portas de rede:

A porta TCP 8086 é usada para comunicação cliente-servidor pela API HTTP do InfluxDB
A porta TCP 8088 é usada para o serviço RPC para backup e restauração
Além das portas acima, o InfluxDB também oferece vários plug-ins que podem exigir portas personalizadas. Todos os mapeamentos de portas podem ser modificados por meio do arquivo de configuração, que está localizado em /etc/influxdb/influxdb.conf para instalações padrão.

Configuração
O sistema possui padrões internos para cada definição de arquivo de configuração. Visualize as definições de configuração padrão com o comando influxd config.

A maioria das configurações no arquivo de configuração local (/etc/influxdb/influxdb.conf) são comentadas; todas as configurações comentadas serão determinadas pelos padrões internos. Quaisquer configurações não comentadas no arquivo de configuração local substituem os padrões internos. Observe que o arquivo de configuração local não precisa incluir todas as definições de configuração.

Existem duas maneiras de iniciar o InfluxDB com seu arquivo de configuração:

Aponte o processo para o arquivo de configuração correto usando a opção -config: influxd -config /etc/influxdb/influxdb.conf
Defina a variável de ambiente INFLUXDB_CONFIG_PATH para o caminho de seu arquivo de configuração e inicie o processo. Por exemplo: echo $ INFLUXDB_CONFIG_PATH /etc/influxdb/influxdb.conf influxd
O InfluxDB verifica primeiro a opção -config e, em seguida, a variável de ambiente. Agora você deve ter o influxdb configurado na porta 8086 e pronto para aceitar dados de entrada.

Configurando o Node-Red com o InfluxDB
Depois de configurar o Node-red Prossiga para o menu Paleta na configuração Node-red e instale o plug-in influxdb do node-red:

via linha de comando:

cd ~ /.node-red npm install node-red-contrib-influxdb

Devemos agora reiniciar o Node-red para assumir/detectar os novos nós.

Configurando bancos de dados InfluxDB:
Precisamos entender primeiro como funcionam os bancos de dados influxdb. Os bancos de dados Influxdb são basicamente bancos de dados de séries temporais. Eles armazenam dados como pontos no tempo e cada ponto no tempo tem vários atributos associados a ele

Além disso, o outro conceito principal que precisamos estar cientes ao usar o InfluxDB é que o registro dos dados tem um carimbo de data / hora, um conjunto de tags e um valor medido. Isso permite, por exemplo, criar um valor denominado Temp e marcá-lo dependendo do sensor de origem:

Temp: Valor = 19,1, Sensor = Sala1

Temp: Valor = 21,9, Sensor = Sala2

Isso permite processar todos os dados ou apenas processar dados com base em uma determinada tag ou tags. Valores e tags podem ser criados em tempo real, sem defini-los previamente.

Crie um banco de dados influxdb:

A criação do banco de dados é um processo simples. Para criar o banco de dados, precisamos acessar a máquina que hospeda o servidor InfluxDB e executar o comando influx:

~$host influx
Connected to http://localhost:8086 version 1.2.0
InfluxDB shell version: 1.2.0
> create database TempData
> show databases
name: databases
name


_internal
TempData
>
.

Isso cria um banco de dados chamado Tempdata, no qual podemos agora começar a postar valores de nossos nós TTN.

Antes de adicionar dados a um banco de dados, precisamos primeiro selecioná-lo, assim como fazemos no SQL.

> use TempData
Using database TempData >

Agora o banco de dados está selecionado e podemos usar o banco de dados para gravar valores nos fluxos. Vamos ver como isso é feito:

> insert Temperature,Sensor=room1 value=20.0
> insert Temperature,Sensor=room2 value=21.9
> select * from Temperature
name: Temperature
time Sensor value
---- ------ -----
1487939008959909164 room1 20.0
1487939056354678353 room2 21.9

Agora que nosso banco de dados está pronto. Vamos conectar a ele do Node-red

Configurando a paleta Node-Red influxdb
Como agora temos um banco de dados, podemos configurar os nós InfluxDB Node Red para armazenar dados no banco de dados: Existem dois tipos de nós InfluxDB, um que tem uma entrada e uma saída e outro que só tem uma entrada. Também temos um nó de configuração influxdb. Em nosso exemplo, usamos o nó de saída influxdb e o nó de configuração para conectar ao banco de dados e armazenar dados.

Adicione um nó de saída db inpflux ao palco:

Clique duas vezes no nó e adicione os detalhes da seguinte forma:

1) Configure o servidor Influxdb:

HEre clicar no ícone penceil e adicionar a configuração para o seu servidor influxdb, certifique-se de ter definido um nome de usuário e uma senha de acesso, defina os corretos no menu:

Agora selecione a medição na qual deseja gravar os dados da série temporal. No nosso caso, é a temperatura:

Agora, se o msg.payload fornecido tem entrada para o nó é um valor único, digamos 20.0, isso é equivalente a fazer:

> Insert Temperature value=12

Temos outros formatos para msg.payload que permite associar tags e medidas. Basta verificar a guia Informações do nó.

Agora conecte o nó de saída TTN para seu aplicativo TTN à entrada do nó influxdb da seguinte maneira:

Para obter mais detalhes sobre como configurar seu nó TTN:

https://www.hackster.io/naresh-krish/integrate-node-red-with-rak811-lora-node-using-the-ttn-c4564a

Aqui, o msg.payload do nó do dispositivo RAK811 terá várias informações enviadas pelo serviço TTN. Você pode escolher enviar apenas os valores de que precisa ou enviar toda a carga útil após um pouco de análise.

Agora, cada mensagem proveniente de TTN seria armazenada na medição do banco de dados Influxdb chamada Temperatura. Cruzamos o primeiro rio de configuração do banco de dados e adição de dados. Agora é visualizá-lo:

Digite Grafana:
Grafana é uma ferramenta muito poderosa para visualizar e monitorar fluxos de dados. Ele suporta influxdb por padrão e, portanto, é uma ótima escolha para nosso projeto. Vamos cavar

Instale grafana:
Visite a página aqui:

http://docs.grafana.org/installation/

Depois de instalado, o Grafana estaria disponível na porta 3000. O nome de usuário/senha padrão é admin/admin.

Configuração da fonte de dados:
A configuração primária a ser adicionada é a configuração da fonte de dados

Aqui adicione o seguinte

Defina o tyep para Influxdb.
Defina o URL como localhost: 8086 se os dois componentes estiverem na mesma máquina. Ou forneça o endereço correto do DB
Defina os detalhes do InfluxDB como o nome do banco de dados: No nosso caso, TempData e o nome de usuário e a senha.
Clique em Adicionar
Esta fonte de dados estará disponível para nossos gráficos / painéis.

Vamos adicionar alguns gráficos:
É hora de adicionar um painel e criar alguns gráficos:

Vá para a página do painel no Grafana:

Clique no botão do gráfico na parte superior: Isso criará um gráfico assim:

Agora você deve alterar os dados deste gráfico. Clique com o botão direito no título do gráfico e clique em editar

Aqui na fonte de dados selecione a fonte de dados TempData.
Depois de selecionadas, as várias medidas serão exibidas como um menu suspenso logo abaixo da fonte de dados. Um exemplo é mostrado abaixo:

Selecione aqui a medição da temperatura. e não edite nenhum dos outros campos por enquanto. Podemos deixar como está. Assim que você clicar em salvar na parte superior do gráfico. O gráfico mostrará estatísticas em tempo real do infludb conforme novas mensagens do TTN começam a chegar ao nó Node-red.

Alerta no Grafana:

Os alertas no Grafana permitem que você anexe regras aos seus painéis de controle. Quando você salva o painel, o Grafana extrai as regras de alerta em um armazenamento separado de regras de alerta e as programa para avaliação.

Na guia de alerta do painel gráfico, você pode configurar a frequência com que a regra de alerta deve ser avaliada e as condições que precisam ser atendidas para que o alerta mude de estado e acione suas notificações.

Execução
As regras de alerta são avaliadas no backend Grafana em um agendador e mecanismo de execução de consulta que faz parte do núcleo do Grafana. Apenas algumas fontes de dados são suportadas no momento. Eles incluem Graphite, Prometheus, InfluxDB, OpenTSDB, MySQL, Postgres e Cloudwatch.

Clustering
Atualmente o alerta suporta uma forma limitada de alta disponibilidade. Desde a v4.2.0 do Grafana, as notificações de alerta são desduplicadas ao executar vários servidores. Isso significa que todos os alertas são executados em todos os servidores, mas nenhuma notificação de alerta duplicada é enviada devido à lógica de desduplicação. O balanceamento de carga adequado de alertas será introduzido no futuro.

Configuração de regra

Atualmente, apenas o painel gráfico suporta regras de alerta, mas isso será adicionado aos painéis Singlestat e Tabela também em uma versão futura.

Intervalo de nome e avaliação
Aqui você pode especificar o nome da regra de alerta e com que freqüência o planejador deve avaliar a regra de alerta.

Condições
Atualmente, o único tipo de condição que existe é uma condição de consulta que permite especificar uma letra de consulta, intervalo de tempo e uma função de agregação.

Exemplo de condição de consulta

avg() OF query(A, 5m, now) IS BELOW 14

avg () Controla como os valores de cada série devem ser reduzidos a um valor que pode ser comparado ao limite. Clique na função para alterá-la para outra função de agregação.
consulta (A, 5m, agora) A letra define qual consulta deve ser executada na guia Métricas. Os dois segundos parâmetros definem o intervalo de tempo, 5m, agora significa 5 minutos a partir de agora. Você também pode fazer 10m, agora-2m para definir um intervalo de tempo que será de 10 minutos a 2 minutos a partir de agora. Isso é útil se você deseja ignorar os últimos 2 minutos de dados.
ESTÁ ABAIXO 14 Define o tipo de limite e o valor do limite. Você pode clicar em ESTÁ ABAIXO para alterar o tipo de limite.
A consulta usada em uma regra de alerta não pode conter nenhuma variável de modelo. Atualmente, oferecemos suporte apenas aos operadores AND e OR entre as condições e eles são executados em série. Por exemplo, temos 3 condições na seguinte ordem: condição: A (avalia como: VERDADEIRO) OU condição: B (avalia como: FALSO) E condição: C (avalia como: VERDADEIRO) então o resultado será calculado como (( VERDADEIRO OU FALSO) E VERDADEIRO) = VERDADEIRO.

Planejamos adicionar outros tipos de condição no futuro, como Outro alerta, onde você pode incluir o estado de outro alerta em suas condições e hora do dia.

Multiple Series
Se uma consulta retornar várias séries, a função de agregação e a verificação de limite serão avaliadas para cada série. O que Grafana não faz atualmente é rastrear o estado da regra de alerta por série. Isso tem implicações que são detalhadas no cenário abaixo.

Condição de alerta com consulta que retorna 2 séries: servidor1 e servidor2
server1 series faz com que a regra de alerta seja acionada e mude para o estado de alerta
As notificações são enviadas com a mensagem: pico de carga (servidor1)
Em uma avaliação subsequente da mesma regra de alerta, a série server2 também faz com que a regra de alerta seja acionada
Nenhuma nova notificação é enviada porque a regra de alerta já está no estado Alerta.
Isso conclui a parte 3 de nosso tutorial de experimentos RAK811. Espero que tenham gostado e tenham sido capazes de criar visualizações incríveis com essas ferramentas.