Monitoring de chaudiere à gaz

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
ola
Messages : 2
Inscription : 31 mars 2015, 10:33

Monitoring de chaudiere à gaz

Message 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 !
caape
Messages : 16
Inscription : 15 sept. 2015, 09:38

Re: Monitoring de chaudiere à gaz

Message 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+
Dernière modification par caape le 14 oct. 2015, 00:16, modifié 2 fois.
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Monitoring de chaudiere à gaz

Message 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
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
caape
Messages : 16
Inscription : 15 sept. 2015, 09:38

Re: Monitoring de chaudiere à gaz

Message 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+
asem
Messages : 34
Inscription : 16 févr. 2015, 00:15
Localisation : Bas Rhin (67)

Re: Monitoring de chaudiere à gaz

Message 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&param=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&param=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&param=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&param=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à :D :D
RPI B+ & B2 | Domoticz | 1-wire | Danfoss | Synology | arduino | esp8266 | modbus | camera | IPXv4
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Monitoring de chaudiere à gaz

Message 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.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
asem
Messages : 34
Inscription : 16 févr. 2015, 00:15
Localisation : Bas Rhin (67)

Re: Monitoring de chaudiere à gaz

Message 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 :lol:

cette version semble plus efficace :D
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&param=udevice&idx=119&nvalue=0&svalue="+str(ttotal)	
		majDCZ2 = "http://192.168.1.135:8080/json.htm?type=command&param=udevice&idx=120&nvalue=0&svalue="+str(consoTotal)	
		majDCZ3 = "http://192.168.1.135:8080/json.htm?type=command&param=udevice&idx=121&nvalue=0&svalue="+str(tmarche)
		majDCZ4 = "http://192.168.1.135:8080/json.htm?type=command&param=udevice&idx=122&nvalue=0&svalue="+str(consoCycle)
		majDCZ5 = "http://192.168.1.135:8080/json.htm?type=command&param=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&param=switchlight&idx=123&switchcmd=On"
			udateDCZ(majDCZ6)	# switch on/off "On"
			#print "Start"				
			
		tmarche += 1
	else:
		tmarche = 0

	sleep(1);
RPI B+ & B2 | Domoticz | 1-wire | Danfoss | Synology | arduino | esp8266 | modbus | camera | IPXv4
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Monitoring de chaudiere à gaz

Message 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.
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
asem
Messages : 34
Inscription : 16 févr. 2015, 00:15
Localisation : Bas Rhin (67)

Re: Monitoring de chaudiere à gaz

Message 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 :D :D
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
RPI B+ & B2 | Domoticz | 1-wire | Danfoss | Synology | arduino | esp8266 | modbus | camera | IPXv4
Répondre