Monitoreo de red con ESPHome
ESPHome es un sistema popular para controlar dispositivos Espressif ESP8266 y ESP32. Este artículo describe cómo monitorear múltiples dispositivos utilizando un componente SNMP personalizado de ESPHome y una herramienta de monitoreo de red popular.
Gracias a esto, puedes detectar e informarte sobre comportamientos anómalos de tus dispositivos, como reinicios, señal Wi-Fi baja o falta de memoria libre.
SNMP es compatible con muchas aplicaciones, pero este artículo discute la integración con la herramienta de código abierto Zabbix. Se asume que tienes instalada y funcionando la versión 6.4 de Zabbix.
INFO
La guía de instalación de Zabbix está disponible en la página web de Zabbix: https://www.zabbix.com/download
Componente SNMP
ESPHome no soporta SNMP de forma nativa. Pero proporciona una manera conveniente de integrarse con componentes externos.
Para agregar el protocolo SNMP al dispositivo ESPHome, referencia el Componente SNMP ubicado en https://github.com/aquaticus/esphome-snmp.
Agrega el siguiente código a tu archivo de configuración YAML de ESPHome:
yaml
# Enable SNMP component
snmp:
# Retrieve SNMP component from github
external_components:
- source: github://aquaticus/esphome-snmp
Cuando se suba a una placa, deberías ver el siguiente mensaje en el registro:
log
[00:00:00][C][snmp:268]: Configuración SNMP:
[00:00:00][C][snmp:269]: Contacto: ""
[00:00:00][C][snmp:270]: Ubicación: ""
Prueba de SNMP
Ahora puedes intentar recuperar alguna información de la placa. Hay muchos programas que pueden explorar datos SNMP. Aquí hay algunos ejemplos:
Windows
- MIB Browser https://www.ireasoning.com/mibbrowser.shtml
- Paessler SNMP Monitor https://www.paessler.com/snmp_monitor
Linux
Aquí tienes un código de ejemplo para usar en Linux. Reemplaza la dirección IP 192.168.1.10
por un valor que coincida con la dirección de tu placa.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0
El resultado de la consulta anterior se ve como el siguiente. Es una descripción del sistema. Es el objeto SMTP sysDescr
que se traduce al ID de objeto 1.3.6.1.2.1.1.1.0
.
log
iso.3.6.1.2.1.1.1.0 = STRING: "ESPHome versión 2023.3.2 compilado Mar 29 2023, 00:00:01, Placa wemos_d1_mini32”
Opcionalmente, puedes intentar obtener el tiempo de actividad del sistema.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0
El resultado:
log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81
El valor de los ticks de tiempo cambia continuamente. Cada llamada te da un número diferente.
Para una lista de todos los objetos proporcionados por el componente SNMP, consulta la documentación del componente.
Plantillas
Descarga el archivo de plantilla desde: https://github.com/aquaticus/esphome_zabbix_templates
Consiste en 3 plantillas:
- Esphome por SNMP - plantilla base
- Esphome ESP32 por SNMP - plantilla para dispositivos ESP32 (incluyendo C3, S2, etc.)
- Esphome ESP8266 por SNMP - plantilla para ESP8266
La principal diferencia entre las plantillas ESP8266 y ESP32 son los datos de heap.
Importa el archivo de plantilla haciendo clic en el botón Importar en Colección de datos→Plantillas.
Hosts
Abre la interfaz de Zabbix y ve a Monitoreo→Hosts. Haz clic en Crear host en la esquina superior derecha.
- Como plantilla selecciona Esphome ESP32 por SNMP o Esphome ESP8266 por SNMP
- Añade la interfaz
SNMP
. - Rellena los campos de IP o DNS
- Deja el resto de los campos con los valores predeterminados.
- Al final, haz clic en el botón
Añadir
.
En la lista de hosts monitoreados (Monitoreo→Hosts) deberías ver una nueva entrada.
Habrá un icono de SNMP en la columna de Disponibilidad. Inicialmente, estará en gris, pero después de unos segundos debería volverse verde.
Monitoreo
Una vez que veas el icono verde, puedes examinar los Datos SNMP.
Si haces clic en el enlace Últimos datos, verás la lista de elementos recopilados.
Alarmas
Zabbix puede detectar automáticamente situaciones anómalas. En la terminología de Zabbix, se llama "Disparador". La plantilla ESPHome incluye disparadores que detectan problemas típicos, por ejemplo, si la placa se reinició. Para una lista de disparadores disponibles, selecciona Disparadores
del menú cuando hagas clic en el nombre del host.
Aquí hay una lista predeterminada de disparadores:
- El firmware ha cambiado
- Alta pérdida de ping ICMP
- Alto tiempo de respuesta de ping ICMP
- No disponible por ping ICMP
- El host ha sido reiniciado
- No hay recopilación de datos SNMP
- El nombre del sistema ha cambiado
- Señal WiFi débil durante 5 minutos
- Conexión WiFi perdida
También puedes crear tus propios disparadores, por ejemplo, para monitorear el uso del heap.
Tiempo de actividad de la red
El componente SNMP puede proporcionar el tiempo de actividad de la red (objeto SNMP sysUpTime 1.3.6.1.2.1.1.3
). Este parámetro es crucial para detectar eventos de pérdida de conexión.
Desafortunadamente, el componente WiFi de ESPHome no proporciona esta información. Debido a eso, por defecto, el componente SNMP siempre informa sysUpTime
como 0.
Para obtener datos significativos, debes modificar el componente WiFi original y agregar una función.
Puedes hacerlo manualmente o usar el que ya está modificado del repositorio.
Modificar manualmente el componente WiFi
Clona e instala ESPHome desde GitHub.
Edita dos archivos wifi_component.cpp
y wifi_component.h
en el directorio esphome/components/wifi
.
En la línea 282 de wifi_component.h
añade dos líneas (puede ser en cualquier lugar de la sección pública):
cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
uint32_t wifi_connected_timestamp() {return connected_timestamp_;}
protected:
uint32_t connected_timestamp_{0};
En wifi_component.cpp
añade en la línea 518 justo antes del mensaje de registro "WiFi Connected":
cpp
this->connected_timestamp_ = millis();
Probar el tiempo de actividad de la red
Compila y carga el nuevo firmware.
Ahora, cuando leas el objeto sysUpTime 1.3.6.1.2.1.1.3
, deberías obtener valores diferentes cada vez que se realice la operación de obtención.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0
Deberías ver un valor diferente de 0.
Lista de OIDs disponibles
Para ver una lista completa de los objetos proporcionados por el componente SNMP de ESPHome, consulta la lista de OID