Skip to content

Monitorowanie sieci ESPHome

ESPHome to popularny system do kontrolowania urządzeń Espressif ESP8266 i ESP32. Ten artykuł opisuje, jak monitorować wiele urządzeń za pomocą niestandardowego komponentu SNMP ESPHome i popularnego narzędzia do monitorowania sieci.

Dzięki temu możesz wykrywać i być informowany o anomaliach w zachowaniu swoich urządzeń, takich jak ponowne uruchomienia, niski sygnał Wi-Fi lub brak wolnej pamięci.

SNMP jest obsługiwany przez wiele aplikacji, ale ten artykuł omawia integrację z narzędziem open source Zabbix. Zakłada się, że masz zainstalowaną i działającą wersję Zabbix 6.4.

INFO

Przewodnik instalacji Zabbix jest dostępny na stronie Zabbix: https://www.zabbix.com/download

Komponent SNMP

ESPHome nie obsługuje SNMP bezpośrednio. Ale zapewnia wygodny sposób integracji z zewnętrznymi komponentami.

Aby dodać protokół SNMP do urządzenia ESPHome, odwołaj się do komponentu SNMP znajdującego się w https://github.com/aquaticus/esphome-snmp.

Dodaj następujący kod do pliku konfiguracyjnego YAML ESPHome:

yaml
# Enable SNMP component
snmp:

# Retrieve SNMP component from github
external_components:
   - source: github://aquaticus/esphome-snmp

Po przesłaniu na płytkę powinieneś zobaczyć następującą wiadomość w logu:

log
[00:00:00][C][snmp:268]: SNMP Config:
[00:00:00][C][snmp:269]:   Contact: ""
[00:00:00][C][snmp:270]:   Location: ""

Testowanie SNMP

Teraz możesz spróbować pobrać pewne informacje z płytki. Istnieje wiele programów, które mogą przeglądać dane SNMP. Oto kilka przykładów:

Windows

Linux

Oto przykładowy kod do użycia w systemie Linux. Zamień adres IP 192.168.1.10 na wartość odpowiadającą adresowi twojej płytki.

bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0

Wynik powyższego zapytania wygląda jak poniżej. Jest to opis systemu. Jest to obiekt SMTP sysDescr, który tłumaczy się na identyfikator obiektu 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”

Opcjonalnie możesz spróbować uzyskać czas działania systemu.

bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0

Wynik:

log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81

Wartość "timeticks" zmienia się ciągle. Każde wywołanie daje inny numer.

Aby uzyskać listę wszystkich obiektów dostarczanych przez komponent SNMP, zobacz dokumentację komponentu.

Szablony

Pobierz plik szablonu z: https://github.com/aquaticus/esphome_zabbix_templates

Składa się z 3 szablonów:

  • Esphome by SNMP - podstawowy szablon
  • Esphome ESP32 by SNMP - szablon dla urządzeń ESP32 (w tym C3, S2 i inne)
  • Esphome ESP8266 by SNMP - szablon dla ESP8266

Główna różnica między szablonami ESP8266 a ESP32 to dane dotyczące stosu.

Zaimportuj plik szablonu klikając przycisk Import w Kolekcja danych→Szablony.

Hosty

Otwórz interfejs Zabbix i przejdź do Monitorowanie→Hosty. Kliknij Utwórz host w prawym górnym rogu.

Hosty Zabbix

  1. Jako szablon wybierz Esphome ESP32 by SNMP lub Esphome ESP8266 by SNMP
  2. Dodaj interfejs SNMP.
  3. Wypełnij pola IP lub DNS
  4. Pozostaw resztę pól z wartościami domyślnymi.
  5. Na końcu kliknij przycisk Dodaj.

Na liście monitorowanych hostów (Monitorowanie→Hosty) powinien pojawić się nowy wpis.

W kolumnie Dostępność pojawi się ikona SNMP. Początkowo będzie wyszarzona, ale po kilku sekundach powinna zmienić kolor na zielony.

Dostępność SNMP

Monitorowanie

Gdy zobaczysz zieloną ikonę, możesz zbadać dane SNMP.

Jeśli klikniesz na link Najnowsze dane, zobaczysz listę zebranych elementów.

Nowy host

Alarmy

Zabbix może automatycznie wykrywać anomalne sytuacje. W terminologii Zabbix nazywa się to "Wyzwalacz". Szablon ESPHome zawiera wyzwalacze, które wykrywają typowe problemy, na przykład resetowanie płyty. Aby uzyskać listę dostępnych wyzwalaczy, wybierz Wyzwalacze z menu po kliknięciu nazwy hosta.

Oto domyślna lista wyzwalaczy:

  • Zmieniono oprogramowanie układowe
  • Wysoka utrata ping ICMP
  • Wysoki czas odpowiedzi ping ICMP
  • Niedostępny przez ping ICMP
  • Host został zrestartowany
  • Brak zbierania danych SNMP
  • Zmieniono nazwę systemu
  • Słaby sygnał WiFi przez 5 minut
  • Utracono połączenie WiFi

Możesz również tworzyć własne wyzwalacze, na przykład do monitorowania użycia sterty.

Czas pracy sieci

Komponent SNMP może dostarczać informacje o czasie pracy sieci (obiekt SNMP sysUpTime 1.3.6.1.2.1.1.3). Ten parametr jest kluczowy do wykrywania zdarzeń utraty połączenia.

Niestety, komponent WiFi ESPHome nie dostarcza tych informacji. Z tego powodu, domyślnie komponent SNMP zawsze raportuje sysUpTime jako 0.

Aby uzyskać znaczące dane, musisz zmodyfikować oryginalny komponent WiFi i dodać jedną funkcję.

Możesz to zrobić ręcznie lub użyć już zmodyfikowanej wersji z repozytorium.

Ręczna modyfikacja komponentu WiFi

Sklonuj i zainstaluj ESPHome z GitHuba.

Edytuj dwa pliki wifi_component.cpp i wifi_component.h w katalogu esphome/components/wifi.

W linii 282 pliku wifi_component.h dodaj dwie linie (mogą być w dowolnym miejscu sekcji publicznej):

cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
  uint32_t wifi_connected_timestamp() {return connected_timestamp_;}

 protected:
  uint32_t connected_timestamp_{0};

W pliku wifi_component.cpp dodaj w linii 518 tuż przed komunikatem logowania "WiFi Connected":

cpp
this->connected_timestamp_ = millis();

Testowanie czasu pracy sieci

Skompiluj i wgraj nowe oprogramowanie układowe.

Teraz, gdy odczytasz obiekt sysUpTime 1.3.6.1.2.1.1.3, powinieneś otrzymywać różne wartości za każdym razem, gdy operacja pobierania jest wykonywana.

bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0

Powinieneś zobaczyć wartość inną niż 0.

Lista dostępnych OID

Aby zobaczyć pełną listę obiektów dostarczanych przez komponent SNMP ESPHome, zobacz listę OID