Skip to content

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 ​

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.

Zabbix hosts

  1. Selecteer als sjabloon Esphome ESP32 by SNMP of Esphome ESP8266 by SNMP
  2. Voeg SNMP-interface toe.
  3. Vul IP- of DNS-velden in
  4. Laat de rest van de velden met standaardwaarden.
  5. 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.

SNMP beschikbaarheid

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.

Nieuwe host

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