Page 1 sur 1

Script python et lua pour incrémenter la valeur contenue dans un fichier

Publié : 03 janv. 2016, 04:33
par taxitain
Hello, j'ai passé la nuit à chercher la réponse à mon problème en vain !

Voila mon problème qui avait l'air tellement simple au départ:

Je veux faire un script qui va lire la valeur dans le fichier compteur.csv
A chaque changement d'état de mon gpio il va incrémenter le nombre qu'il a trouvé.

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

def increment()

GPIO.wait_for_edge(11, GPIO.FALLING) #mode edge falling
print("falling edge detected")
obfichier = open('compteur.csv','r') #j'ouvre mon fichier en lecture
oldvalue = obfichier.read() #Je lis le fichier
obfichier.close() #je le referme
print(oldvalue) #ça c'est juste pour vérifier que c'est ok

Je voudrais faire en sorte d'écrire dans ce même fichier la nouvelle valeur qui serait = à oldvalue + 1
ecriture = open('onduleur.csv','w') #J'ouvre en mode écriture
ecriture.write(?????????) #et là je n'arrive pas à formuler
ecriture.close()
increment()

Merci d'avance pour votre aide

Re: Script python pour incrémenter la valeur contenue dans un fichier

Publié : 03 janv. 2016, 10:17
par patrice
Bonjour

Ce que tu lis depuis un fichier est toujours une string, il faut le caster en int d'abord
Voici ce que ca peut donner

Code : Tout sélectionner

obfichier = open('compteur.csv','r') #j'ouvre mon fichier en lecture

oldvalue = obfichier.read() #Je lis le fichierwith open(filename) as f:

obfichier.close() #je le referme

print(oldvalue) #ça c'est juste pour vérifier que c'est ok
newvalue=int (oldvalue) #transforme en int pour pouvoir additionner
newvalue=newvalue+1

###ecriture du fichier #####
file = open("compteur.csv", "w") #ouvre le fichier en ecriture
file.write('%d' % newvalue) #ecris nlle valeur
file.close()

Re: Script python pour incrémenter la valeur contenue dans un fichier

Publié : 03 janv. 2016, 14:02
par taxitain
patrice a écrit :Bonjour

Ce que tu lis depuis un fichier est toujours une string, il faut le caster en int d'abord
Voici ce que ca peut donner

Code : Tout sélectionner

obfichier = open('compteur.csv','r') #j'ouvre mon fichier en lecture

oldvalue = obfichier.read() #Je lis le fichierwith open(filename) as f:

obfichier.close() #je le referme

print(oldvalue) #ça c'est juste pour vérifier que c'est ok
newvalue=int (oldvalue) #transforme en int pour pouvoir additionner
newvalue=newvalue+1

###ecriture du fichier #####
file = open("compteur.csv", "w") #ouvre le fichier en ecriture
file.write('%d' % newvalue) #ecris nlle valeur
file.close()
Merci beaucoup Patrice, j'ai compris le truc et ça fonctionne.

Re: Script python pour incrémenter la valeur contenue dans un fichier

Publié : 04 janv. 2016, 01:38
par taxitain
Maintenant je cherche à mettre le contenu de mon fichier compteur à disposition de domoticz avec un script lua et j'ai quelques questions :

J'ai pris il y longtemps un script sur ce post "https://www.domoticz.com/forum/viewtopi ... 1&start=20" mais est-il valable pour ces 3 types de compteur dummy ? rfxmeter compteur, compteur incrémental, électrique (instant compteur)
J'ai l'impression que ça marche pour les 2 premiers mais pas pour le dernier.

Mon but final est de pouvoir générer correctement des données dans un fichier et les traiter par lua ou directement par l'api json pour pouvoir alimenter un compteur dummy type P1 mais c'est pas gagné mais si vous avez des solutions je suis preneur. Je me contenterai déja dans un premier temps d'un type électrique (instant compteur).

En fin de compte je comprends pas tout le script, c'est la syntaxe " commandArray['UpdateDevice']=meteridx .. "|0|" .. metercount ", je comprends pas les (.."|0|"..) , ça sert à quoi ?

metername="onduleur.csv"
meteridx=11
countfile = "/home/pi/domoticz/compteurs/" .. metername

commandArray = {}
local file = io.open(countfile, "r")
if (file)
then
metercount = file:read()
file:close()
if (metercount)
then
if (debug) then print(metername .. " update to " .. metercount ) end
commandArray['UpdateDevice']=meteridx .. "|0|" .. metercount
else
if (debug) then print("No metercount from file " .. countfile) end
end
else
if (logging) then print("Cannot open meterfile " .. countfile) end
end
return commandArray

Re: Script python et lua pour incrémenter la valeur contenue dans un fichier

Publié : 04 janv. 2016, 10:36
par patrice
Bonjour
En fin de compte je comprends pas tout le script, c'est la syntaxe " commandArray['UpdateDevice']=meteridx .. "|0|" .. metercount ", je comprends pas les (.."|0|"..) , ça sert à quoi ?
Cette syntaxe fait référence au format de l'api JSON ou on doit envoyer qq chose comme

Code : Tout sélectionner

/json.htm?type=command&param=udevice&idx=IDX&nvalue=0&svalue=POWER;ENERGY
soit idx puis "0" (nvalue=0) puis power puis ";" puis energy
ce qui en Lua donnerait

commandArray['UpdateDevice']=meteridx .. "|0|" .. power ..";"..energy

sachant que les ".." signifient concaténer à la chaine

Re: Script python pour incrémenter la valeur contenue dans un fichier

Publié : 04 janv. 2016, 14:33
par rimram31
taxitain a écrit :Maintenant je cherche à mettre le contenu de mon fichier compteur à disposition de domoticz avec un script lua...
Que cherches tu a faire au final ? Incrémenter une valeur dans un fichier ou analyser/décompter les changements d'etats d'une gpio pour calculer et mettre a jour une information a transmettre a domoticz ???

Si c'est monitorer une gpio quelle est a peu près la fréquence des changements d'etat ? Si cette fréquence est élevée, c'est certain qu'en passant par un fichier et un simple "wait" (edge) tu vas rater les 3/4 de tes événements.