4.2 KiB
4.2 KiB
Fichier d'aide pour Gemini
Ce document fournit un résumé concis du projet snmp2mqtt pour aider au développement et à la maintenance assistés par l'IA.
1. Objectif du Projet
Le projet snmp2mqtt est une passerelle écrite en Python qui a pour but de :
- Interroger des équipements réseau (routeurs, switchs, etc.) via le protocole SNMP.
- Récupérer des métriques spécifiques (trafic, statut des ports, etc.) définies par des OIDs.
- Publier ces données sur un broker MQTT.
- S'intégrer automatiquement avec Home Assistant grâce au mécanisme de "MQTT Discovery", permettant de créer des capteurs sans configuration manuelle côté Home Assistant.
2. Architecture et Technologies
- Langage : Python 3
- Dépendances principales (
requirements.txt) :pysnmp>=7.0.0: Pour la communication SNMP asynchrone.paho-mqtt>=2.0.0: Pour la communication avec le broker MQTT.PyYAML>=6.0.0: Pour le parsing du fichier de configuration.
- Configuration : Un unique fichier
config.yamlcentralise tous les paramètres (MQTT, appareils, OIDs). - Exécution : Le script utilise le multi-threading. Un thread est démarré pour chaque appareil défini dans la configuration, ce qui permet une surveillance parallèle et isolée.
3. Structure du Code (snmp2mqtt.py)
Le script principal est organisé de la manière suivante :
main(): Point d'entrée. Il parse les arguments (--config), charge la configuration et appelleprocess_devices().process_devices(config):- Orchestre le lancement des threads.
- Crée et démarre une instance de
DeviceMonitorThreadpour chaque appareil. - Gère l'arrêt propre (
graceful shutdown) en attendant que tous les threads se terminent.
DeviceMonitorThread(threading.Thread):- Classe qui encapsule la logique de surveillance pour un seul appareil.
run(): méthode principale du thread.- Établit la connexion MQTT.
- Publie la configuration de découverte automatique pour Home Assistant (une seule fois au démarrage).
- Entre dans une boucle infinie qui :
- Appelle
get_snmp()pour récupérer les données. - Publie l'état des capteurs et le statut de disponibilité (
online/offline) sur MQTT. - Attend un intervalle (
sleep_interval) avant la prochaine interrogation.
- Appelle
get_snmp(req):- Fonction
asyncqui utilisepysnmppour exécuter les requêtesGETSNMP pour tous les OIDs d'un appareil. - Retourne un dictionnaire contenant les valeurs formatées.
- Fonction
- Fonctions de configuration et MQTT :
load_config(): Charge et valide le fichierconfig.yaml.connect_mqtt(): Initialise le client MQTT.publish(): Wrapper pour publier les messages MQTT.publish_ha_autodiscovery_config(): Construit et publie les messages de configuration pour Home Assistant MQTT Discovery.
4. Flux de Données
[Appareil SNMP] <--- (Requête SNMP GET) --- [snmp2mqtt.py / Thread]
|
| (Réponse SNMP)
v
[snmp2mqtt.py / Thread] --- (Publication MQTT) ---> [Broker MQTT]
|
| (MQTT Discovery & State)
v
[Home Assistant]
5. Comment développer
- Environnement :
- Créer un environnement virtuel :
python3 -m venv .venv - Activer l'environnement :
source .venv/bin/activate - Installer les dépendances :
pip install -r requirements.txt
- Créer un environnement virtuel :
- Configuration :
- Copier et modifier
config.yamlpour pointer vers un broker MQTT de test et un appareil SNMP accessible.
- Copier et modifier
- Lancement :
python snmp2mqtt.py --config config.yaml
- Points clés à modifier :
- Pour ajouter une nouvelle fonctionnalité à un capteur Home Assistant, modifier
create_ha_sensor_config(). - Pour changer la logique de récupération SNMP, modifier
get_snmp(). - Pour ajouter de nouveaux paramètres de configuration, mettre à jour
load_config()pour la validation.
- Pour ajouter une nouvelle fonctionnalité à un capteur Home Assistant, modifier