Scripts bash et Python3 permettant de monitorer la temperature via des capteurs ds18b20 en MQTT via un service démarré au boot
temperatures_setup.sh (triggers a reboot!)
Generic MQTT module to publish or subscribe to a MQTT broker with logging
import os
w1_dir = "/sys/bus/w1/devices/"
item = "temperature"
item_values={}
sensors = os.listdir(f"{w1_dir}")
nb_sensors = 0
for id in sensors:
if "28-" in id:
print(f"Existing ds18b20 sensor: {w1_dir}{id}")
item_values[id]=""
nb_sensors += 1
mqttc.connect_to(broker, port, publisher=True)
mqttc.log.info(f"time/{client_id}/start/loop")
for id in sensors:
if "28-" in id:
ds18b20_file = open(f"/sys/bus/w1/devices/{id}/{item}", "r")
file_content = ds18b20_file.read()
ds18b20_file.close()
for line in file_content.split("\n"):
if len(line) > 0:
if line != item_values[id]:
print(f"topic=ds28b20/{id}/{item} msg={line}")
. . .
from mymqtt import myMqtt
from paho.mqtt import client as mqtt_client
client_id="ds18_mqtt"
broker="127.0.01"
port = 1883
mqttc = myMqtt(client_id)
. . .
mqttc.publish(topic=f"ds28b20/{id}{item}", msg=line, retain=True)
. . .
/usr/bin/python3 /home/pi/TeleinfoLinky/mqtt_ds18b20_read_temp_publish.py
Les valeurs de température sont listées à la première lecture, puis à chaque changement de valeur.
tail -f /home/pi/TeleinfoLinky/mqtt.log
(à ne faire qu'une fois que le script fonctionne en 'python direct')
fichier mqtt_ds18b20.service:
sudo cp mqtt_ds18b20.service /usr/local/lib/systemd/system/mqtt_ds18b20.service
sudo systemctl daemon-reload
sudo systemctl enable mqtt_ds18b20.service
sudo systemctl start mqtt_ds18b20.service
sudo systemctl status mqtt_ds18b20.service
Une fois lancé, les infos listées dans mqtt_ds18b20_read_temp_publish.py/linky_args sont publiées dans le broker si elles diffèrent des précedentes.
le service est démarré au démarrage du réseau (Ethernet) et relancé si jamais il s'arrête
sudo systemctl daemon-reload
sudo systemctl restart mqtt_ds18b20.service
tail -f /tmp/mosquitto.log