Bonjour,
Je tente à mon tour de récupérer les données de mon compteur d'eau, pour le moment je suis en mode laboratoire, j'utiliserai un module fibaro FGBS001 ( car dispo dans un tiroir) pour envoyer les différents états, si pas concluant je passerais par un émetteur chinois en 433 mais après plusieurs heures.
Le script tourne nickel :
Code : Tout sélectionner
--|0.004
commandArray = {}
local thisfilename = "/volume1/@appstore/domoticz/samplescripts/lua/script_device_Eau.lua"
local virtualcounter_idx = "567"
local switchName = "Eau"
if devicechanged[switchName] == 'Open' then
-- Open this file and read in the first line
file = io.open(thisfilename, "rb")
sContents = file:read("*l")
file:close()
-- Parse and update the countvalue
foo, snumber = sContents:match("([^,]+)|([^,]+)")
local countvalue = snumber + 0.001
local newline = foo .. "|" .. string.format("%.3f", tostring(countvalue))
-- Update virtual counter device
ts = virtualcounter_idx .. "|0|" .. string.format("%.3f", tostring(countvalue))
commandArray['UpdateDevice'] = ts
-- Write back new counter value
local file = io.open(thisfilename, "r+")
file:write(newline)
file:close()
end
return commandArray
Mais voila au niveau de la remontée sur le compteur virtuel ça merde
L'incrémentation se fait bien, mais la partie consommation journalière reste à 0m3 du coup les logs restent à 0 et la page rapport aussi.

- Compteur Eau.png (61.97 Kio) Consulté 11781 fois
J'ai essayer avec tout les type de compteurs.Idem
Avez-vous déjà rencontré ce problème ? Une solution ?
Apres il y le poste de js-martin et son script en python (
viewtopic.php?t=1737) mais je sais pas comment l'adapter sans l'utilisation des GPIO et sur un nas Synology.
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¶m=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¶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 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¶m=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 "..."
En espérant avoir de l'aide.