Platformy do zbierania danych z urządzeń IoT – porównanie

Na rynku dostępne jest dużo platform służących do zbierania danych z urządzeń IoT – tylko którą wybrać? W tym wpisie postanowiłem przetestować i porównać trzy z nich.

W dzisiejszych czasach bardzo modna jest koncepcja IoT – Internet of Things. Wedle niej urządzenia, takie jak lodówka, pralka, koszulka czy żarówka mogą zbierać, analizować i wymieniać między sobą dane. Często mówi się o tzw. smarthouse’ach – inteligentnych domach.

Na przykład taka ;) (źródło - xiaomi.com.pl)
Na przykład taka 😉 (źródło – xiaomi.com.pl)

Mają one ułatwić życie ich mieszkańcom – przykładowo, ze snu w idealnym momencie budzi cię inteligentna opaska, która na podstawie zbieranych przez siebie danych na temat snu i danych z domowej stacji pogodowej przewiduje najlepszy moment na wybudzenie cię. W łazience wita cię inteligentne lustro, na którym wyświetlają się najważniejsze informacje dnia – pogoda, wiadomości, terminy spotkań, rzeczy do zrobienia. Po tym, jak skończysz poranną toaletę będzie na ciebie czekać kawa, zaparzona idealnie przez twój ekspres.

Przykłady można by mnożyć dalej – ale to, co opisałem wyżej to kawałek ideału. Często takie projekty są prostsze – ich autorzy skupiają się tylko na statystyce (czyli właśnie czujniki temperatury, wilgotności, ciśnienia, zużycia wody, prądu, otwarcia okien/drzwi itd.), po to by móc zoptymalizować finanse domu patrząc na wykresy z danymi lub też po prostu dla przyjemności – sam jestem przykładem człowieka, który po prostu lubi mieć wszystko uporządkowane, zapisane i przedstawione w ładnej formie.

No właśnie – dane. Gdzieś je trzeba jednak zbierać. Powstały więc serwisy, które udostępniają ci miejsce na dane, proste, RESTowe API do ich dodawania i odczytywania oraz umożliwiają wizualizację danych na dashboardzie, który można konfigurować. Postanowiłem wziąć na warsztat trzy platformy – Adafruit IO, ThingSpeak, oraz combo dweet.io i freeboard.io (oba to projekty jednego zespołu – Bug Labs).

Kto z was niczego nie prototypował, niech pierwszy rzuci kamieniem

Ważne są dla mnie trzy rzeczy:

  • możliwości platformy,
  • API,
  • dashboard.

Wszystkie platformy zostały przetestowane przez własnoręcznie zrobiony na szybko logger temperatury wewnętrznej i zewnętrznej oraz wilgotności – post o nim niedługo!

ESP8266 wysyłało dane na trzy serwisy jednocześnie – niestety, z powodu problemów podczas testu polegającego na podpięciu w locie jednego z czujników (dokładnie mówiąc tego od temperatury na zewnątrz) jeden z serwisów odpadł. Nie oznacza to jednak, że jest gorszy – z bardzo ważnego powodu został uwzględniony w porównaniu.

Jako że nieco się rozpisałem, poniżej spis treści:

Spis treści

1. Porównanie!
1.1 Platforma
1.1.1 Adafruit IO
1.1.2 ThingSpeak
1.1.3 dweet.io + freeboard.io
1.2 API
1.2.1 Adafruit IO
1.2.2 ThingSpeak
1.2.3 dweet.io + freeboard.io
1.3 Dashboard
1.3.1 Adafruit IO
1.3.2 ThingSpeak
1.3.3 dweet.io + freeboard.io
2. Podsumowanie

Porównanie!

No więc, zaczynamy:

[SPIS TREŚCI]

Platforma

Tutaj porównam ogólne możliwości platform, takie jak możliwość przechowywania danych, czy ilość dostępnych kanałów danych przychodzących lub/i wychodzących.

[SPIS TREŚCI]

Adafruit IO

Ta platforma jest dość bogata w możliwości. Dane wysyła się tu do tzw. Feedów – kanałów, które obsługują jedną, dowolną wartość – może to być na przykład temperatura otoczenia. Idąc dalej, Feedy możemy grupować w… Grupy (tak, tak, wiem). Możemy przykładowo (tak jak ja) stworzyć grupę Feedów pochodzących z jednego urządzenia (w moim przypadku – ESP8266). Tych i tych możemy mieć nieograniczoną ilość – super! Taki podział znacznie ułatwia pracę na systemach, gdzie mamy bardzo dużo danych – to trzeba stanowczo zaliczyć na plus.

Poszczególne feedy możemy potem wizualizować na dashbordach – ale do tego przejdziemy później.

Oprócz tego, AIO daje nam możliwość ustawienia Triggerów – zestawów akcji, wykonywanych gdy dany warunek jest spełniony lub co jakiś z góry ustalony czas. Możemy przykładowo (jak na screenie) ustawić Trigger mailujący do nas z wiadomością:

O jejku! W domu jest goręcej niż na dworzu!

gdy jedna wartość (temperatury w domu, w moim przypadku temperature) jest większa od drugiej (temperatury na zewnątrz, tempexternal).

Trigger bazujący na timerze na razie potrafi jednak tylko wysyłać aktualną wartość danego Feeda na maila co określony z góry okres czasu, ale trzeba wziąć pod uwagę, że serwis ten jest na razie w fazie beta (to stwierdzenie będzie przydatne później). Dużo rzeczy może i będzie się zmieniać – podczas pierwszego dnia testów… nie mogłem rozpocząć testowania przez to, że nie mogłem utworzyć Feeda. Na szczęście błąd został naprawiony następnego dnia, i platforma była gotowa do działania.

[SPIS TREŚCI]

ThingSpeak

W ThingSpeaku nasze dane są przywiązane bezpośrednio do Channeli – są to zamknięte systemy, mające obrazować jedną komórkę naszego systemu IoT. Niestety, do jednego Channela może być przypisanych tylko 8 różnych Fieldów. Tak jak już mówiłem – dane w nich zawarte są przypisane do konkretnego Channela i nie możemy ich wykorzystywać w innych (oczywiście można wysłać kolejny request do API innego Channela, ale to zajmuje czas).

Aaaaale – ThingSpeak broni się dodatkami. Dashboardy istnieją dwa – prywatny i publiczny. Ma on też masywną integrację z MATLABem – służy on tu jako język do analizy i wizualizacji danych, pozwala na wielką dowolność w przedstawianiu ich. Oprócz tego, ThingSpeak posiada tzw. Appki, czyli oddzielne moduły wykonujące różne czynności. Wśród nich znajdziemy aplikacje pozwalające na wysyłanie danych na Tweetera (ThingTweet), wykonywanie różnych akcji na podstawie odpowiednio otagowanych wpisów na nim (TweetControl), wykonywanie akcji wraz z spełnieniem danego warunku związanego z danymi z Channela (React) lub co jakiś czas (TimeControl).

[SPIS TREŚCI]

dweet.io + freeboard.io

Ta para jest najbardziej biedna pod względem funkcjonalności. Tak naprawdę… jedyna funkcjonalność tutaj to dawanie danych do Thinga na dweet.io (to taki odpowiednik Channela i Grupy) i odbieranie ich w freeboard.io. Do tego drugiego możemy ewentualnie podpiąć inne źródła danych, takie jak jakiś zewnętrzny JSON, pogoda w danym miejscu czy inne serwisy takie jak PubNub. Ma również możliwość dodania źródła danych, które będzie wykonywało tzw. Playback danych – polega to na tym, że freeboard.io bierze plik, i co ustalony interwał czasu wysyła kolejną wartość z niego do widżetów, tak jak robi to zwykłe źródło danych. To akurat może być bardzo przydatna funkcja do testów.

Samo dweet.io ma jeszcze jedną funkcję – alerty. Po spełnieniu warunku wysyłają one maila do tego, kto założył alert. I tu dochodzimy do jednej, ważnej rzeczy – wszystkie dane na dweet.io są publiczne. Każdy może dodawać dane do dowolnego Thinga. Każdy może założyć na niego alarm dla siebie. Każdy może podglądać dane wprowadzane do Thinga. Wystarczy tylko znać nazwę Thinga. A to nie jest trudne – dane do nich wprowadzane są widoczne na żywo na stronie dweet.io.

Ktoś tu chyba próbuje ustrzec się ingerencji w swoje dane… Niezdarna próba, niestety

Oczywiście można się przed tym ustrzec – płacąc $1.99 za blokadę Thinga. Wtedy jego dane nie są pokazywane na stronie, jest też dołączana 30 – dniowa subskrypcja na miejsce. Tak – dane na dweet.io nigdzie się nie zapisują. Dopiero po dokupieniu tej opcji mamy 30 – dniowe archiwum naszych działań – bez tego kicha. Myślicie że freeboard.io magazynuje te dane? Też nieW końcu to produkty tej samej firmy. Ale do tego dojdziemy później.

[SPIS TREŚCI]

API

Trochę o tym, jak to jest z API – na co pozwala, jak działa, czy jest wygodne?

[SPIS TREŚCI]

Adafruit IO

Tu mam małą rozterkę – te API jest jednocześnie bardzo fajne, jak i bardzo niefajne.

Czemu fajne? Adafruit zawsze dba o klienta – każdy produkt który sprzedają ma od nich jakieś wsparcie. Także Adafruit IO nie jest pozostawione na pastwę losu – zostały udostępnione biblioteki na Arduino, Ruby, Pythona i Node.js. I to bardzo przyjemne i proste biblioteki – tworzysz obiekt Clienta, potem obiekt Feeda na tym Cliencie, inicjalizujesz Clienta i za pomocą obiektu Feeda wysyłasz do niego dane. Proste? Aż za bardzo. Podejrzanie proste. I to nie bez przyczyny…

Druga strona medalu jest taka, że na wysłanie requesta do serwera AIO musiałem czekać od 15 do 30 sekund – coś niedopuszczalnego. Jak przy innych platformach jest to dosłownie ułamek sekundy, tak tu zajmuje to wieczność.

Oprócz tego, miałem problem z dodaniem trzeciego czujnika – serwer zwyczajnie nie chciał przyjmować danych, które do niego wysyłałem. Zmiana nazwy Feeda nie działała, podanie dodatkowego klucza Feeda też nie.

Mimo tych nieudogodnień muszę zastosować dla AIO taryfę ulgową – tak jak mówiłem, platforma ta dopiero się rozwija, bazując na feedbacku od jej użytkowników. Myślę że wygląda to na tyle fajnie, że można jej dać szansę 😛

[SPIS TREŚCI]

ThingSpeak

API ThingSpeaka jest dość kompleksowe – jest tam wszystko. Nie jest trudne w użyciu – to zwykły REST. Chwilami tylko parametrów robi się zbyt dużo – ale tylko wtedy, gdy używamy wszystkich funkcji API, a to zdarza się rzadko. Zwykle potrzebne jest nam tylko jedno – update danych w Channelu. To nie jest trudne – podajesz klucz zapisu Channelu oraz po kolei kolejne Fieldy, do których chcesz wysłać dane.

Proste? Proste. I nie trzeba pisać nic więcej – to po prostu działa, i dobrze wykonuje swoją robotę.

[SPIS TREŚCI]

dweet.io + freeboard.io

Kurde, to API jest piękne. Nie musisz (nie możesz) nawet tworzyć konta, nie musisz tworzyć kanału, poszczególnych Feedów – wszystko tworzy się automatycznie z każdym requestem, który zawiera jakieś dane, których nie ma na serwerze.

Piękne nazewnictwo, niezwykła prostota… Tylko że to wszystko psuje jeden niewygodny fakt.

KAŻDY MA SWOBODNY DOSTĘP DO NASZYCH DANYCH I KANAŁU ICH WPROWADZANIA!

Ale poza tym jest pięknie. Jak ktoś może sobie pozwolić na wydawanie $1.99 miesięcznie za normalnie funkcjonowanie, podczas gdy istnieją serwisy konkurencyjne które robią to samo lepiej oraz za darmo – no ok, jak kto woli.

[SPIS TREŚCI]

Dashboard

Trochę o tym, co można robić z naszymi zgromadzonymi danymi – jak wygląda dashboard, co możemy w nim zmienić, skonfigurować.

[SPIS TREŚCI]

Adafruit IO

Tutaj nie ma się do czego doczepić – dashboard jest w pełni konfigurowalny. Możemy dodawać elementy podstawowe, takie jak Gauge, Line Chart, Text Block czy Stream Block, ale także inne, takie jak Image Block, Color Picker czy Map.

Oprócz tego, dashboard w AIO pozwala nam za pomocą elementów takich jak Slider, Button czy Toggle Switch wysyłać dane do Feedów – w ten sposób zapewniamy sobie dwustronną komunikację i kontrolę naszych urządzeń przez jeden zwarty system!

Wszystkie elementy dashboarda możemy dowolnie przesuwać oraz konfigurować ich właściwości – mogę spokojnie powiedzieć, że według mnie to najlepszy dashboard w tym zestawieniu.

[SPIS TREŚCI]

ThingSpeak

Tu dashboard jest prosty – składa się tylko z wykresików. Został on zaprojektowany z myślą o podglądaniu statystyk na żywo – nic innego. Ale:

Jak robisz jedno dobrze, to wszystko inne możesz mieć w dupie między pośladkami.

~Paulo Coelho

I właśnie w tym rzecz, że to najlepiej zrobione wykresiki na świecie. Możesz sobie dostosowywać go na wiele sposobów – Labele, kolor wykresu, kolor tła, typ, dynamiczność, ilość danych, skala czasu, uśrednianie, mediany, sumy, zaokrąglanie… I pomyśleć że to tylko ułamek możliwości – to są te, które są dostępne bez znajomości MATLABa. Myślę że te starczą już wielu ludziom. A jeżeli nie…

Zawsze można dodać kolejny wykresik, bazujący na skrypcie napisanym w MATLABie. Chcemy łączyć źródła danych? Proszę bardzo. Chcemy wykonywać na nich jakieś działania? Nie ma problemu. Ogólnie, można robić co tylko nam się podoba. A jak dochodzą do tego jeszcze MATLABowe callbacki, które można przypisać jako akcje do wykonania w Appkach… kosmos.

[SPIS TREŚCI]

dweet.io + freeboard.io

Tu jest słabo… Polityka lots of *free* shit daje się tu we znaki, i to ostro.

Owszem – możemy dodać tu wiele, wiele różnych widżetów – Google Maps, widok HTML, Picture, Text, Gauge, Pointer i Indicator Light. Jednak brakuje jednego – wykresu z danymi.

Co prawda jest on dostępny – opcja Historical Chart jest widoczna w menu. Tu właśnie ujawnia się największa wada tego rozwiązania – freeboard.io nie magazynuje naszych danych, więc nie jest w stanie wyświetlić ich na wykresie. Żeby je wyświetlić, potrzebuje JSON’owej tablicy z danymi – wtedy nie ma problemu. Próbuje on zrzucić obowiązek trzymania danych na źródła danych – a to straszne.

Dostępna jest jedna opcja, która może nam zastąpić Historical Chart – Sparkline. Ta rzeczywiście wyrysuje nam wykres ze zmianami danej wartości. Problemy są jednak dwa:

  • Dane nadal nie są magazynowane – po wyjściu ze strony cały wykres się resetuje;
  • Nazwa tego czegoś dobrze tłumaczy czym jest – to tylko linia. Brak tu jakiejkolwiek podziałki – widzimy tylko, że jakaś wartość szła w górę czy w dół, ale nie wiemy o ile – możemy się tylko domyślać.


[SPIS TREŚCI]

Podsumowanie

Dobra, tu się streszczę.

  • Adafruit IO – fajna platforma, genialny dashboard, proste API – tylko patrzeć jak się rozwija!
  • ThingSpeak – Duży gracz, mający doświadczenie na rynku – nadal pewny wybór, nie zawiedziecie się wybierając go.
  • dweet.io + freeboard.io – Dobre API, ciekawa alternatywa dla małych projektów. Jednak się rozmyśliłem. NIE. Proszę.

caaa0565852a651b08f21eb0b1cf309c4ff73683a798e1e438d49ca02543da66
[SPIS TREŚCI]

Oczywiście jest to moja opinia – jeżeli macie swoją, to zostawcie ją w komentarzu. Dzięki za wytrwałość!

  • abc

    Przydało by się jeszcze uwzględnienie jakiejś platformy open source, którą można postawić na własnym serwerze …

    • Chciałem porównać tu gotowe rozwiązania, które możemy wykorzystać od razu, bez długiej konfiguracji i problemów. Równie dobrze mógłbym postawić własny system i postawić na własnym serwerze – bo czemu nie? Pomyślę, czy nie zrobić followup’a i porównać platformy opensource do siebie i do tych porównanych w tym poście – ale jeszcze myślę 😛

  • Pingback: Prosty logger podstawowych parametrów powietrza | programistycznePieklo()