• 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
come fogli logger usare data raspberry google per

[Guida] Usare Google Fogli come data logger per Raspberry
#1
Salve,
Saprete sicuramente che Fogli Google o Google Spreadsheet è un foglio elettronico on line e condiviso, la presente guida mostra come utilizzare questo strumento per immagazzinare i dati rilevati da un sensore collegato al Raspberry in uno di questi fogli (datalogger). Il mio tentativo è quello di avere un’alternativa più duttile rispetto a piattaforme quali Freeboard o ThingSpeak.

La guida comporta un numero notevole di passaggi consiglio di leggerla e capire i vari passaggi prima di mettersi a fare le cose.

Nella guida si farà riferimento al rilievo di dati di temperatura con il sensore digitale DS18B20 ma si può usare con qualsiasi altro sensore cambiando la parte dello script relativa al rilievo dei dati.

Questa prima parte si può fare da qualsiasi computer collegato ad Internet.

Ottenere le credenziali (scaricare il file.json)
1) creare un account Google.
2) una volta effettuato l’accesso all’account creare un spreadsheet di Fogli Google (Google Drive>nuovo>Fogli Google) praticamente una tabella dove verranno archiviati i dati rilevati dal sensore. Date un nome al foglio e variate le impostazioni di Google Spreadsheet: File>Impostazioni del foglio di lavoro>Generale>Impostazioni Internazionali io ho scelto Regno Unito. Il foglio di lavoro a quel punto legge il punto come separatore decimale.
3) andare su  https://console.developers.google.com/project e
4) creare nuovo progetto, dare un nome al progetto, e google aggiungerà al nome un id al progetto (io ho lasciato quello assegnato).
5) selezionare il progetto e cliccare in alto a sinistra sul simbolo del menu “prodotti e servizi”
6) poi su “API API e Servizi”
7) poi su “Dashboard” si apre la pagina “abilita Api e Servizi”
8) cliccare su “Google Drive API”
9) poi sul tasto “Abilita”. Dalla pagina “API API e Servizi”
10) clicca su “credenziali”
11) e poi su “crea credenziali”. Si apre un menu a tendina,
12) scegliere “Chiave account di servizio”.
13) Scegliere un ID account di servizio o farlo scegliere cliccando sulla freccia circolare. Lasciare selezionato il Radio Botton su “JSON” e
14) cliccare sul tasto “crea”, chiederà il ruolo, si può anche decidere di non assegnare il ruolo, io non lo ho assegnato.
Si scaricherà un file che possiede le credenziali per accedere al foglio di Google.
15) Archiviarlo in luogo sicuro.



Ora dobbiamo abilitare il client eMail a scrivere i dati sulla tabella creata precedentemente;
1) Aprite il file .json con un editor di testo e cercate il "client_email" (copiatelo)
2) Aprite la tabella in Google Fogli e
3) cliccate sul tasto “condividi”, nel campo persone
4) incollate il client    email contenuto nel file .json.
5) Accanto al campo scegliete “può modificare”
6) cliccate su “fine” per salvare le impostazioni.  In questo modo Rpi è abilitato a scrivere i dati sul foglio.
7) Nella cella A1 scrivere “Data ora”, nella cella B1 scrivete “temperatura”.
8) Eliminate tutte le altre righe del foglio (restano solo le due intestazioni).




Ora accedete al vostro Raspberry  e create una cartella dove inserirete il file .json e dove inserirete lo script per leggere il sensore DS18B20 e mandare i dati a Google Fogli.

aprite una finestra del terminale e date i seguenti comandi:

Codice:
sudo apt-get install python-pip
sudo pip install gspread oauth2client
sudo apt-get install python-openssl

Create, nella stessa cartella un file .py dove inserirete:
1) le istruzioni per determinare la data e l’ora del rilievo
2) lo script di lettura del sensore
3) le istruzioni per mandare il dato al Foglio di Google Fogli di cui sopra.  

Nel codice che segue indicherò le istruzioni per mandare il dato dal sensore di temperatura DS18B20, ma ovviamente si possono inserire i listati relativi ai rilievi di altri sensori ed analogamente inviare anche quelli.



Codice:
import datetime
import RPi.GPIO as GPIO
import os
import glob
import time
import sys

now=datetime.datetime.now()
ora=now.strftime('%d/%m/%Y %H.%M.%S') #questa è la formattazione con la quale google Fogli legge la data e l’ora

#quello che segue è il codice per leggere il sensore DS18B20, dovete però inserire i vostri paramentri,
#se usate un altro sensore sostituite questa parte con il codice del vostro sensore

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28-0315620274ff')[0]  #sstituire il “ 28-0315620274ff” con quello del vostro caso
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
       return temp_c
temperatura=(read_temp()) #questo è il rilievo del sensore

#questa parte dello script serve per inviare il dato a Google Fogli

import gspread
import oauth2client.client
import json
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('inserire qui l’indirizzo assoluto e il nome del file .json', scope)
gc = gspread.authorize(credentials)
wks = gc.open("Nome del Foglio di Google su cui inserire i dati").sheet1



#Il seguente comando serve per accodare i dati al foglio.
wks.append_row([ora, temperatura])
sys.exit(1)

Ora basta impostare il crontab (o sudo crontab) in modo che periodicamente lanci lo script.
Per esempio per leggere il sensore ogni 15 minuti

scrivere su terminale

Codice:
crontab -e

ed inserire alla fine

Codice:
*/15 * * * * python3 indirizzoAssolutoDelloScript/nomeDelloScript.py
e poi ctrl o per salvare e ctrl x per uscire dal crontab.

Riavviate il Raspberry

Andate sul vostro foglio di Google e lo vedrete popolarsi dei dati rilevati.
Per il grafico: per "area dati" non indicate un area specifica (tipo A1:B300) ma le colonne che volete graficare (A:B). In questo modo il grafico si aggiornerà ad ogni accesso alla pagina.

Questo è il mio esempio

Questo è tutto, se qualcosa non è chiaro chiedete pure.

Grazie per l’attenzione

Saluti
LaPa
With a little/big help from my friends Rolleyes
Risposta
#2
wow.
veramente carino, già pronto all'esportazione per lavorarci (in solo o in team) da un pc.

ottimo lavoro!
Coltiva linux, che windows si pianta da solo! (cit.)
Risposta
#3
Aggiornamento.
Ho migliorato nel punto su cui avevo dei dubbi la guida ed in effetti era un punto debole: il formato numeri.

In pratica Python di default esprime i decimali con il punto come separatore decimale mentre Fogli Google (almeno nella versione Italiana) di default esprime i numeri decimali con la virgola come separatore decimale. Nella versione precedente della guida avevo affrontato il problema sostituendo il punto con la virgola mediante codice prima d'inviarlo a Fogli Google. Il problema è che se voglio poi estrarre con Python quei numeri per fare dei calcoli non è possibile perché vengono considerati stringhe.
Un modo migliore è cambiare le impostazioni di Fogli Google impostando come separatore decimale il punto e non la virgola: "variare le impostazioni di Fogli Google: File>Impostazioni del foglio di lavoro>Generale>Impostazioni Internazionali io ho scelto Regno Unito. Il foglio di lavoro a quel punto legge il punto come separatore decimale"

Grazie per l'attenzione

Saluti


LaPa
With a little/big help from my friends Rolleyes
Risposta
#4
Salve!
altro piccolo aggiornamento:
fin ora avevo provato a lanciare lo script con Python 3.4 e tutto filava. Purtroppo invece non funziona se lanciamo lo script con Python 2.7 per mancanza di aggiornamento di un modulo.

Se doveste incorrere in questo problema lanciate da terminale il seguente comando

Codice:
sudo apt-get install python pyasn1-modules

e riprovare a lanciare con Python 2.7

Ciao a tutti

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


Vai al forum:


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