In questo Articolo avevo descritto la possibilità di controllare Arduino da remoto e registrare uno storico dei dati utilizzando PHP e MySQL.
Ciò comporta la necessità di conoscere PHP, MySQL ed avere a disposizione un Server Web (Apache, MySQL e PHP). In mancanza di questi come fare?
Leggendo questi articolo mi sono ispirato.
Il primo, I dati da Arduino a Google Spreadsheet, spiega come inviare i dati da Arduino ad un foglio di calcolo su Google Drive (Google Documents)
Il secondo, Monitor your Website’s Uptime with Google Docs, spiega come tenere sotto controllo un server web utilizzando un foglio di calcolo ed un script ad “innesco” automatizzato (Script’s Trigger) che tutto sommato può essere visto come un operazione di CRON.
In particolare, questo ultimo articolo, anche se ai fini pratici non ha nulla a che fare con questo progetto, è stato fondamentale perché mi ha fatto scoprire la possibilità di creare degli script automatizzati tramite Google Drive (ex. Google Documents).
Questo servizio fornito da Google si chiama Google Apps Script. Essi non sono altro che una sorta di macro, come piace chiamare a Microsoft, ma invece di essere scritte in VB sono scritte in JS. Pertanto, per scrivere e programmare questi Google Apps Script c’è da conoscere abbastanza bene javascript. Comunque la documentazione fornita da Google è vastissima.
Non scaricarlo se non sei abbastanza preparato su Arduino e su HTML/Javascript.
Attenzione, modifiche attuate da Google!
Google ha cambiato la pagina dei Moduli di Drive introducendo uno o più campi nascosti con valore casule che dovrebbero essere inseriti all’interno dello sketch. Questi valori potrebbero variare a discrezione di Google, pertanto non è garantito il funzionamento a lungo termine.
Arduino Trigger Monitor
Durante questi studi mi fu commissionato un lavoro che imponeva la necessità di immagazzinare i dati inviati da Arduino ed eseguire dei controlli sui valori senza utilizzare PHP e MySQL. Gli articoli sopra riportati cascarono a fagiolo.
In pratica dovevo monitorare la temperatura di un ambiente, una sala server, che era esposta a forti sbalzi di temperatura, pertanto il committente voleva che fossero inviate delle notifiche sul suo smartphone in caso la temperatura della sala superasse una certa soglia. Il committente doveva però essere autonomo di attivare e disattivare facilmente tali notifiche, impostare e modificare la temperatura di allerta in completa autonomia e avere uno storico dei dati registrati.
Perché ammazzarmi scodiciando con PHP, creare una sorta di CMS, comprare uno spazio web o un server AMP, quando il Sig. Google mi metteva a disposizione tutti gli strumenti di cui necessitavo?
Da qui nasce il mio Arduino Trigger Monitor!
In pratica Arduino tramite un Ethernet Shield inviano una stringa in POST dei bit misurati dai sui ingressi, al Modulo (Form) creato con Google Drive. Tali valori vengono registrati su un foglio di calcolo, tipo Microsoft Excel, sul quale è possibile fare tutte le operazioni matematiche del caso (es. una sommatoria per fare la media, l’immissione di un valore di tara, l’inserimento di grafici, ecc. ecc.) Per chi ha lavorato con Excel non avrà alcun problema a operare su tali dati.
Nel mio caso ho utilizzato un unico ingresso analogico al quel era collegato il sensore di temperatura MCP9700A. Il suo datasheet dice che per avere il valore di temperatura in gradi Celsius devo eseguire una operazione aritmetica. Invece di farla eseguire ad Arduino ho deciso di farla eseguire direttamente sul foglio di calcolo. Supponendo che l’ultimo valore in bit inviato da Arduino venga registrato nella cella B2 del foglio di calcolo, l’operazione da eseguire è:
=INT((B2)*500)/1024)-50)
Il perché di questa operazione per il sensore di temperatura MCP9700A è spiegato in questo articolo.
Lo scritp creato tramite Google Apps Script legge i dati di una determinata cella del nostro foglio di calcolo (es. il valore della soglia massima) e legge i dati dell’ultima misurazione registrata, se l’ultima registrazione ha un valore superiore alla soglia di allerta lo script invia le notifiche via email, su Google Calendar e tramite SMS (simulando un promemoria di un evento appena inserito). Gli SMS vanno abilitati dalle Impostazioni di Google Calendar, il servizio è gratuito.
Una volta al giorno lo script crea la media dei valori misurati durante la giornata e cancella quelli troppo vecchi. Il fatto di cancellare i valori troppo vecchi è fondamentale altrimenti a lungo andare avremo un foglio di calcolo ingestibile e come minimo il Sig. Google si arrabbia.
Lo script controlla che a quale indirizzo email inviare le notifiche e controlla un preciso valore per l’abilitazione di queste. Supponendo che il valore di controllo per l’invio delle notifiche venga scritto nella cella C1, se il valore di questa è uguale a 1 le notifiche sono abilitate, se il valore è uguale a 0 le notifiche sono disattivate pertanto non verranno inviati allarmi in caso di temperatura elevata.
Come fare?
Innanzitutto, tramite il primo articolo segnalato, c’è da creare il modulo per il salvataggio dei dati che Arduino invierà al vostro foglio di calcolo di Google Docs. Nell’articolo viene messo a disposizione anche lo sketch da caricare su Arduino. L’articolo è molto dettagliato e spiegato bene, anche se è una traduzione di un articolo pubblicato 3 mesi prima How to send data from Arduino to Google Docs Spreadsheet. Io allo sketch ho apportato alcune modifiche di miglioramento, ma quelli pubblicati vanno benissimo.
Una volta fatte queste operazioni dobbiamo creare uno script che lavori insieme al nostro foglio di calcolo. Il secondo articolo ci viene in aiuto e ci spiega come creare e innescare lo script a cadenza regolare.
Comunque per far ciò, basta andare sul nostro Modulo o form che ha tutto l’aspetto di un foglio di calcolo e selezionare Strumenti -> Editor di script… si aprirà una nuova pagina con un editor per creare tali script, il linguaggio da utilizzare è Javascript ma Google mette a disposizione una vasta documentazione per gli sviluppatori (vedi link Google Apps Script).
Una volta che il nostro script è stato creato ed è privo di errori possiamo innescare il nostro Script. Per far ciò selezionare Risorse -> Tutti i trigger… -> Aggiungere nuovo trigger quindi selezionare il nome della funzione che abbiamo scritto nello script, selezionare l’evento Basato sul tempo e impostare ogni quanto tempo far eseguire il trigger.
Lo script che ho creato e utilizzato è riportato sotto, i commenti sulle funzioni utilizzate sono direttamente sullo script, per chi ha qualche conoscenza di JS non avrà problemi a scriverne uno tutto suo prendendo spunto da questo.
Tengo a precisare che il codice non è completo ed è solo un 25% di quello che ho utilizzato e venduto. A chi interessasse una versione personalizzata può contattarmi via email o tramite l’apposita sezione Contatti. Altrimenti con una donazione scaricherà direttamente il codice nelle sue intere parti.
Sono forniti:
- Sketch di Arduino
- Modulo di Google Drive facilmente importabile sul proprio account di Google
- Script per il trigger con l’invio di Allerta Valori e Malfunzionamento di Arduino tramite Email, SMS e Calendario
- Guida di utilizzo
- Documentazione
Non scaricarlo se non sei abbastanza preparato su Arduino e su HTML/Javascript.
Attenzione, modifiche attuate da Google!
Google ha cambiato la pagina dei Moduli di Drive introducendo uno o più campi nascosti con valore casule che dovrebbero essere inseriti all’interno dello sketch. Questi valori potrebbero variare a discrezione di Google, pertanto non è garantito il funzionamento a lungo termine.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
/** Monitor Status (Temperatura) per Arduino **/ /** Sviluppato da Gianni Favilli **/ /** tutti i diritti riservati www.giannifavilli.it **/ function ArduinoStatus() { // trigger da eseguire ogni tot tempo var fc = SpreadsheetApp.getActiveSpreadsheet(); // variabilizzo il foglio di calcolo // foglio Modulo var form = fc.setActiveSheet(fs.getSheets()[0]); // variabilizzo foglio del modulo dei dati Arduino var tmedform = form.getRange("E1").getValue(); // prende il valore medio della temperatura /* ... */ // variabili per il malfunzionamento /* ... */ // variabili per l'archivio giornaliero e trimestrale // foglio Impostazioni var impost = fc.setActiveSheet(fs.getSheets()[1]); // variabilizzo foglio Impostazioni var tmpctrl = impost.getRange("B2").getValue();// prende il valore di controllo della temperatura var email = impost.getRange("B3").getValue(); // prende il valore dell'indirizzo email var ntf = impost.getRange("B4").getValue(); // prende il valore delle notifiche se 1 attive se 0 no // email var oggtmp = "ARDUINO ALLERTA Temperatura < " + tmedform + "°C >"; var msgtmp = "Temperatura ELEVATA"; /* ... */ // variabili per il messaggio di malfunzionamento // calendario var cal = CalendarApp.getDefaultCalendar(); var caltit = "ALLERTA Temperatura < " + tmedform + "°C > by Arduino"; /* ... */ // variabili per la notifica via SMS // controllo la temperatura if (tmedform > tmpctrl) { // controlla se la temperatura registrata è superiore alla soglia di allerta MailApp.sendEmail(email, oggtmp, msgtmp); cal.createEvent(caltit, eventstr, eventend); } /* ... */ // variabili per i grafici e le statistiche } // fine funzione ArduinoStatus function DailyPerform() { //trigger da eseguire una volta la giorno per ripulire il foglio /* ... */ // variabili per la cancellazione dei vecchi record // controllo per la cancellazione dei record più vecchi di 90 giorni ovvero 3 mesi if (numday > 90) { // se vera elimina il record più vecchio del foglio regday.deleteRow(91); } } // fine funzione DailyPerform |
Dato che i dati vengono registrati su Google Drive i valori inviati da Arduino possono essere consultati in real-time anche sul proprio smartphone tramite l’applicazione Google Drive o tramite browser.
Una cosa interessante che Google Drive ci metteva a disposizione era la possibilità di integrare i nostri grafici riprodotti dal foglio di calcolo direttamente sul web.
Non scaricarlo se non sei abbastanza preparato su Arduino e su HTML/Javascript.
Attenzione, modifiche attuate da Google!
Google ha cambiato la pagina dei Moduli di Drive introducendo uno o più campi nascosti con valore casule che dovrebbero essere inseriti all’interno dello sketch. Questi valori potrebbero variare a discrezione di Google, pertanto non è garantito il funzionamento a lungo termine.
I commenti sono chiusi.