niedziela, 4 października 2020

Mikro server MQTT





Od dawna już działa wiele serverów MQTT  w chmurze i takie tam ...  Ten lekki model publikacji i subskrybowania wiadomości przez TCP/IP jest idealny do komunikacji urządzeń IoT opartymi o popularne układy ESP8266 i ESP32. Doskonale zdaje egzamin w aplikacjach o małych zasobach i zasilanych z baterii pracujących w zakresie domowej automatyki , systemów alarmowych czy sieci czujników ...

Ja osobiście postanowiłem postawić własny , gdyż żaden z polecanych nie dawał tego co potrzebowałem. Darmowe jak wiecie są ok żeby sobie coś potestować , a płatne czasem za te kilka danych mają zbyt wygórowane ceny..



Oczywiście ktoś może  nie podzielać mego zdania , dlatego też poniżej znajdziecie linki do tych ,
które testowałem :


Ostatecznie dysponuję dość szybkim łączem więc postanowiłem postawić sobie własny,  długo motałem się w ogromie brokerów ale ostatecznie wybrałem projekt Mosquitto . Całość zaś postanowiłem postawić na małym SBC ...  mam ich kilka i szkoda żeby się  kurzyły ... 



Ostatecznie z posiadanych SBC wybrałem :
Khadas VIM2 PRO  -- może to i strzelanie z armaty  8 rdzeniami , ale w odróżnieniu od pozostałych 
2ch czyli PineA64 i SomLABsa   jest w zasadzie najmniej użyteczny w kwestii zabaw w stylu rPI. 
Dodatkowo Khadas posiada pamięć EMMC będącą pewniejszym nośnikiem niż karta SD.

Ale do rzeczy ....



Na Khadasie postawiłem Ubuntu Mate  .. uznałem że kiedyś może się przydać interfejs graficzny
po za tym przy tych zasobach jako sam serverek dla MQTT będzie się nudził .. 

Dlaczego Mosquitto ??

Dlatego że to dobry serwer/broker komunikatów w dodatku wielu ucieszy fakt, że jest projektem open source i to dość udanym. Ponadto ma dobre wsparcie społeczności , dokumentację i łatwość instalacji.

Wymagania wstępne:
- system z linuxem  
- otwarty port tcp:  1883  (nieszyfrowany)

Instalujemy ....

Tu w zasadzie niema nic specjalnego i dziwnego parę komend w terminalu :)
Oczywiście zacząć należy od aktualizacji list pakietów :

$> sudo apt-get update 

po czym możemy już wykonać instalację Brokera Mosquitto w naszym systemie ...

$> sudo apt-get install mosquitto

W zależności od łącza zajmie to chwilę lub dwie i po drodze zostaniemy zapytani o doinstalowanie wymaganych bibliotek na co się oczywiście zgadzamy. Broker już zainstalowany teraz wypada zainstalować klientów MQTT (przydadzą się choćby do przetestowania) 

$> sudo apt-get install mosquitto-clients 

Nio to gotowe ... teraz sprawdźmy czy wszystko działa jak należy w tym celu musimy się połączyć 
z naszym systemem przez 2 instancje terminala. Np ja używam połączenia SSH  przez terminal Putty, 
ale jeśli pracujecie pod systemem Linux na docelowym sprzęcie możecie otworzyć tylko drugie okno 
terminala. 



w ten sposób w jednym oknie będziemy subskrybować kanał wiadomości a w drugim będziemy je publikować. Więc na jednym oknie uruchamiamy subskrypcję  kanału wiadomości:  testmqtt  poprzez wydanie w terminalu polecenia:
$> mosquitto_sub -t "testmqtt"
  
To polecenie uruchamia nam klienta subskrypcji którym wskazując parametr -t zapisaliśmy się do kanału testmqtt.  Zaś w drugim terminalu uruchomimy sobie publikację wiadomości w wybranym temacie: 

$> mosquitto_pub -m "Witam na naszym małym serwerku MQTT"  -t "testmqtt" 

Jak widzicie ładnie działa to co publikujemy subskrybent otrzymuje. Właśnie o to nam chodziło 
teraz możemy łatwo podłączyć do naszego brokera różne urządzenia np. czujniki temperatury oparte o esp8266 czy sterowniki świateł.  

(ESP8266 publikuje w temacie Sensor/T  temperaturę mierzoną przez DS18b20)

Wiadomości te może odbierać nasz panel operatorski czy Dashboard w Telefonie.
Oczywiście do testów nam wystarczy , ale wypadało by jednak żeby dostęp był chroniony, wiec gdy już się pobawiliśmy i wszystko działa jak należy. Można rzec nasz server śmiga ....  dodamy sobie zabezpieczenie.  Tu też nam pójdzie prosto gdyż mosquitto zawiera w pakiecie odpowiednie narzędzie:

$> sudo mosquitto_passwd -c /etc/mosquitto/passwd  <nasza nazwa> 

a teraz po prompcie Password: wpisujemy  hasło.
ma to jednak wadę hasło jest pamiętane tylko do restartu systemu lub brokera ...  ale i na to jest rada 
stosunkowo prosta ...  w terminalu wpisujemy:

$> sudo nano /etc/mosquitto/conf.d/default.conf  

w ten sposób utworzymy pusty plik tekstowy, w którym utworzymy 2 wpisy:

allow_anonymous false
password_file /etc/mosquitto/passwd

Teraz plik zapisujemy i zamykamy nano wykonując kolejno komendy na klawiszach:

CTRL+O  , ENTER , CTRL+X  

czyli zapisz plik , potwierdzamy i zamknij edytor . I teraz wystarczy zrestartować Mosquitto poleceniem: 

$> sudo systemctl restart mosquitto

teraz trzeba tylko się przelogować na oknie subskrybenta : (stary zamykamy CTRL+C)

$> mosquitto_sub -t "testmqtt" -u  "nasza_nazwa" -P "hasło"

(UWAGA !! -->  hasło podajemy po dużym  -P) 

Teraz możecie opublikować jakąś wiadomość ... ojoj została odrzucona ?? dokładnie tak 

Connection Refused:  not authorised.
Error:  The connection was refused.

od tej pory publikować mogą tylko autoryzowani publikatorzy i odbierać też ci co mają poświadczenia.
nap możecie przetestować to tak:

$> mosquitto_pub -t "testmqtt" -m "poprawnie się zalogowałem do tematu" -u "nazwa" -P "hasło"

Ufff nasza wiadomość została odebrana i wszystko działa jak należy ... 

Możemy jeszcze sprawdzić status naszego brokera :

$> sudo service mosquitto status




W kolejnym wpisie dowiemy się zatem jak podłączyć do systemu nasze urządzenie IoT , w jaki sposób publikować i subskrybować dane.  A w kolejnym zrobimy Dashboard pod Windowsa i pod Androida , opanujemy sterowanie wyświetlaczem HMI, a  tym samym zbudujemy kompletne centrum dowodzenia naszym domem i nie tylko.

Brak komentarzy:

Prześlij komentarz