Publié le 20 juin 2019 - par

Poller* des sondes de température DS18B20 en SNMP

Un Raspberry Pi et une sonde DS18B20 remontent via SNMP des informations traitées par Centreon (logiciel de supervision). Cela permet d’assurer une surveillance de la température en continu dans des salles serveurs climatisées.

Je vous avais proposé il y a quelques années un article sur la mesure de températures avec le DS18B20 et un Raspberry Pi. Ce montage a fonctionné plusieurs années sans défaillance pour surveiller la climatisation dans une salle serveur.

Sur cette base, Pierre administrateur d’infrastructures de plusieurs établissements en Alsace a monté un système de surveillance utilisant SNMP et Centreon (logiciel de supervision) pour alerter en cas de défaut. Je lui laisse la parole pour vous expliquer comment il a procédé.

 *Poller consiste à recueillir des informations dans une architecture de supervision distribuée.

Surveillance de température avec le DS18B20 et SNMP

Le contexte

Au sein du groupe nous avons rencontré plusieurs incidents liés à des pannes de climatisation en salle serveur. L’inertie entre la remontée d’alerte aux services techniques et l’intervention ont plusieurs fois provoqué des évènements indésirables graves (montée de température en salle à plus de 60 degrés).

Avec la mise en place de Centreon nous avons optimisé la prise en charge de tels incidents en mesurant la température d’air en entrée des IBM BladeCenter, les seuls équipements de notre parc à disposer de telles sondes.

Avec le retrait programmé des IBM BladeCenter nous sommes dans une problématique de retour en arrière sur ce type d’alerte, devenant à nouveau dépendants de l’inertie des services techniques.

Un devis avait été réalisé pour l’achat de capteurs environnementaux, mais ce dernier n’a pas été retenu en raison de contraintes budgétaires.

J’ai pris connaissance d’un lot de cartes de type Raspberry Pi 2 en stock chez notre client et moyennant quelques recherches ciblées j’ai pu réaliser cette procédure, qui va détailler les composants nécessaires et la configuration logicielle à réaliser pour fabriquer un capteur environnemental basique permettant de remonter par le protocole SNMP la température d’une salle serveur afin de monitorer cette dernière par un outil de supervision comme Centreon.

Le matériel nécessaire

  • 1x carte mère RaspBerry Pi 2 ou 3
  • 1x connecteur GPIO 26 ou 40 broches
  • 1x sonde DS18B20
  • 1x résistance 4.7 Kilohms
  • Un fer à souder, de l’étain, du fil électrique, de la gaine thermorétractable.

Montage de la partie électronique

Voici une sonde DS18B20 (version simple ou conditionnée en boîtier étanche), ainsi que son schéma de connexion :

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Dans la pratique

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation
DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Installation du système d’exploitation.

Pour ce projet j’ai choisi le système d’exploitation Raspbian : https://www.raspbian.org/

J’ai utilisé Rufus  sous Windows afin de préparer la carte micro SD à recevoir le système d’exploitation :

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Une fois le système d’exploitation installé, démarrez votre Raspberry Pi et mettez à jour votre système :

apt-get update
apt-get upgrade

Profitez-en pour installer un éditeur user-friendly comme nano :

apt-get install nano

Ensuite, comme j’aime travailler en root, il faut activer le compte root sur Raspbian et l’autoriser pour SSH.
Depuis le compte pi :

sudo -i
nano /etc/ssh/sshd_config

Modifiez la ligne PermitRootLogin without-password en PermitRootLogin yes :

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation
Enregistrez et quittez.
Redémarrez SSH :

/etc/init.d/ssh restart

Modifiez ensuite le mot de passe du compte root :

sudo -i
passwd root

Saisissez le nouveau mot de passe :

Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Quittez votre session pi et reconnectez-vous en root.

Reconnaissance de la sonde DS18B20 et paramétrage de la partie SNMP.

Installer les drivers 1-wire

Installez les drivers pour la sonde DS18B20 sur votre système :

modprobe w1-gpio
modprobe w1-therm

Vérifiez que la sonde est bien reconnue :

cd /sys/bus/w1/devices/
ls
28-00000b471676 w1_bus_master1
cd 28-00000b471676
cat w1_slave
7c 01 4b 46 7f ff 04 10 09 : crc=09 YES
7c 01 4b 46 7f ff 04 10 09 t=23750

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Si ça ne fonctionne pas, pas de panique, appliquez le correctif suivant :

Dans le fichier /etc/modules ajoutez les lignes w1-therm et w1-gpio pullup=1

nano /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with « # » are ignored.

i2c-dev
w1-therm
w1-gpio pullup=1

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Enregistrez et quittez.

Modification de config.txt

Editez le fichier /boot/config.txt :

nano /boot/config.txt

Et ajoutez à la fin la ligne :

dtoverlay=w1-gpio

Enregistrez et quittez.
Redémarrer le Raspberry Pi.

Recommencez les tests, à ce stade c’est normalement OK.

Installez SNMP sur votre Raspberry Pi :

apt-get install snmpd snmp-mibs-downloader

Ensuite éditez le fichier /etc/default/snmpd :

nano /etc/default/snmpd

Puis ajoutez extend après -I :

# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS=’-Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I extend -smux,mteTrigger,mteTriggerConf -p /run/snmpd.pid’

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Enregistrez et fermez.

Installation des scripts

Vous devez ensuite récupérer chez NovergianCreations les scripts nécessaires pour afficher la température de la sondes DS18B20 en SNMP :

cd /opt/
git clone -b 1-0-release https://github.com/NorwegianCreations/snmpmoni.git
cd snmpmoni/
cp config/snmpd.conf.example /etc/snmp/snmpd.conf

Vous devez ensuite configurer le fichier snmpd.conf pour autoriser une adresse ou un range d’adresses à effectuer des requêtes SNMP :

nano /etc/snmp/snmpd.conf

Autorisez la boucle locale ainsi que le range IP de destination du RaspBerry Pi :

rocommunity public 127.0.0.1 #Allow only one computer
rocommunity public 10.0.0.0/8 #Allow all in a network subnet

Enregistrez le fichier.

Nous devons ensuite créer le mapping entre l’ID de la sonde DS18B20 et SNMP.

Nous allons pour cela lister la/les sondes(s) de température reconnues par le système :

ls -l /sys/bus/w1/devices/28-*

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Nous sommes intéressés par ce qui commence par “28-000004”.
Pour notre cas, l’ID unique de la sonde est 28-00000b471676

Nous allons éditer le fichier iso.3.6.1.4.1.50083.100.4.1.1.1.7.1 dans le dossier opt/snmpmoni/mapping/ :

cd /opt/snmpmoni/mapping/
nano iso.3.6.1.4.1.50083.100.4.1.1.1.7.1

Vous remplacez le contenu du fichier par l’ID de la sonde DS18B20 précédemment obtenu.
La configuration permet de récupérer jusqu’à 8 sondes de température référencées sous les OID suivants :

iso.3.6.1.4.1.50083.100.4.1.1.1.7.1
iso.3.6.1.4.1.50083.100.4.1.1.1.7.2
iso.3.6.1.4.1.50083.100.4.1.1.1.7.3
iso.3.6.1.4.1.50083.100.4.1.1.1.7.4
iso.3.6.1.4.1.50083.100.4.1.1.1.7.5
iso.3.6.1.4.1.50083.100.4.1.1.1.7.6
iso.3.6.1.4.1.50083.100.4.1.1.1.7.7
iso.3.6.1.4.1.50083.100.4.1.1.1.7.8

Tous ces numéros OID sont sous le contrôle de Norwegian Creations, qui ont enregistré leurs propres OID SNMP dans l’espace «entreprise privée» attribué par IANA (Internet Assigned Numbers Authority).

Donc, en utilisant ces OID, vous ne rencontrerez aucun conflit d’OID sur votre système.

Redémarrez le service SNMP :
/etc/init.d/snmpd restart

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Vérification du fonctionnement

Vous pouvez maintenant vérifier le bon fonctionnement de la remontée de la température de la sonde DS18B20 par SNMP :

snmpwalk -v 1 -c public <IP ADDRESS>
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1


root@raspberrypi:~# snmpwalk -v 1 -c public 127.0.0.1 iso.3.6.1.4.1.50083.100.4.1.1.1.7.1
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.1.0 = INTEGER: 1
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.2.5.116.104.101.114.109 = STRING: « /bin/bash »
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.3.5.116.104.101.114.109 = STRING: « /opt/snmpmoni/bin/ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.1 »
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.4.5.116.104.101.114.109 = «  »
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.5.5.116.104.101.114.109 = INTEGER: 5
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.6.5.116.104.101.114.109 = INTEGER: 1
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.7.5.116.104.101.114.109 = INTEGER: 1
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.20.5.116.104.101.114.109 = INTEGER: 4
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.2.1.21.5.116.104.101.114.109 = INTEGER: 1
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.3.1.1.5.116.104.101.114.109 = STRING: « 24.125 »
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.3.1.2.5.116.104.101.114.109 = STRING: « 24.125 »
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.3.1.3.5.116.104.101.114.109 = INTEGER: 1
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.3.1.4.5.116.104.101.114.109 = INTEGER: 0
iso.3.6.1.4.1.50083.100.4.1.1.1.7.1.4.1.2.5.116.104.101.114.109.1 = STRING: « 24.125 »
root@raspberrypi:~#

DS18B20 et SNMP + Centreon- Nagios pour superviser la température de la climatisation

Vous avez réussi, nous mesurons dans notre exemple une température de 24.125 degrés Celsius.

Conclusion

Une nouvelle fois le Raspberry Pi se montre à la hauteur d’applications professionnelles. C’est bien pour cela que le tiers des Raspberry Pi vendus part en direction des entreprises et de l’industrie…

Merci à Pierre d’avoir pris le temps de partager cette réalisation avec les lecteurs de framboise314. Si cet article vous a intéressé(e) ou s’il vous a inspiré une mise en oeuvre en supervision, n’hésitez pas à faire un retour d’expérience dans les commentaires ci-dessous.

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

4 réflexions au sujet de « Poller* des sondes de température DS18B20 en SNMP »

  1. Blog WiFi / 3G / 4G / Hotspots

    Super description, pratique avec du SNMP mais j’aurais perso plus été enclin à utiliser des Wemos D1 flashés avec ESP Easy.
    Pourquoi ? Eh bien le coût ridicule d’un D1, dans les 3 EUR, disons grand max 8 EUR avec une sonde de température dessus. Ensuite, les capacités d’ESP EAsy, qui permettent d’échanger en MQTT, en http, voir en simple trame UDP. On peut ainsi envisager un Raspberry Pi en serveur MQTT, et des tas de Wemos D1 en capteur de température, chaque Wemos transmettant /salle1/rang1/serveur XX par exemple.
    La supervision devient alors encore plus performantes, plus simple, et surtout bien plus économique s’il faut déployer la sonde de température sur un grand nombre de serveurs. On trouve en outre sur google des exemples de programmations Lua + Raspi pour servir de serveur SNMP, là encore on s’en sort très bien sur les coûts.

    Répondre
  2. Armand

    Le coût n’est malheureusement pas toujours le seul paramètre à prendre en compte. La communication via Wi-Fi n’est pas toujours une option possible, aussi si il faut ajouter un ethernet à l’esp… Je passe à autre chaise de suite. Maintenant, pour la maison, oui un esp32 c’est top !

    Répondre
  3. Stéphane

    Bonjour,
    J’ai suivi ce tuto avec satisfaction et réussi à faire fonctionner tout cela, puis intégrer les données SNMP, via telegraf, dans une base InfluxDb pour les afficher au final sur Grafana : tout cela fonctionne très bien. Au moment d’intégrer une seconde sonde pour la température extérieure, je suis tombé qur un bug qui semble lié au script snmpmoni : si la température est inférieure à 10°C alors le script ne fait pas la division par 1000 de la valeur du capteur.
    Par exemple :
    # cat /sys/bus/w1/devices/28-01193a0ce335/w1_slave
    83 00 4b 46 7f ff 0c 10 9f : crc=9f YES
    83 00 4b 46 7f ff 0c 10 9f t=8187
    -> la valeur brut est 8187 c’est à dire 8.187°C

    root@thermopi:/opt/snmpmoni/bin# ./ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.2
    8187
    -> la valeur renvoyée par le script n’est pas divisée par 1000

    root@thermopi:/opt/snmpmoni/bin# ./ds18b20.sh -g iso.3.6.1.4.1.50083.100.4.1.1.1.7.1
    20.625

    -> pour la sonde intérieure on a bien une valeur en °C

    En décortiquant un peu la source du problème est certainement cette ligne de code dans le script ds18b20.sh :

    /bin/cat /sys/bus/w1/devices/$deviceid/w1_slave|grep « t= »|/usr/bin/awk ‘{print $10}’|/bin/sed ‘s/t=//g’|/bin/sed ‘s/\(..\)\(…\)/\1.\2/’

    Mais la j’avoue que ça dépasse mes connaissances des expressions régulières et de la commande sed ! Une idée, peut-être ?

    Stéphane

    Répondre
  4. Stéphane

    Re !
    Je reviens avec la solution à mon problème, trouvée sur le site de l’auteur du script :
    https://www.norwegiancreations.com/2017/06/do-it-yourself-snmp-temperature-monitoring-system/

    Il faut donc remplacer l’expression précédente par :
    /bin/cat /sys/bus/w1/devices/$deviceid/w1_slave|grep « t= »|/bin/sed -n ‘s/^.*\(t=[^ ]*\).*/\1/p’|/bin/sed ‘s/t=//’|/usr/bin/awk ‘{x=$1}END{print(x/1000)}’

    et je confirme que ça marche (testé entre -5°C et +12°C)

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.