[Tuto] Compteur eau et détecteur fuite sur un GPIO pour 10€
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Bonjour,
Je suis perdu dans les références des résistances, c'est du 1/4 de watt ou du 1 watt, carbone ou autre ?
Merci d'avance.
Bonne journée.
Je suis perdu dans les références des résistances, c'est du 1/4 de watt ou du 1 watt, carbone ou autre ?
Merci d'avance.
Bonne journée.
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Des 1/4 de watt suffisent. Si tu as des 1/2 ou plus, ça marchera aussi...
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
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Merci de ton retour
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Bonjour,
Un moyen d'économiser un fil entre le raspberry et le montage consiste à alimenter le 40106 en 5V (sa tension nominale) et de mettre un pont diviseur sur sa sortie pour respecter les 3.3V sur l'I/O de la raspberry
Un moyen d'économiser un fil entre le raspberry et le montage consiste à alimenter le 40106 en 5V (sa tension nominale) et de mettre un pont diviseur sur sa sortie pour respecter les 3.3V sur l'I/O de la raspberry
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Bonjour.
Je suis bien arrivé jusqu'a l'étape du script python (eau.py), j'ai fait un chomod +x
mais lorsque que je le lance voila ce que cela fait :
Et cela reste des heures en ajoutant simplement les ... à chaque ligne.
Par contre le setwatercounter.py fonctionne parfaitement.
Dans le doute j'ai ré-installé request
Version de python :
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
Mais toujours pareil, une idée ?
Merci d'avance.
EDIT : PB de config sur mon GPIO (j'ai pas pris le bon)
Je suis bien arrivé jusqu'a l'étape du script python (eau.py), j'ai fait un chomod +x
mais lorsque que je le lance voila ce que cela fait :
Code : Tout sélectionner
pi@raspberrypi:~/domoticz/scripts/python $ chmod +x eau.py
pi@raspberrypi:~/domoticz/scripts/python $ sudo ./eau.py
...
...
...
...
...
Par contre le setwatercounter.py fonctionne parfaitement.
Dans le doute j'ai ré-installé request
Code : Tout sélectionner
pi@raspberrypi:~ $ sudo apt-get install python-requests
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
python-requests est déjà la plus récente version disponible.
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
dc libasn1-8-heimdal libgssapi3-heimdal libhcrypto4-heimdal
libheimbase1-heimdal libheimntlm0-heimdal libhx509-5-heimdal
libkrb5-26-heimdal libroken18-heimdal libwind0-heimdal libxfce4ui-1-0
xfce-keyboard-shortcuts
Veuillez utiliser « apt-get autoremove » pour les supprimer.
0 mis à jour, 0 nouvellement installés, 0 à enlever et 21 non mis à jour.
Python 2.7.9 (default, Sep 17 2016, 20:26:04)
Mais toujours pareil, une idée ?
Merci d'avance.
EDIT : PB de config sur mon GPIO (j'ai pas pris le bon)
-
zorglub2029
- Messages : 4
- Inscription : 29 avr. 2017, 01:37
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Bonsoir à tous,
je suis nouveau ici et je suis tombé sur ce fil après une recherche. Ce qui est décrit ici est exactement ce que je veux faire et du coup, je me suis lancé pour des tests.
Je dois d'abord résoudre un problème, surmontable, j'espère :
Mon compteur est à l'extérieur de la maison, enterré, l'alimentation en eau passant dans un fourreau. Distance compteur-maison environ 2,5 m. J'ai tenté de faire passer un câble rigide depuis l'intérieur de la maison, mais je bloque à environ 1m, donc, c'est pas encore gagné de ce côté là.
En attendant, je me suis procuré les éléments (investissement 8 euros avec CNY70, le trigger, quelques cables et consommables divers).
Je possède déjà plusieurs raspberry. Je fais des tests avec un rasp qui ne sert pas, au final, je monterai le circuit sur un autre qui fait déjà les relevé edf, températures, etc
J'ai adapté le schéma en ajoutant l'alimentation du CNY70 depuis le raspberry (ça fait juste 4 fils qui vont vers le CNY70 et pas besoin d'alim externe).

J'ai monté le circuit avec 10m de cable, histoire de coller au plus près au circuit décrit ici, je n'ai pas besoin d'autant de longueur mais au cas où
La bête :

Relié au raspberry :

Le CNY70 au bout de son cable (au passage, on voit la LED que j'ai monté sur un autre GPIO et que je déclenche dans le script python lors des essais):

Fonctionnel :

Pour simuler le compteur, j'ai collé un bout de papier alu sous le couvercle du boitier du rasp et le script python allume ou éteint la led en fonction du survol ou pas de ce papier alu. Je pense que l'épaisseur du boitier simule bien ce que je vais trouver sur le compteur.

Le script très très très simplifié que j'utilise pour les essais (basé sur celui de js-martin, débarrassé de tout ce qui encombre
):
A noter enfin que j'ai fais des essais sans utiliser de trigger, juste le CNY70 monté à l'arrache sur le rasp et j'ai pas vu de différence dans mes essais, ça marche aussi très bien, mais après, en situation, sur le long terme, je suis pas spécialiste, je ne sais pas si ça peut marcher aussi.
Le schéma du montage (pas fait proprement celui là):

Et le rasp en mode arrache, les résistances à l'air, bien dégueu

Réflexion :
la distance de déclenchement entre le CNY70 et le papier alu, ça se joue en mm, on verra en situation sur le compteur, mais l'alignement risque d'être coton, mais comme j'ai une vis au milieu de compteur, je pense que je vais pourvoir bricoler un bras de fixation qui ne bougera pas et bien aligné.
Concernant les valeurs des résistances, j'ai bêtement copié ici, je n'ai aucune idée si ça doit être changé, adapté. Je connais les grands principes (mettre une résistance pour une led par exemple), mais après, dans les détails, l'électronique, c'est pas vraiment (du tout) ma partie, alors tout commentaire/correction est le bienvenu.
Voilà mes explorations de la soirée, en attendant bonne nuit (et merci js-martin pour le topic).
je suis nouveau ici et je suis tombé sur ce fil après une recherche. Ce qui est décrit ici est exactement ce que je veux faire et du coup, je me suis lancé pour des tests.
Je dois d'abord résoudre un problème, surmontable, j'espère :
Mon compteur est à l'extérieur de la maison, enterré, l'alimentation en eau passant dans un fourreau. Distance compteur-maison environ 2,5 m. J'ai tenté de faire passer un câble rigide depuis l'intérieur de la maison, mais je bloque à environ 1m, donc, c'est pas encore gagné de ce côté là.
En attendant, je me suis procuré les éléments (investissement 8 euros avec CNY70, le trigger, quelques cables et consommables divers).
Je possède déjà plusieurs raspberry. Je fais des tests avec un rasp qui ne sert pas, au final, je monterai le circuit sur un autre qui fait déjà les relevé edf, températures, etc
J'ai adapté le schéma en ajoutant l'alimentation du CNY70 depuis le raspberry (ça fait juste 4 fils qui vont vers le CNY70 et pas besoin d'alim externe).

J'ai monté le circuit avec 10m de cable, histoire de coller au plus près au circuit décrit ici, je n'ai pas besoin d'autant de longueur mais au cas où
La bête :
Relié au raspberry :
Le CNY70 au bout de son cable (au passage, on voit la LED que j'ai monté sur un autre GPIO et que je déclenche dans le script python lors des essais):
Fonctionnel :
Pour simuler le compteur, j'ai collé un bout de papier alu sous le couvercle du boitier du rasp et le script python allume ou éteint la led en fonction du survol ou pas de ce papier alu. Je pense que l'épaisseur du boitier simule bien ce que je vais trouver sur le compteur.
Le script très très très simplifié que j'utilise pour les essais (basé sur celui de js-martin, débarrassé de tout ce qui encombre
Code : Tout sélectionner
#!/usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO # bibliotheque pour utiliser les GPIO
import time
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Choix du GPIO
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# On mesure le compteur d'eau sur le GPIO 22 pin 15
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # mode de numérotation des pins
GPIO.setup(22,GPIO.IN) # GPIO 22 (pin 15) regle en entree
GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)
def Loop4(channel):
GPIO.output(18, not GPIO.input(18))
GPIO.add_event_detect(22, GPIO.BOTH, callback=Loop4, bouncetime=100)
while True:
time.sleep(5)A noter enfin que j'ai fais des essais sans utiliser de trigger, juste le CNY70 monté à l'arrache sur le rasp et j'ai pas vu de différence dans mes essais, ça marche aussi très bien, mais après, en situation, sur le long terme, je suis pas spécialiste, je ne sais pas si ça peut marcher aussi.
Le schéma du montage (pas fait proprement celui là):
Et le rasp en mode arrache, les résistances à l'air, bien dégueu
Réflexion :
la distance de déclenchement entre le CNY70 et le papier alu, ça se joue en mm, on verra en situation sur le compteur, mais l'alignement risque d'être coton, mais comme j'ai une vis au milieu de compteur, je pense que je vais pourvoir bricoler un bras de fixation qui ne bougera pas et bien aligné.
Concernant les valeurs des résistances, j'ai bêtement copié ici, je n'ai aucune idée si ça doit être changé, adapté. Je connais les grands principes (mettre une résistance pour une led par exemple), mais après, dans les détails, l'électronique, c'est pas vraiment (du tout) ma partie, alors tout commentaire/correction est le bienvenu.
Voilà mes explorations de la soirée, en attendant bonne nuit (et merci js-martin pour le topic).
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Bonjour.js-martin a écrit :une petite amélioration :
lorsqu'il n'y a pas de consommation d'eau, il ne se passe rien : Domoticz passe le widget en rouge car il n'y a pas de mise à jour. Du coup, s'il n'y a pas de consommation pendant une heure, on fait quand même une mise à jour du widget en ajoutant 0 litre![]()
il faut dans le While True,
ajouter ces lignes :
juste après ce code :Code : Tout sélectionner
# on met à jour le compteur incremental de Domoticz sans rien ajouter uniquement pour indiquer que la conso est nulle requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command¶m=udevice&idx='+str(dummy_idx['compteur_eau'])+'&svalue=0' urllib.urlopen(requete)
Code : Tout sélectionner
if CheckConso==False: # cela veut dire qu'il n'y a pas eu de consommation d'eau dans l'heure WaterAlarm=False # il suffit d'une heure sans consommation pour passer WaterAlarm a False logger.debug("Pas de consommation d'eau pendant une heure !") # on met à jour le compteur incremental de Domoticz sans rien ajouter uniquement pour indiquer que la conso est nulle requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command¶m=udevice&idx='+str(dummy_idx['compteur_eau'])+'&svalue=0' urllib.urlopen(requete)
J'arrive pas à faire fonctionner ce rajout, es possible d'être plus précis ?
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Je ne sais pas ce qui ne marche pas. L'idée du code est de faire une MAJ de domoticz lorsque tu ne consommes pas d'eau depuis plus d'une heure pour éviter que le widget passe en rouge (plus d'information). Par contre, l'histogramme des heures reste à zero.
tu as bien le code suivant :
tu as bien le code suivant :
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
import logging
############# 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}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 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) réglée en entrée
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Mode debug
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# si debug = True => on affiche plein de choses... (sinon mettre False)
debug=True
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Parametres Logs
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
formatter = logging.Formatter("%(asctime)s -- %(name)s -- %(levelname)s -- %(message)s")
handler_debug = logging.FileHandler("/var/tmp/eau_debug.log", mode="a", encoding="utf-8")
handler_info = logging.FileHandler("/var/tmp/eau_info.log", mode="a", encoding="utf-8")
handler_debug.setFormatter(formatter)
handler_info.setFormatter(formatter)
handler_debug.setLevel(logging.DEBUG)
handler_info.setLevel(logging.INFO)
logger = logging.getLogger("eau")
logger.setLevel(logging.DEBUG)
logger.addHandler(handler_debug)
logger.addHandler(handler_info)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
############### fin des parametres #############################
CheckGoOFF=False # pour eviter les erreurs de comptage (on compte un litre que si le capteur passe de OFF à ON)
CheckGoON=True # pour eviter de charger les logs de Domoticz en OFF inutiles
CheckConso=False
WaterAlarm=True
FirstDay=True
hto=time.localtime().tm_hour # heure debut analyse
jto=time.localtime().tm_wday # jour de la semaine
logger.info("--Debut ananlyse : "+str(hto)+" heure (jour de la semaine "+str(jto)+" (0=lundi to 6=dimanche)")
def Loop4(channel):
global CheckGoOFF
global CheckGoON
global CheckConso
global debug
if GPIO.input(channel):
if debug:
print "---interrupt ON---"
print "---Valeur CheckGoOFF="+str(CheckGoOFF)
if CheckGoOFF:
# On met à jour les drapeaux
CheckGoOFF=False
CheckGoON=True
CheckConso=True
# on met à jour le compteur incremental de Domoticz
requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command¶m=udevice&idx='+str(dummy_idx['compteur_eau'])+'&svalue=1'
urllib.urlopen(requete)
logger.info("consommation 0.5 litre")
#on passe le switch d'etat de la demi-lune à ON
requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command¶m=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 CheckGoON:
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"
# On met à jour les drapeaux
CheckGoOFF=True
CheckGoON=False
CheckConso=True
logger.info("consommation 0.5 litre")
#on passe le switch d'etat de la demi-lune a OFF
requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command¶m=switchlight&idx='+str(dummy_idx['switch_eau'])+'&switchcmd=Off&level=0'
urllib.urlopen(requete)
else:
CheckGoON=False # not needed
if debug:
print "=====Traitement interruptions multiples sur un meme etat===="
print "=====>> CheckGoON vaut encore False : on ignore l'interruption"
GPIO.add_event_detect(22, GPIO.BOTH, callback=Loop4, bouncetime=100)
while True:
time.sleep(600) # on attend 10 min
hcur=time.localtime().tm_hour
if hto != hcur: # changement heure
print "changement d'heure - heure courante ="+str(hcur)
logger.debug("changement d'heure - heure courante ="+str(hcur))
# on regarde s'il y a eu de l'eau consommee
if CheckConso == False:
# cela veut dire qu'il n'y a pas eu de consommation d'eau dans l'heure
WaterAlarm=False
logger.debug("Pas de consommation d'eau pendant une heure !")
# on met à jour le compteur incremental de Domoticz sans rien ajouter uniquement pour indiquer que la conso est nulle
requete='http://'+domoticz_ip+':'+domoticz_port+'/json.htm?type=command¶m=udevice&idx='+str(dummy_idx['compteur_eau'])+'&svalue=0'
urllib.urlopen(requete)
else:
logger.debug("il y a eu des consommations cette heure-ci...")
hto=hcur
CheckConso=False
jcur=time.localtime().tm_wday
if jto != jcur: # changement de jour
logger.debug("***changement de jour ="+str(jcur))
if FirstDay:
logger.info("C'est le premier jour d'analyse, on attend une journee entiere")
FirstDay=False
if WaterAlarm:
logger.info("==>sur cette journee non complete : fuite eau")
else:
logger.info("==>sur cette journee non complete : pas de fuite ===")
else:
if WaterAlarm:
print "===ALARME=== fuite eau "
logger.info("===ALARME=== fuite eau ")
else:
print "===fin analyse sur 24H : pas de fuite ==="
logger.info("===fin analyse sur 24H : pas de fuite ===")
#on repart sur 24H d'analyse
CheckConso=False
WaterAlarm=True
hto=time.localtime().tm_hour # heure debut analyse
jto=time.localtime().tm_wday # jour de la semaine
logger.info("--Debut ananlyse : "+str(hto)+" heure (jour de la semaine "+str(jto)+" (0=lundi to 6=dimanche)")
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
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
Oui, c'est possible mais j'aime bien aussi l'idée de séparer les alimentations...zorglub2029 a écrit :
J'ai adapté le schéma en ajoutant l'alimentation du CNY70 depuis le raspberry (ça fait juste 4 fils qui vont vers le CNY70 et pas besoin d'alim externe).
Avec mon boitier, tu pourras ajuster la hauteur. Une fois la hauteur réglée, tu peux le coller au silicone...zorglub2029 a écrit :Pour simuler le compteur, j'ai collé un bout de papier alu sous le couvercle du boitier du rasp et le script python allume ou éteint la led en fonction du survol ou pas de ce papier alu. Je pense que l'épaisseur du boitier simule bien ce que je vais trouver sur le compteur.
Tu n'avais pas besoin. Je voulais juste dire qu'avec plusieurs mètres, ca marche encore...zorglub2029 a écrit : J'ai monté le circuit avec 10m de cable, histoire de coller au plus près au circuit décrit ici, je n'ai pas besoin d'autant de longueur mais au cas où
C'est quand même utile la détection de fuite d'eauzorglub2029 a écrit : Le script très très très simplifié que j'utilise pour les essais (basé sur celui de js-martin, débarrassé de tout ce qui encombre):
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
-
zorglub2029
- Messages : 4
- Inscription : 29 avr. 2017, 01:37
Re: Compteur eau et détecteur fuite sur un GPIO pour 10€
L'un n'empêche pas l'autre, je peux aussi coller une alim indépendante, l'important pour moi étant de passer un seul câble multibrins, ce qu'il y a au bout...js-martin a écrit : Oui, c'est possible mais j'aime bien aussi l'idée de séparer les alimentations...
J'ai une vis centrale sur le compteur, je pense plutôt à un bras vissé qui tiendra le capteur, après, c'est qu'une idée comme ça. j'ai pas d'imprimante 3D à dispo, bref, pas fixé encore sur la méthode finalejs-martin a écrit : Avec mon boitier, tu pourras ajuster la hauteur. Une fois la hauteur réglée, tu peux le coller au silicone...
C'est plus rapport à la valeur de la résistance que tu as fait varier en fonction de la longueur, ne sachant pas trop, j'ai fait au plus près (j'ai une bobine de 50M de cable en réservejs-martin a écrit : Tu n'avais pas besoin. Je voulais juste dire qu'avec plusieurs mètres, ca marche encore...
Mais carrément, c'est même un des 2 buts ultimes, l'autre étant de suivre la conso, plus pour information. Mais là, je suis en mode développement/recherche alors étape par étape, juste voir déjà si ça marche de base et de ce côté là, rien à dire, ça a l'air de fonctionner très bien sur le principe, étape suivante : faire l'essai directement sur le compteur.js-martin a écrit : C'est quand même utile la détection de fuite d'eau
Juste un problème en fait, j'ai tenté de passer un fil dans le fourreau du tuyau d'eau, mais à mi chemin, y'a du sable qui bouche
Et encore merci pour ton travail