ESPHome мрежов мониторинг
ESPHome е популярна система за управление на устройства Espressif ESP8266 и ESP32. Тази статия описва как да наблюдавате множество устройства, използвайки персонализиран ESPHome SNMP компонент и популярен инструмент за мрежов мониторинг.
Благодарение на това, можете да откривате и да бъдете информирани за аномални поведения на вашите устройства, като рестартирания, слаб Wi-Fi сигнал или липса на свободна памет.
SNMP се поддържа от много приложения, но тази статия обсъжда интеграция с инструмента с отворен код Zabbix. Предполага се, че имате инсталирана и работеща версия 6.4 на Zabbix.
INFO
Ръководството за инсталация на Zabbix е достъпно на уеб страницата на Zabbix: https://www.zabbix.com/download
SNMP Компонент
ESPHome не поддържа SNMP по подразбиране. Но предоставя удобен начин за интеграция с външни компоненти.
За да добавите SNMP протокол към ESPHome устройство, използвайте SNMP Компонент, разположен в https://github.com/aquaticus/esphome-snmp.
Добавете следния код към вашия ESPHome YAML конфигурационен файл:
yaml
# Enable SNMP component
snmp:
# Retrieve SNMP component from github
external_components:
- source: github://aquaticus/esphome-snmp
Когато качите на платката, трябва да видите следното съобщение в лога:
log
[00:00:00][C][snmp:268]: SNMP Config:
[00:00:00][C][snmp:269]: Contact: ""
[00:00:00][C][snmp:270]: Location: ""
Тестване на SNMP
Сега можете да опитате да извлечете информация от платката. Има много програми, които могат да разглеждат SNMP данни. Ето някои примери:
Windows
- MIB Browser https://www.ireasoning.com/mibbrowser.shtml
- Paessler SNMP Monitor https://www.paessler.com/snmp_monitor
Linux
Ето примерен код за използване в Linux. Заменете IP адреса 192.168.1.10
с адреса на вашата платка.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0
Резултатът от горната заявка изглежда като този по-долу. Това е описание на системата. Това е SNMP обект sysDescr
, който се превежда на 1.3.6.1.2.1.1.1.0
обект 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”
По желание можете да опитате да получите времето на работа на системата.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0
Резултатът:
log
iso.3.6.1.2.1.25.1.1.0 = Timeticks: (66281) 0:11:02.81
Стойността на времевите тикове се променя непрекъснато. Всяко извикване ви дава различен номер.
За списък с всички обекти, предоставени от SNMP компонента, вижте документацията на компонента.
Шаблони
Изтеглете файла с шаблона от: https://github.com/aquaticus/esphome_zabbix_templates
Той се състои от 3 шаблона:
- Esphome by SNMP - основен шаблон
- Esphome ESP32 by SNMP - шаблон за ESP32 устройства (включително C3, S2 и т.н.)
- Esphome ESP8266 by SNMP - шаблон за ESP8266
Основната разлика между шаблоните за ESP8266 и ESP32 е данните за паметта.
Импортирайте файла с шаблона, като кликнете върху бутона Import в Data collection→Templates.
Хостове
Отворете интерфейса на Zabbix и отидете на Monitoring→Hosts. Кликнете върху Create host в горния десен ъгъл.
- Като шаблон изберете Esphome ESP32 by SNMP или Esphome ESP8266 by SNMP
- Добавете
SNMP
интерфейс. - Попълнете полетата IP или DNS
- Оставете останалите полета с техните стойности по подразбиране.
- Накрая кликнете върху бутона
Add
.
В списъка с наблюдаваните хостове (Monitoring→Hosts) трябва да видите нов запис.
Ще има икона SNMP в колоната Availability. Първоначално тя ще бъде в сиво, но след няколко секунди трябва да стане зелена.
Мониторинг
След като видите зелената икона, можете да разгледате SNMP данните.
Ако кликнете върху връзката Latest data, ще видите списъка със събраните елементи.
Аларми
Zabbix може автоматично да открива аномални ситуации. В терминологията на Zabbix това се нарича "Trigger". Шаблонът на ESPHome включва тригери, които откриват типични проблеми, например, когато платката е била рестартирана. За списък с наличните тригери изберете Triggers
от менюто, когато кликнете върху името на хоста.
Ето списък с тригерите по подразбиране:
- Фърмуерът е променен
- Висока загуба на ICMP ping
- Високо време за отговор на ICMP ping
- Недостъпен чрез ICMP ping
- Хостът е бил рестартиран
- Няма събиране на SNMP данни
- Името на системата е променено
- Слаб WiFi сигнал за 5 минути
- Загубена WiFi връзка
Можете също така да създадете свои собствени тригери, например за наблюдение на използването на паметта.
Мрежова наличност
SNMP компонентът може да предостави информация за мрежовата наличност (SNMP обект sysUpTime 1.3.6.1.2.1.1.3
). Този параметър е от съществено значение за откриване на събития на загуба на връзка.
За съжаление, ESPHome WiFi компонентът не предоставя тази информация. Поради това по подразбиране SNMP компонентът винаги докладва sysUpTime
като 0.
За да получите значими данни, трябва да модифицирате оригиналния WiFi компонент и да добавите една функция.
Можете да го направите ръчно или да използвате вече модифицирания от хранилището.
Ръчно модифициране на WiFi компонента
Клонирайте и инсталирайте ESPHome от github.
Редактирайте два файла wifi_component.cpp
и wifi_component.h
в директорията esphome/components/wifi
.
На ред 282 в wifi_component.h
добавете два реда (може да бъде навсякъде в публичната секция):
cpp
#define WIFI_CONNECTED_TIMESTAMP_AVAILABLE
uint32_t wifi_connected_timestamp() {return connected_timestamp_;}
protected:
uint32_t connected_timestamp_{0};
В wifi_component.cpp
добавете на ред 518 точно преди съобщението за лог "WiFi Connected":
cpp
this->connected_timestamp_ = millis();
Тест за мрежова наличност
Компилирайте и качете новия фърмуер.
Сега, когато четете обекта sysUpTime 1.3.6.1.2.1.1.3
, трябва да получавате различни стойности всеки път, когато се изпълнява операцията get.
bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0
Трябва да видите стойност, различна от 0.
Списък на наличните OID
За да видите пълен списък на обектите, предоставени от ESPHome SNMP компонент, вижте списък на OID