ESPHome netwerkbewaking
ESPHome is een populair systeem om Espressif ESP8266 en ESP32 apparaten te besturen. Dit artikel beschrijft hoe je meerdere apparaten kunt monitoren met behulp van een aangepaste ESPHome SNMP-component en een populair netwerkbewakingshulpmiddel.
Dankzij dit kun je anomalieën in het gedrag van je apparaten detecteren en hierover geïnformeerd worden, zoals herstarts, zwak Wi-Fi-signaal of gebrek aan vrij geheugen.
SNMP wordt door veel applicaties ondersteund, maar dit artikel bespreekt de integratie met het open source-hulpmiddel Zabbix. Er wordt aangenomen dat je Zabbix versie 6.4 geïnstalleerd en draaiend hebt.
INFO
Zabbix installatiegids is beschikbaar op de Zabbix webpagina: https://www.zabbix.com/download
SNMP-component
ESPHome ondersteunt SNMP niet standaard. Maar het biedt een handige manier om te integreren met externe componenten.
Om SNMP-protocol toe te voegen aan een ESPHome-apparaat, verwijs naar de SNMP-component op https://github.com/aquaticus/esphome-snmp.
Voeg de volgende code toe aan je ESPHome YAML-configuratiebestand:
yaml
# Enable SNMP component
snmp:
# Retrieve SNMP component from github
external_components:
- source: github://aquaticus/esphome-snmp
Wanneer geüpload naar een bord, zou je het volgende bericht in het logboek moeten zien:
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
Nu kun je proberen om wat informatie van het bord op te halen. Er zijn veel programma's die SNMP-gegevens kunnen doorzoeken. Hier zijn enkele voorbeelden:
Windows
- MIB Browser https://www.ireasoning.com/mibbrowser.shtml
- Paessler SNMP Monitor https://www.paessler.com/snmp_monitor
Linux
Hier is een voorbeeldcode om te gebruiken op Linux. Vervang het IP-adres 192.168.1.10
door een waarde die overeenkomt met het adres van je bord.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0
Het resultaat van de bovenstaande query ziet eruit zoals hieronder. Het is een beschrijving van het systeem. Het is het SMTP-object sysDescr
dat vertaalt naar 1.3.6.1.2.1.1.1.0
object-ID.
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”
Optioneel kunt u proberen de systeem-uptime op te halen.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0
Het resultaat:
log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81
De tijdtikkenwaarde verandert continu. Elke oproep geeft u een ander nummer.
Voor een lijst van alle objecten die door de SNMP-component worden geleverd, zie de componentdocumentatie.
Sjablonen
Download het sjabloonbestand van: https://github.com/aquaticus/esphome_zabbix_templates
Het bestaat uit 3 sjablonen:
- Esphome by SNMP - basissjabloon
- Esphome ESP32 by SNMP - sjabloon voor ESP32-apparaten (inclusief C3, S2 enzovoort)
- Esphome ESP8266 by SNMP - sjabloon voor ESP8266
Het belangrijkste verschil tussen ESP8266- en ESP32-sjablonen is heapgegevens.
Importeer het sjabloonbestand door op de knop Importeren te klikken in Gegevensverzameling→Sjablonen.
Hosts
Open de Zabbix-interface en ga naar Monitoring→Hosts. Klik op Host maken in de rechterbovenhoek.
- Selecteer als sjabloon Esphome ESP32 by SNMP of Esphome ESP8266 by SNMP
- Voeg
SNMP
-interface toe. - Vul IP- of DNS-velden in
- Laat de rest van de velden met standaardwaarden.
- Klik aan het einde op de knop
Toevoegen
.
Op de lijst van gemonitorde hosts (Monitoring→Hosts) zou u een nieuwe vermelding moeten zien.
Er zal een SNMP-pictogram zijn in de kolom Beschikbaarheid. Aanvankelijk zal het grijs zijn, maar na een paar seconden zou het groen moeten worden.
Monitoring
Zodra u het groene pictogram ziet, kunt u SNMP-gegevens onderzoeken.
Als u op de link Laatste gegevens klikt, ziet u de lijst van verzamelde items.
Alarmen
Zabbix kan automatisch abnormale situaties detecteren. In Zabbix-terminologie wordt dit een "Trigger" genoemd. Het ESPHome-sjabloon wordt geleverd met triggers die typische problemen detecteren, bijvoorbeeld dat het bord is gereset. Voor een lijst van beschikbare triggers selecteert u Triggers
uit het menu wanneer u op de hostnaam klikt.
Hier is een standaardlijst van triggers:
- Firmware is gewijzigd
- Hoge ICMP-pingverlies
- Hoge ICMP-pingresponstijd
- Niet beschikbaar via ICMP-ping
- De host is opnieuw opgestart
- Geen SNMP-gegevensverzameling
- De systeemnaam is gewijzigd
- Zwak WiFi-signaal gedurende 5 minuten
- WiFi-verbinding verloren
Je kunt ook je eigen triggers maken, bijvoorbeeld om het heap-gebruik te monitoren.
Netwerk uptime
SNMP Component kan netwerk uptime bieden (SNMP object sysUpTime1.3.6.1.2.1.1.3
). Deze parameter is cruciaal om verbindingsverlies gebeurtenissen te detecteren.
Helaas biedt de ESPHome WiFi-component deze informatie niet. Daarom rapporteert de SNMP Component standaard altijd sysUpTime
als 0.
Om zinvolle gegevens te krijgen, moet je de originele WiFi-component aanpassen en een functie toevoegen.
Je kunt dit handmatig doen of de al aangepaste versie uit de repository gebruiken.
Handmatig de WiFi-component aanpassen
Clone en installeer ESPHome van GitHub.
Bewerk twee bestanden wifi_component.cpp
en wifi_component.h
in de esphome/components/wifi
directory.
Voeg op regel 282 van wifi_component.h
twee regels toe (het kan overal in de publieke sectie):
cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
uint32_t wifi_connected_timestamp() {return connected_timestamp_;}
protected:
uint32_t connected_timestamp_{0};
Voeg in wifi_component.cpp
op regel 518 net voor het "WiFi Connected" logbericht toe:
cpp
this->connected_timestamp_ = millis();
Test netwerk uptime
Compileer en upload de nieuwe firmware.
Nu, wanneer je het sysUpTime 1.3.6.1.2.1.1.3
object leest, zou je verschillende waarden moeten krijgen elke keer dat de get-operatie wordt uitgevoerd.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0
Je zou een waarde moeten zien die anders is dan 0.
Lijst van beschikbare OIDs
Om een volledige lijst van objecten te zien die door de ESPHome SNMP Component worden geleverd, zie OID lijst