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

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
taxitain
Messages : 8
Inscription : 02 août 2015, 19:45

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

Message 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
Dernière modification par taxitain le 04 janv. 2016, 01:38, modifié 1 fois.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

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

Message 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()
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
taxitain
Messages : 8
Inscription : 02 août 2015, 19:45

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

Message 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.
taxitain
Messages : 8
Inscription : 02 août 2015, 19:45

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

Message 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
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

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

Message 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
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
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

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

Message 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.
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
Répondre