Skip to content

Surveillance réseau ESPHome

ESPHome est un système populaire pour contrôler les appareils Espressif ESP8266 et ESP32. Cet article décrit comment surveiller plusieurs appareils en utilisant un composant SNMP personnalisé d'ESPHome et un outil de surveillance réseau populaire.

Grâce à cela, vous pouvez détecter et être informé des comportements anormaux de vos appareils, comme les redémarrages, un signal Wi-Fi faible ou un manque de mémoire libre.

SNMP est pris en charge par de nombreuses applications, mais cet article traite de l'intégration avec l'outil open source Zabbix. Il est supposé que vous avez Zabbix version 6.4 installé et en fonctionnement.

INFO

Le guide d'installation de Zabbix est disponible sur la page web de Zabbix : https://www.zabbix.com/download

Composant SNMP

ESPHome ne prend pas en charge SNMP par défaut. Mais il offre un moyen pratique d'intégrer des composants externes.

Pour ajouter le protocole SNMP à un appareil ESPHome, référez-vous au composant SNMP situé sur https://github.com/aquaticus/esphome-snmp.

Ajoutez le code suivant à votre fichier de configuration YAML d'ESPHome :

yaml
# Enable SNMP component
snmp:

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

Une fois téléchargé sur une carte, vous devriez voir le message suivant dans le journal :

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

Test du SNMP

Vous pouvez maintenant essayer de récupérer des informations de la carte. Il existe de nombreux programmes qui peuvent parcourir les données SNMP. Voici quelques exemples :

Windows

Linux

Voici un exemple de code à utiliser sous Linux. Remplacez l'adresse IP 192.168.1.10 par une valeur correspondant à l'adresse de votre carte.

bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.1.0

Le résultat de la requête ci-dessus ressemble à celui ci-dessous. C'est une description du système. C'est l'objet SNMP sysDescr qui se traduit par l'ID d'objet 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”

Vous pouvez éventuellement essayer d'obtenir le temps de fonctionnement du système.

bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.25.1.1.0

Le résultat :

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

La valeur des ticks de temps change continuellement. Chaque appel vous donne un nombre différent.

Pour une liste de tous les objets fournis par le composant SNMP, consultez la documentation du composant.

Modèles

Téléchargez le fichier modèle depuis : https://github.com/aquaticus/esphome_zabbix_templates

Il se compose de 3 modèles :

  • Esphome par SNMP - modèle de base
  • Esphome ESP32 par SNMP - modèle pour les appareils ESP32 (y compris C3, S2, etc.)
  • Esphome ESP8266 par SNMP - modèle pour ESP8266

La principale différence entre les modèles ESP8266 et ESP32 est les données de tas.

Importez le fichier modèle en cliquant sur le bouton Importer dans Collecte de données→Modèles.

Hôtes

Ouvrez l'interface Zabbix et allez à Surveillance→Hôtes. Cliquez sur Créer un hôte dans le coin supérieur droit.

Hôtes Zabbix

  1. Comme modèle, sélectionnez Esphome ESP32 par SNMP ou Esphome ESP8266 par SNMP
  2. Ajoutez l'interface SNMP.
  3. Remplissez les champs IP ou DNS
  4. Laissez le reste des champs avec les valeurs par défaut.
  5. À la fin, cliquez sur le bouton Ajouter.

Dans la liste des hôtes surveillés (Surveillance→Hôtes), vous devriez voir une nouvelle entrée.

Il y aura une icône SNMP dans la colonne Disponibilité. Initialement, elle sera grisée, mais après quelques secondes, elle devrait devenir verte.

Disponibilité SNMP

Surveillance

Une fois que vous voyez l'icône verte, vous pouvez examiner les données SNMP.

Si vous cliquez sur le lien Dernières données, vous verrez la liste des éléments collectés.

Nouvel hôte

Alarmes

Zabbix peut détecter automatiquement des situations anormales. Dans la terminologie Zabbix, cela s'appelle un "Déclencheur". Le modèle ESPHome est livré avec des déclencheurs qui détectent des problèmes typiques, par exemple, la carte a été réinitialisée. Pour une liste des déclencheurs disponibles, sélectionnez Déclencheurs dans le menu lorsque vous cliquez sur le nom de l'hôte.

Voici une liste par défaut des déclencheurs :

  • Le firmware a changé
  • Perte élevée de ping ICMP
  • Temps de réponse élevé au ping ICMP
  • Indisponible par ping ICMP
  • L'hôte a été redémarré
  • Pas de collecte de données SNMP
  • Le nom du système a changé
  • Signal WiFi faible pendant 5 minutes
  • Connexion WiFi perdue

Vous pouvez également créer vos propres déclencheurs, par exemple, pour surveiller l'utilisation du tas.

Disponibilité du réseau

Le composant SNMP peut fournir la disponibilité du réseau (objet SNMP sysUpTime 1.3.6.1.2.1.1.3). Ce paramètre est crucial pour détecter les événements de perte de connexion.

Malheureusement, le composant WiFi d'ESPHome ne fournit pas cette information. En raison de cela, par défaut, le composant SNMP rapporte toujours sysUpTime comme 0.

Pour obtenir des données significatives, vous devez modifier le composant WiFi original et ajouter une fonction.

Vous pouvez le faire manuellement ou utiliser celui déjà modifié du dépôt.

Modifier manuellement le composant WiFi

Clonez et installez ESPHome depuis GitHub.

Éditez deux fichiers wifi_component.cpp et wifi_component.h dans le répertoire esphome/components/wifi.

À la ligne 282 de wifi_component.h, ajoutez deux lignes (cela peut être n'importe où dans la section publique) :

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

 protected:
  uint32_t connected_timestamp_{0};

Dans wifi_component.cpp, ajoutez à la ligne 518 juste avant le message de log "WiFi Connected" :

cpp
this->connected_timestamp_ = millis();

Tester la disponibilité du réseau

Compilez et téléchargez le nouveau firmware.

Maintenant, lorsque vous lisez l'objet sysUpTime 1.3.6.1.2.1.1.3, vous devriez obtenir des valeurs différentes à chaque fois que l'opération de récupération est effectuée.

bash
snmpget -v2c -c public 192.168.1.10 1.3.6.1.2.1.1.3.0

Vous devriez voir une valeur différente de 0.

Liste des OID disponibles

Pour voir une liste complète des objets fournis par le composant SNMP d'ESPHome, consultez la liste des OID