Monitoraggio della rete ESPHome
ESPHome è un sistema popolare per controllare dispositivi Espressif ESP8266 e ESP32. Questo articolo descrive come monitorare più dispositivi utilizzando un componente SNMP personalizzato di ESPHome e un popolare strumento di monitoraggio della rete.
Grazie a ciò, puoi rilevare ed essere informato su comportamenti anomali dei tuoi dispositivi, come riavvii, segnale Wi-Fi debole o mancanza di memoria libera.
SNMP è supportato da molte applicazioni, ma questo articolo discute l'integrazione con lo strumento open source Zabbix. Si presume che tu abbia installato e in esecuzione Zabbix versione 6.4.
INFO
La guida all'installazione di Zabbix è disponibile sulla pagina web di Zabbix: https://www.zabbix.com/download
Componente SNMP
ESPHome non supporta SNMP di default. Ma fornisce un modo conveniente per integrarsi con componenti esterni.
Per aggiungere il protocollo SNMP al dispositivo ESPHome, fai riferimento al Componente SNMP situato in https://github.com/aquaticus/esphome-snmp.
Aggiungi il seguente codice al tuo file di configurazione YAML di ESPHome:
yaml
# Enable SNMP component
snmp:
# Retrieve SNMP component from github
external_components:
- source: github://aquaticus/esphome-snmp
Quando caricato su una scheda, dovresti vedere il seguente messaggio nel log:
log
[00:00:00][C][snmp:268]: Configurazione SNMP:
[00:00:00][C][snmp:269]: Contatto: ""
[00:00:00][C][snmp:270]: Posizione: ""
Testare SNMP
Ora puoi provare a recuperare alcune informazioni dalla scheda. Ci sono molti programmi che possono navigare nei dati SNMP. Ecco alcuni esempi:
Windows
- MIB Browser https://www.ireasoning.com/mibbrowser.shtml
- Paessler SNMP Monitor https://www.paessler.com/snmp_monitor
Linux
Ecco un codice di esempio da utilizzare su Linux. Sostituisci l'indirizzo IP 192.168.1.10
con un valore che corrisponde all'indirizzo della tua scheda.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0
Il risultato della query sopra appare come quello sotto. È una descrizione del sistema. È l'oggetto SNMP sysDescr
che si traduce nell'ID oggetto 1.3.6.1.2.1.1.1.0
.
log
iso.3.6.1.2.1.1.1.0 = STRING: "ESPHome versione 2023.3.2 compilata il 29 mar 2023, 00:00:01, Scheda wemos_d1_mini32”
Opzionalmente puoi provare a ottenere il tempo di attività del sistema.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0
Il risultato:
log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81
Il valore dei tick temporali cambia continuamente. Ogni chiamata ti dà un numero diverso.
Per un elenco di tutti gli oggetti forniti dal componente SNMP, consulta la documentazione del componente.
Modelli
Scarica il file del modello da: https://github.com/aquaticus/esphome_zabbix_templates
Consiste di 3 modelli:
- Esphome by SNMP - modello base
- Esphome ESP32 by SNMP - modello per dispositivi ESP32 (inclusi C3, S2 e così via)
- Esphome ESP8266 by SNMP - modello per ESP8266
La principale differenza tra i modelli ESP8266 e ESP32 è nei dati heap.
Importa il file del modello cliccando il pulsante Importa in Raccolta dati→Modelli.
Host
Apri l'interfaccia Zabbix e vai a Monitoraggio→Host. Clicca su Crea host nell'angolo in alto a destra.
- Come modello seleziona Esphome ESP32 by SNMP o Esphome ESP8266 by SNMP
- Aggiungi l'interfaccia
SNMP
. - Compila i campi IP o DNS
- Lascia il resto dei campi con i valori predefiniti.
- Alla fine clicca sul pulsante
Aggiungi
.
Nell'elenco degli host monitorati (Monitoraggio→Host) dovresti vedere una nuova voce.
Ci sarà un'icona SNMP nella colonna Disponibilità. Inizialmente sarà grigia, ma dopo alcuni secondi dovrebbe diventare verde.
Monitoraggio
Una volta che vedi l'icona verde, puoi esaminare i Dati SNMP.
Se clicchi sul link Ultimi dati vedrai l'elenco degli elementi raccolti.
Allarmi
Zabbix può rilevare automaticamente situazioni anomale. Nella terminologia Zabbix, è chiamato "Trigger". Il modello ESPHome viene fornito con trigger che rilevano problemi tipici, ad esempio, la scheda è stata resettata. Per un elenco dei trigger disponibili, seleziona Trigger
dal menu quando clicchi sul nome dell'host.
Ecco un elenco predefinito di trigger:
- Il firmware è cambiato
- Alta perdita di ping ICMP
- Alto tempo di risposta ping ICMP
- Non disponibile tramite ping ICMP
- L'host è stato riavviato
- Nessuna raccolta dati SNMP
- Il nome del sistema è cambiato
- Segnale WiFi debole per 5m
- Connessione WiFi persa
Puoi anche creare i tuoi trigger, ad esempio, per monitorare l'uso dell'heap.
Uptime della rete
Il componente SNMP può fornire l'uptime della rete (oggetto SNMP sysUpTime1.3.6.1.2.1.1.3
). Questo parametro è cruciale per rilevare eventi di perdita di connessione.
Purtroppo, il componente WiFi di ESPHome non fornisce queste informazioni. Per questo motivo, di default, il componente SNMP riporta sempre sysUpTime
come 0.
Per ottenere dati significativi, devi modificare il componente WiFi originale e aggiungere una funzione.
Puoi farlo manualmente o utilizzare quello già modificato dal repository.
Modifica manuale del componente WiFi
Clona e installa ESPHome da GitHub.
Modifica i due file wifi_component.cpp
e wifi_component.h
nella directory esphome/components/wifi
.
Alla riga 282 di wifi_component.h
aggiungi due righe (può essere ovunque nella sezione pubblica):
cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
uint32_t wifi_connected_timestamp() {return connected_timestamp_;}
protected:
uint32_t connected_timestamp_{0};
In wifi_component.cpp
aggiungi alla riga 518, appena prima del messaggio di log "WiFi Connected":
cpp
this->connected_timestamp_ = millis();
Test dell'uptime della rete
Compila e carica il nuovo firmware.
Ora, quando leggi l'oggetto sysUpTime 1.3.6.1.2.1.1.3
, dovresti ottenere valori diversi ogni volta che viene eseguita l'operazione di get.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0
Dovresti vedere un valore diverso da 0.
Elenco degli OID disponibili
Per vedere un elenco completo degli oggetti forniti dal componente SNMP di ESPHome, consulta elenco OID