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 (1125 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 🙂