Integracja Efento Gateway z Node-RED

Node-RED to narzędzie do łączenia ze sobą urządzeń sprzętowych, interfejsów API i usług online. Opracowane z myślą o łatwym i szybkim budowaniu rozwiązań Internetu Rzeczy, gdzie często połączyć trzeba ze sobą produkty (sprzęt i aplikacje) pochodzące od rożnych dostawców. Efento Gateway może przesyłać dane do maszyny, na której zainstalowany jest Node-RED, dzięki czemu pomiary z bezprzewodowych rejestratorów Efento mogą być w wygodny sposób integrowane z praktycznie dowolnym rozwiązaniem.

Programowanie w Node-RED odbywa się przy pomocy układania bloków funkcyjnych w edytorze graficznym w przeglądarce internetowej. Gotowy program można następnie uruchomić przy pomocy jednego kliknięcia. Posiadając nawet minimalną wiedzę z zakresu programowania, użytkownik może tworzyć własne rozwiązania w Node-RED. Bardziej zaawansowani użytkownicy mogą pisać własne funkcje w Node-RED korzystając z JavaScript. Platforma posiada tysiące bloków funkcyjnych dostępnych za darmo w formie bibliotek, a uruchomiona może być na serwerach, komputerach (nawet na mini komputerach takich jak Raspberry Pi) oraz na popularnych platformach „w chmurze”. Platforma pierwotnie rozwijana przez IBM w 2016 roku została przekazana fundacji JS Foundation i obecnie dostępna jest za darmo na licencji Apache 2.0. Więcej informacji na temat Node-RED znaleźć można na stronie projektu.

Instalacja i uruchomienie Node-RED

W zależności od rodzaju komputera, na którym pracować ma Node-RED i systemu operacyjnego pobrać i zainstalować należy odpowiednią wersję Node-RED. Opis procesu instalacji znaleźć można na stronie platformy w dziale dokumentacja. Po zainstalowaniu platformy należy w przeglądarce internetowej wpisać na adres IP maszyny, na której zainstalowany jest Node-RED i numer portu 1880 (np. http://192.168.1.12:1880). Od teraz możliwe tworzenie aplikacji korzystając ze wszystkich zasobów Node-RED. Przed rozpoczęciem pracy ze środowiskiem warto zapoznać się ze sposobem poruszania się po środowisku i podstawowymi funkcjami czytając dokumentację na stornie projektu albo oglądając filmy instruktażowe.

Konfiguracja Efento Gateway do pracy z Node-RED

Efento gateway może wysyłać dane do Efento Cloud (domyślna konfiguracja) lub do dowolnego serwera – po zmianie konfiguracji gatewaya przez przeglądarkę. W zakładce „Ustawienia” -> „Serwer” ustawić należy:

  • Adres serwera – adres IP serwera, na którym zainstalowany został Node-RED
  • Port serwera – zawsze ustawiany na „1880”
  • Klucz organizacji – w przypadku współpracy z Efento Cloud klucz ten służy do przypisania rejestratora do konkretnej organizacji i wysyłany jet w nagłówku każdej wiadomości wysłanej przez gateway. W przypadku współpracy z Node-RED wartość klucza nie jest istotna i może być ustawiona na dowolną wartość, np. 00000000-0000-0000-0000-000000000001
  • Synchronizuj zapis pomiarów z serwerem – zawsze ustawiany na „Nie”

Po skonfigurowaniu gatewaya zgodnie z powyższym przykładem należy zapisać zmiany i gateway rozpocznie przesyłanie pomiarów do serwera, na którym zainstalowany jest Node-RED.

 

Obieranie pomiarów z Efento Gateway w Node-RED

Gateway przesyła pomiary z rejestratorów bezprzewodowych Efento korzystając z protokołu http (REST). Aby Node-RED mógł otrzymywać pomiary utworzyć należy nowy blok „http input” oraz skonfigurować go w następujący sposób:

  • Method = POST
  • URL = /api/v1/measurements

Drugim niezbędnym blokiem jest odpowiedź informująca Efento Gateway o poprawnym otrzymaniu pomiaru. Realizowane jest to przez blok „http response”, który skonfigurowany musi być w następujący sposób:

  • Status code = 201

oba bloki należy połączyć ze sobą, a dodatkowo dołożyć można blok „debug”, który połączony z blokiem „http input” wypisuje wszystkie pomiary otrzymane z Efento Gateway w konsoli Node-RED.

Schemat 1: Bloki w Node-RED umożliwiające odebranie pomiarów z rejestratorów Efento i wypisanie ich w konsoli

 

W konsoli Node RED (w zakładce „Debug”) wyświetlane są wszystkie pomiary, które wysyła Efento Gateway. Każdy pomiar to komunikat w formacie JSON zawierający następujące pola:

  • efento – numer seryjny rejestratora Efento, z którego pochodzi pomiar
  • battery – poziom naładowania baterii, w Voltach
  • signal – poziom sygnału
  • measured_at – data i godzina wykonania pomiaru w formacie RRRR-MM-DD hh:mm:ss
  • params – tablica z pomiarami poszczególnych wielkości fizycznych. Rodzaj pomiarów w tablicy jest zależny od wielkości fizycznych, które mierzy rejestrator, np. jeżeli rejestrator mierzy jedynie temperaturę, w tablicy zapisany będzie pomiar temperatury w formacie:
    • name : temperature
    • value : wartość pomiaru w stopniach Celsjusza

Node RED umożliwia dostęp do każdego pola otrzymanego pomiaru. Przykładowo numer seryjny rejestratora – msg.payload.measurements[0].efento, pomiar temperatury – msg.payload.measurements[0].params[0].value, a pomiar wilgotności msg.payload.measurements[0].params[1].value. Aby uzyskać ścieżkę do wybranego pola należy kliknąć na ikonę „>_” obok jego nazwy, ścieżka zostanie skopiowana.

Wyświetlanie danych

Na potrzeby naszego przykładu z pomiarów przesyłanych przez Efento Gateway odfiltrujemy pomiary rejestratora o numerze seryjnym „E10100010043”, oraz mierzone przez niego wartości temperatury i wilgotności, a następnie wypiszemy je w konsoli i przedstawimy w formie graficznej na liczniku (ang. Gauge). Aby to zrealizować do bloków ze Schematu 1 dodać musimy następujące bloki:

  • blok typu „switch” czyli instrukcję wielokrotnego wyboru, która w zależności od wartości, na swoim wejściu i warunku może przyjmować różne wartości na wyjściu. W naszym przypadku blok „switch” zostanie użyty do przekazania pomiaru do dalszych bloków, tylko jeżeli pochodzi z rejestratora o numerze seryjnym „E10100010043”. Konfigurując blok w polu „Property” należy wybrać „msg.payload”, natomiast w sekcji z warunkami wybrać należy „== E10100010043”
  • bloków typu „change”, który zmienia wartość wiadomości przesyłanej pomiędzy blokami – zamiast pomiaru i pozostałych pól (numer seryjny, siła sygnału, poziom baterii, itd.) otrzymanego z Efento Gateway po użyciu tego bloku dalej zostaną przekazane jedynie wartości temperatury i wilgotności. Należy dodać dwa bloki tego rodzaju i konfigurując je w sekcji „Rules” wybrać „Set” „msg.payload” to „payload.measurements[0].params[0].value” (blok pierwszy – temperatura) oraz „Set” „msg.payload” to „payload.measurements[0].params[1].value” (blok pierwszy – wilgotność)
  • bloków typu „gauge”, które umożliwiają wyświetlenie otrzymanych wartości pomiarów temperatury i wilgotności na liczniku. Aby korzystać z bloków interfejsu graficznego konieczne jest doinstalowanie do Node-RED biblioteki interfejsu graficznego – dashboard. Opis instalowania dodatkowych bibliotek znajduje się tutaj. We właściwościach bloków typu „gauge” można skonfigurować podpisy liczników (Label), jednostki, w których wyświetlane są pomiary (Units) oraz sposób kolorowania licznika w zależności od pomiaru (Sectors / Colour gradient).

Schemat 2: Bloki w Node-RED, umożliwiające pomiarów z rejestratorów Efento i wyświetlenie ich na licznikach

Bloki należy połączyć zgodnie ze Schematem 2. Po podłączeniu i konfiguracji poszczególnych bloków zgodnie z powyższym opisem pomiary temperatury i wilgotności z rejestratora o numerze seryjnym „E10100010043” będą widoczne na licznikach po wpisaniu w przeglądarce adresu http://adres_ip_maszyny_z_node_red:1880/ui/

Wyświetlanie danych w Node-RED

Dobrą praktyką w Node-RED jest nadawanie każdemu z bloków nazwy w języku angielskim (pole „Name”), opisującej co dany blok robi – np. blok „switch” z powyższego przykładu warto nazwać „Check sensor’s serial number”. Ułatwia to nawigację po projekcie, jego rozbudowę czy udostępnianie. Warto również układać bloki w sposób ułatwiający sprawdzenie powiązań między nimi. Powyższy przykład może być pobrany stąd i zaimportowany do Node-RED (zawartość pliku należy przekopiować, a następnie z menu w prawym górnym rogu wybrać Import -> Clipboard i wkleić przekopiowaną treść).

Możliwości Node-RED i Efento Gateway

Node-RED daje praktycznie nieograniczone możliwości integracji pomiędzy urządzeniami Internetu Rzeczy i platformami. W momencie pisania tego artykułu dostępnych jest ponad 1 300 bibliotek umożliwiających praktycznie dowolną integrację. Przykładowo, dostępne są darmowe biblioteki obsługujące:

  • zapis do bazy danych (zarówno SQL jak i NoSQL oraz biblioteki umożliwiające zapis danych w bazach danych typowych dla popularnych platform w chmurze) oraz zapis danych do plików
  • wysyłkę e-mail oraz wysyłkę powiadomień korzystając z popularnych protokołów (np. MQTT)
  • współpracę z mediami społecznościowymi (np. publikacja / odczyt danych z Twittera)
  • kontrolę wyjść w urządzeniach wykonawczych (np. włączenie syreny alarmowej jeżeli przekroczony jest próg temperatury)

Dodatkowo, jeżeli użytkownik nie znajdzie w dostępnych bibliotekach interesującego go bloku w łatwy sposób może napisać dowolny fragment kodu w Java Script i umieść go jako element swojego programu. Zastosowanie Efento Gateway we współpracy z Node-RED pozwala na tworzenie wielu rozwiązań, które realizują specyficzne dla danego użytkownika potrzeby związane z pomiarami i przetwarzaniem danych (np. integracja z systemem ERP, zapis danych w bazie danych zlokalizowanej na serwerze użytkownika, wysyłka powiadomień e-mail w ustalonych warunkach czy wizualizacja wybranych danych na dashboardzie).