Monitoramento de rede ESPHome
ESPHome é um sistema popular para controlar dispositivos Espressif ESP8266 e ESP32. Este artigo descreve como monitorar vários dispositivos usando um componente SNMP personalizado do ESPHome e uma ferramenta popular de monitoramento de rede.
Graças a isso, você pode detectar e ser informado sobre comportamentos anômalos dos seus dispositivos, como reinicializações, sinal Wi-Fi fraco ou falta de memória livre.
O SNMP é suportado por muitas aplicações, mas este artigo discute a integração com a ferramenta de código aberto Zabbix. Assume-se que você tenha o Zabbix versão 6.4 instalado e em execução.
INFO
O guia de instalação do Zabbix está disponível na página web do Zabbix: https://www.zabbix.com/download
Componente SNMP
O ESPHome não suporta SNMP por padrão. Mas ele fornece uma maneira conveniente de integrar com componentes externos.
Para adicionar o protocolo SNMP ao dispositivo ESPHome, consulte o Componente SNMP localizado em https://github.com/aquaticus/esphome-snmp.
Adicione o seguinte código ao seu arquivo de configuração YAML do ESPHome:
yaml
# Enable SNMP component
snmp:
# Retrieve SNMP component from github
external_components:
- source: github://aquaticus/esphome-snmp
Quando carregado em uma placa, você deve ver a seguinte mensagem no log:
log
[00:00:00][C][snmp:268]: SNMP Config:
[00:00:00][C][snmp:269]: Contact: ""
[00:00:00][C][snmp:270]: Location: ""
Testando SNMP
Agora você pode tentar recuperar algumas informações da placa. Existem muitos programas que podem navegar pelos dados SNMP. Aqui estão alguns exemplos:
Windows
- MIB Browser https://www.ireasoning.com/mibbrowser.shtml
- Paessler SNMP Monitor https://www.paessler.com/snmp_monitor
Linux
Aqui está um código de exemplo para usar no Linux. Substitua o endereço IP 192.168.1.10
por um valor que corresponda ao endereço da sua placa.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0
O resultado da consulta acima se parece com o abaixo. É uma descrição do sistema. É o objeto SMTP sysDescr
, que se traduz no ID do objeto 1.3.6.1.2.1.1.1.0
.
log
iso.3.6.1.2.1.1.1.0 = STRING: "ESPHome version 2023.3.2 compiled Mar 29 2023, 00:00:01, Board wemos_d1_mini32”
Opcionalmente, você pode tentar obter o tempo de atividade do sistema.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0
O resultado:
log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81
O valor dos "timeticks" está mudando continuamente. Cada chamada fornece um número diferente.
Para uma lista de todos os objetos fornecidos pelo componente SNMP, consulte a documentação do componente.
Modelos
Baixe o arquivo de modelo em: https://github.com/aquaticus/esphome_zabbix_templates
Consiste em 3 modelos:
- Esphome por SNMP - modelo base
- Esphome ESP32 por SNMP - modelo para dispositivos ESP32 (incluindo C3, S2 e assim por diante)
- Esphome ESP8266 por SNMP - modelo para ESP8266
A principal diferença entre os modelos ESP8266 e ESP32 é o dado de heap.
Importe o arquivo de modelo clicando no botão Importar em Coleta de dados→Modelos.
Hosts
Abra a interface do Zabbix e vá para Monitoramento→Hosts. Clique em Criar host no canto superior direito.
- Como modelo, selecione Esphome ESP32 por SNMP ou Esphome ESP8266 por SNMP
- Adicione a interface
SNMP
. - Preencha os campos de IP ou DNS
- Deixe o restante dos campos com os valores padrão.
- No final, clique no botão
Adicionar
.
Na lista de hosts monitorados (Monitoramento→Hosts), você deve ver uma nova entrada.
Haverá um ícone SNMP na coluna Disponibilidade. Inicialmente, ele estará acinzentado, mas após alguns segundos, deve ficar verde.
Monitoramento
Assim que você vir o ícone verde, poderá examinar os Dados SNMP.
Se você clicar no link Últimos dados, verá a lista de itens coletados.
Alarmes
O Zabbix pode detectar automaticamente situações anômalas. Na terminologia do Zabbix, isso é chamado de "Gatilho". O modelo ESPHome vem com gatilhos que detectam problemas típicos, por exemplo, a placa foi reiniciada. Para uma lista de gatilhos disponíveis, selecione Gatilhos
no menu quando você clicar no nome do host.
Aqui está uma lista padrão de gatilhos:
- Firmware foi alterado
- Alta perda de ping ICMP
- Alto tempo de resposta de ping ICMP
- Indisponível por ping ICMP
- O host foi reiniciado
- Sem coleta de dados SNMP
- O nome do sistema foi alterado
- Sinal WiFi fraco por 5m
- Conexão WiFi perdida
Você também pode criar seus próprios gatilhos, por exemplo, para monitorar o uso de heap.
Tempo de atividade da rede
O Componente SNMP pode fornecer o tempo de atividade da rede (objeto SNMP sysUpTime 1.3.6.1.2.1.1.3
). Este parâmetro é crucial para detectar eventos de perda de conexão.
Infelizmente, o componente WiFi do ESPHome não fornece essa informação. Por causa disso, por padrão, o Componente SNMP sempre reporta sysUpTime
como 0.
Para obter dados significativos, você deve modificar o componente WiFi original e adicionar uma função.
Você pode fazer isso manualmente ou usar o que já foi modificado do repositório.
Modificar manualmente o componente WiFi
Clone e instale o ESPHome do github.
Edite dois arquivos wifi_component.cpp
e wifi_component.h
no diretório esphome/components/wifi
.
Na linha 282 de wifi_component.h
adicione duas linhas (pode ser em qualquer lugar na seção pública):
cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
uint32_t wifi_connected_timestamp() {return connected_timestamp_;}
protected:
uint32_t connected_timestamp_{0};
Em wifi_component.cpp
adicione na linha 518, logo antes da mensagem de log "WiFi Connected":
cpp
this->connected_timestamp_ = millis();
Testar tempo de atividade da rede
Compile e carregue o novo firmware.
Agora, quando você ler o objeto sysUpTime 1.3.6.1.2.1.1.3
, você deverá obter valores diferentes a cada vez que a operação de obtenção for realizada.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0
Você deve ver um valor diferente de 0.
Lista de OIDs disponíveis
Para ver uma lista completa de objetos fornecidos pelo Componente SNMP do ESPHome, veja lista de OIDs