Page 1 sur 1
Monitoring de chaudiere à gaz
Publié : 22 sept. 2015, 18:06
par ola
Bonjour à Tous,
Je souhaite enregistrer le temps de fonctionnement de ma chaudière à gaz (la durée que mon thermostat dit au circulateur : bosse !

)
Je ne vois pas quel type de de compteur "bidon" je dois utiliser, je voudrai:
- un graphique me donnant les plages d'utilisation (on/off) comme un interrupteur (sur 24 ou 48h)
- un graphique cumulatif me donnant la durée totale de fonctionnement par jour, semaine, mois, un peu comme le compteur d'eau.
Des suggestions ?
Merci !
Re: Monitoring de chaudiere à gaz
Publié : 13 oct. 2015, 14:22
par caape
Salut
C'est une bonne idée ça de surveiller la chaudière.
Tu pense utiliser le signal du thermostat pour faire ça ?
J'ai un problème alors, c'est un sans fil.
J'ai déjà pensé mesurer les températures de départ et d'arrivée + eau chaude sanitaire. Surveiller le circulateur peut être une info utile supplémentaire, et le brûleur aussi.
Tu m'as donné un nouveau projet à mettre sur ma TODO list.
A+
Re: Monitoring de chaudiere à gaz
Publié : 13 oct. 2015, 19:34
par deennoo
Un sonde sur le départ et une autre sur le retour du chauffage. Actuellement en filaire chez moi, passe en wifi demain.
Un faux interrupteur
Une règle blocky :
Si la différence entre le départ et le retour > a 10° = chaudière On
Si la différence entre le départ et le retour < a 10° = chaudière Off
Re: Monitoring de chaudiere à gaz
Publié : 14 oct. 2015, 00:15
par caape
Pour moi, ca sera direct en sans fil avec MySensors. Je vais me graver 2 ou 3 PCB pour un capteur température. Sur un, je mettrais 2 sondes pour la chaudière. Peut être 3 pour avoir l'eau chaude sanitaire pour les hors périodes de chauffe.
a+
Re: Monitoring de chaudiere à gaz
Publié : 17 oct. 2015, 23:14
par asem
bonjour
voici mon script python pour le comptage du temps de fonctionnement de ma chaudière fioul
et conversion du temps en litre
envoyer sur des sensors dymmy texte pour les litres et horaire et inter on/off pour indiquer le marche arrêt
détection sur GPIO 17
à modifier selon votre usage
dommage qu'il y a rien de prévu dans domoticz pour cette usage ce serai mieux que des dummy texte
Code : Tout sélectionner
#!/usr/bin/env python2.7
# Comptage horaire + conso chaudiere fioul
# script by Asem
# Les imports
import urllib2
import math
import os
import json
from time import time
from time import sleep
import RPi.GPIO as GPIO
# Config GPIO RPI
GPIO.setmode(GPIO.BCM) # utilisation de numero BCM GPIO
GPIO.setup(17, GPIO.IN, pull_up_down = GPIO.PUD_UP) # config du GPIO 17 en input
# Config a parametrer
G_galUS = 0.40 # calibre de la buse en Galon US par heure
galUS = 3.78541178 # 1 litre = 3.78541178 galon
NomFichier = '/home/pi/aprog/fioul.txt' #chemin du fichier totaliseur
# Les variables
tmarche = 0 #timer marche
tarret = 0 #timer arret
tdiff = 0 #difference entre marche et arret
ttotal = 0 #temp total
litreSeconde = ((galUS * G_galUS) / (60*60) ) #calcul de la consommation a la sec
consoCycle = 0 #consommation du dernier cycle
consoTotal = 0 #consommation total
#Fonction convertion num string vers int ou float
def num2(s):
try:
return int(s)
except ValueError:
s = float(s)
return s
# Fonction mise a jour info domoticz
def udateDCZ(cmdDCZ):
try:
urlwatt = urllib2.urlopen(cmdDCZ)
sleep(0.05)
except urllib2.URLError, (err):
print "URL error(%s)" % (err)
# Fonction lecture du fichier
def lectureFichier():
global NomFichier
Fichier = open(NomFichier,'r')
valeurLu = Fichier.read()
Fichier.close()
valeurLu = num2(valeurLu)
return valeurLu
# Fonction Ecriture dans fichier
def ecritureFichier(valeurAecrire):
global NomFichier
valeurAecrire = str(valeurAecrire)
Fichier = open(NomFichier,'w')
Fichier.write(valeurAecrire)
Fichier.close()
# Fonction lors d'un evenement
def my_callback(channel):
global tmarche, tarret, tdiff, ttotal, litreSeconde, consoCycle, consoTotal, NomFichier
if GPIO.input(17): # si port xx == 1
# Timer fin marche et calcul de la difference
tarret = time()
tdiff = tarret - tmarche
tdiff = round(tdiff, 1)
# Lecture du fichier contenant le dernier total
ttotal = lectureFichier()
# Mise a jour du total
ttotal += tdiff
ttotal = round(ttotal, 1)
# Calcul des litre consommer par rapport au temp de marche
consoCycle = litreSeconde * tdiff
consoTotal = litreSeconde * ttotal
# Affichage pour le debug
#print "____ARRET___"
#print "Cycle: " + str(tdiff)
#print "Total: " + str(ttotal)
#print "conso Cycle: " + str(round(consoCycle,5))
#print "conso Total: " + str(round(consoTotal,5))
# Ecriture du nouveau total dans le fichier
ecritureFichier(ttotal)
# Mise a jour modul dummy text Horaire
majwatt = "http://192.168.1.118:8080/json.htm?type=command¶m=udevice&idx=12&nvalue=0&svalue="+str(ttotal)
udateDCZ(majwatt)
# Mise a jour modul dummy test Litre
majwatt = "http://192.168.1.118:8080/json.htm?type=command¶m=udevice&idx=11&nvalue=0&svalue="+str(consoTotal)
udateDCZ(majwatt)
# Mise a jour modul dummy chaudiere Arret
majCH = "http://192.168.1.118:8080/json.htm?type=command¶m=switchlight&idx=10&switchcmd=Off"
udateDCZ(majCH)
sleep(0.01)
else: # si non port xx != 1
# Timer debut marche
tmarche = time()
# Affichage pour le debug
#print "____MARCHE___"
# Mise a jour modul dummy chaudiere marche
majCH = "http://192.168.1.118:8080/json.htm?type=command¶m=switchlight&idx=10&switchcmd=On"
udateDCZ(majCH)
# /Fin fonction evenement
# Attente evenement sur port BCM 17 et appel appel de fonction
GPIO.add_event_detect(17, GPIO.BOTH, callback=my_callback, bouncetime=1000)
# Tourne en boucle
while True:
sleep(1);
il y a surement des amélioration à faire si un pythonien passe par là

Re: Monitoring de chaudiere à gaz
Publié : 17 oct. 2015, 23:53
par deennoo
Pour le compteur en litre de fioul essaye un dummy compteur incremental, il te compte 1+1+1 etc etc ainsi tu peux avoir ta Conso journalière et total, et tu peux avoir un beau log avec les graphiques.
Je dirais idem pour le temps en heure ou minutes fonctionnement.
Re: Monitoring de chaudiere à gaz
Publié : 20 oct. 2015, 18:20
par asem
Modification du script
car le "GPIO.add_event_detect()" détecte le moindre parasite (j'ai 10m de câble 2 paires blindé pourtant

) et c'est le bazar....
il fait appel a la fonction défini avec callback mais comme une vérification de l'entrée GPIO est fait dans la fonction du coup des fois la fonction pers les pédales et fais un peut tous est rien bon bref sur 2 jours de test réel j'avais déjà vider ma citerne
cette version semble plus efficace
c'est à peut de chose prés pareil mais tous se fait dans le " while "...
Code : Tout sélectionner
#!/usr/bin/env python2.7
# Comptage horaire + conso chaudiere fioul
# script by Asem
# Les imports
import urllib2
import math
import os
import json
from time import time
from time import sleep
import RPi.GPIO as GPIO
# Config GPIO RPI
GPIO.setmode(GPIO.BCM) # utilisation de numero BCM GPIO
GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP) # config du GPIO 18 en input
#GPIO.setup(18, GPIO.IN)
# Config a parametrer
LitreHeure = 1.8 # consommation litre par heure
NomFichier = '/home/pi/aprog/tChaudiere.txt' #chemin du fichier totaliseur
# Les variables
tmarche = 0 #timer marche
ttotal = 0 #temp total
litreSeconde = (LitreHeure / (60*60) ) #calcul de la consommation a la sec
consoCycle = 0 #consommation du dernier cycle
consoTotal = 0 #consommation total
#Fonction convertion num string vers int ou float
def num2(s):
try:
return int(s)
except ValueError:
s = float(s)
return s
# Fonction mise a jour info domoticz
def udateDCZ(cmdDCZ):
try:
urlwatt = urllib2.urlopen(cmdDCZ)
sleep(0.05)
except urllib2.URLError, (err):
print "URL error(%s)" % (err)
# Fonction lecture du fichier
def lectureFichier():
global NomFichier
Fichier = open(NomFichier,'r')
valeurLu = Fichier.read()
Fichier.close()
valeurLu = num2(valeurLu)
return valeurLu
# Fonction Ecriture dans fichier
def ecritureFichier(valeurAecrire):
global NomFichier
valeurAecrire = str(valeurAecrire)
Fichier = open(NomFichier,'w')
Fichier.write(valeurAecrire)
Fichier.close()
print "Prog Chaudiere ready!..."
# Tourne en boucle et surveille etat GPIO
while True:
etatGPIO = str(GPIO.input(18))
if etatGPIO == "1" and tmarche > 0:
#print "____ARRET___"
# Lecture du fichier contenant le dernier total
ttotal = lectureFichier()
ttotal += tmarche
ttotal = round(ttotal, 1)
consoCycle = litreSeconde * tmarche
consoTotal = litreSeconde * ttotal
# Ecriture du nouveau total dans le fichier
ecritureFichier(ttotal)
sleep(0.3)
# Mise a jour DCZ
majDCZ1 = "http://192.168.1.135:8080/json.htm?type=command¶m=udevice&idx=119&nvalue=0&svalue="+str(ttotal)
majDCZ2 = "http://192.168.1.135:8080/json.htm?type=command¶m=udevice&idx=120&nvalue=0&svalue="+str(consoTotal)
majDCZ3 = "http://192.168.1.135:8080/json.htm?type=command¶m=udevice&idx=121&nvalue=0&svalue="+str(tmarche)
majDCZ4 = "http://192.168.1.135:8080/json.htm?type=command¶m=udevice&idx=122&nvalue=0&svalue="+str(consoCycle)
majDCZ5 = "http://192.168.1.135:8080/json.htm?type=command¶m=switchlight&idx=123&switchcmd=Off"
udateDCZ(majDCZ1) # texte total temp
udateDCZ(majDCZ2) # counter incremental temp
udateDCZ(majDCZ3) # texte total conso
udateDCZ(majDCZ4) # counter incremental conso
udateDCZ(majDCZ5) # switch on/off "Off"
#print "Stop Info: " + str(tmarche) + " _ " + str(ttotal) + " _ " + str(consoCycle) + " _ " + str(consoTotal)
tmarche = 0
elif etatGPIO == "0":
#print "____MARCHE___"
if tmarche == 0:
majDCZ6 = "http://192.168.1.135:8080/json.htm?type=command¶m=switchlight&idx=123&switchcmd=On"
udateDCZ(majDCZ6) # switch on/off "On"
#print "Start"
tmarche += 1
else:
tmarche = 0
sleep(1);
Re: Monitoring de chaudiere à gaz
Publié : 20 oct. 2015, 19:03
par deennoo
Pas mal, essaye de rajouter un debounce de 1 sec ou plus en fonction de qui t'envoie l'info Conso de fioul
bounce : fait de rebondir plusieurs fois de façon très rapproché, cela peu faussé les comptages de compteur d'impulsion.
Il y a une solution physique au bounce : un capaciteur 100uF a placer au plus près du capteur d'impulsion.
Re: Monitoring de chaudiere à gaz
Publié : 21 oct. 2015, 19:53
par asem
dans le premier script j'avais mis un temps de debounce jusqu’à 5 sec mais il y avait encore des détections aléatoire
aussi tester plusieurs résistance dans tous les sens pull-up pull-down bref...
le seconde script marche nickel
Il y a une solution physique au bounce : un capaciteur 100uF a placer au plus près du capteur d'impulsion.
moi c'est un contact sec fournie par un relais brancher en parallèle avec l'électrovanne du fioul