Mnoho freehostingov, ktoré ponúkajú doménu 3. rádu zdarma nemá v balíku MySQL / MariaDB databázu. Z toho dôvodu je nutné používať rôzne externé služby, ktoré ponúkajú samostatne databázu, sú však limitované, či už množstvom prenesených dát (trafficu), alebo množstvom celkových uložených dát. Rovnako tak nájdeme limitácie aj na celkový počet pripojení, či prenosovú rýchlosť. Mnoho používateľov preto hľadá inú alternatívu, čo by sa dalo použiť, ideálne zdarma s dobrou rýchlosťou, pokiaľ možno bez limitu, alebo s dostatočne nastaveným limitom.
Zaujímavé riešenie ponúka Google, ktorý má v rámci Google Apps dostupné kancelárske balíky, medzi nimi Google Spreadsheet (tabuľky na spôsob MS Excel), čo môže slúžiť ako databáza. V našom prípade budeme databázu používať pre záznam periodických dát, teda rôzne dáta budú odpovedať rovnakej častovej značke (timestampu). Bežný používateľ má zdarma k dispozícii až 15 GB úložného priestoru na Google Disku, kde je uložený aj vytvorený súbor Spreadsheet. To je naozaj dostatok priestoru pre podobný typ projektu.

Ako však mikrokontróler zapíše dáta do Google tabuľky?
Nedokáže to samozrejme priamo, ale potrebuje použiť externú službu, ktorá takýto zápis zrealizuje. Nemusíme ani chodiť ďaleko a zakotvíme opäť v službách Google, konkrétne u Apps Script. Táto platforma Googlu pre vývojárov umožňuje prácu s ostatnými nástrojmi Googlu. Syntax jazyka je Google Script (.gs) a je založený na Javascripte. Pre náš účel využijeme script pre zápis dát do už vytvorenej tabuľky v Google Spreadsheet.
Pred samotným zápisom do tabuľky si ešte vytvorime do buniek popisy, aby sme vedeli čo sa kde bude nachádzať. Pri otvorenom súbore tabuľky v Google Spreadsheet v prehliadači môžeme vidieť ID tabuľky a rovnako tak v spodnej časti tabuľky uvidíme aj názov aktuálne otvoreného zošita, kde chceme dáta zapisovať. ID sa nachádza medzi /d/ a /edit častťou URL adresy.

Toto ID je potrebné zadať pri tvorbe Google Scriptu, aby bolo možné identifikovať správny súbor a taktiež aj správny zošit (zadáva sa samostatne). Ako môžeme zo základnej štruktúry vidieť, budeme zapisovať teplotu, vlhkosť a tiež dátum a čas. Nakoľko dáta budú odosielané ihneď po nameraní, môžeme dátum a čas zapísať ten, ktorý je na strane servera, nemusíme ho obsiahnuť do payloadu.
Pri tvorbe Google scriptu použijeme funkciu doPost(e) { }, ktorá zároveň definuje aj metódu spúšťania klientom. Ak by ste tento script otvorili priamo cez prehliadač GET metódou, nespustil by sa a dostali by ste iba odpoveď o použití zlej HTTP metódy. Budeme teda odosielať celkovo 2 parametre a to teplotu a vlhkosť. Použijeme preto kľúč t pre teplotu a h pre vlhkosť vzduchu. Body POST requestu bude vyzerať následovne: t=20.3&h=61.2 čo odpovedá teplote 20.3 °C a vlhkosti vzduchu 61.2 % RH. Tieto dáta script preberie pri requeste a použije ich.
V prípade dátumu a času môžeme získať jeho aktuálnu hodnotu priradením výstupu funkcie new Date();, ale ak chceme špecifický formát, môžeme to samozrejme urobiť skrz Utilities.formatDate a rovnako tak je možné zohľadniť aj validnú časovú zónu pre používateľa skrz Session.getScriptTimeZone() funkciu, ktorá ju preberie priamo z Google účtu.
Keď máme toto vyriešené, následuje v scripte overenie, či máme všetky dáta (celý batch), nakoľko naraz zapisujeme aj teplotu, aj vlhkosť. V prípade, ak pošleme len jednu hodnotu, script nezapíše žiadne dáta do tabuľky Google Spreadsheet. Ak sú obsiahnuté všetky dáta, script nastaví zapisovanie na ďalší voľný riadok funkciou sheet.appendRow(). Na základe nastaveného poradia sa teplota, vlhkosť a dátum + čas zapíše do požadovnaej bunky. O úspechu / neúspechu zápisu odpovie server formou JSON response.

Prichádzame k najdôležitejšiemu kroku a to je Deploy aplikácie. Práve toto nastavenie je kritické nato, aby bolo možné script spúšťať mikrokontrolérom, či iným nástrojom. Štandardne by script šlo spúšťať iba skrz prehliadač, kde je aktívny Google účet, ktorý súbor scriptu a tabuľky vlastní a má k ním aj prístup pre zápis, čítanie a pod.
Pri vytváraní Deployu (Implementácie) zvolíme, že ide o webovú aplikáciu a nastavíme, že osoba s aktuálnym účtom bude prevádzať akcie. Zároveň nastavíme možnosť prístupu na "Ktokoľvek" (bez Google účtu), čo umožní script spustiť aj iným zariadením s konektivitou bez Google účtu. Túto akciu je následne nutné ešte autorizovať, keď script pristupuje k súkromnému súboru používateľa a script môže byť spúšťaným kýmkoľvek, je to vyhodnotené ako bezpečnostné riziko. Platí to ale len na tento jeden konkrétny súbor tabuľky Google Spreadsheet, ku ktorému script pristupuje v mene vlastníka súboru, aj úpravy budú viditeľné pod ním.


Po vytvorení implementácie a autorizovaní prístupu sa zobrazí finálny link, ktorého spustením sa vykoná telo Google Scriptu. Vo výpise vidíme aj ID implementácie, ktoré nie je pre túto aplikáciu nijako použiteľné.

Poďme si teda túto implementáciu vyskúšať a zapísať vzorové dáta skrz Postman API testing tool. Môžeme vidieť, že s prázdnym payloadom, ktorý posielame na server nám script odpovie formou JSON správy, ktorá obsahuje hodnotu úspechu false a aj doprovodnú správu s chybou.

Pri správnom requeste je situácia iná. JSON výstup poukazuje na úspešný zápis a tiež informuje o uložení dát do tabuľky Google Spreadsheet. Po otvorení tabuľky je tomu skutočne tak, dáta boli zapísané. Zápis dát uvidíte aj fyzicky, aj keby ste mali práve otvorený Google Spreadsheet s touto tabuľkou. Rovnako tak si v tabuľke môžete urobiť aj vlastné grafy, ktoré budú brať priamo aktuálne dáta z tabuľky pre denný / týždenný / mesačný report.


Po zápise viacero záznamov môžeme vidieť, že Google Script spohľahlivo zapísal aj ďalšie dáta. Čo sa týka rýchlosti vykonania requestu, je to niekde na úrovni 450 ms bez ohľadu na úspešný zápis, alebo neúspech.

Obdobným spustením scriptu bude môže zapisať aj mikrokontróler s ľubovoľnou prenosovou technológiou, napr. WiFi, PHY Ethernet, či Sigfox (vyžaduje Callback). Svoje limity majú aj Google Apps Script. Tie je možné spúšťať skrz HTTPS request, teda toto použitie úplne vylučuje mikrokontróler Arduino s Wiznet shieldom W5100 či W5500, ktorý nepodporuej SSL, ale dnes je to už naozaj zastaralý hardvér, ktorý v rovnakej cene plne nahrádza ESP32 s mnohými inými funkcionalitami.
Platia tu aj iné limity. Existujú tu kvóty, ktoré sú ale nastavené dostatočne vysoko nato, aby ste sa ich pri zbežnej prevádzke museli báť. Na tento typ scriptu platia 2 druhy limitácii. Konkrétne ide o počet vykonaní scriptov (zavolaní) a to 20000. Čo umožňuje odosielať povedzme raz za 5 sekúnd, toto je interval, ktorý väčšina používateľov určite neprekročí. Druhým parametrom je celková doba vykonávania scriptov, ale to bude len niekoľko milisekúnd a nebude to plne korešpondovať s dobou odpovede zo servera, pôjde o čas vykonávania "tela" scriptu. Teda tento limit tiež neprekročíte.
Ak si teda urobíte čistý Google účet, máte úložisko o veľkosti 15 GB, ktoré je pre IoT projekt podobného druhu doživotný. Reálne to bude menej, lebo skôr narazíte na limity Google Spreadsheet dokumentu ako na limit úložiska. Rovnako tak môžeme iným scriptom dáta ťahať napr. cez GET, treba ale poznamenať, že celkový čas vykonávania scriptov a requestov sa počíta dokopy zo všetkých scriptov. Pre efektivitu tak aj GET môže prebiehať na celý riadok (batch dát), nie na každú konkrétnu bunku samostatne.
Takýto script môžete spúšťať aj skrz Fetch API (nahrádza XHR request) - súčasť Javascriptu, aj keď máte len statickú webovú stránku, kde nemáte možnosť spúšťať PHP (typický príklad Github Pages / Webnode). To je tiež zaujímavé použitie s potenciálom. Je ale možné, že budete potrebovať použiť aj CORS proxy. Fetch API sa môže vykonať len raz po otvorení stránky, teda na celkovú kvótu bude mať minimálny vplyv, alebo môže dáta ťahať periodicky.
Príklad návratových JSON dát po implementácii sekundárneho scriptu s funkciou doGet(e). Rovnako tak pre GET metódu je možné používať aj doplnkové parametre priamo v URL, čo môže spustiť špecifickú akciu a napríklad vrátiť aj JSON s kompletnou históriou dát pre výpis do grafu a podobne:
