07/01/2018, 15:54
(Questo messaggio è stato modificato l'ultima volta il: 12/01/2018, 16:33 da LaPa.)
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:
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.
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
ed inserire alla fine
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
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
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