• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
raspberrypi datalogger con quot atipico

Datalogger "atipico" con RaspberryPI
#11
(07/11/2015, 01:09)Zzed Ha scritto: Ciao 

solo oggi, dopo mesi, mi accorgo che il sito si "mangiava" una porzione di codice python e che questo non veniva visualizzato per intero.
Chiedo scusa a tutti quelli che mi avranno insultato per una porzione di codice che in effetti non faceva nulla! Ne mancava più di metà, la parte "saliente"!
Ho temporaneamente risolto inserendo una immagine con il codice e il link dove scaricare il codice .py



leggi la guida aggiornata

Ciao a tutti,ho trovato la tua guida molto interessante,complimenti.Ti chiedo un consiglio su un mio progetto simile  al tuo.
Ho collegato in seriale raspberry ad una centralina di controllo temperatura,vedo correttamente la stringa con minicom e
vorrei esportare i valori on line come hai fatto tu.Sto cercando di modificare il tuo file ma la vedo dura con le mie capacità.Hai qualche consiglio?Anche dove reperire informazioni.
Grazie
Huh Huh Huh
Risposta
#12
L'esempio proposto, serve proprio per quello. Basta modificare la riga che assegna la variabile temp con
Codice:
temp = il modo che usi per visualizzare il valore

La sintassi corretta dipende naturalmente dal tipo di sensore e da come è collegato
Risposta
#13
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)
Risposta
#14
in teoria si (se le funzioni che hai messo per rilevare la temperatura funzionano).
queste righe base_
dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-0315620274ff')[0] #cambia id
device_file = device_folder + '/w1_slave'
settano delle variabili, ma fuori dalla funzione in cui poi le richiami. Infatti, le variabili nelle funzioni sono variabili locali e esistono solo fino a che viene eseguita la funzione..
Però ti consiglerei di modificare la funzione thermometer() invece di metterne una nuova con altro nome, così non dovrai fare altre modifiche nel codice quando viene richiamata la funzione.
Si tratta della chiave di scrittura (a protezione dei tuoi dati, ho editato la tua qui su), in quanto vai a scrivere su ThingSpeak.

PS: ho unito la tua discussione con quella pre-esistente legata alla guida.
Risposta
#15
Grazie mille, Zzed continuiamo qui.
Sono consapevole che modificare la funzione thermometer() sarebbe la soluzione più appropriata
Non avendo tali competenze ho dovuto ripiegare sul innesto di codice che già ho.
Ilario
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect