Script python et lua pour incrémenter la valeur contenue dans un fichier
Script python et lua pour incrémenter la valeur contenue dans un fichier
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
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
Dernière modification par taxitain le 04 janv. 2016, 01:38, modifié 1 fois.
Re: Script python pour incrémenter la valeur contenue dans un fichier
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
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()Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Objectif : WAF > 1
Re: Script python pour incrémenter la valeur contenue dans un fichier
Merci beaucoup Patrice, j'ai compris le truc et ça fonctionne.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()
Re: Script python pour incrémenter la valeur contenue dans un fichier
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
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
Bonjour
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
Cette syntaxe fait référence au format de l'api JSON ou on doit envoyer qq chose commeEn 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 ?
Code : Tout sélectionner
/json.htm?type=command¶m=udevice&idx=IDX&nvalue=0&svalue=POWER;ENERGYce qui en Lua donnerait
commandArray['UpdateDevice']=meteridx .. "|0|" .. power ..";"..energy
sachant que les ".." signifient concaténer à la chaine
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Objectif : WAF > 1
Re: Script python pour incrémenter la valeur contenue dans un fichier
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 ???taxitain a écrit :Maintenant je cherche à mettre le contenu de mon fichier compteur à disposition de domoticz avec un script lua...
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.
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20