ThingSpeak dnes možno nepatrí medzi najpoužívanejšie platformy, no rozhodne bolo tomu inak v rokoch 2010 a vyššie. V danom čase začal boom Arduino dosiek, ku ktorým bolo možné pripojiť Ethernet shield, niekto mal šťastie aj na WiFi shield. Platforma v tom čase bola jedinou známou svojho druhu ako "IoT platform" a umožňovala aj nezabezpečený prenos dát po HTTP protokole, čo bol defacto jediný použiteľný protokol vzhľadom na výkon procesora a pamäť, dopomohlo k tomu aj to, že Ethernet shieldy s Wiznet čipmi disponovali hardvérovým stackom, čo bola výhoda oproti ENC28J60, ktoré sa tiež hojne používali, ale mali softvérový stack, ktorý musel bežať na Arduine.

Arduino + Ethernet shield Wiznet W5100
ThingSpeak ponúkal vizualizácie formou čiarových grafov s dátovými bodmi, ale aj vizualizácie formou gauge grafov, či zobrazovania jednotlivej hodnoty. Tomuto spôsobu ostal ThingSpeak verný dodnes a vizuál je stále rovnaký, jednoduchý. MQTT protokol a podpora brokera prišla v roku 2017, čo tiež čiastočne platformu spopularizovalo, najmä s mikrokontrolérom ESP8266, či ESP32 od Espressif Systems.
Platformu je možné použiť aj na integráciu webovej aplikácie hladinomera (Watmonitor), čo si dnes ukážeme. Príklady budú obsahovať integráciu pre Push (dáta sa posielajú do platformy), ale aj Pull (platforma získava dáta vlastnou požiadavkou) model, ktorý bude využívať aj parsing dát z JSON endpointu Watmonitora, ktorý poskytuje posledné namerané dáta.
Vzorové dáta endpointu (potrebný parameter - value, ktorý reprezentuje celkovú hladinu vody):
{
"name": "Waterwell at home",
"value": 345,
"depth": 400,
"volume": 1734.16,
"time": "26. Oct 22:46",
"time_now": "28. Oct 23:48"
}
Vytvorenie kanála:
Platforma ThingSpeak využíva kanály, ktoré disponujú celkom 8-mymi dátovými poliami, ktoré môžu uchovávať hodnoty. Každé z tých polí logicky definuje premennú. Kanál disponuje používateľskou vizualizáciou, ktorá má vždy samostatný graf pre každé použité dátové pole. Tieto vizualizácie je možné rozšíriť o ďalšie widgety (gauge, numeric display, lamp indicator). Widgetom je možné nastaviť jednotku meranej veličiny, interval aktualizácie, rozsahy. Nie je tu možné úprava widgetov formou HTML kódu.

Vytvoríme si kanál, kde využijeme jedno dátové pole. Po uložení sa nám zobrazí čiarový graf, ku ktorému môžeme pridať napr. aj gauge vizualizáciu. V časti API keys nájdete API kľúč pre autorizáciu zápisu dát. Zápis sa štandardne na ThingSpeaku realizuje HTTP GET requestom, ktorý obsahuje api kľúč a tiež hodnotu pre konkrétne dátové pole (field) s číslom jeho poradia.
Push model s CURL z Watmonitora
Príklad requestu pre zápis dát do ThingSpeaku do príslušného fieldu:
Po zápise dát ThingSpeak v odpovedi pošle znak 1, ak došlo k zapísaniu dát bez problému, t.j. prešla aj autorizácia API kľúčom pre zápis. Zapísané dáta môžeme následne vidieť aj v kanále vo widgetoch, ktoré vizualizujú field 1.

Na strane Watmonitora pre priamu integráciu a získavanie time-series dát je potrebné tento request volať skrz CURL zo súboru data.php, ktorý spúšťa priamo senzorový uzol (mikrokontróler) pri zápise dát do Watmonitora.
Push model s Node-RED + parser Watmonitora
Obdobným spôsobom môže do ThingSpeaku posielať dáta aj middleware - Node-RED, ak sa používa. Node-RED dokáže využiť dáta z JSON endpointu Watmonitora, vyparsovať ich a poslať už finálnu hodnotu bez potreby záťaže servera, na ktorom beží Watmonitor. Toto riešenie navyše môže kompenzovať aj prípady, kedy Watmonitor nedostáva dáta a tak bude Node-RED posielať stále posledné dáta, ktoré preklemujú aj výpadok senzorového uzla.
Alternatívne je možné pre zápis dát použiť aj MQTT protokol:
- MQTT broker: mqtt3.thingspeak.com (špecifickácia MQTT 3.1.1)
- Port: 1883 / 8883 (SSL)
- Topic: channels/CHANNEL_ID/publish/APIKEY
Pre možné použitie MQTT protokolu sa vyžaduje vytvorenie zariadenia v rozhraní ThingSpeaku, po ktorom budete mať k dispozícii ClientID, používateľské meno (je rovnaké ako ClientID) a heslo. Všetky tieto 3 údaje slúžia na autorizáciu klienta pre pripojenie k brokru a následný Publish na MQTT topic. Zariadenie je pri vytváraní potrebné autorizovať pre zápis na konkrétny kanál.


MATLAB Analysis - Pull model
ThingSpeak má aj ďalšie podporné aplikácie. Jednou z nich je MATLAB Analysis, ktorý okrem iného (budovanie dátových modelov, konvertovanie dát, filtrovanie dát, organizácia dát + využívanie Toolboxov, ak máte MATLAB v danej licencii) umožňuje aj scraping dát z webových stránok a archivovanie finálnych dát v ThingSpeaku.

Pri vytvorení novej inštancie MATLAB Analysis zvolíme v šablóne Get data from a webpage. Šablóna má preddefinovaný kód, ktorý môžete upraviť, zadať URL pre JSON endpoint inštancie Watmonitora, vrátane reťazca, ktorého hodnotu chcete parsovať. Tento kód si môžete urobiť aj celý podľa seba.

Okrem uloženia a spustenia scriptu môžete v spodnej časti nastaviť aj TimeControl, ktorý dokáže script spúšťať automaticky a zabezpečiť tak získavanie dát z Watmonitora v pravidelných intervaloch, štandardne postačuje raz za 5 minút. Aj keď dôjde k výpadku senzorového uzla, MATLAB script vždy načíta posledné dáta a uloží ich do ThingSpeaku. Okrem periodického spúšťania je možné nastaviť aj len jedno samostatné spustenie, je tu mnoho konfiguračných možností. Pri periodickom spúšťaní môžete beh obmedziť aj na konkrétne dni, či hodiny. TimeControl je nadradený a priradzuje sa mu konkrétna akcia - spúšťanie MATLAB Analysis scriptu, alebo inej aplikácie.

Pre samotný parsing by šla použiť aj aplikácia ThingHTTP, avšak tá sama o sebe nedokáže vyparsovanú hodnotu uložiť a potrebuje aj tak potrebný MATLAB script, teda jednoduchšie je priamo použiť MATLAB script, kde je všetko, vrátane parsera. Úspešne sme implementovali ukážkovú integráciu webového rozhrania hladinomera (Watmonitor) a jeho dát do platformy ThingSpeak. Okrem priameho CURL volania z rozhrania Watmonitora sme si demonštrovali aj možnosť middlewaru v podobe Node-RED, ktorý dokáže pre event-driver aplikácie zapísať dáta rovnakým spôsobom, alebo môže použiť aj MQTT Publish a zároveň dokáže vyparsovať dáta z JSON endpointu. Pre Pull variant sme využili MATLAB script pod MATLAB Analysis.
Pre iné druhy vizualizácii v rámci ThingSpeaku môžete použiť aj aplikáciu MATLAB Visualisation, ktorá tiež ponúka preddefinované šablóny s rôznymi druhmi grafov, kde je aj možnosť vytvoriť si celú vizualizáciu od nuly (Custom). Tieto typy vizualizácii umožňujú aj kombinovanie dát z rôznych fieldov kanála. Tu môže nastať problém, že ak všetky dáta neposielate naraz v rovnaký čas ako batch, nemusíte mať kontinuitu medzi časmi a tak budete pravdepodobne musieť pristúpiť ku agregácii dát pre ich skonsolidovanie v časovej oblasti, ak ich chcete do jednej vizualizácie.
ThingSpeak je jednoduchou a funkčnou platformou pre vizualizáciu dát, ktorú môžete zdieľať aj verejne s inými používateľmi (štandardne sú ale dáta viditeľné len súkromne, pre verejný prístup musíte explicitne povoliť). To sa môže hodiť vtedy, ak máte inštanciu Watmonitora hostovanú lokálne a dáta preposielate aj na ThingSpeak, kde ich skrz internet môžu prezerať aj iní používatelia. Z platformy ThingSpeak môžete dáta aj exportovať vo formáte .csv s konkrétnou časovou zónou. Exportovať je možné len kompletné dáta, nie čiastkové.
Vyskúšajte Watmonitor ešte dnes s vašim hardvérom, alebo vyskúšajte túto integráciu s vašou inštanciou Watmonitora: https://your-iot.github.io/Watmonitor/sk/
V tomto článku použitý Node-RED flow, či MATLAB script nájdete na:
https://github.com/martinius96/hladinomer-studna-scripty/tree/master/examples/Tools_Integrations/ThingSpeak
Ak vás zaujíma aj integrácia Watmonitora s ďalšími platformami, na blogu nájdete aj ThingsBoard, Ubidots.