Pour améliorer le fonctionnement d’une vanne 3 voie sur ma chaudière à granulés sur une installation à l’hydraulique compliquée, je souhaite utiliser un raspberry PI3 qui est très peu chargé.
Je l’utilise donc comme Broker.
J’ai donc les données suivantes:
-3 sondes de températures DS18B20
-1 potentiomètre raccordé à un MCP3008
et 4 sorties relais sur GPIO.
Mon soucis est que je n’arrive pas a configurer le tout en mqtt.
J’arrive a voir les températures via rpi-temperature-mqtt.
J’essaye de comprendre le fonctionnement des GPIO dans mqtt. Je test « python3 -m mqtt_io » mais il ne me fait pas de « publish » uniquement des susbscibe…
Reste le MCP3008 qui devrait être utilisable dans mqtt_io mais pas encore trouvé la bonne config.
J’ai essayé Jeedouino/Ext mais il ne gère pas le MCP3008.
Si un utilisateur a plus d’expérience ou d’autres alternatives ?
Mon idée est d’utiliser Jeedom comme « supervision » (historique/courbes) et d’avoir un script local sur le PI pour gérer le bypass de la V3V lors du démarrage de la chaudière.
Mais avant, je dois logger les valeurs de températures/position V3V.
Faute de réponse, j’ai mis les mains dans le python et commencé une routine de lecture des capteurs et de publier les données en MQTT si besoins.
Voici un extrait du code que j’utilise:
#!/usr/bin/python3
import signal
import time
import busio
import digitalio
import board
import adafruit_mcp3xxx.mcp3008 as MCP
import paho.mqtt.client as mqtt
from w1thermsensor import W1ThermSensor, Sensor
from adafruit_mcp3xxx.analog_in import AnalogIn
# Connexion au Broker
client = mqtt.Client()
client.connect("localhost",1883,60)
# Lecture d'une moyenne de l'entrée analogique (je vais surement réduire la boucle)
somme_Pot = 0
for i in range (0,100) :
somme_Pot = somme_Pot + ORP()
# Mise à l'échelle et arrondi (0-100% du potentiomètre que j'adapterai aux 90° de la V3V
v3v = round(somme_Pot/100*30.3425,0)
if v3v != last_v3v:
client.publish("home/V3V", v3v);
last_v3v = v3v
print('Update V3V=', v3v)
# Températures
sensor1 = W1ThermSensor(Sensor.DS18B20, "01193a060753")
chaudiere = round(sensor1.get_temperature(),1)
if abs(chaudiere-last_chaud) > 0.1:
client.publish("home/Chaudiere", chaudiere);
last_chaud=chaudiere
print('Update chaudière=', chaudiere)
sensor2 = W1ThermSensor(Sensor.DS18B20, "01193a178ce6")
depart = round(sensor2.get_temperature(),1)
if abs(depart-last_depart) > 0.1:
client.publish("home/Depart_Eau", depart);
last_depart=depart
print('Update depart=', depart)
sensor3 = W1ThermSensor(Sensor.DS18B20, "01193a182a95")
retour = round(sensor3.get_temperature(),1)
if abs(retour-last_retour) > 0.1:
client.publish("home/Retour_Eau", retour);
last_retour=retour
print('Update retour=', retour)
# Relais état que j'inverse car LOW active le relais
relais1 = 1-GPIO.input(17)
if relais1 != last_R1:
last_R1 = relais1
print('Update relais1=', relais1)
client.publish("home/Relais1", relais1);
relais2 = 1-GPIO.input(23)
if relais2 != last_R2:
last_R2 = relais2
print('Update relais2=', relais2)
client.publish("home/Relais2", relais2);
# Changement d'état
GPIO.output(17,0) # ON
GPIO.output(17,1) # OFF
# Deconnexion
client.disconnect();