Ciao a tutti,
seguendo la guida "Datalogger
atipico con Raspberry Pi" ho cercato di modificare lo script originale per inviare i dati del sensore DS18B20 alla mi pagina.
Naturalmente non va, le cause possono essere:
la mia modifica al codice
il fatto che non ho capito quale chiave vada messa nel codice, quella per scrivere o per leggere
errori di impostazioni nel Field Chart
per cortesia mi dite se il codice qui sotto, nelle parti da me modificato, è corretto?
grazie
!/usr/bin/env python
__author__ = 'Zzed'
# Programma Datalogger di prova, con invio dati online su un canale Thingspeak
# per utilizzarlo, occorre sottoscrivere un account su Thingspeak.com, impostare un canale
# e prendere la KEY del canale
https://thingspeak.com/docs/tutorials/
# Poi, incollare la propria KEY di canale nel codice sotto, come valore della variabile "key"
# se non si connette, salva i dati in locale, e prova a uploadarli non appena possibile
import httplib,urllib,datetime,random,os,glob # importo le librerie
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
def main():
pass
#import httplib,urllib,datetime,random,os,glob # importo le librerie
from time import sleep
#configurazione:
intervallo = 60 # tempo di attesa in secondi tra un invio e l'altro
#########################################################################
##### disabilito funzione lettura temperatura processore RP #########
##########################################################################
#definizione funzioni:
#def thermometer():
# Calcoliamo la temperatura della CPU del RaspberryPi in gradi centigradi
# temp = int(open('/sys/class/thermal/thermal_zone0/temp').read()) / 1e3 # prende temperatura CPU
#temp = str(random.randrange(40,51)) #valore random per test su pc
# return temp
#########################################################################
##### routine che legge temperatura sensore, copiata da script che uso per
##### per dweepy
######################################################################
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-0315620274ff')[0] #cambia id
device_file = device_folder + '/w1_slave'
def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
temp_f = temp_c * 9.0 / 5.0 + 32.0
return temp_c
def inviothinkspeak(valore):
"""invia il valore a Thingspeak, se impossibile lo salva in ram"""
key = 'XXXXXXXXXXXXXX' # <-- key del canale Thingspeak da aggiornare
dest = 'dati-temporanei.csv' # <- percorso del file dati temporanei locali
params = urllib.urlencode({'field1': valore, 'key':key })
headers = {"Content-typZZe": "application/x-www-form-urlencoded","Accept": "text/plain"}
conn = httplib.HTTPConnection("api.thingspeak.com:80")
try:
f = open(dest,'r')
righe = [x for x in f.readlines()]
f.close()
os.remove(dest)
except (IOError, OSError):
# non esiste file temporaneo
pass
try:
conn.request("POST", "/update", params, headers)
response = conn.getresponse()
conn.close()
except:
#connessione fallita!: implementare memorizzazione locale in ramdisk
t = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
vst = str(valore)
# Scrive un file.
out_file = open(dest,'a') # apre file.csv Append
out_file.write(t + ' CEST,'+ vst + '\n' ) # scrive i dati e va a capo
out_file.close() # chiude il file
def importcsvthingspeak(file):
try:
f = open(file,'r')
righe = [x for x in f.readlines()]
f.close()
for x in righe:
print x
except IOError:
print "non trovo il file"
# programma vero e proprio, loop con attesa
if __name__ == "__main__":
while True:
# cambiato da thermometer a read_temp
misura = read_temp()
# print misura # TEST
inviothinkspeak(misura)
sleep(intervallo)