• 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
in salvare sensori datalogger i file dei xlsx dati locale

[Guida] Salvare i dati dei sensori in file xlsx in locale (datalogger)
#1
Salve, spero che questa guida sia utile a qualcuno.
Esistono diverse indicazioni e guide per inviare i dati rilevati dai sensori su piattaforme on-line, io ad esempio utilizzo Freeboard e ThingSpeak e questo ci permette di vedere i rilievi dei sensori collegati al nostro RPI. Tuttavia potrebbe essere utile salvare una copia dei rilievi in locale su file excel per avere una continuità delle registrazioni anche se il collegamento, per qualsiasi motivo, s’interrompe.

1) installare openpyxl sul Raspberry:
a) Se gli script dei sensori sono in Python 3 il comando è

Codice:
sudo pip3 install openpyxl

b) se gli script dei sensori sono in Python 2 il comando è

Codice:
sudo pip2 install openpyxl

Ora create una cartella, la mia l’ho chiamata RPIProject e copiate all’interno tutti gli script dei sensori collegati al vostro Rpi e soprattutto gli eventuali script da cui importano.

Nella stessa cartella inserite un file in .xlsx che è quello dove verranno scritti i dati. A questo proposito vi ricordo che su Raspbian c’è LibreOffice e che con l’applicazione Calc si possono creare file con estensione .xlsx. Nell’intestazione della prima colonna scrivete “data e ora”, nelle intestazioni successive ciò che rilevano i sensori (ad esempio: temperatura, umidità relativa, etc. etc.)

Ora dobbiamo creare uno script in Python che legga i sensori ed inserisca i rilievi nel foglio excel: io l’ho chiamato storing.py

In storing.py ho copiato tutti gli script in sequenza di tutti i sensori senza gli output numerici (in genere quello che c’è dopo il “print”)

poi scrivo
Codice:
import datetime
import openpyxl

#scrittura della data e ora

now=datetime.datetime.now()
ora=now.strftime('%d/%m/%Y %H:%M:%S')
#scrittura dei dati nel file .xlsx
wb=openpyxl.load_workbook('/indirizzoassolutodellacartella/nomefile.xlsx')
ws=wb.active
ws.append([ora,data1,data2,…..,dataN])
wb.save('/indirizzoassolutodellacartella/nomefile.xlsx')

Al posto di “data1,data2,…..,dataN” scrivete gli output numerici dei sensori (in genere quello che c’è dopo il ‘print’ nei vari script dei sensori)

Nota bene, openpyxl non salva i grafici, pertanto se impostate un grafico derivante dai dati nel file .xlsx non ve lo ritroverete.

A questo punto dobbiamo fare in modo che il file storing.py , o come lo avete chiamato voi, venga eseguito ogni tot minuti. Ad esempio con crontab:
digitate nel terminale

Codice:
crontab -e

oppure

Codice:
sudo crontab -e

si apre un file in fondo al quale potete inserire la vostra richiesta di esecuzione periodica del file storing.

Ad esempio per rilevare ogni mezz’ora: il comando da aggiungere in crontab è il seguente:

Codice:
*/30 * * * * python /indirizzoassolutodellacartella/nomefile.py

poi digitate ctrl o per salvare e ctrl x per uscire dal crontab.

Riavviate il Raspberry Pi per rendere eseguibile il crontab.

Grazie per l’attenzione

Ciao

LaPa
With a little/big help from my friends Rolleyes
Risposta
#2
Scusatemi, non era più facile scrivere un file di testo, separare i valori da virgole, e chiamarlo nomefile.csv?
Ma in effetti se devo popolare un file Excel già esistente..
Risposta
#3
Ciao LaPa,
cortesemente non capisco quale parte dello script che legge la temperatura deve essere inserito nel file storing.py

ti posto qui il mio script, per cortesia mi dici cosa copiare?

grazie
Codice:
import os
import glob
import time
import dweepy
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-0517805fb3ff')[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        


dweepy.dweet_for('xxxxxxxxxxxxx',{'Temperatura':(read_temp())})
Risposta
#4
Ciao Ilario,

dovrebbe essere "read_temp()"

per esserne sicuro aggiungi allo script

print (read_temp())

e verifica se all'esecuzione ti dà la temperatura

prova e fammi sapere.

Saluti

Lapa
With a little/big help from my friends Rolleyes
Risposta
#5
Ok grazie mille!
Risposta
#6
Scusami ho corretto dopo, prova con "read_temp()"
With a little/big help from my friends Rolleyes
Risposta
#7
Grazie LaPa avevo intuito ti riferissi alla funzione. Adesso ricordo che lo script di adafruit stampa a video il valore, quindi è quella variabile che va a popolare la tabella .xlsx.

Ciao
Risposta
#8
Funziona, grazie a LaPa e Zzed.
Risposta
#9
(10/12/2017, 18:40)LaPa Ha scritto: ...Esistono diverse indicazioni e guide per inviare i dati rilevati dai sensori su piattaforme on-line, io ad esempio utilizzo Freeboard e ThingSpeak e questo ci permette di vedere i rilievi dei sensori collegati al nostro RPI.
Se ho capito bene:
  • Freeboard mi pare gratuito con limite di visualizzazione dati di 30 giorni dalla rilevazione, altrimenti ci sono costi crescenti a partire da 12 €/mese per visualizzare i dati 1 anno, ecc. Chiedo se l'opzione "gratuita" consente comunque di incorporare i dati ed i grafici in una pagina web (esempio in wordpress).
  • ThingSpeak mi pare gratuito ma i canali dei sensori devono essere pubblici, oppure è a pagamento per canali "privati". Chiedo se l'opzione "gratuita" consente comunque di incorporare i dati ed i grafici in una pagina web (esempio in wordpress).
Risposta
#10
(02/06/2018, 11:47)esco Ha scritto:
(10/12/2017, 18:40)LaPa Ha scritto: ...Esistono diverse indicazioni e guide per inviare i dati rilevati dai sensori su piattaforme on-line, io ad esempio utilizzo Freeboard e ThingSpeak e questo ci permette di vedere i rilievi dei sensori collegati al nostro RPI.
Se ho capito bene:
  • Freeboard mi pare gratuito con limite di visualizzazione dati di 30 giorni dalla rilevazione, altrimenti ci sono costi crescenti a partire da 12 €/mese per visualizzare i dati 1 anno, ecc. Chiedo se l'opzione "gratuita" consente comunque di incorporare i dati ed i grafici in una pagina web (esempio in wordpress).
  • ThingSpeak mi pare gratuito ma i canali dei sensori devono essere pubblici, oppure è a pagamento per canali "privati". Chiedo se l'opzione "gratuita" consente comunque di incorporare i dati ed i grafici in una pagina web (esempio in wordpress).

Purtroppo non lo so, non uso più entrambe le piattaforme. Ho optato per una cosa che a me sembra migliore perché personalizzabile: Invio tutto su Fogli Google. Vedi la mia guida in proposito se t'interessa.

Saluti

LaPa
With a little/big help from my friends Rolleyes
Risposta
  


Vai al forum:


Navigazione:
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect