[Tuto] 1 Wire sur PI 3 via GPIO et le plugin script

Bonjour,

Pour remplacer la fonction du plugin 1 wire de la V3 j’ai une solution basé sur le plugin script.

J’ai testé la solution sur jeedom 3.3.55 et sur V4.1.18

Pour activer le 1 wire sur le PI, je me suis inspiré de http://espace-raspberry-francais.fr/Composants/Sonde-de-temperature-DS18B20-sur-Raspberry-Francais/
Pour le câblage :


j’ai trouvé un complément d’information sur :
https://fr.pinout.xyz/pinout/1_wire
il donne les info si on a besoin d’utiliser une autre broche.

J’essaierais d’ajouter une photo de mon montage sur le PI. j’ai fait un truc propre et compacte.

Typologie de réseau
On peu chainer les capteurs :
1wire
J’ai même fait un réseau en étoile avec plusieurs sondes sur un branche et cela fonctionne.
J’ai 3 branches avec une sonde en extrémité et 1 branche avec 2 sondes en extrémité. Je récupère la température du garage, du salon, une à l’extérieur et 2 groupées pour le départ et le retour de la chaudière.

Pour donner l’accès aux données :

sudo modprobe w1-gpio
sudo modprobe w1-therm

en suite, il y a 2 fichiers à modifier :

sudo nano /etc/modules

ajouter les lignes :

w1-therm
w1-gpio pullup=1
sudo nano /boot/config.txt

ajouter la ligne :

dtoverlay=w1-gpio

en suite on accède aux données par une lecture fichier, avec les commandes suivante, on liste les sondes détectées :

cd /sys/bus/w1/devices/
ls

pour lire les données d’une sondes :

cd 28-xxxxxxxxxx
cat w1_slave

Par la suite, il suffit d’un script pour récupérer les données (cf plus pas)

Raccordement à Jeedom :

  • installer le plugin script
  • ajouter un script et ajuster le taux de rafraichissement avec le cron :
  • ajouter des commandes au script créé
  • pour la première commande, cliquer sur ajouter un script
  • j’ai appelé le script 1wire_temperature
  • copier le code suivant, il prend un argument, le nom de la sonde (28-xxxxxx) :
#!/bin/bash
probName=$1

# search the line with "t=" at the begining
for line in $(cat /sys/bus/w1/devices/$probName/w1_slave); do
  if [ $(expr "$line" : "^t=.*$") -gt 0 ]; then
    # the line begins with 't='
    # we extract value after 't='
    value=$(expr "$line" : "^t=\(.*\)")
  fi
done
# value is a temperature is in 1000th of celsus degree
# shell do not manage float, we use awk to performe float calculation
echo $(awk '{print $1/$2}' <<<"$value 1000.0")
  • ajouter le nom de la sonde souhaité en argument du script comme suit :
  • pour les autres commandes recopier la ligne de commande et changer le nom de la sonde

Et voila, amusez vous.

5 « J'aime »

Merci de ce tuto ca marche très bien, j’ai du mettre sur enable le bus 1 Wire dans sudo raspy-config.

Merci !!!
Perso en plus du sudo raspi-config. j’ai du aussi redemarrer pour que ca fonctionne.