ESPHome-Netzwerküberwachung
ESPHome ist ein beliebtes System zur Steuerung von Espressif ESP8266- und ESP32-Geräten. Dieser Artikel beschreibt, wie man mehrere Geräte mit einer benutzerdefinierten ESPHome-SNMP-Komponente und einem beliebten Netzwerküberwachungstool überwachen kann.
Dank dessen können Sie anomale Verhaltensweisen Ihrer Geräte erkennen und darüber informiert werden, wie Neustarts, schwaches WLAN-Signal oder fehlender freier Speicher.
SNMP wird von vielen Anwendungen unterstützt, aber dieser Artikel behandelt die Integration mit dem Open-Source-Tool Zabbix. Es wird davon ausgegangen, dass Sie Zabbix Version 6.4 installiert und in Betrieb haben.
INFO
Die Zabbix-Installationsanleitung ist auf der Zabbix-Webseite verfügbar: https://www.zabbix.com/download
SNMP-Komponente
ESPHome unterstützt SNMP nicht von Haus aus. Es bietet jedoch eine bequeme Möglichkeit, sich mit externen Komponenten zu integrieren.
Um das SNMP-Protokoll zu einem ESPHome-Gerät hinzuzufügen, verweisen Sie auf die SNMP-Komponente unter https://github.com/aquaticus/esphome-snmp.
Fügen Sie den folgenden Code zu Ihrer ESPHome-YAML-Konfigurationsdatei hinzu:
yaml
# Enable SNMP component
snmp:
# Retrieve SNMP component from github
external_components:
- source: github://aquaticus/esphome-snmp
Wenn Sie es auf ein Board hochladen, sollten Sie die folgende Nachricht im Protokoll sehen:
log
[00:00:00][C][snmp:268]: SNMP Config:
[00:00:00][C][snmp:269]: Contact: ""
[00:00:00][C][snmp:270]: Location: ""
SNMP testen
Jetzt können Sie versuchen, einige Informationen vom Board abzurufen. Es gibt viele Programme, die SNMP-Daten durchsuchen können. Hier sind einige Beispiele:
Windows
- MIB Browser https://www.ireasoning.com/mibbrowser.shtml
- Paessler SNMP Monitor https://www.paessler.com/snmp_monitor
Linux
Hier ist ein Beispielcode zur Verwendung unter Linux. Ersetzen Sie die IP-Adresse 192.168.1.10
durch einen Wert, der der Adresse Ihres Boards entspricht.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0
Das Ergebnis der obigen Abfrage sieht wie folgt aus. Es ist eine Beschreibung des Systems. Es ist das SMTP-Objekt sysDescr
, das in die Objekt-ID 1.3.6.1.2.1.1.1.0
übersetzt wird.
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”
Optional können Sie versuchen, die Systemlaufzeit zu ermitteln.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0
Das Ergebnis:
log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81
Der Wert der Timeticks ändert sich kontinuierlich. Jeder Aufruf gibt Ihnen eine andere Zahl.
Für eine Liste aller von der SNMP-Komponente bereitgestellten Objekte siehe die Komponentendokumentation.
Vorlagen
Laden Sie die Vorlagendatei herunter von: https://github.com/aquaticus/esphome_zabbix_templates
Sie besteht aus 3 Vorlagen:
- Esphome by SNMP - Basisvorlage
- Esphome ESP32 by SNMP - Vorlage für ESP32-Geräte (einschließlich C3, S2 und so weiter)
- Esphome ESP8266 by SNMP - Vorlage für ESP8266
Der Hauptunterschied zwischen ESP8266- und ESP32-Vorlagen sind die Heap-Daten.
Importieren Sie die Vorlagendatei, indem Sie auf die Schaltfläche Importieren in Datensammlung→Vorlagen klicken.
Hosts
Öffnen Sie die Zabbix-Oberfläche und gehen Sie zu Überwachung→Hosts. Klicken Sie auf Host erstellen in der oberen rechten Ecke.
- Wählen Sie als Vorlage Esphome ESP32 by SNMP oder Esphome ESP8266 by SNMP
- Fügen Sie die
SNMP
-Schnittstelle hinzu. - Füllen Sie die IP- oder DNS-Felder aus
- Lassen Sie die restlichen Felder mit den Standardwerten.
- Klicken Sie am Ende auf die Schaltfläche
Hinzufügen
.
In der Liste der überwachten Hosts (Überwachung→Hosts) sollten Sie einen neuen Eintrag sehen.
Es wird ein SNMP-Symbol in der Verfügbarkeit-Spalte geben. Anfangs wird es ausgegraut sein, aber nach ein paar Sekunden sollte es grün werden.
Überwachung
Sobald Sie das grüne Symbol sehen, können Sie die SNMP-Daten untersuchen.
Wenn Sie auf den Link Neueste Daten klicken, sehen Sie die Liste der gesammelten Elemente.
Alarme
Zabbix kann automatisch anomale Situationen erkennen. In der Zabbix-Terminologie wird dies als "Trigger" bezeichnet. Die ESPHome-Vorlage wird mit Triggern geliefert, die typische Probleme erkennen, zum Beispiel, wenn das Board zurückgesetzt wurde. Für eine Liste der verfügbaren Trigger wählen Sie Trigger
aus dem Menü, wenn Sie auf den Hostnamen klicken.
Hier ist eine Standardliste von Triggern:
- Firmware wurde geändert
- Hoher ICMP-Paketverlust
- Hohe ICMP-Antwortzeit
- Nicht erreichbar durch ICMP-Ping
- Der Host wurde neu gestartet
- Keine SNMP-Datensammlung
- Der Systemname wurde geändert
- Schwaches WiFi-Signal für 5 Minuten
- WiFi-Verbindung verloren
Sie können auch Ihre eigenen Trigger erstellen, zum Beispiel, um die Heap-Nutzung zu überwachen.
Netzwerkverfügbarkeit
Die SNMP-Komponente kann die Netzwerkverfügbarkeit bereitstellen (SNMP-Objekt sysUpTime 1.3.6.1.2.1.1.3
). Dieser Parameter ist entscheidend, um Verbindungsverlustereignisse zu erkennen.
Leider bietet die ESPHome WiFi-Komponente diese Information nicht. Daher meldet die SNMP-Komponente standardmäßig immer sysUpTime
als 0.
Um aussagekräftige Daten zu erhalten, müssen Sie die ursprüngliche WiFi-Komponente modifizieren und eine Funktion hinzufügen.
Sie können dies manuell tun oder die bereits modifizierte Version aus dem Repository verwenden.
WiFi-Komponente manuell modifizieren
Klonen und installieren Sie ESPHome von GitHub.
Bearbeiten Sie zwei Dateien wifi_component.cpp
und wifi_component.h
im Verzeichnis esphome/components/wifi
.
Fügen Sie in Zeile 282 von wifi_component.h
zwei Zeilen hinzu (es kann überall im öffentlichen Abschnitt sein):
cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
uint32_t wifi_connected_timestamp() {return connected_timestamp_;}
protected:
uint32_t connected_timestamp_{0};
Fügen Sie in wifi_component.cpp
in Zeile 518 direkt vor der "WiFi Connected"-Lognachricht hinzu:
cpp
this->connected_timestamp_ = millis();
Netzwerkverfügbarkeit testen
Kompilieren und laden Sie die neue Firmware hoch.
Wenn Sie nun das sysUpTime 1.3.6.1.2.1.1.3
Objekt lesen, sollten Sie jedes Mal, wenn die Get-Operation ausgeführt wird, unterschiedliche Werte erhalten.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0
Sie sollten einen Wert sehen, der ungleich 0 ist.
Liste der verfügbaren OIDs
Um eine vollständige Liste der von der ESPHome SNMP-Komponente bereitgestellten Objekte zu sehen, schauen Sie sich die OID-Liste an.