ThingSpeak - przykłady
Do korzystania z ThingSpeak potrzebne jest nam źródło danych, stałe połączenie z internetem oraz odrobina cierpliwości do czytania dokumentacji. ThingSpeak współpracuje z przeróżnymi systemami i siłą rzeczy nie istnieje uniwersalna formuła, która pozwoliłaby na natychmiastową konfigurację systemu w każdym przypadku. Na szczęście czytanie dokumentacji w przypadku ThingSpeak nie sprawia kłopotu, a dużym ułatwieniem na start są liczne przykłady.
Raspberry Pi - Python
Na początek przedstawię konfigurację systemu pomiarowego zrealizowanego w oparciu o platformę raspberry pi wraz z dołączonym układem BMP180.
Jak widać, schemat połączeniowy nie jest skomplikowany. Układ BMC180 posiada dwa czujniki, ciśnienia oraz temperatury. Jeśli chcemy te dane zbierać (i przetwarzać)z pomocą platformy ThingSpeak, to przede wszystkim musimy skonfigurować kanał (channel) za pośrednictwem którego będziemy przekazywać dane z urządzenia w chmurę. Po zalogowaniu się na stronę ThingSpeak należy kliknąć przycisk New Channel i uzupełnić kilka pól.
Uzupełnić można jeszcze dodatkowe pola, jednak niezbędne jest jedynie wprowadzenie nazwy kanału oraz nazwanie i odznaczenie "Fields", z których zamierzamy korzystać. Na jeden kanał może przypadać maksymalnie 8 pól. Ich nazwa nie jest dla systemu specjalnie ważna, zarówno wysyłając dane na, jak i pobierając je z ThingSpeak, będziemy posługiwać się numerami pól.
Po stworzeniu kanału można od razu przejść do zakładki API Keys i zapisać sobie kilka istotnych danych.
Najistotniejszy jest oczywiście Channel ID. Jeśli chcemy mieć możliwość zapisu danych za pośrednictwem kanału, należ znać Write API Key, jeżeli chcemy dane odczytywać niezbędny będzie Read API Key. No chyba że uczynimy kanał kanałem publicznym. Na tym można zakończyć wstępną konfiguracje na stronie www.ThingSpeak.com i przejść do konfiguracji urządzenia. Wiele będzie teraz zależało od systemu, z jakiego będziemy korzystać. W przypadku Raspberry Pi najwygodniej będzie stworzyć aplikację pomiarową w języku Python, dołączyć do niej bibliotekę paho.mqtt.publish oraz klika poleceń wysyłających dane do chmury.
import paho.mqtt.publish as publish import Adafruit_BMP.BMP085 as BMP085 import time sensor = BMP085.BMP085() # konfiguracja procesu wysyłania danych channelID = "339104" apiKey = "xxx" mqttHost = "mqtt.thingspeak.com" tTransport = "websockets" tPort = 80 topic = "channels/" + channelID + "/publish/" + apiKey # pętla główna while (1): temp = sensor.read_temperature() pressure = sensor.read_pressure()*0.01 #hekto payload = "field1="+str(temp)+"&field2="+str(pressure) try: publish.single(topic, payload, hostname=mqttHost, transport=tTransport, port=tPort) except: print 'Blad przy publikacji danych' time.sleep(600)
I to w zasadzie wszystko. Po uruchomieniu skryptu na stronie ThingSpeak można obserwować napływające dane.
Inne źródła
Tworzenie stacji pogodowych to oczywiście niezła zabawa - dowodem niech będzie choćby ilość pogodowych kanałów tworzonych na thingspeak. Zbudowanie porządnej stacji może być jednak trudne. Czasem okazuje się, że nie warto się męczyć, bo sąsiad obok już taką stację wybudował i publikuje dane pomiarowe w internecie. Jeśli chcemy z korzystać z takich danych i dołączyć własną analizę, to ThingSpeak również w tym nam pomoże. Za przykład niech posłuży strona air24.pl
O stronie już wspominałem we wpisie dotyczącym wyrażeń regularnych. Dane na stronie zostały umieszczone w dość niechlujny sposób, odczytanie ich nie jest do końca proste. Niemniej jednak strona może posłużyć za źródło danych dla ThingSpeak.
Rozpocząć należy oczywiście od stworzenia kanału:
Tym razem jednak dane nie będą wysyłane z zewnątrz. Będą co prawda pochodzić z zewnątrz, ale dostarczy je sama platforma ThingSpeak. Na stronie należy opuścić widok kanałów (Channels) i przejść do widoku Apps.
Jak widać możliwości wyboru jest kilka, w tym przykładzie skorzystam z pierwszego widocznego bloku, MATLAB Analysis. Po kliknięciu na przycisk NEW można przejść do tworzenia skryptu, który ma być dla nas wykonywany na platformie thingspeak. Oczywiście, tworzone skrypty mogą służyć analizie zebranych danych ale nic nie stoi na przeszkodzie, by za ich pomocą pobierać dane z zewnątrz. Skrypt "piszemy" w taki sam sposób, w jaki robimy to na komputerze ze zwykłym MATLABem. Pamiętać trzeba jednak o tym, że obowiązuje nas timeout. Skrypt powinien wykonać się w przeciągu maksymalnie 20 sekund. Drugim ograniczeniem jest dozwolona częstotliwość zapisu danych na kanał. Jeśli korzystamy z serwisu nieodpłatnie, możemy robić to co 15 sekund (w wersji płatnej co 1 sekundę). Operacje związane z odczytem i zapisem danych wymagają skorzystania ze specjalnych funkcji: thingSpeakRead i thingSpeakWrite
Przykładowy kod służący do pobrania danych ze strony www i zapisu ich na kanale wygląda tak:
% Okreslenie adresu url url = 'http://83.12.141.66/env_stalowa_wola/pogoda2.php'; writeChannelID = 336069; writeAPIKey = ''; readAPIKey = 'H1T1KY2NL9MJ2A4S'; % wczytanie danych ze strony strona = webread(url); % usuniecie zbednych znakow strona = regexprep(strona, '\s', ''); % wyrazenia regularne expr_daty = '(?<=>)\d+-\d+-\d+ \d+:\d+(?=</td> )'; expr_dane = '(?<=>)\d+(\.\d)?(?=</table> )'; % odczytanie dat pomiaru dataPomiaru = regexp(strona, expr_daty, 'match'); dataPomiaru = (datetime(strrep(dataPomiaru, ' ', ' ')))'; % odczytanie danych dane = regexp(strona, expr_dane, 'match'); dane = (reshape(str2double(dane),5,[]))'; %% do tabeli tabela = [table(dataPomiaru), array2table(dane, 'VariableNames',... {'Temp','Cisnienie','Kierunek_wiatru', 'Predkosc_wiatru', 'Wilgotnosc'})]; n = size(tabela); disp(head(tabela)) disp(['Odczytano wierszy: ' num2str(n(1))]); %% pobranie ostatnich dat pomiarow [~, dataPomiaru_stara] = thingSpeakRead(writeChannelID, 'NumPoints', n(1), 'ReadKey',readAPIKey); %% usuniecie zbednych danych if ~isempty(dataPomiaru_stara) [~, idx] = intersect(dataPomiaru, dataPomiaru_stara); tabela(idx, 🙂 = []; end % zapisanie danych if ~isempty(tabela) thingSpeakWrite(writeChannelID,tabela,'WriteKey',writeAPIKey) end disp(['Zapisano wierszy: ' num2str(size(tabela, 1))]);
Po zakończeniu tworzenia skryptu należy jeszcze kliknąć na przycisk TimeControl i określić, jak często skrypt ma być uruchamiany. Napływające dane można obserwować na automatycznie generowanym wykresie, a można też stworzyć "od zera" swój własny wykres.
To wszystko to oczywiście jedynie próba przedstawienia głównych możliwości ThingSpeak. Platforma jest bardzo rozbudowana i omówienie wszystkich jej funkcjonalności wymagałoby napisania dedykowanego podręcznika.
przydało się, dzięki:)
Głowa puchnie ale zrozumiał. Dzięki!
Fajny opis nawet dla początkującego:)