Skip to content

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

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.

Zabbix hosts

  1. Wählen Sie als Vorlage Esphome ESP32 by SNMP oder Esphome ESP8266 by SNMP
  2. Fügen Sie die SNMP-Schnittstelle hinzu.
  3. Füllen Sie die IP- oder DNS-Felder aus
  4. Lassen Sie die restlichen Felder mit den Standardwerten.
  5. 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.

SNMP availability

Ü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.

New host

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.