Bonjour , je reviens vers vous pour un probleme de base de donnée, avec mon fichier Python je récupère les valeurs de température et d’hygrométrie d'une sonde DHT 22 branché sur un raspberry ,Actuellement je récupère ces 2 informations th et hm sur une BD, je voudrais avoir la température dans une BD (DHT22.rrd) et l’hygrométrie dans une autre BD (DHT22Y.rrd). comment faire ? merci d'avance
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import locale
import datetime
import time
import subprocess
import os
import sys
import shlex
from re import search
pin = "27"
#fonction pour changer le language de la date en anglais
def get_c_locale_abbrev():
lc = locale.setlocale(locale.LC_TIME)
try:
locale.setlocale(locale.LC_TIME, "C")
return time.strftime("%a %b %d %H:%M:%S %Y")
finally:
locale.setlocale(locale.LC_TIME, lc)
#Fonction pour lecture DHT22
def get_outputs(typ,pin):
i=0
Hmax=100
for test_output in range(5):
i=i+1
outputs_raw = subprocess.check_output(["/root/Adafruit_DHT", typ, pin])
if len(outputs_raw)==44:
return None,None
OK = search("Temp", outputs_raw) and search("Hum", outputs_raw)
if (OK):
result_humid = search("Hum =\s+([0-9.]+)", outputs_raw)
humidity = result_humid.group(1)
if float(humidity)<=Hmax:
result_temp = search("Temp =\s+([0-9.]+|-[0-9]+)", outputs_raw)
temperature = result_temp.group(1)
if float(temperature)!=-3276:
return humidity,temperature
return None,None
humidity,temperature = get_outputs("22",pin)
#print("H:{} t:{}".format(humidity,temperature))
#if the value is None just put ---
def validatePrint(value):
if value == None:
return "---"
else:
return "{:.1f}".format(float(value))
#if the value is None tell rrdtool that the value is unknown
def validateRRD(value):
if value == None:
return ":U"
else:
return ":{}".format(value)
''' **********
Ici c'est le fichier hist-EXT
ce fichier est créé avec un modulus % 5 de la minute.
Donc 5 fichier en alternance et le dernier sera un link sur hist-EXT
pour permettre d'utiliser hist-EXT sans avoir de problème
de lecture lorsque le fichier ce fait écrire '''
#current time
current_time= datetime.datetime.now()
histEXT = "/home/www/logs/hist-EXT"
#Nom des fichier
Temp_histEXT= histEXT + "{}".format(current_time.minute % 5) + ".txt"
Link_histEXT= histEXT + ".txt"
#creation du fichier modulus
#try:
if True:
sfile = open(Temp_histEXT,'w')
sfile.write(get_c_locale_abbrev() + " /" + validatePrint(temperature) + "/" + validatePrint(humidity) + "/1\n")
sfile.close()
#creation du link os.symlink ne marche pas si le fichier est déja linké
#os.symlink(Temp_histEXT,Link_histEXT)
subprocess.Popen(["/bin/ln","-fs",Temp_histEXT,Link_histEXT])
#except:
# print("unable to create {}".format(Temp_histEXT))
webdata = "/home/www/Graph/webdata/"
currentStatus = webdata + "DHT22Status.txt"
try:
sfile = open(currentStatus,'w')
sfile.write(validatePrint(humidity) + "," + validatePrint(temperature) + "\n")
sfile.close()
except:
print("unable to create '/home/www/Graph/webdata/DHT22Status.txt'")
#now let's insert the result into rrdtool database
fileRrdTool = "/home/www/Graph/data_DHT22.rrd"
#let's fill the command line with the
#Current time (Right now), temperature and humidity
rdata = "N" + validateRRD(temperature) + validateRRD(humidity)
subprocess.Popen(["/usr/bin/rrdtool","update",fileRrdTool,rdata])
#data Extraction to create data point for the charts.
#create a function with start and step parameters
#this way we could create chart with different timing
def rrdExport(start, step, XMLfile):
texte = "rrdtool xport -s {0} -e now --step {1} ".format(start, step)
#let's populate for temperature, humidity
texte += "DEF:{}={}:{}:AVERAGE ".format('a',fileRrdTool,'th_dht22')
texte += "XPORT:{}:""{}"" ".format('a','th_dht22')
texte += "DEF:{}={}:{}:AVERAGE ".format('b',fileRrdTool,'hm_dht22')
texte += "XPORT:{}:""{}"" ".format('b','hm_dht22')
fileout = open(webdata+XMLfile,"w")
args = shlex.split(texte)
subprocess.Popen(args,stdout=fileout)
fileout.close()
# ok extact 3 hours data
rrdExport("now-3h",300, "DHT22_3h.xml")
#ok 24 hours
rrdExport("now-24h",900, "DHT22_24h.xml")
#ok 48 hours
rrdExport("now-48h",1800, "DHT22_48h.xml")
#ok 1 week
rrdExport("now-8d",3600, "DHT22_1w.xml")
#ok 1 month
rrdExport("now-1month",14400, "DHT22_1m.xml")
#ok 3 month
rrdExport("now-3month",28800, "DHT22_3m.xml")
#ok 1 year
rrdExport("now-1y",43200, "DHT22_1y.xml")
#ok just print on the screen what we have
print("DHT22:{}Celsius, {}%".format(validatePrint(temperature),validatePrint(humidity)))
#done
# en changeant la destination des ecritures
Posté par NeoX . Évalué à 2.
actuellement tu as
qui indique que le fichier sera data_DHT22.rrd
que les rdata seront "N"TemperatureHumidité
pour ensuite l'ecrire dans le fichier.
en reecrivant le code ainsi, ca doit le faire
et probablement, plus bas, adapter, dans la fonction rrdExport pour gerer cela
qui devient
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
Bonsoir et Mreci Néox pour ton aide , j'ai testé , mais j'ai encore un petit probleme
File "readDHT22Test.py", line 123
rdata-temp = "N" + validateRRD(temperature)
SyntaxError: can't assign to operator
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
J'ai remplacé rdata-temp par rdatatemp
et rdata-hum par rdatahum c'est passé mais il y a encore une erreur
ERROR: /home/www/Graph/data_DHT22.rrd: expected 2 data source readings (got 1) from N
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
Merci néox ça a l'air de fonctionner affaire a suivre !!
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1. Dernière modification le 15 avril 2015 à 23:14.
Aille ! j'ai parlé trop vite j'ai bien les 2 BD avec 1 valeurs dans chaque par contre dans les fichiers XML j'ai les 2 valeurs.
[^] # Re: en changeant la destination des ecritures
Posté par NeoX . Évalué à 2.
tu as bien retouché les lignes de
texte+=...
?[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
Oui oui
[^] # Re: en changeant la destination des ecritures
Posté par NeoX . Évalué à 2.
ah ben c'est normal en fait,
le file export prend les deux données et les mets dans le XML
ce qu'il faut c'est preciser à rrdExport quelle donnée il doit traiter.
on ajoute donc un parametre (RRDfile) à la fonction rrdExport afin de preciser le fichier qui devra etre traiter
cela devient donc
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
GGGGGGrrrrrrrrr
ERROR: opening 'fileRrdTEMP': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdHUM': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdTEMP': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdHUM': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdTEMP': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdHUM': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdTEMP': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdHUM': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdTEMP': Aucun fichier ou dossier de ce type
ERROR: opening 'fileRrdHUM': Aucun fichier ou dossier de ce type
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
Oups !!! je pense être sur une piste ,On dirait que l'on cherche fileRrdTEMP ou fileRrdHUM alors qu'il faut chercher DHT22_3h.xml et DHT22Y_3h.xml
CA doit être ici mon probleme , il n'y a pas un probleme de "
[^] # Re: en changeant la destination des ecritures
Posté par NeoX . Évalué à 2. Dernière modification le 16 avril 2015 à 20:52.
c'est bien pour cela qu'on a reecrit rrdExport pour qu'il prenne 4 parametres au lieu de 3,
devient
le 3e champs devient le fichier source,
le 4e devient le XML
ca aurait du marcher…
va falloir ressortir les "debug" et "print" afin de savoir à quel moment il cherche ca
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
Bonsoir Néox , En supprimant les " de la ligne Temperature
les fichiers xml se remplissent
Avec la ligne de l'Hygrometrie ,les fichiers xml ne se remplissent pas.
Et j'ai cette erreur .
Ce que je ne comprend pas dans tout mes fichiers xml j'ai th_dht22 et hm_dht22. ??
[^] # Re: en changeant la destination des ecritures
Posté par NeoX . Évalué à 2.
ca ne devrait plus avec la version de rrdExport avec un seul
texte+=...RRDFile
tu es sur que les fichiers xml avec encore 2 lignes ne sont pas les vieux fichiers d'avant la modification de rrdExport
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1. Dernière modification le 17 avril 2015 à 21:09.
Non non je suis sur j'ai recréer 2 BD data_DHT22T.rrd et data_DHT22Y.rrd , tous les fichiers Xml dont dans webdata dossier virtuel donc je les ai effacé et au lancement de ReadDht22.py il se recréent.
Voila avec quoi je crées ma BD
[^] # Re: en changeant la destination des ecritures
Posté par NeoX . Évalué à 2.
ce programme ne gere que data_DHT22*Y*.rrd
tu dois en avoir un autre pour gerer data_DHT22.rrd
[^] # Re: en changeant la destination des ecritures
Posté par b.gwen . Évalué à 1.
c'est le même que j'ai adapter pour faire la BD data_DHT22T.rrd dans l'original j'ai les 2 valeurs .
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.