Monitoring szaf teletechnicznych w chmurze

01.04.2020 How to, Studia przypadków / Sterowanie i akwizycja danych
Monitoring szaf teletechnicznych
Wizerunek autora
Piotr Gocłowski Były pracownik Elmark Automatyka S.A.
Producent: MOXA
  • Inteligentne miasta

Jeden z naszych klientów miał trudności z utrzymaniem i serwisowaniem skrzynek teletechnicznych rozsianych po całym mieście.

Nasz klient chciał wdrożyć dodatkowe urządzenie lub system do monitorowania, aby rozwiązać kilka problemów:

  • Monitorowanie w czasie rzeczywistym statusu skrzynek, w tym czujników dwustanowych, temperaturowych
  • Wiedza na statusie danej skrzynki pozwala przygotować się do wyjazdu, co może pozwolić uniknąć ponownej wycieczki i oszczędza czas.
  • Usprawnienie pracy serwisu

Powyższe wymagania wynikały z tego, że w razie awarii czas reakcji, a w efekcie jej naprawy był za długi, i powodowało to pewne konsekwencje. Potrzebne było rozwiązanie monitorujące i raportujące status I/O skrzynek, z możliwością prostej wizualizacji na ekranie komputera/smartfona.

Rozwiązanie - ioThinx 4510 + Azure

Klientowi zaproponowaliśmy rozwiązanie składające się z:

  • ioThinx 4510 + moduły IO – w każdej monitorowanej skrzynce
  • Broker MQTT + NodeRed – na serwerze lokalnym lub chmurowym, do którego ioThinx wysyłałby dane.

Poniżej topologia:

Zasada działania jest stosunkowo prosta, ioThinx 4510 posiada wbudowanego klienta MQTT, i po właściwej konfiguracji w razie zmian statusu wejść cyfrowych/analogowych wysyła wiadomości do zdefiniowanego brokera MQTT. Broker MQTT to taki punkt wymiany danych wszystkich klientów protokołu MQTT, można w nim dane publikować czyli wysyłać, lub subskrybować czyli odbierać. Więcej na temat protokołu opisywaliśmy w innym wpisie:

https://moxa.elmark.com.pl/2019/09/19/mqtt-iothinx/

W prezentowanym klientowi rozwiązaniu demonstracyjnym broker MQTT uruchomiliśmy na serwerze publicznym w chmurze Azure. Na tej samej maszynie zainstalowaliśmy NodeRed, czyli narzędzie do graficznego tworzenia aplikacji zdarzeniowych, niemal bez pisania kodu. Celem tej aplikacji miała być wizualizacja danych statusowych wysyłanych przez ioThinx przez przeglądarkę. Na dashboard znajduje się mapa ze znacznikami lokalizacji, a po prawej stronie tabela ze zdarzeniami, czyli zmianami statusu wejść. Dodatkowo dodaliśmy integracje z usługami Twilio i AWS SNS do wysyłania SMSów w razie przekroczenia progu temperatury. Tak wygląda dashboard:

 

Konfiguracja aplikacji

Tak jak wspominałem wyżej Broker MQTT oraz NodeRed są zainstalowane na VPS (Virtual Private Server) w chmurze Azure z systemem operacyjnym Ubuntu 18.04.3 LTS, ale może być to wirtualna maszyna u każdego innego dostawcy VPS’ów. Ważne, aby maszyna ta była dostępna publicznie, należy jednak pamiętać o odpowiednim jej zabezpieczeniu, czyli ustawieniu silnego hasła dla SSH, zmianie domyślnego portu 22, czy zastrzeżeniu dostępu tylko dla wybranych adresów IP, lub autentykację za pomocą kluczy.

Tworzenie nowego VPS na platformie Azure

Poniżej zrzuty ekranu z dodawania maszyny wirtualnej na platformie Azure:

 

Dashboard uruchomionej instancji

Być może wygląda to nieco skomplikowanie, ale w praktyce takie nie jest. Większość ustawień można zostawić domyślnie.

Instalacja potrzebnych pakietów

Jeśli wszystko poszło dobrze, powinna być możliwość zalogowania się do maszyny za pomocą klienta SSH, np. putty:

Udane zalogowanie do VPSa

Komendy do instalacji niezbędnych składników:

#zalogowanie się na stałe jako root
sudo -s

root@NodeRedTest:~# - zmiana znaku zachęty na #
#aktualizacja listy pakietów
apt-get update 

Instalacja menadżera pakietów nodejs
apt-get install npm

#Pojawi się taki oto komunikat:
After this operation,
215 MB of additional disk space will be used.

Do you want to continue? [Y/n]

#Wpisujemy Y aby zainstalować

#Następnie sprawdzamy czy czy mamy zainstalowany nodejs:
node -v

#Jesli jest zainstalowany to powinniśmy zobaczyć wersje.
v8.10.0

#Jeśli wyświetli się komunikat że nie można znaleźć takiej
#komendy to należy zainstalować nodejs za pomocą poniższych komend:
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash –
sudo apt install nodejs

#Instalujemy NodeRed:
npm install -g --unsafe-perm node-red

W międzyczasie został zmieniony typ instancji na większą, ponieważ poprzednia była nieco za słaba, brakowało pamięci RAM(512 MB) w trakcie pracy:

#Instalacja pm2, czyli menadżera do zarządzania aplikacjami opartymi na nodejs:
sudo npm install -g pm2

#Instalacja brokera MQTT Mosquitto 
apt-get mosquitto

#Ustawienie hasla brokera mqtt:
mosquitto_passwd -c /etc/mosquitto/passwd elmark

#Następnie należy wpisać hasło, najlepiej silne, zawierające dużą literę, znaki specjalne, i cyfry

#Uruchomienie nodered:
node-red

#Uruchomienie za pomocą menadżera procesów pm2:
pm2 start node-red

#Sprawdzenie czy node-red działa
pm2 list
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ node-red           │ fork     │ 0    │ online    │ 0.3%     │ 172.8mb  │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

#Automatyczne uruchamianie node-red po restarcie maszyny:
pm2 startup

#Restartowanie nodered:
pm2 restart node-red 

#Aby sprawdzić rezultaty wystarczy wpisać w przeglądarkę publiczny adres IP servera i port na którym działa Nodered:
http://PublicznyAdresip:1880

#Jednak domyślnie nic nie zobaczymy, ponieważ tworząc VPS umożliwiliśmy dostęp tylko dla portu 22 (SSH).
#Wystarczy dodać nową regułę w firewall.
#Zanim to zrobimy dobrze będzie utworzyć hasło dla NodeRed.
#W tym celu musimy najpierw zainstalować node-red-admin:
npm install node-red-admin -g

#Następnie trzeba wygenerować i skopiować hash hasła za pomocą poniższej komendy:
node-red-admin hash-pw

#Następnie należy edytować plik konfiguracyjny projektu nodered za pomocą edytora tekstowego(np. nano):
nano /home/Testowy/.node-red/settings.js

#"Testowy" to nazwa użytkownika więc należy dopasować ściężkę.

#W pliku należy znaleźć i odkomentować sekcję "adminAuth", a także wkleić wcześniej wygenerowany hash hasła w dla wartości password:

adminAuth: {
type: "credentials",
users: [{
username: "admin",
password:"$2b$08$VyN15KhHsB527/QlcozH5eCkO0Ygcb502.zyt1CFUT0jkzz$
permissions: "*"
}]
},

Po zapisaniu i zrestartowaniu (pm2 restart node-red) możemy przejść do dodania reguly na firewall Azure. Tam wystarczy dodać port 1880:

Należy też pamiętać o dodaniu reguły dla brokera MQTT, aby ioThinx 4510, lub inne urządzenia mogły się z nim łączyć. Domyślny port dla brokera to 1883. Następnie wystarczy sprawdzić, czy interfejs się ładuje i możemy rozpocząć pracę z NodeRed:

 

Aby zainstalować node'y których użyliśmy do tworzenia PoC wystarczy użyć poniższej komendy i zrestartować nodered:

npm install node-red-contrib-aws node-red-contrib-simpletime node-red-contrib-web-worldmap node-red-dashboard node-red-node-twilio

NodeRed

Przygotowany dla naszego klienta przepływ realizuje wizualizacje statusów wejść ioThinx 4510. Dane wysyłane przez ioThinx 4510 do brokera MQTT zainstalowanego na przygotowanym VPS są odczytywane lokalnie przez NodeRed za pomocą bloczka „MQTT in”. Widget „world map” jest odpowiedzialny za wyświetlanie mapy na dashboardzie. Gdy nadejdzie wiadomość MQTT to w dashboard pojawia się komunikat popup, zmienia się kolor znacznika na mapie, a także pojawia zdarzenie w tabelce z listą zdarzeń. Dodatkowo jeśli jest wpisany numer telefonu to w razie zmiany wejścia analogowego powiadomienie jest też wysyłane w formie SMSa na podany numer. Realizują to 2 zewnętrzne usługi: Twilio, oraz Amazon SNS. Poniżej efekty działania:

Animowany gif - powiadomienia na dashboard w Nodered

 

Powiadomienia SMS

 

Wady i zalety

Rozwiązanie, które zaproponowaliśmy posiada sporo zalet:

  • Duża elastyczność dzięki protokołowi MQTT i narzędziu NodeRed
  • Łatwość rozbudowy funkcjonalności dzięki społeczności tworzącej node, a także dzięki możliwości dopisania funkcji w Java Script.
  • Niski koszt wdrożenia dzięki darmowemu oprogramowaniu – Open source
  • Łatwiejsze rozwiązywania problemów dzięki popularności tych technologii
  • W wielu przypadkach nie jest wymagane pisanie kodu, co pozwala uniknąć zatrudniania dewelopera
  • Szybszy czas od zdarzenia do wizualizacji dzięki komunikacji w schemacie push

Jak zwykle nie ma róży bez kolców więc poniżej wady:

  • Wszyscy klienci dashboarda Nodered widzą to samo, nie ma możliwości tworzenia użytkowników
  • Wbudowane zabezpieczenie hasłem nie jest ultra bezpieczne dlatego warto albo ograniczyć dostęp do VPSa (serwera) poprzez odpowiednie reguły na firewall, albo wdrożyć możliwość połączenia przez VPN

Dzięki za dobrnięcie do końca wpisu wyszedł dosyć obszerny. Zapraszam też do lektury innych na naszym blogu. Poniżej link omawianego we wpisie ioThinx 4510:

https://www.elmark.com.pl/pl/sklep/moxa/ioThinx_4510

Niedawno opisywaliśmy inny PoC przygotowany dla naszego zestawu demonstracyjnego z użyciem NodeRed, a konkretnie monitorowanie sterownika PLC Siemens:

https://moxa.elmark.com.pl/2019/11/25/node-red-profinet/

Skontaktuj się ze specjalistą Elmark

Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!