{"id":1056,"date":"2012-10-02T17:21:41","date_gmt":"2012-10-02T15:21:41","guid":{"rendered":"https:\/\/www.giannifavilli.it\/blog\/?p=1056"},"modified":"2022-02-22T16:09:30","modified_gmt":"2022-02-22T15:09:30","slug":"arduino-googledrive-trigger","status":"publish","type":"post","link":"https:\/\/www.giannifavilli.it\/blog\/arduino-googledrive-trigger\/","title":{"rendered":"Arduino &#038; Google Drive: monitor dei sensori con trigger e invio notifiche"},"content":{"rendered":"<p>In questo <a title=\"Arduino: Domotica e Antifurto con Controllo Remoto e Notifica SMS Tramite Google Calendar\" href=\"https:\/\/www.giannifavilli.it\/blog\/arduino-webcontrol-gcal-sms\/\">Articolo<\/a> avevo descritto la possibilit\u00e0 di controllare Arduino da remoto e registrare uno storico dei dati utilizzando PHP e MySQL.<\/p>\n<p>Ci\u00f2 comporta la necessit\u00e0 di conoscere PHP, MySQL ed avere a disposizione un Server Web (Apache, MySQL e PHP). In mancanza di questi come fare?<\/p>\n<p><!--more--><\/p>\n<div class=\"clear-block\"><div class=\"ad alignnone\">\n\t\t\t\t<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n\t\t\t\t<!-- GianniFavilli - Responsive -->\n\t\t\t\t<ins class=\"adsbygoogle\"\n\t\t\t\t     style=\"display:block\"\n\t\t\t\t     data-ad-client=\"ca-pub-1205156047762515\"\n\t\t\t\t     data-ad-slot=\"6873384605\"\n\t\t\t\t     data-ad-format=\"auto\"><\/ins>\n\t\t\t\t<script>\n\t\t\t\t(adsbygoogle = window.adsbygoogle || []).push({});\n\t\t\t\t<\/script>\n\t\t\t\t<\/div><\/div>\n<p>&nbsp;<\/p>\n<div class=\"alert-message error\"><span class=\"close\" href=\"#\"><\/span><div>Attenzione! Questo progetto non \u00e8 per neofiti! Non scaricarlo se non sei abbastanza preparato su Arduino e su HTML\/Javascript<\/div><\/div>\n<p>Leggendo questi articolo mi sono ispirato.<\/p>\n<p>Il primo, <a href=\"http:\/\/blog.elettronicain.it\/2011\/08\/29\/i-dati-da-arduino-a-google-spreadsheet\/\" target=\"_blank\" rel=\"noopener noreferrer\">I\u00a0dati da Arduino a Google Spreadsheet<\/a>,\u00a0spiega come inviare i dati da Arduino ad un foglio di calcolo su Google Drive (Google Documents)<\/p>\n<p>Il secondo, <a href=\"http:\/\/www.labnol.org\/internet\/website-uptime-monitor\/21060\/\" target=\"_blank\" rel=\"noopener noreferrer\">Monitor your Website\u2019s Uptime with Google Docs<\/a>,\u00a0spiega come tenere sotto controllo un server web utilizzando un foglio di calcolo ed un script ad &#8220;innesco&#8221; automatizzato (Script\u2019s Trigger) che tutto sommato pu\u00f2 essere visto come un operazione di <a title=\"Wikipedia CRON\" href=\"http:\/\/en.wikipedia.org\/wiki\/Cron\" target=\"_blank\" rel=\"noopener noreferrer\">CRON<\/a>.<br \/>\nIn particolare, questo ultimo articolo, anche se ai fini pratici non ha nulla a che fare con questo progetto, \u00e8 stato fondamentale perch\u00e9 mi ha fatto scoprire la possibilit\u00e0 di creare degli script automatizzati tramite <a title=\"Google Drive\" href=\"https:\/\/drive.google.com\" target=\"_blank\" rel=\"noopener noreferrer\">Google Drive<\/a> (ex. Google Documents).<br \/>\nQuesto servizio fornito da Google si chiama\u00a0<a title=\"Google Apps Script\" href=\"https:\/\/developers.google.com\/apps-script\/\" target=\"_blank\" rel=\"noopener noreferrer\">Google Apps Script<\/a>. Essi\u00a0non sono altro che una sorta di <strong><em>macro<\/em><\/strong>, 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&#8217;\u00e8 da conoscere abbastanza bene javascript. Comunque la documentazione fornita da Google \u00e8 vastissima.<br \/>\n\t<!-- \/\/NOTE inibito\n\t<div class=\"paga_box_sandbox\"><h4>In questo momento non fare donazioni, sto testando il sistema. Grazie!<\/h4>\t<p>Dona 2 Euro per scaricare il progetto completo<\/p>\n\t<p class=\"mini\">A donazione effettuata una email con le informazioni e il link per scaricare il progetto ti sar\u00e0 inviata all'indirizzo di posta che hai utilizzato su PayPal per fare la donazione<\/p>\n\t<form method=\"post\" name=\"paypal_form_donap_2709\" action=\"https:\/\/www.sandbox.paypal.com\/cgi-bin\/webscr\">\n\t\t<input type=\"hidden\" name=\"business\" value=\"info@giannifavilli.it\" \/>\n\t\t<input type=\"hidden\" name=\"cmd\" value=\"_donations\" \/>\n\t\t<input type=\"hidden\" name=\"return\" value=\"http:\/\/www.giannifavilli.it\/blog\/ppget\/?mailpp=1\" \/>\n\t\t<input type=\"hidden\" name=\"cancel_return\" value=\"http:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1056\" \/>\n\t\t<input type=\"hidden\" name=\"notify_url\" value=\"http:\/\/www.giannifavilli.it\/listen\/donazione_pp_ipn.php\" \/>\n\t\t<input type=\"hidden\" name=\"rm\" value=\"2\" \/>\n\t\t<input type=\"hidden\" name=\"currency_code\" value=\"EUR\" \/>\n\t\t<input type=\"hidden\" name=\"lc\" value=\"IT\" \/>\n\t\t<input type=\"hidden\" name=\"cbt\" value=\"Grazie! Permi qui per torna sul blog e scarica il progetto\" \/>\n\t\t<input type=\"hidden\" name=\"item_name\" value=\"(ArduinoGdrive) Progetto per Donazione al fine di mantenere il blog\" \/>\n\t\t<input type=\"hidden\" name=\"amount\" id=\"amount\" value=\"2\">\n\t\t<input type=\"hidden\" name=\"custom\" value=\"ArduinoGdrive\" \/>\n\t\t<input type=\"hidden\" name=\"no_note\" value=\"1\" \/>\n\t\t<input class=\"pulsantepp\" type=\"image\" src=\"https:\/\/www.paypalobjects.com\/it_IT\/IT\/i\/btn\/btn_donateCC_LG.gif\" border=\"0\" name=\"submit\" alt=\"PayPal - Il metodo rapido, sicuro e affidabile per fare donazioni.\" \/>\n\t<\/form>\n\t<\/div>\n\t-->\n\t<\/p>\n<div class=\"alert alert-error fade in\"><strong>Attenzione, questo progetto non \u00e8 per neofiti!<\/strong><br \/>\nNon scaricarlo se non sei abbastanza preparato su Arduino e su HTML\/Javascript.<br \/>\n<strong>Attenzione, modifiche attuate da Google!<\/strong><br \/>\nGoogle ha cambiato la pagina dei Moduli di Drive introducendo uno o pi\u00f9 campi nascosti con valore casule che dovrebbero essere inseriti all&#8217;interno dello sketch. Questi valori potrebbero variare a discrezione di Google, pertanto non \u00e8 garantito il funzionamento a lungo termine.<\/div>\n<h3>Arduino Trigger Monitor<\/h3>\n<p>Durante questi studi mi fu commissionato un lavoro che imponeva la necessit\u00e0 di immagazzinare i dati inviati da Arduino ed eseguire dei controlli sui valori senza utilizzare PHP e MySQL.\u00a0Gli articoli sopra riportati cascarono a fagiolo.<br \/>\nIn 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\u00f2 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.<\/p>\n<p>Perch\u00e9 ammazzarmi <em>scodiciando<\/em> 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?<\/p>\n<p><strong>Da qui nasce il mio Arduino Trigger Monitor!<\/strong><\/p>\n<p>In pratica Arduino tramite un Ethernet Shield inviano una stringa in <a title=\"POST HTTP\" href=\"http:\/\/en.wikipedia.org\/wiki\/POST_(HTTP)\" target=\"_blank\" rel=\"noopener noreferrer\">POST<\/a> 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 \u00e8 possibile fare tutte le operazioni matematiche del caso (es. una sommatoria per fare la media, l&#8217;immissione di un valore di tara, l&#8217;inserimento di grafici, ecc. ecc.) Per chi ha lavorato con Excel non avr\u00e0 alcun problema a operare su tali dati.<\/p>\n<p>Nel mio caso ho utilizzato un unico ingresso analogico al quel era collegato il sensore di temperatura\u00a0MCP9700A. 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&#8217;ultimo valore in bit inviato da Arduino venga registrato nella cella B2 del foglio di calcolo, l&#8217;operazione da eseguire \u00e8:<\/p>\n<p><code>=INT((B2)*500)\/1024)-50)<\/code><\/p>\n<p>Il perch\u00e9 di questa operazione per il sensore di temperatura MCP9700A\u00a0\u00e8 spiegato in <a title=\"Arduino e il sensore di temperatura\" href=\"https:\/\/www.giannifavilli.it\/blog\/arduino-sensore-temperatura\/\" target=\"_blank\" rel=\"noopener noreferrer\">questo articolo<\/a>.<\/p>\n<p>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&#8217;ultima misurazione registrata, se l&#8217;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 \u00e8 gratuito.<\/p>\n<p>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 \u00e8 fondamentale altrimenti a lungo andare avremo un foglio di calcolo ingestibile e come minimo il Sig. Google si arrabbia.<\/p>\n<p>Lo script controlla che a quale indirizzo email inviare le notifiche e controlla un preciso valore per l&#8217;abilitazione di queste. Supponendo che il valore di controllo per l&#8217;invio delle notifiche venga scritto nella cella C1, se il valore di questa \u00e8 uguale a 1 le notifiche sono abilitate, se il valore \u00e8 uguale a 0 le notifiche sono disattivate pertanto non verranno inviati allarmi in caso di temperatura elevata.<\/p>\n<h3>Come fare?<\/h3>\n<p>Innanzitutto, tramite il primo articolo segnalato, c&#8217;\u00e8 da creare il modulo per il salvataggio dei dati che Arduino invier\u00e0 al vostro foglio di calcolo di Google Docs. Nell&#8217;articolo viene messo a disposizione anche lo sketch da caricare su Arduino. L&#8217;articolo \u00e8 molto dettagliato e spiegato bene, anche se \u00e8 una traduzione di un articolo pubblicato 3 mesi prima\u00a0<a title=\"How to send data from Arduino to Google Docs Spreadsheet\" href=\"http:\/\/www.open-electronics.org\/how-send-data-from-arduino-to-google-docs-spreadsheet\/\" target=\"_blank\" rel=\"noopener noreferrer\">How to send data from Arduino to Google Docs Spreadsheet<\/a>. Io allo sketch ho apportato alcune modifiche di miglioramento, ma quelli pubblicati vanno benissimo.<\/p>\n<p>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.<\/p>\n<p>Comunque per far ci\u00f2, basta andare sul nostro Modulo o form che ha tutto l&#8217;aspetto di un foglio di calcolo e selezionare <em><strong>Strumenti -&gt; Editor di script&#8230;<\/strong><\/em> si aprir\u00e0 una nuova pagina con un editor per creare tali script, il linguaggio da utilizzare \u00e8 Javascript ma Google mette a disposizione una vasta documentazione per gli sviluppatori (vedi link Google Apps Script).<\/p>\n<p>Una volta che il nostro script \u00e8 stato creato ed \u00e8 privo di errori possiamo innescare il nostro Script. Per far ci\u00f2 selezionare <em><strong>Risorse -&gt; Tutti i trigger&#8230; -&gt; Aggiungere nuovo trigger<\/strong><\/em> quindi selezionare il nome della funzione che abbiamo scritto nello script, selezionare l&#8217;evento Basato sul tempo e impostare ogni quanto tempo far eseguire il trigger.<\/p>\n<p>Lo script che ho creato e utilizzato \u00e8 riportato sotto, i commenti sulle funzioni utilizzate sono direttamente sullo script, per chi ha qualche conoscenza di JS non avr\u00e0 problemi a scriverne uno tutto suo prendendo spunto da questo.<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 33%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-1056 gallery-columns-3 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a rel=\"prettyPhoto[pp_gal]\" href='https:\/\/www.giannifavilli.it\/blog\/arduino-googledrive-trigger\/arduino-drive-trigger01\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger01-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1118\" srcset=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger01-150x150.jpg 150w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger01-64x64.jpg 64w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-1118'>\n\t\t\t\tEditor degli script\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a rel=\"prettyPhoto[pp_gal]\" href='https:\/\/www.giannifavilli.it\/blog\/arduino-googledrive-trigger\/arduino-drive-trigger02\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger02-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1119\" srcset=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger02-150x150.jpg 150w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger02-64x64.jpg 64w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-1119'>\n\t\t\t\tAzionare il trigger\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a rel=\"prettyPhoto[pp_gal]\" href='https:\/\/www.giannifavilli.it\/blog\/arduino-googledrive-trigger\/arduino-drive-trigger03\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger03-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1120\" srcset=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger03-150x150.jpg 150w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-trigger03-64x64.jpg 64w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-1120'>\n\t\t\t\tTrigger temporale\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a rel=\"prettyPhoto[pp_gal]\" href='https:\/\/www.giannifavilli.it\/blog\/arduino-googledrive-trigger\/arduino-drive-config\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-config-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1130\" srcset=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-config-150x150.jpg 150w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-config-64x64.jpg 64w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-1130'>\n\t\t\t\tAttivazione delle notifiche\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a rel=\"prettyPhoto[pp_gal]\" href='https:\/\/www.giannifavilli.it\/blog\/arduino-googledrive-trigger\/arduino-drive-month\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-month-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1117\" srcset=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-month-150x150.jpg 150w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-month-64x64.jpg 64w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-1117'>\n\t\t\t\tIl Foglio con i dati registrati\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a rel=\"prettyPhoto[pp_gal]\" href='https:\/\/www.giannifavilli.it\/blog\/arduino-googledrive-trigger\/arduino-drive-day\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-day-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail\" alt=\"\" aria-describedby=\"gallery-1-1116\" srcset=\"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-day-150x150.jpg 150w, https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/arduino-drive-day-64x64.jpg 64w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-1116'>\n\t\t\t\tGrazico dati\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n<p>Tengo a precisare che<strong> il codice non \u00e8 completo ed \u00e8 solo un 25% di quello che ho utilizzato<\/strong> e venduto. A chi interessasse una versione personalizzata pu\u00f2 contattarmi via email o tramite l&#8217;apposita sezione <a title=\"Contattami\" href=\"https:\/\/www.giannifavilli.it\/blog\/contatti\/\" target=\"_blank\" rel=\"noopener noreferrer\">Contatti<\/a>. Altrimenti con una donazione scaricher\u00e0 direttamente il codice nelle sue intere parti.<\/p>\n<p>Sono forniti:<\/p>\n<ul>\n<li>Sketch di Arduino<\/li>\n<li>Modulo di Google Drive facilmente importabile sul proprio account di Google<\/li>\n<li>Script per il trigger con l&#8217;invio di Allerta Valori e Malfunzionamento di Arduino tramite Email, SMS e Calendario<\/li>\n<li>Guida di utilizzo<\/li>\n<li>Documentazione<\/li>\n<\/ul>\n\t<!-- \/\/NOTE inibito\n\t<div class=\"paga_box_sandbox\"><h4>In questo momento non fare donazioni, sto testando il sistema. Grazie!<\/h4>\t<p>Dona 2 Euro per scaricare il progetto completo<\/p>\n\t<p class=\"mini\">A donazione effettuata una email con le informazioni e il link per scaricare il progetto ti sar\u00e0 inviata all'indirizzo di posta che hai utilizzato su PayPal per fare la donazione<\/p>\n\t<form method=\"post\" name=\"paypal_form_donap_132\" action=\"https:\/\/www.sandbox.paypal.com\/cgi-bin\/webscr\">\n\t\t<input type=\"hidden\" name=\"business\" value=\"info@giannifavilli.it\" \/>\n\t\t<input type=\"hidden\" name=\"cmd\" value=\"_donations\" \/>\n\t\t<input type=\"hidden\" name=\"return\" value=\"http:\/\/www.giannifavilli.it\/blog\/ppget\/?mailpp=1\" \/>\n\t\t<input type=\"hidden\" name=\"cancel_return\" value=\"http:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1056\" \/>\n\t\t<input type=\"hidden\" name=\"notify_url\" value=\"http:\/\/www.giannifavilli.it\/listen\/donazione_pp_ipn.php\" \/>\n\t\t<input type=\"hidden\" name=\"rm\" value=\"2\" \/>\n\t\t<input type=\"hidden\" name=\"currency_code\" value=\"EUR\" \/>\n\t\t<input type=\"hidden\" name=\"lc\" value=\"IT\" \/>\n\t\t<input type=\"hidden\" name=\"cbt\" value=\"Grazie! Permi qui per torna sul blog e scarica il progetto\" \/>\n\t\t<input type=\"hidden\" name=\"item_name\" value=\"(ArduinoGdrive) Progetto per Donazione al fine di mantenere il blog\" \/>\n\t\t<input type=\"hidden\" name=\"amount\" id=\"amount\" value=\"2\">\n\t\t<input type=\"hidden\" name=\"custom\" value=\"ArduinoGdrive\" \/>\n\t\t<input type=\"hidden\" name=\"no_note\" value=\"1\" \/>\n\t\t<input class=\"pulsantepp\" type=\"image\" src=\"https:\/\/www.paypalobjects.com\/it_IT\/IT\/i\/btn\/btn_donateCC_LG.gif\" border=\"0\" name=\"submit\" alt=\"PayPal - Il metodo rapido, sicuro e affidabile per fare donazioni.\" \/>\n\t<\/form>\n\t<\/div>\n\t-->\n\t\n<div class=\"alert alert-error fade in\"><strong>Attenzione, questo progetto non \u00e8 per neofiti!<\/strong><br \/>\nNon scaricarlo se non sei abbastanza preparato su Arduino e su HTML\/Javascript.<br \/>\n<strong>Attenzione, modifiche attuate da Google!<\/strong><br \/>\nGoogle ha cambiato la pagina dei Moduli di Drive introducendo uno o pi\u00f9 campi nascosti con valore casule che dovrebbero essere inseriti all&#8217;interno dello sketch. Questi valori potrebbero variare a discrezione di Google, pertanto non \u00e8 garantito il funzionamento a lungo termine.<\/div>\n<pre class=\"toolbar:1 lang:js decode:true\" title=\"Il mio Google Apps Script\">\/**  Monitor Status (Temperatura) per Arduino  **\/\r\n\/**  Sviluppato da Gianni Favilli **\/ \r\n\/** tutti i diritti riservati www.giannifavilli.it **\/\r\n\r\nfunction ArduinoStatus() { \/\/ trigger da eseguire ogni tot tempo\r\n\r\n  var fc = SpreadsheetApp.getActiveSpreadsheet(); \/\/ variabilizzo il foglio di calcolo\r\n\r\n  \/\/ foglio Modulo\r\n  var form = fc.setActiveSheet(fs.getSheets()[0]); \/\/ variabilizzo foglio del modulo dei dati Arduino\r\n  var tmedform = form.getRange(\"E1\").getValue(); \/\/ prende il valore medio della temperatura\r\n  \/* ... *\/ \/\/ variabili per il malfunzionamento\r\n\r\n  \/* ... *\/ \/\/ variabili per l'archivio giornaliero e trimestrale\r\n\r\n  \/\/ foglio Impostazioni\r\n  var impost = fc.setActiveSheet(fs.getSheets()[1]); \/\/ variabilizzo foglio Impostazioni\r\n  var tmpctrl = impost.getRange(\"B2\").getValue();\/\/ prende il valore di controllo della temperatura\r\n  var email = impost.getRange(\"B3\").getValue(); \/\/ prende il valore dell'indirizzo email\r\n  var ntf = impost.getRange(\"B4\").getValue(); \/\/ prende il valore delle notifiche se 1 attive se 0 no\r\n\r\n  \/\/ email\r\n  var oggtmp = \"ARDUINO ALLERTA Temperatura &lt; \" + tmedform + \"\u00b0C &gt;\";\r\n  var msgtmp = \"Temperatura ELEVATA\";\r\n  \/* ... *\/ \/\/ variabili per il messaggio di malfunzionamento\r\n\r\n  \/\/ calendario\r\n  var cal = CalendarApp.getDefaultCalendar();\r\n  var caltit = \"ALLERTA Temperatura &lt; \" + tmedform + \"\u00b0C &gt; by Arduino\";\r\n  \/* ... *\/ \/\/ variabili per la notifica via SMS\r\n\r\n\t\/\/ controllo la temperatura\r\n\tif (tmedform &gt; tmpctrl) { \/\/ controlla se la temperatura registrata \u00e8 superiore alla soglia di allerta\r\n\tMailApp.sendEmail(email, oggtmp, msgtmp);\r\n        cal.createEvent(caltit, eventstr, eventend);\r\n    }\r\n\r\n  \/* ... *\/ \/\/ variabili per i grafici e le statistiche\r\n\r\n} \/\/ fine funzione ArduinoStatus\r\n\r\nfunction DailyPerform() { \/\/trigger da eseguire una volta la giorno per ripulire il foglio\r\n\r\n  \/* ... *\/ \/\/ variabili per la cancellazione dei vecchi record\r\n\r\n  \/\/ controllo per la cancellazione dei record pi\u00f9 vecchi di 90 giorni ovvero 3 mesi\r\n  if (numday &gt; 90) { \/\/ se vera elimina il record pi\u00f9 vecchio del foglio\r\n    regday.deleteRow(91);  \r\n  }\r\n\r\n} \/\/ fine funzione DailyPerform<\/pre>\n<p><strong>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&#8217;applicazione <a title=\"Android App Google Drive\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.apps.docs&amp;feature=nav_result#?t=W251bGwsMSwyLDNd\" target=\"_blank\" rel=\"noopener noreferrer\">Google Drive<\/a>\u00a0o tramite browser.<\/strong><\/p>\n<p>Una cosa interessante che Google Drive ci metteva a disposizione era la possibilit\u00e0 di integrare i nostri grafici riprodotti dal foglio di calcolo direttamente sul web.<br \/>\n\t<!-- \/\/NOTE inibito\n\t<div class=\"paga_box_sandbox\"><h4>In questo momento non fare donazioni, sto testando il sistema. Grazie!<\/h4>\t<p>Dona 2 Euro per scaricare il progetto completo<\/p>\n\t<p class=\"mini\">A donazione effettuata una email con le informazioni e il link per scaricare il progetto ti sar\u00e0 inviata all'indirizzo di posta che hai utilizzato su PayPal per fare la donazione<\/p>\n\t<form method=\"post\" name=\"paypal_form_donap_4259\" action=\"https:\/\/www.sandbox.paypal.com\/cgi-bin\/webscr\">\n\t\t<input type=\"hidden\" name=\"business\" value=\"info@giannifavilli.it\" \/>\n\t\t<input type=\"hidden\" name=\"cmd\" value=\"_donations\" \/>\n\t\t<input type=\"hidden\" name=\"return\" value=\"http:\/\/www.giannifavilli.it\/blog\/ppget\/?mailpp=1\" \/>\n\t\t<input type=\"hidden\" name=\"cancel_return\" value=\"http:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1056\" \/>\n\t\t<input type=\"hidden\" name=\"notify_url\" value=\"http:\/\/www.giannifavilli.it\/listen\/donazione_pp_ipn.php\" \/>\n\t\t<input type=\"hidden\" name=\"rm\" value=\"2\" \/>\n\t\t<input type=\"hidden\" name=\"currency_code\" value=\"EUR\" \/>\n\t\t<input type=\"hidden\" name=\"lc\" value=\"IT\" \/>\n\t\t<input type=\"hidden\" name=\"cbt\" value=\"Grazie! Permi qui per torna sul blog e scarica il progetto\" \/>\n\t\t<input type=\"hidden\" name=\"item_name\" value=\"(ArduinoGdrive) Progetto per Donazione al fine di mantenere il blog\" \/>\n\t\t<input type=\"hidden\" name=\"amount\" id=\"amount\" value=\"2\">\n\t\t<input type=\"hidden\" name=\"custom\" value=\"ArduinoGdrive\" \/>\n\t\t<input type=\"hidden\" name=\"no_note\" value=\"1\" \/>\n\t\t<input class=\"pulsantepp\" type=\"image\" src=\"https:\/\/www.paypalobjects.com\/it_IT\/IT\/i\/btn\/btn_donateCC_LG.gif\" border=\"0\" name=\"submit\" alt=\"PayPal - Il metodo rapido, sicuro e affidabile per fare donazioni.\" \/>\n\t<\/form>\n\t<\/div>\n\t-->\n\t<\/p>\n<div class=\"alert alert-error fade in\"><strong>Attenzione, questo progetto non \u00e8 per neofiti!<\/strong><br \/>\nNon scaricarlo se non sei abbastanza preparato su Arduino e su HTML\/Javascript.<br \/>\n<strong>Attenzione, modifiche attuate da Google!<\/strong><br \/>\nGoogle ha cambiato la pagina dei Moduli di Drive introducendo uno o pi\u00f9 campi nascosti con valore casule che dovrebbero essere inseriti all&#8217;interno dello sketch. Questi valori potrebbero variare a discrezione di Google, pertanto non \u00e8 garantito il funzionamento a lungo termine.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In questo Articolo avevo descritto la possibilit\u00e0 di controllare Arduino da remoto e registrare uno storico dei dati utilizzando PHP e MySQL. Ci\u00f2 comporta la necessit\u00e0 di conoscere PHP, MySQL ed avere a disposizione un Server Web (Apache, MySQL e PHP). In mancanza di questi come fare?<\/p>\n","protected":false},"author":2,"featured_media":1413,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[16,20,3,17],"tags":[67,69,63,22,68],"class_list":["post-1056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-domotica","category-informatica","category-programmazione","tag-arduino","tag-domotica","tag-informatica","tag-javascript","tag-programmazione"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.giannifavilli.it\/blog\/wp-content\/uploads\/2012\/10\/google-drive-arduino1.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4SGGs-h2","_links":{"self":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/comments?post=1056"}],"version-history":[{"count":0,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/posts\/1056\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/media\/1413"}],"wp:attachment":[{"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/media?parent=1056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/categories?post=1056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.giannifavilli.it\/blog\/wp-json\/wp\/v2\/tags?post=1056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}