Poller des sondes de température DS18B20 en SNMP

Hello,

Il peut parfois être pratique de récupérer la température d’une pièce ou d’un container a des fins de supervision. (d’un aquarium par exemple… dédicace à mes collègues 🙂 )

L’utilisation de véritables sondes SNMP est prévu à cet effet mais le cout de ce matériel professionnel est prohibitif pour un usage « lab » ou « home »…

Un montage artisanal peut convenir et consiste à utiliser des sondes « DS18B20 », que l’on trouve facilement en version étanche pour quelques euros.

Ces sondes fonctionnent avec un bus « 1-wire » et sont par conséquent très faciles à câbler, et elles peuvent cohabiter à plusieurs sur un unique bus. Le Raspberry Pi dispose d’une interface 1-wire.

Je ne vais pas m’attarder sur les différents câblages possibles ainsi que sur les méthodes pour interroger les sondes simplement. Framboise314 explique ça très bien, je vous invite vivement à consulter cette page !

Là où je vais m’attarder, c’est sur le script que j’ai créé afin de « traduire » les infos des sondes DS18B20 en infos pour le démon SNMP.

On va commencer par installer le démon snmp.

apt-get install snmpd

Je ne rentrerai pas dans le détail sur la configuration du démon snmp. Man Google ! 🙂 Tout se fait dans /etc/snmp/snmpd.conf.

On peut vérifier que le démon répond bien via la ligne de commande suivante :

snmpwalk -v 2c -c public localhost

On a notre démon snmp. Reste plus qu’à y adjoindre un petit script « maison » pour récupérer les infos des sondes DS18B20 et les retourner au format attendu par le démon SNMP. Vous trouverez ci-dessous un lien pour télécharger un script que j’ai écrit en PHP. Ce script a été écrit en 2015, sinon je l’aurai rédigé en python. Mais il fonctionne, c’est l’essentiel !

SNMP Sensor DS18B20 (992 téléchargements)

Donc, copiez le fichier snmp_sensor_ds18b20.php dans un dossier comme /opt/TemperatureSensors (choix totalement arbitraire). Puis éditez-le.

En haut du fichier, vous trouverez un bloc de configuration.

$place = ".1.3.6.1.4.1.2021.42";

Cette variable, c’est l’OID « racine » de notre script. Le choix de l’OID .1.3.6.1.4.1 n’est pas anodin, car il semblerait que celui-ci soit réservé aux équipements persos. J’ai rajouté des numéros supplémentaires totalement arbitraires.

$sensors[1]['id'] = "28-031563c81bff";
$sensors[1]['description'] = "Sonde bureau";
$sensors[2]['id'] = "28-031563f8b9ff";
$sensors[2]['description'] = "Sonde salle info baie 1";
$sensors[3]['id'] = "28-031561c42cff";
$sensors[3]['description'] = "Sonde salle info baie 6";

Ce tableau recense les différentes sondes du bus 1-wire. Pour obtenir la liste, c’est facile :

pi@raspberrypi $ ls /sys/bus/w1/devices/
28-031561c42cff  28-031563c81bff  28-031563f8b9ff  w1_bus_master1

Pour l’utiliser avec le démon snmp, il faut modifier le fichier /etc/snmp/snmpd.conf, et rajouter la ligne suivante :

pass .1.3.6.1.4.1.2021.42       /usr/bin/php /opt/TemperatureSensors/snmp_sensor_ds18b20.php

On relance snmpd

/etc/init.d/snmpd restart

Puis on vérifie le bon fonctionnement de notre script

pi@raspberrypi /opt/TemperatureSensors $ snmpwalk -v2c -c public localhost .1.3.6.1.4.1.2021.42
iso.3.6.1.4.1.2021.42.1.0 = INTEGER: 21
iso.3.6.1.4.1.2021.42.1.1 = STRING: "Sonde bureau"
iso.3.6.1.4.1.2021.42.1.2 = STRING: "28-031563c81bff"
iso.3.6.1.4.1.2021.42.2.0 = INTEGER: 17
iso.3.6.1.4.1.2021.42.2.1 = STRING: "Sonde salle info baie 1"
iso.3.6.1.4.1.2021.42.2.2 = STRING: "28-031563f8b9ff"
iso.3.6.1.4.1.2021.42.3.0 = INTEGER: 23
iso.3.6.1.4.1.2021.42.3.1 = STRING: "Sonde salle info baie 6"
iso.3.6.1.4.1.2021.42.3.2 = STRING: "28-031561c42cff"

Enjoy 🙂

Laisser un commentaire

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