Image
4.6.2019 0 Comments

IoT prakticky - komunikačný protokol MQTT (nielen) pre BigClown

V predchádzajúcej časti https://www.pcrevue.sk/a/IoT-prakticky--E2-80-93-modularna-stavebnica-BigClown dlhodobého seriálu sme predstavili modulárnu IoT stavebnicu BigClown. Našim cieľom je z kitov stavebncie BigClown vytvoriť jednoduchý systém domácej automatizácie. Ale to až v budúcom pokračovaní. Aby sme to mohli urobiť efektívne a koncepčne, je potrebné predstaviť najskôr komunikačný protokol MQTT 

Stavebnica BigClown pozostáva z modulov, pričom zložením vhodných modulov a ich umiestnením do plastovej škatuľky vznikne kit. V stavebnici Premium MultiKit, ktorú používame pre tento seriál sú diely, z ktorých sa dajú postaviť  Motion Detector Kit, Climate Monitor Kit, Flood Detector Kit, LCD Thermostat Kit, Power Controller Kit a komunikačný modul Radio Dongle. Súčasťou koaždého kitu je mikrokontrolérová doska CoreModul, ktorá využíva úsporný mikrokontrolér STM32L083 s 32 bitovým jadrom ARM Cortex M0+. Na doske je aj senzor na snímanie teploty a akcelerometer. Na meranie teploty je teda možné využiť ktorýkoľvek kit napríklad Flood Detector Kit v kúpeľni bude nielen monitorovať, či nedošlo k zaplaveniu podlahy, ale dokáže poskytovať aj údaje o teplote. V kombinácii s kitom Power Controller, ktorý má na konektor vyvedené kontakty relé schopné spínať 230V/16A by ste mohli vytvoriť ovládanie kúrenie. Alebo kombináciou Power Controller Kitu s Climate Monitor Kitom, ktorý má senzor na meranie intenzity svetla by ste mohli spínať osvetlenie.  

Ak čakáte, že teraz predstavíme vývojové prostredie v ktorom naprogramujeme aplikáciu na ovládanie kúrenia, či osvetlenia tak, že kit merajúci príslušnú veličinu vyhodnotí, že teplota, alebo intenzita svetla je nižšia ako nastavená a pošle do Power Controller Kitu signál, aby aktivoval vykurovací systém, bolo by to samozrejme možné, ale nekoncepčné. Takto by ste vyriešili spínací termostat, alebo súmrakový spínač pri jednodoskovej konštrukcii, napríklad na vývojovej doske Arduino doplnenej o spínacie relé. Internet vecí je však o inom. Úlohou snímača v modulárnej architektúre akú má aj BigClown je merať a posielať namerané údaje do centrálneho riadiaceho systému, ktorý ich vyhodnotí a v prípade potreby aktivuje činnosť akčných členov. Na prvý pohľad by sa zdalo že modulárna súprava kitov BigClown nič podobné centrálnemu systému nemá.  Ale má. Je to buď počítač, alebo mikrokontrolérová doska Raspberry PI s pripojeným RadioDongle.

Senzory budú merať a akčné členy v prípade potreby spínať, alebo inak ovládať pripojené zariadenia. Akčný člen, v našom prípadne Power Controller Kit pomocou komunikačného protokolu oznámi niečo v zmysle: „dajte mi vedieť, ak teplota v sledovanom priestore klesne pod nastavenú hodnotu“. Alebo kit spínajúci osvetlenie, prípadne inteligentná žiarovka oznámi: „dajte mi vedieť, keď je stlačený modul vypínača, alebo intenzita svetla klesne pod určitú hodnotu“. Samozrejme spínací modul osvetlenia ani inteligentnú žiarovku vonkoncom nezaujíma, aká je v sledovanom priestore teplota. Ak to zovšeobecníme, moduly, ktoré ovládajú zariadenia sa prihlásia na odber určitého typu informácií.  Je to vlastne akási distribuovaná forma obsluhy udalostí, kde vrstva nazývaná aj softvérový agent číta informácie z komunikačnej zbernice a reaguje na ne. Výhodou takejto architektúry je abstrakcia fyzických zariadení, umožňujúca ich premapovanie. Takže žiarovka v kúpeľni sa rozsvieti nielen po stlačení bezdrôtového vypínača, ale v prípade, že pohybový senzor deteguje, že ste v byte, tak aj pri zaplavení podlahy kúpeľne, aby ste na tú mláku lepšie videli.    

Na komunikáciu IoT zariadení sa najčastejšie používa protokol MQTT. Táto skratka sa interpretuje ako Message Queuing Telemetry Transport. Je to protokol typu M2M, čiže určený na vzájomnú komunikáciu medzi zariadeniami. Protokol predpokladá existenciu centrálneho bodu, takzvaného MQTT brokera. Protokol MQTT je jednoduchý, takže nie je problém implementovať ho aj v menej výkonných mikrokontroléroch. Na prenos správ sa využíva TCP a protokol funguje na princípe poskytovateľ – odberateľ, čiže v originálnej terminológii publisher – subscriber. Zjednodušene by sa dalo povedať, že MQTT protokol je tematický, pretože správy sú priradené do tém. IoT zariadenie potom buď publikuje správy týkajúce sa danej témy. MQTT broker potom tieto správy posiela zariadeniam, ktoré sa k odberu správ k danej téme prihlásili. Napríklad senzor na meranie teploty posiala údaje zaradené do témy teplota a ovládací modul vykurovania ich odoberá. Témy sa označujú hierarchicky, pričom úrovne hierarchie sú oddelené lomkami, napríklad: „dom1/poschodie2/obyvacka/teplota“. Iná téma pre modul spínajúci inú vetvu vykurovania môže byť „dom1/poschodie2/kupelna/teplota“. Alebo pre inú veličinu „dom1/poschodie2/obyvacka/vlhkost“. Každá správa patrí len do jednej témy. Názvy tém sú v UTF-8, takže je možné v nich použiť aj diakritiku. Hierarchiu si navrhujete sami, v závislosti od požadovaného scenára riešenia. Medzi poskytovateľmi a odberateľmi správ je vzťah many-to-many, čiže poskytovateľ môže poskytovať správy pre viac odberateľov a odberateľ môže odoberať správy od viacerých poskytovateľov. Jedno zariadenie môže byť zároveň aj poskytovateľ aj odberateľ. MQTT broker môže posielať aj špeciálne správy, ktoré sa začínajú znakom „$“.

Tému si zvolí poskytovateľ. Témy sa nemusia vopred konfigurovať, ak MQTT broker príjme od niektorého poskytovateľa správu s novou témou, automaticky túto tému zaradí. Samozrejme pri návrhu architektúry riešenia, konkrétne pri návrhu dátového modelu je potrebné definovať kto bude aké témy poskytovať a kto ich bude odoberať.  Odberateľ sa k odberu správ k danej téme prihlási poslaním špeciálnej správy „subscribe“ s názvom témy. V našom prípade máme zatiaľ poskytovateľov s témami „dom1/poschodie2/obyvacka/teplota“, „dom1/poschodie2/kupelna/teplota“ a „dom1/poschodie2/obyvacka/vlhkost“. Ak je odberateľom panel s displejom, ktorý je umiestnený na chodbe každého poschodia a zobrazuje teploty v jednotlivých miestnostiach, čiže bude odoberať viac tém, môže v správe prihlasujúcej sa k odberu tém použiť takzvané zástupné znaky „+“ a  „#“. Znak „+“ umožňuje nahradiť jednu úroveň hierarchie, napríklad  „dom1/poschodie2/+/teplota“ znamená, že zariadenie sa prihlasuje na odber všetkých tém týkajúcich sa teploty na danom poschodí. Znak „#“ nahradzuje jednu alebo niekoľko najnižších hierarchií, čiže musí byť umiestnený na konci reťazca. Napríklad „dom1/poschodie2/obyvacka/#“ znamená odber správ o teplote a vlhkosti v obývačke. Reťazec „dom1/poschodie2/#“ znamená odber správ týkajúcich sa všetkých parametrov vo všetkých miestnostiach na druhom poschodí.

Vlastný obsah správy, takzvaný payload nie je nijako špecifikovaný ani obmedzený. Môžu to byť binárne údaje, textové reťazce, reťazce vo formáte JSON, XML a podobne. Veľkosť správy je obmedzená na 256 MB, čo na zamýšľané účely úplne stačí. Každá správa je doplnená o údaje na fungovanie protokolu.  

MQTT, podobne ako každý komunikačný protokol rieši aj potvrdzovanie správ. Je to dôležité hlavne pre rádiovú komunikáciu, kde môže nastať rušenie. Podľa dôležitosti správy je možné nastaviť tri úrovne QoS (Quality of Service).

  • QoS 0 (at-most-once) – správy sa nepotvrdzujú, takže sa nedá zaručiť ich doručenie. 
  • QoS 1 (at-least-once) zabezpečí, že správa bude doručená aspoň raz 
  • QoS 2 (exactly once) zabezpečí, že správa bude doručená len raz. 

Na otvorenú, nešifrovanú komunikáciu sa najčastejšie používa port 1883. Pomocou nešifrovaného protokolu by ste nemali posielať údaje citlivej povahy.  Na šifrovanú komunikáciu sa používajú porty 8883 a 8884. Spojenie nadväzujú zariadenia s brokerom pomocou správy typu CONNECT. Broker spojenie potvrdí správou CONNACK (ACK znamená acknowledge). Na odber tém sa zariadenia prihlasujú správou typu SUBSCRIBE a broker odber potvrdí správou SUBACK. Odber je možné zrušiť správou typu UNSUBSCRIBE.

V pokračovaní ukážeme použitie MQTT protokolu prakticky v scenári, keď ako z kitov stavebncie BigClown vytvoríme jednoduchý systém domácej automatizácie.

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Technológie

Robotika - čo dokážu roboty Blue-Bot a Pro-Bot

18.07.2019 00:10

V tomto dielu prázdninového seriálu venovaného robotike predstavíme možnosti dvoch robotov od britskej firmy TTS. Blue-Bot sa programuje zadávaním sekvencie krokov, pričom krok je buď pohyb v danom sm ...

Technológie

IoT prakticky – UniPi 1.1 Lite s Raspberry Pi pre smarthome a automatizáciu

17.07.2019 00:10

UniPi 1.1 Lite je nadstavba pre populárnu mikropočítačovú dosku Raspberry Pi, s ktorou tvorí jednoduchou programovateľnú riadiacu jednotku využiteľnú pre jednoduchšie projekty riadenia napríklad intel ...

Technológie

Roboty Bee-Bot a Blue-Bot pre mladších žiakov

16.07.2019 00:10

Náš prázdninový seriál venovaný robotike sme začali štyrmi dielmi popisujúcimi konštrukciu a programovanie jednoduchých a lacných robotických podvozkov. Inak povedané – témy pre učiteľov informatiky a ...

q

Žiadne komentáre

Vyhľadávanie

eFocus_2019

Najnovšie videá