piątek, 18 października 2019

ZERYNTH + WolkAbout = prosty przepis na rozmowę z Chmurą.

Jestem pod dużym wrażeniem prostoty z jaką udało mi się "zagadać" z webową Chmurą. Dotychczas był to dla mnie temat trochę z pogranicza czarnej magii.  Ale dzięki ZERYNTH-owi i wspieranej przez ten projekt czeskiej chmurze WolkAbout ,udało mi się zaprzyjaźnić z tym tematem całkowicie bezboleśnie. Jest wiele obecnie na rynku rozwiązań w postaci płytek różnych producentów , które mają zaimplementowany wsad do realizacji połączenia z chmurą. Wadą tych rozwiązań jest w/g mnie ograniczenie do jednej wybranej chmury. W przypadku projektu ZERYNTH mamy do wyboru wiele chmur . Mnie w oko wpadła czeska chmurka WolkAbout i z tą chmurką udało mi się w prosty sposób porozmawiać. A co mnie kręci w projekcie ZERYNTH ? przede wszystkim możliwość prostej implementacji Gateway'a przy pomocy języka Python. Dopóki nie poznałem projektu ZERYNTH ,przymierzałem się do RasberyPI w roli bramy ale teraz widzę, że nie ma takiej potrzeby. Za ułamek kwoty RasberyPI mogę osiągnąć tą samą funkcjonalność w prostszy sposób na płytce z MCU 32 bit wspieranej przez ZERYNTH. A baza płytek ciągle się powiększa. W 2020 r zobaczymy wsparcie m.in dla PIC32.

W artykule pokażę jak wysłać dane do Chmury z poziomu aplikacji napisanej w języku Python i uruchomionej na płytce z MCU 32-bitowym wspieranej przez projekt ZERYNTH. Wszystko będzie banalnie proste i każdy nawet przedszkolak da sobie radę :). Każdy hobbysta marzy o sterowaniu swojego urządzenia i odczytywaniu z niego danych w sieci. Pomysły są tutaj różne od sterowania SMS-ami po sterowanie z poziomu strony www postawionej na hostingu lub lokalnie. Do niedawna sam uważałem , że to jedynie słuszny kierunek dopóki nie doszło do mnie , że technologia poszła naprzód i dziś sterowanie urządzeniem z poziomu strony www jest już przeszłością. Zachęcam do zapoznania się możliwościami jakie oferuje Chmura w kontekście sterowania i zdalnej wymiany danych. Wisienką na torcie jest to, że dostęp do chmury mamy również z poziomu aplikacji na telefon czyli dostajemy kompleksowe rozwiązanie. Problemy z publicznym IP odchodzą do lamusa nie trzeba się martwić zagadnieniami typu Cors z którymi w klasycznych rozwiązaniach się zderzymy a o których przeciętny hobbysta nie ma nawet pojęcia. 

Moja baza sprzętowa :

- płytka NodeMCU ESP32S wspierana natywnie przez ZERYNTH-a

Nawet nie musimy specjalnie wnikać co ma na pokładzie , z punktu widzenia ZERYNTH-a to jest tylko dawca zasobów dla maszyny wirtualnej.
- kabel USB do zasilania i wgrywania wsadu z IDE ZERYNTH-a

Pozostałe :

- zainstalowane IDE ZERYNTH-a na PC
- założone darmowe konto w Chmurze WolkAbout

Do testów wykorzystałem przykładowe programy jakie znajdziemy w dokumentacji  ZERYNTH. Z tych przykładów szybko załapiemy jak się poruszać po świecie ZERYNTH-a za pomocą języka Python. Rzekłbym , że jest to nawet świetna zabawa.

Aby przetestować komunikację z chmurą ,do zagadnienia musimy podejść z dwóch stron . Od strony ZERYNTH-a , przygotowanie softu , który obsłuży nam komunikację z chmurą WolkAbout i od strony chmury czyli jej konfiguracja .

Najpierw zajrzałem w dokumentacji ZERYNTH do API obsługującej komunikację z chmurą WolkAbout, dokładnie tutaj. Znalazłem tam dwa przykłady  . Pierwszy przykład operuje wysyłaniem danych z zaimplementowanego programowo czujnika temperatury a drugi przykład bardziej rozbudowany, wysyła dane z kilku "wirtualnych" czujników. Czujniki są symulowane programowo. Chodzi tylko o przesyłanie danych zmieniających się w czasie. Ja posłużyłem się pierwszym przykładem. W tym celu stworzyłem sobie w ZERYNTH nowy projekt i nazwałem go np. WolkAbout_Test, skopiowałem do pliku main.py przykład ze strony ZERYNTH nazwany Controlled publish period. Przykład jest dla płytki STM-a , więc musiałem go zmienić pod moją płytkę czyli NodeMCU ESP32.

Zmiany jakie naniosłem do przykładu zaznaczyłem na poniższym obrazku, dotyczą one drivera dla modułu WiFi i jego inicjalizacji dla płytki NodeMCU ESP32  (proszę to sobie porównać z oryginalnym przykładem Controlled publish period):


Aby przykład odpalić musimy podać dane oznaczone znakami zapytania czyli dane logowania do naszej sieci WiFi i dane dostępu do chmury. Dane dostępu do chmury otrzymamy w procesie konfiguracji w chmurze, ale do tego  zaraz dojdziemy. Programu na tym etapie jeszcze nie wgrywam do płytki NodeMCU ESP32, dopóki nie uzupełnimy w nim danych dla chmury.
Przechodzimy zatem teraz do chmury WolkAbout . Zakładam, że założyliśmy już sobie tam konto i wchodzimy na nie w chmurze . Obrazek powitalny jaki otrzymamy będzie wyglądał jak poniżej :


Na początku jesteśmy zachęcani do stworzenia tablicy (Dashboard) . Tablica będzie naszym panelem dowodzenia powiązanym z danymi jakie przesyłać będzie nasza płytka. Z poziomu Tablicy mamy również możliwość sterowania naszą płytką czyli np. realizacja funkcji włącz/wyłącz . Dane przesyłane do/z urządzenia będą na tablicy wizualizowane on-line. Tworzymy zatem sobie nową tablicę (ogłoszeń) i naciskamy plusik. Wyskoczy okienko w którym podajemy tylko nazwę tablicy u mnie jest to Tablica_NodeMCU.


Po utworzeniu tablicy zobaczymy obrazek jak poniżej, pojawił się panel z nazwą naszej tablicy  :


Takich tablic możemy mieć więcej  ale w wersji darmowej dostępu do chmury jesteśmy ograniczeni do 2 sztuk. Ograniczenia jakie mamy dla wersji darmowej chmury znajdziemy tutaj.
Opuszczamy widok z tablicami i przełączamy się na widok Devices  (środkowy panel w górnej części widoku) :


Aby dodać urządzenie w powyższym widoku musimy najpierw stworzyć szablon dla urządzenia czyli Device Templates, wchodzimy zatem w zakładkę z tą nazwą :


W okienku Device Templates mamy jakieś przykładowe urządzenie o nazwie Wolksensor. My jednak nie skorzystamy z tej propozycji tylko utworzymy własne urządzenie . Na tę okoliczność zespół ZERYNTH przygotował gotową templatkę urządzenia skorelowaną z naszym przykładem . Nazwa templatki
Simple-example-deviceTemplate.json jest podana na samym początku strony z przykładem :


Musimy znaleźć ten plik w katalogu ZERYNTH na dysku lokalnym. Aby go wyszukać na dysku posłużyłem się w LINUX komendą find z poziomu konsoli linuxowej :

find -name Simple-example-deviceTemplate.json

ścieżka do pliku u mnie w Linux jak poniżej :

./.zerynth/dist/r2.3.0/libs/official/wolkabout/iot/examples/

Ten plik będzie nam za chwilę potrzebny. Wracamy do widoku okna Device Templates i tam wybieramy  plusikiem Add Templates . Pojawi nam się pole wyboru jak poniżej w którym wybieramy opcję Upload i podajemy ścieżkę na dysku lokalnym do pliku Simple-example-deviceTemplate.json


Po chwili plik zostanie wgrany i zostanie pokazana templatka naszego urządzenia skorelowana z naszym przykładem , wygląda to jak poniżej :


Musimy teraz w powyższym widoku wybrać opcję Create Devices (na dole po lewej). Wyskoczy nam okienko jak poniżej w którym wybieramy opcję Next step (po prawej na dole).


W kolejnym okienku na dole wpisujemy nazwę naszego urządzenia i wybieramy opcję SAVE :


W ostatnim okienku otrzymamy klucz i hasło za pomocą których nasze urządzenie będzie mogło się skomunikować z chmurą i wysłać dane. Małym okienkiem przysłoniłem moje dane.


Wygenerowany klucz i hasło musimy wpisać w programie w IDE ZERYNTH w miejscu wyraźnie do tego przeznaczonym czyli w wierszu device_key i device_password. Nasza templatka urządzenia o nazwie ESP32 jest już widoczna w chmurze :


Templatka urządzenia jest szablonem w którym są zdefiniowane pola z danymi . Zobaczmy ja te pola wyglądają w przypadku naszej templatki:


W naszym przykładzie posłużymy się tylko polem Temperature, czyli z szablonu wybierzemy tylko to pole i będziemy je prezentować w Dashboard czyli na naszej tablicy ogłoszeń. Do pola tego nasza płytka NodeMCU ESP32 będzie wysyłać dane czyli liczby w drodze losowania w zakresie 15-40. Ale jak dołączyć pole Temperature do tablicy ogłoszeń ? W tym celu w panelu górnym wybieramy widok Dashboard  :


W powyższym widoku obok nazwy Tablica_NodeMCU, klikamy ikonkę plusika opisaną Add widget , otwiera nam się okienko jak poniżej :


Z powyższego okienka wybieramy ikonkę opisaną Semantic groups. Wyskakuje nam kolejne okienko w którym "ptaszkujemy" tylko Temperature i zapisujemy wybór SAVE.


Widzimy, że widok zawiera oprócz pola Temperature inne ciekawe pola w tym slider. Aby wykorzystać wszystkie pola trzeba posłużyć się drugim przykładem z API ZERYNTH-a dla chmury WolkAbout. My dla przypomnienia posługujemy się pierwszym przykładem gdzie wykorzystywane jest tylko pole Temperature. Dlatego wybieramy to pole.

W widoku głównym Dashboard pojawi nam się  pole Temperature w kolorze szarym czyli w trybie Inactive. Aby pole to ożyło muszą przyjść z naszej płytki dane. Aby płytka transmitowała dane musimy wgrać z poziomu IDE ZERYNTH nasz program (przykład pierwszy z dokumentacji API ZERYNTH dla WolkAbout). Przypominam , że przykład należy zmodyfikować pod kątem naszej płytki NodeMCU ESP32 oraz podać wygenerowany klucz i hasło z chmury. Poniżej na dwóch obrazkach pokazuję kod programu jaki będę wgrywał na płytkę :




Czas ożywić naszą chmurę. Podłączamy płytkę NodeMCU ESP32 do PC za pomocą kabla USB. W oknie wyboru Device (środkowe na górze) powinien pojawić się napis z nazwą naszej płytki wybieramy go. Kompilujemy w IDE ZERYNTH nasz program za pomocą ikonki Verify a następnie wgrywamy do płytki za pomocą ikonki Uplink. Po wgraniu programu możemy sobie otworzyć konsolę w ZERYNTH (ikonka Open Console ostatnia po prawej na górze). Program wypluwa na konsolę komunikaty ze swojego działania i jednocześnie wysyła dane do chmury. Dzieje się magia a efekt jej widać poniżej na obrazku :


Dane do chmury spływają co 5 sekund bo taki interwał został w programie przyjęty. Jeśli do chmury spłynie więcej danych możemy podejrzeć w niej wykres zmian temperatury i tworzyć raporty z wybranymi filtrami. Wszystko jest ładnie i czytelnie podane jak na tacy. Po prostu bajka.


Na koniec obrazek z drugiego przykładu z dokumentacji API ZERYNTH dla WolkAbout . Przykład nazywa się Full feature set jest on bardziej rozbudowany m.in o Switch i Slider. Mamy tutaj zaimplementowane m.in alarmy .


Jeśli chcemy w tym rozbudowanym przykładzie zbadać stan pola Switch z poziomu programu i wyświetlić ten stan np. w konsoli to musimy dodać zaznaczone linie kodu do programu :


W efekcie w konsoli będzie wyświetlany aktualny stan pola Switch jaki jest w chmurze np. Sw(0, True), gdzie 0 oznacza aktualny status Switch'a w chmurze tzn gotowy/zajęty a True to aktualna wartość , Switch jest w stanie Włączony(ON) :


Wszystkie widoki w Dashboard są konfigurowalne , możemy rozdzielać okienka , grupować etc.
Podsumowując spotkanie z chmurą WolkAbout było nader sympatyczne. Komunikację z nią umożliwił mi ZERYNTH w którym mamy dostępne API do tej chmury no i dwa przykłady , które bardzo czytelnie pokazują jak się poruszać w temacie od strony języka Python. Chmura WolkAbout jest bardzo prosta w ogarnięciu, wszystko robiłem tam na "czuja" bez czytania instrukcji użytkownika :). Moim zdaniem trzeba zapomnieć o sterowaniu urządzeniami za pomocą strony html bo wiąże się z tym wiele niedogodności, które eliminuje chmura. Teraz rządzą chmury i z tym trzeba się pogodzić. Operowanie w chmurze jest mega wygodne .


Pozdrawiam
picmajster.blog@gmail.com





Brak komentarzy:

Prześlij komentarz