Compteur eau et détecteur fuite sur un GPIO pour 10€

Vous avez crée un script lua dont vous êtes fier, un .sh génial, un programme python hors du commun, un tuto , c'est ici que vous pouvez les partager.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Répondre
js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Compteur eau et détecteur fuite sur un GPIO pour 10€

Message par js-martin »

Cela fait plusieurs heures que je travaille sur ce projet : mesurer ma consommation d'eau.

Je partage mon travail (et celui de certains de mes collègues qui m'ont aidé) car je pense que cela peut vous servir de base pour domotiser votre compteur d'eau.

Au menu :

1- récupérer les informations du compteur d'eau
2- traiter électroniquement les informations du compteur (sans PiFace, sans Arduino...uniquement avec le Raspberry)
3- préparer les informations pour Domoticz (Python)
4- utilisation dans Domoticz
5 : détecter une fuite d'eau

1- récupérer les informations du compteur d'eau

Il existe plusieurs solutions sur Internet : capteur reed, capteur optique ou achat d'un compteur à impulsion.

En fonction de votre compteur, à vous de choisir la meilleure solution. Si votre compteur est sous terre loin de votre Raspberry, il est possible d'en installer un deuxième en série dans votre logement.

Si vous avez un compteur avec une demi-lune métallique, je vous présente ma solution. Sinon, vous pouvez passer au point 2.

mon compteur :
compteur-sappel.jpg
compteur-sappel.jpg (26.43 Kio) Vu 25277 fois
La demi-lune fait un tour par litre. J'ai utilisé un capteur CNY70 pour la lecture optique.


Voici une vidéo montrant la lecture optique du compteur Sappel :
http://youtu.be/mvqfSW-843Y

Si vous avez la chance d’accéder à une imprimante 3D, je vous propose une solution esthétique : un capot sur mesure réalisé par un collègue (merci Xavier) :
modelisation.JPG
modelisation.JPG (45.78 Kio) Vu 25311 fois
Il a été fait avec OpenSCAD (OpenSource) et c'est suffisamment simple pour l'adapter à votre compteur. Voici le code :

Code : Tout sélectionner

$fn = 64;
ray=44;//rayon interne
ha=28;//hauteur
ep=2;//epaisseur
dis=30;//distance de la découpe

// fenetre compteur
laf=50;//largeur (x)
haf=18;//hauteur (y)
fx=0;// pos x
fy=11;//pos y

// fenetre capteur
lac=8;//largeur (x)
hac=8;//hauteur (y)
cx=-12;// pos x
cy=0;//pos y
hfc=5;//hauteur fixation capteur/ x=0

difference (){
translate ([0,0,ha/2])cylinder(h=ha, r=ray+ep, center=true);
translate ([0,0,ha/2+ep])cylinder(h=ha, r=ray, center=true);
//découpe superieure capot
translate ([-ray-ep,dis,0])cube([2*ray+2*ep,ray+ep,ha],center=false);
    //decoupe fenetre
translate ([fx,fy,ep/2])cube([laf,haf,2*ep],center=true);
translate ([9.1,0,ep/2])cylinder(10,16,16,center=true); 
    //decoupe capteur
translate ([cx,cy,ep/2])cube([lac,hac,2*ep],center=true);
}


//fixation capteur
difference (){
translate ([cx,cy,hfc/2])cube([lac+3*ep,hac+3*ep,hfc],center=true);
translate ([cx,cy,hfc/2])cube([lac,hac,hfc],center=true);
//fente
//translate ([cx,cy,hfc/2+ep])cube([lac+2*ep,(hac+2*ep)/5,hfc],center=true);
    }

//clips de fixation
translate ([0,-ray,ha-ep/2])rotate([45,0,00])cube([4,ep,ep],center=true);
rotate([0,0,120])translate ([0,-ray,ha-ep/2])rotate([45,0,00])cube([4,ep,ep],center=true);
rotate([0,0,-120])translate ([0,-ray,ha-ep/2])rotate([45,0,00])cube([4,ep,ep],center=true);
    
//remplissage droite capteur
translate ([-25,1,0])cube([6,6,5],center=false);    
le capot terminé :
capot_seul.JPG
capot_seul.JPG (147.97 Kio) Vu 25308 fois
l'installation sur le compteur:
Capot_compteur.JPG
Capot_compteur.JPG (119.92 Kio) Vu 25308 fois
Modifié en dernier par js-martin le 28 mars 2016, 01:21, modifié 13 fois.
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Re: Mesure compteur eau sur un GPIO pour 10€

Message par js-martin »

2- traiter électroniquement les informations du compteur (sans PiFace, sans Arduino...uniquement avec le Raspberry)

Vous aurez besoin d'un CNY70 (2€), d'un trigger de Schmitt HEF40106B (2€) et de 2 résistances. Merci à Flintstones (qui traîne sur ce forum et qui m'a guidé pour ce montage électronique économique ;) )

le schéma :
schema.JPG
schema.JPG (109.86 Kio) Vu 25306 fois
Du coté du compteur, vous aurez besoin d'allumer la led infrarouge du CNY70 et c'est tout. Entre le raspberry et le compteur d'eau, il faut deux fils (dans mon cas, le compteur est à 15m et cela fonctionne parfaitement). Ceux qui me connaissent savent que j'adore le filaire (fiable, économe et pas d'onde). Si le passage de fils est compliqué, il est possible de mettre un deuxième compteur dans sa maison ou d'envoyer les impulsions par onde radio (avec la difficulté de gérer les batteries ou d'alimenter le montage)

la réalisation définitive (admirez la belle led bleue qui s'allume au passage de la demi-lune sous le CNY70) :
montage_definitif.JPG
montage_definitif.JPG (127.22 Kio) Vu 25306 fois
Pour la carte support, vous en trouverez sur ebay pour quelques euros (mots clés : "carte prototypage").
Modifié en dernier par js-martin le 21 mars 2016, 00:26, modifié 2 fois.
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Re: Mesure compteur eau sur un GPIO pour 10€

Message par js-martin »

3- préparer les informations pour Domoticz (Python)

Ma première idée a été de faire un switch virtuel dans Domoticz et de l'associer au GPIO réglé sur IN. Si le GPIO passe à ON, le switch passe à ON et il déclenche une commande JSON (sur le passage à ON) pour incrémenter le compteur d'eau d'un litre.

Cela ne marche pas : en effet, il y a plusieurs fois des interruptions à ON ce qui désynchronise le compteur d'eau (le compteur s’incrémentait à chaque fois qu'il y avait un ON sans passer par un état OFF) :
Capture2.JPG
Capture2.JPG (73.91 Kio) Vu 25297 fois
Pour éviter cela, ma solution est de comptabiliser que les fronts montants (passage de OFF à ON).

Comme je trouvais que les logs de l'interrupteur virtuel étaient intéressantes, je vous propose de créér deux widgets :

un compteur incrémental (réglages->matériel->compteur incremental) de type "water" (mesures->editer->type = "water") :
widget_compteur.JPG
widget_compteur.JPG (19.23 Kio) Vu 25297 fois
et un interrupteur virtuel qui donnera l'état de la demi-lune :
widget_switch_compteur.JPG
widget_switch_compteur.JPG (19.23 Kio) Vu 25297 fois
Voici mon code python "eau.py":

edit : si requests n'est pas encore installé, n'oubliez pas de faire un : sudo apt-get install python-requests

Code : Tout sélectionner

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import json
import requests
import urllib
import RPi.GPIO as GPIO  # bibliotheque pour utiliser les GPIO
import time

############# Parametres ################################# 

#~~~~~~~~~~ Parametres Domoticz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip="192.168.0.40"
domoticz_port="8080"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IDX de Domoticz 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# remplacer XXX par votre idx de votre widget
dummy_idx={'compteur_eau': 331, 'switch_eau':330}


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Mode debug
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
# si debug = True => on affiche plein de choses... (sinon mettre False) 
debug=True


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Choix du GPIO
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# On mesure le compteur d'eau sur le GPIO 22 pin 15
GPIO.setmode(GPIO.BCM)   # mode de numérotation des pins
GPIO.setup(22,GPIO.IN)   # GPIO 22 (pin 15) regle en entree

###############  fin des parametres #############################

CheckGoOFF=False

def Loop4(channel):
    global CheckGoOFF
    global debug
    if GPIO.input(channel):
        if debug:
           print "---interrupt ON---"
           print "---Valeur CheckGoOFF="+str(CheckGoOFF)
        if CheckGoOFF:
           # On met CheckGoOFF à False
           CheckGoOFF=False
           # on met à jour le compteur incremental de Domoticz
           requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command&param=udevice&idx='+str(dummy_idx['compteur_eau'])+'&svalue=1'
           urllib.urlopen(requete)
           #on passe le switch d'etat de la demi-lune à ON
           requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command&param=switchlight&idx='+str(dummy_idx['switch_eau'])+'&switchcmd=On&level=0'
           urllib.urlopen(requete)
           if debug:
              print "***La roue a bien fait un tour, il faut incrementer le compteur de 1"
              r = requests.get('http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=devices&rid='+str(dummy_idx['compteur_eau'])).json()
              result={}
              index=str(r['result'][0]['Counter'])
              print "Compteur eau nouvel index = "+index
        else:
           CheckGoOFF=False # not needed
           if debug:
              print "=====Traitement interruptions multiples sur un meme etat===="
              print "=====>> CheckGoOFF vaut encore False : la demi lune n'a pas encore fait un tour... on ignore l'interruption"
    else:
        if debug:
           print ":::interrupt OFF:::"
           print ":::Valeur CheckGoOFF="+str(CheckGoOFF)
           print ":::La lune metalique a fait un demi-tour - on passe la valeur de CheckGoOFF a True"
        CheckGoOFF=True
        #on passe le switch d'etat de la demi-lune a OFF
        requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command&param=switchlight&idx='+str(dummy_idx['switch_eau'])+'&switchcmd=Off&level=0'
        urllib.urlopen(requete)

GPIO.add_event_detect(22, GPIO.BOTH, callback=Loop4, bouncetime=100)


while True:
    time.sleep(100)
    print "..."
N'oubliez pas le chmod +x eau.py
Et lancez le avec un sudo ./eau.py

Pour ma part, j'ai fait un service de ce code : c'est très simple grâce à ce tuto -> https://jahislove314.wordpress.com/2014 ... ce-daemon/
https://jahislove314.wordpress.com/2014 ... ce-daemon/
Modifié en dernier par js-martin le 22 mars 2016, 23:40, modifié 4 fois.
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Re: Mesure compteur eau sur un GPIO pour 10€

Message par js-martin »

4- utilisation dans Domoticz

Voila ce que cela donne dans Domoticz :
widget_compteur.JPG
widget_compteur.JPG (19.23 Kio) Vu 25284 fois
Vous remarquez que la valeur du compteur est de plus de 654m3. Pour l'initialiser, je vous propose un petit code (qui permettra aussi d'ajuster le compteur s'il y a un décalage dans le temps) :

setwatercounter.py :

Code : Tout sélectionner

#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import json
import requests
import urllib
#from requests.auth import HTTPBasicAuth


############# Parametres ################################# 

#~~~~~~~~~~ Parametres Domoticz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
domoticz_ip="192.168.0.40"
domoticz_port="8080"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IDX de Domoticz 
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# remplacer par votre idx de votre widget
dummy_idx={'compteur_eau': 331}


###############  fin des parametres #############################

water_index = input("Entrez l'index de votre compteur (en litre) : ")

#on recupère l'index actuel
r = requests.get('http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=devices&rid='+str(dummy_idx['compteur_eau'])).json() 
result={} 
index=str(r['result'][0]['Counter']) 
# on supprime le m3 à la fin de la chaine et on convertit en litre
index_litre=float(index[0:len(index)-3])*1000
print "Compteur eau index actuel= "+str(index_litre)

#on calcul le nombre de litre a rajouter
ajout=float(water_index)-float(index_litre)
print "Il faut ajouter "+str(ajout)+" litres"

requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command&param=udevice&idx='+str(dummy_idx['compteur_eau'])+'&svalue='+str(ajout)+' m3'
urllib.urlopen(requete)
Je vous conseille de faire cette ajustement avant de compter les premiers litres pour éviter d'avoir une valeur énorme dans votre historique.

Vous aurez alors de beaux histogrammes pour totaliser votre consommation :
Capture.JPG
Capture.JPG (64.75 Kio) Vu 25231 fois
et les logs de l'interrupteur virtuel pour utiliser/analyser/interfacer votre consommation plus finement (vraiment finement :shock: ) :
log_interrupteur.JPG
log_interrupteur.JPG (36.13 Kio) Vu 25281 fois
Modifié en dernier par js-martin le 21 mars 2016, 13:10, modifié 1 fois.
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

Flintstones
Messages : 39
Enregistré le : 20 janv. 2015, 22:56

Re: Mesure compteur eau filaire sur un GPIO pour 10€

Message par Flintstones »

Nickel ce tuto ! ;)

js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Re: Mesure compteur eau filaire sur un GPIO pour 10€

Message par js-martin »

Et bientôt un point 5 : Détecteur de fuite d'eau

En effet, on sait bien que la consommation d'eau ne peut pas être régulière sur la journée. Pendant la nuit, il y a au moins une heure où la consommation est à zéro (à moins de vivre la nuit ou de tirer la chasse d'eau au moins toutes les heures).

Du coup, je vais ajouter dans mon programme un bout de code qui va détecter s'il y a bien au moins une fois par jour une heure sans consommation.

Si ce n'est pas le cas, je déclenche une alerte.
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

deennoo
Messages : 4015
Enregistré le : 25 janv. 2015, 02:00

Re: Mesure compteur eau filaire sur un GPIO pour 10€

Message par deennoo »

Tres bon tuto ! bravo c'est simple et efficace !
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

patrice
Messages : 1639
Enregistré le : 22 sept. 2014, 21:51

Re: Mesure compteur eau filaire sur un GPIO pour 10€

Message par patrice »

Bonsoir
Merci c'est très clair , bien expliqué , parfait quoi
Raspberry Pi model B+, RFXComm,8 interrupteurs Chacon, 5 ds180b 1-Wire, 3 douilles Chacon, 1 contact de porte Chacon, 1 module variateur,module emetteur 54700, Aeon Stick Z-wave, 1 MultiSensor Aeon, accés à distance.
aka thegritche@domoticz forum

jml
Messages : 21
Enregistré le : 08 janv. 2016, 22:18

Re: Mesure compteur eau filaire sur un GPIO pour 10€

Message par jml »

Excellent.

Et après la détection de fuite, la coupure de l'arrivée d'eau ?

http://www.aliexpress.com/wholesale?cat ... alve+water

js-martin
Messages : 474
Enregistré le : 22 mars 2015, 22:08
Contact :

Re: Mesure compteur eau filaire sur un GPIO pour 10€

Message par js-martin »

merci pour vos retours !

Pour la coupure automatique de l'eau, pourquoi pas. Je ne sais pas si ce genre d'appareil est fiable. Quelqu'un a ce genre d'équipement ?

Sinon, en cas de fuite, j'ai une autre méthode : j'ai le numéro de téléphone de plein de voisins sympas et la possibilité de leur ouvrir la maison à distance....
Domotisation de : mes compteurs EDF, solaire, eau / mon alarme / ma Chaudière Viessamnn / mon congel / ma sonnette. Matériels : Pi2 - RFXTrx433e - Zwave+ Aeotec, ampoules Hue - Détecteur et prises Fibaro - Capteurs Oregon - présentation installation => lien

Répondre