Slovenská technická univerzita Fakulta elektrotechniky a informatiky Mosquitto Telemetry Transport protokol pre IoT Tímové zadanie z predmetu Intelige

Podobné dokumenty
Zadání čtvrté série

Katedra Informatiky Fakulta Matematiky, Fyziky a Informatiky Univerzita Komenského, Bratislava Podobnos slov (Diplomová práca) Martin Vl ák Vedúci: RN

Princípy tvorby softvéru Modelovanie domény

Komplexný informa ný a monitorovací systém Monitorovanie biotopov a druhov európskeho významu Používate ská dokumentácia KIMS modul Mobilná aplikácia

BRKOS

Matematicko-fyzikálna fakulta Univerzity Karlovej v Prahe SPRÁVA O TUDENTSKOM FAKULTNOM GRANTE Marek Martaus Testování prototyp modul vnit ního detekt

Základy automatického riadenia - Prednáška 2

Princípy tvorby softvéru GIT a iné užitocné veci

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY VALUE-AT-RISK A CONDITIONAL VALUE-AT-RISK AKO NÁSTROJE NA MERANIE RIZIKA P

Slovenská technická univerzita v Bratislave Fakulta informatiky a informačných technológií Ilkovičova 2, , Bratislava 4 Internet vecí v našich ž

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY BEHAVIORÁLNE VPLYVY NA SIETE FINAN NÝCH SUBJEKTOV Diplomová práca 2013 Bc.

Snímka 1

PowerPoint Presentation

Lorentzova sila a jej (zov²eobecnená") potenciálna energia Marián Fecko KTF&DF, FMFI UK, Bratislava Na predná²ke sme sa dozvedeli, ºe Lorentzova sila

Prezentácia programu PowerPoint

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY BAKALÁRSKA PRÁCA Bratislava 2011 Roman Kukumberg

SAEAUT SNMP OPC Server

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE Fakulta informatiky a informačných technológií STU Ústav počítačových systémov a sietí ZADANIE SEMESTRÁLNE

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY Pouºitie teórie extrémnych hodnôt vo finan níctve DIPLOMOVÁ PRÁCA Bratisla

Manuál pre nastavenie tlače z VRP Bluetooth, USB tlačiarne Bluetooth, USB tlačiarne Manuál pre nastavenie tlače -1-

Vizualizace geometrických algoritmů

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY Optimálne navrhovanie experimentov DIPLOMOVÁ PRÁCA 2012 Bc. Samuel Zmeko

Microsoft Word Nextra_ADSLink.doc

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY STRIEBORNÁ EKONOMIKA Diplomová práca Bratislava 2012 Bc. Zuzana Benkovská

aplikácia do mobilého telefónu na stiahnutie digitálneho tachografu

SK_mTransfer_Okamzita_notifikacia_ indd

Manuál pre nastavenie tlače z VRP tlačiarní bluetooth Bluetooth Manuál pre nastavenie tlače z VRP tlačiarní -1-

Prístupový kontrolér E inbio 16/260/460 Návod na použitie Návod na použitie Prístupový systém Kontrolér E inbio 16/260/460 Strana 1

Princípy tvorby softvéru Perzistencia, databázy

Identity Lifecycle Management

Manuál pre nastavenie tlače z VRP elio m500 Elio m500 Manuál pre nastavenie tlače -1-

Používateľská príručka Obsah Používateľská príručka... 1 Administrácia servera... 2 FTP... 2 Remote Desktop... 3 Administrácia databáze:... 3 Spusteni

2

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY UƒENIE INVARIANTNÝCH SENZO-MOTORICKÝCH REPREZENTÁCIÍ POHYBOV UCHOPOVANIA P

000____OBAL1-ZZ s Eurom.vp

Princípy tvorby softvéru Agile, Lean, Lean Startup

SPARK Stručný návod na obsluhu V1.6

Snímka 1

U N I V E R Z I T A K O M E N S K É H O Fakulta matematiky, fyziky a informatiky Katedra informatiky Vybrané kapitoly z teoretickej informatiky-ii Rie

DAHUA WEBOVÉ ROZHRANIE 1

PL_FMS5713_004_

RIMI-NABDA, s.r.o. Zabezpečovací systém SecoLink RIMI NABDA, spol. s r.o. ul. Z. Kodálya 1421/ Sládkovičovo IČO: , DIČ:SK O

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY MODELOVANIE PRÍJMOV A VÝDAVKOV NA ZDRAVOTNÚ STAROSTLIVOS Diplomová práca B

Vzt'ah tenzorov T ij a σ ij v mechanike tekutín Marián Fecko KTF&DF, FMFI UK, Bratislava Ciel'om je pozriet' sa vzt'ah tenzorov T ij a σ ij. Oba súvis

9. Elastické vlastnosti kry²tálov Cie om tejto predná²ky je zhrnú základné poznatky z mechaniky kontinua. Úlohou je ur i, ako sa deformuje daný kus lá

Počítačové siete DOCSIS

iot business hub whitepaper isdd_em_New.pdf

Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁ SKÁ PRÁCE Estera Vörösová Stochastické modely pro posloupnosti nervových impuls Katedr

Pripojenie sa na počítač a ovládanie vzdialenej obrazovky cez CM Remote

Prenosový kanál a jeho kapacita

Biharmonická rovnica - ciže co spôsobí pridanie jedného laplasiánu

C-Monitor WIN klient pre verziu 2.8

Finančné riaditeľstvo Slovenskej republiky 9/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor/Technik Inf

FAQ

DP.pdf

(Microsoft Word - Registr\341cia \372\350tu Hik-Connect.docx)

Spustenie založenej VM mimo vmware ESX

Finančné riaditeľstvo Slovenskej republiky 10/ORP/2019/IM Stiahnutie identifikačných a autentifikačných údajov pri ORP - rola Administrátor Informácia

Spustenie skonvertovanej C-Image zálohy v MS Virtual PC

Návod na obsluhu CompactIO 1

Princípy tvorby softvéru Programovacie paradigmy

Tue Oct 3 22:05:51 CEST Začiatky s jazykom C 2.1 Štruktúra programu Štruktúra programu by sa dala jednoducho popísať nasledovnými časťami, kto

INTERNET BANKING Práca s tokenom VŠETKO, ČO JE MOŽNÉ with.vub.sk, Bank of

Microsoft Word - DEOV.doc

Podmienky prijímacieho konaniapre šk. rok

XXVI b 07 Navrh VZN granty spojene.pdf

UNIVERZITA KOMENSKÉHO V BRATISLAVE FAKULTA MATEMATIKY, FYZIKY A INFORMATIKY ANALÝZA A NÁVRH NUMERICKÝCH ALGORITMOV NA RIE ENIE NELINEÁRNYCH ROVNÍC BLA

Manuál Pager 4.cdr

Blood Glucose Monitoring System Copyright Ascensia Diabetes Care Holdings AG. All rights reserved. diabetes.ascensia.com

fm 2012 a predajňa.doc

Experimenty s ekonomickAmi princApmi

INTERNET BANKING Ako zrealizovať hromadný prevod VŠETKO, ČO JE MOŽNÉ with.vub.sk, Bank of

Control no:

portál scientia.sk

PoĊítaĊová sieť

Microsoft Word - Novinky_2012_2.doc

Blood Glucose Monitoring System Copyright Ascensia Diabetes Care Holdings AG. All rights reserved. diabetes.ascensia.com

iTENDER - výpis tendra id:

Prehľad pedagogickej činnosti Ing. Martin Gulan, PhD. Prehľad pedagogickej činnosti na vysokej škole a prehľad dosiahnutých výsledkov v tejto činnosti

1 Portál pre odborné publikovanie ISSN Fyzikálny model stroja na delenie materiálov pre výskum sieťových riadiacich systémov Murgaš Ján Elek

Predmet: Počítačové systémy a siete Charakteristika predmetu Žiak sa oboznámi sa so základným princípom fungovania počítača, rozvinie koncept Von Neum

GEODETICKÝ A KARTOGRAFICKÝ ÚSTAV BRATISLAVA Chlumeckého 4, Bratislava II Obsah 1. Export údajov ZBGIS do CAD formá

PowerPoint Presentation

VTO1210C-X Užívateľský manuál Užívateľský manuál VTO1210 C-X

Pozvánka na VS2016 a Prehliadku prác mladých

AerobTec Device Terminal Zobrazovacie zariadenie a multimeter pre modelárov AerobTec Device Terminal Užívateľský manuál 1

SLOVENSKÁ TECHNICKÁ UNIVERZITA V BRATISLAVE FAKULTA INFORMATIKY A INFORMAČNÝCH TECHNOLÓGIÍ Metodika archivácie verzií HW Tímový projekt Stratos FIIT M

Programujeme krok za krokom prvú mobilnú aplikáciu v AI2

SF_Roger_Roger_little Manual 2017 SK 04.indd

Viacrozmerné úlohy RBC-typu

Univerzita Karlova v Prahe Matematicko - fyzikálna fakulta Bakalárska práca Veronika Betíková tatistické prístupy modelovania stratovosti pri zlyhaní

iTENDER - výpis tendra id:

Univerzita Komenského v Bratislave Fakulta matematiky, fyziky a informatiky Katedra aplikovanej matematiky a ²tatistiky Hodnotenie výkonnosti portfóli

SKPOS

Microsoft Word - prirucka_katedry_nova

Autoregresné (AR) procesy Beáta Stehlíková Časové rady, FMFI UK Autoregresné(AR) procesy p.1/22

Prepis:

Slovenská technická univerzita Fakulta elektrotechniky a informatiky Mosquitto Telemetry Transport protokol pre IoT Tímové zadanie z predmetu Inteligentné Mechatronické Systémy Zimný semester 2017 Andrej Bielik, 72780 2. ro ník ING Michal Grega, 72815 ÚAMT FEI STU Peter Halász, 72816

Obsah 1 Základné vlastnosti MQTT 2 1.1 Princíp komunikácie pomocou MQTT protokolu......... 4 1.2 Ideológia pri navrhovaní MQTT komunikácie........... 5 2 Technické vlastnosti MQTT 7 2.1 Topics/Subscritions.......................... 7 2.2 Quality of sevice........................... 8 2.3 Retained messages (Zachované správy)............... 8 2.4 Clean session/durable connection.................. 8 2.5 Wills (Závete)............................. 8 3 Praktický príklad 1: Rozsvecovanie LED-ky 9 4 Praktický príklad 2: Riadenie servo-motora 13 5 Zdroje 15 1

1 Základné vlastnosti MQTT Mosquitto Telemetry Transport protokol (MQTT ) je sie ový, komunika ný protokol, ktorý na výmenu dát medzi zariadeniami pouºíva princíp publish/subcribe. V minulosti sa MQTT protokol nazýval MQ Integrator SCADA Device protokol. MQTT protokol je navrhnutý tak, aby bol ahký, jednoduchý a nenáro ný na implementáciu. Charakteristickou vlastnos ou protokolu MQTT je to, ºe jeden server môºe obsluhova ve ké mnoºstvo klientov, ktorí so serverom komunikujú a sú s ním spojení. V aka týmto vlastnostiam je moºné protokol MQTT pouºíva v obmedzených prostrediach a tieº v sie ach, ktoré disponujú nízkou ²írkou pásma, obmedzenými moºnos ami spracovania, malými pamä ovými kapacitami, a vysokou latenciou. Návrh MQTT minimalizuje poºiadavky na ²írku pásma siete a zabezpe uje spo ahlivos doru enia pri posielaní dát medzi serverom a klientom. Postupom asu, ako sa technológia vyvíja, stále viac a viac zariadení sa medzi sebou komunikuje cez internet, o sa v sú asnosti nazýva Internet Of Things (Internet vecí alebo skrátene IoT ). Snahou je vytvori plne autonómnu komunikáciu medzi zariadeniami pre zvý²enie ich efektivity. V aka MQTT protokolu je moºné spoji v²etky vzdialené zariadenia, medzi ktorými je moºná výmena informácií a dát. Vlastnos, ktorú MQTT podporuje, XR Component of WebSphere MQ, dovo uje zariadeniam, ktoré beºia na okraji sie ového pripojenia, komunikova s aleko dostupnými zariadeniami efektívne a bezpe ne. Patria sem napríklad zariadenia ako: inteligentné mera e energie, telefóny, autá, vlaky, satelitné stanice a zdravotnícke zariadenia. Tieto zariadenia je moºné prepoji a sú schopné posiela si dáta cez senzory do centrálnych systémov. Vstavané senzorové prístroje dokáºu mera stav zariadení a sú schopné vymie a si tieto dáta medzi inými zariadeniami. V aka tomu je moºné analyzova a reagova na dáta z rôznych prístrojov v reálnom ase. Týmito zariadeniami môºu by napríklad inteligentné zariadenia, ktoré môºu ma nízku ²írku pásma. Typickým zariadením sú ipy rádio-frekven nej identikácie (skrátene RFID). Tieto ipy sú beºne zakomponované napríklad v ID kartách. Pouºívanie takéhoto malého hardvéru, ktorý môºe vyuºíva protokol MQTT na pripojenie k internetu, umoº uje kaºdodenným objektom prená²a dáta z jedného do druhého. Tieto drobné zariadenia potom publikujú správy, ktoré pouºívajú protokol MQTT a sú prijaté subscriber-om a môºu spusti nejakú udalos na inom zariadení. Niektoré ve mi uºito né príklady, ktoré vyuºívajú protokol MQTT môºu by pouºívané na hardvérových ipov na prenos informácií a monitorovanie zdravotnej starostlivosti. Protokol MQTT funguje na princípe machine-to-machine (skrátene M2M ) komunikácie. Na obrázku 1 je vidno príklad tejto komunikácie. 2

Obr. 1: Príklad vyuºitia MQTT protokolu Robustný produkt WebSphere MQ poskytuje bezpe né funkcie pre zasielanie správ, ktoré môºu by posielané medzi ve kým mnoºstvom klientov a inými zariadeniami v rámci nejakého podniku, alebo tam, kde to prostredie dovo uje. WebSphere MQ s MQTT umoº uje ²kálovate nos, spo ahlivos a bezpe nos na ²irokej ²kále platforiem. Základná architektúra MQTT je architektúra Pub/Sub, zatia o WebSphere MQ môºe poskytova bu správu typu Pub/Sub alebo doru enie správy z jedného miesta na druhé. Správy prijaté od klientov MQTT je moºné presmerova na fronty správ, ktoré sú následne pouºité na spracovanie nejakých poºiadaviek. Za lenením funkcie MQ do protokolu MQTT, sa správy z MQTT protokolu prekonvertujú na správy MQ s vyuºitím bezpe ného doru enia MQ na overenie, i sa správy doru ujú raz, a raz bez oh adu na chyby alebo problémy so sie ou. Architektúru WebSphere je moºné vidie na obrázku 2. 3

Obr. 2: WebSphere architektúra 1.1 Princíp komunikácie pomocou MQTT protokolu Mosquitto Telemetry Transport protokol (skrátene MQTT ) je komunika ný protokol vyuºívajúci Publisher/Subscriber hierarchiu na báze posielania správ (messages), ktoré su priradené témam (topic). Princíp komunikácie pomocou MQTT protokolu je postavený na publikovaní správy publisher-om a odoberaní celých topick-ov subscriber-om. V²etci klienti, i publikovatelia alebo odberatelia sú pripojený k takzvanému sprostredkovate- ovi (broker), ktorý pôsobí ako jednoduché rozhranie ku ktorému je jednoduché sa pripoji. Preto je jednoduché pridáva publisher-ov. Príklad takejto hierarchie môºeme vidie na obrázku 3. 4

Obr. 3: Hierarchia MQTT Ako vidno, klient A je publisher, ktorý publikuje informáciu o teplote a klienti B a C sú odberatelia, ktorý túto informáciu dostanú. 1.2 Ideológia pri navrhovaní MQTT komunikácie MQTT protokol bol navrhnutý pre siete s malou ²írkou pásma a vysokou latenciou, preto je jeho dizajn zameraný na jednoduchos a minimalizáciu potrebných dát. Preto boli zadenované nasledujúce princípy, ktoré je odporú ané dodrºiava. 1. Jednoduchos, je potrebné aby celá ²truktúra bola jednoduchá a jednoducho implementovate ná, aby sa dala ahko zakomponova do iných rie²ení. 2. Publish/Suscribe messaging. Uºito né pre senzorové aplikácie, umoº uje zariadeniam prís online a publikova dáta bez toho aby boli predom de- nované v ²truktúre. 3. Nulová administrácia. Treba sa správa rozumne pri odpovediach na ne- akané udalosti a treba zabezpe i aby sta ilo, ºe aplikácie fungujú. Na príklad dynamicky vytvára topick-y ke je treba. 4. Minimalizova svoju prezenciu na sieti. Treba posiela len tie dáta, ktoré sú potrebné. 5. Treba o akáva asté preru²enia alebo nestabilitu spojenia a o²etri to. Na príklad pouºitím závete. 6. Je potrebné zadenova o je a o nieje permanentné v ²truktúre siete a pod a toho nastavi daných klientov. 5

7. Treba o akáva, ºe klientske aplikácie majú k dispozícií ve mi málo zdrojov na spracovanie údajov. 8. Tam kde je to moºné, je dobré zadenova tradi né Quality of service. 9. Data agnostic. netreba presne denova formát dát, dá sa osta exibilným. 6

2 Technické vlastnosti MQTT 2.1 Topics/Subscritions V²etky správy sú publikované v takzvaných témach, alebo topic-och. Tieto topic-y nepotrebujeme nakongurova alebo inak dopredu denova, publikovanie správy je dostato né. Topick-y majú podobnú ²truktúru ako lesystem-y, kde sú jednotlivé dáta kategorizované a delené pomocou znamienka /. Na príklad ak máme viacero po íta ov, ktoré pôsobia ako publisher-i a posielajú správy o aktuálnej teplote ich diskov, tak hierarchia tohoto topic-u vyzerá následovne. sensor/computer_name/temperature/harddrive_name Odberatelia si vedia vytvori subscrition, ktorá môºe by na konkrétny topic, v takom prípade budú dostáva len správy s danými dátami. Taktieº je moºné vytvori subscription obsahujúce viacero informácií a to pomocou ²peciálnych znakov. peciálne znaky sú dva. + - je prvý znak, vyuºíva sa na získanie viacerých informácií z rovnakej úrovne. Napríklad ak chceme z predo²lého príkladu získa teploty v²etkých diskov v nami zvolenom po íta i, tak hierarchia odberate a bude vizera následovne. sensor/computer_name/temperature/+ Ak chceme získava túto informáciu zo v²etkých po íta ov, ktoré publikujú do tohoto topic-u tak pouºijeme takúto hierarchiu odberate a. sensor/+/temperature/+ Je potrebné denova celý topic. Týmto sa myslí, ºe v na²om príklade re azce ako sensor/+/temperature alebo sensor/+ nefungujú. # - je druhý znak, ktorý sa pouºíva na ozna enie v²etkých zostávajúcich levelov hierarchie a tým pádom musí vºdy by pouºitý na konci re azca. ƒiºe ak chceme z daného po íta a v na²om príklade v²etky údaje ktoré poskytuje, nielen teplotu disku, tak re azec bude vyzera následovne. sensor/computer_name/# V takom prípade je jedno aké al²ie informácie poskytuje alebo ko ko úrovní daná informácia má, pomocou tohoto re azca si ich vyºiadame v²etky. 7

2.2 Quality of sevice V MQTT si vieme vybra z troch úrovní Quality of Service (skrátene QoS), ktoré nám denujú ako ve mi sa broker/client snaºia o to, aby bola správa správne prijatá. Úrovne QoS sú následovné. 0: Broker/Client doru í správu raz a bez potvrdenia o doru ení. 1: Broker/Client doru í správu aspo raz a je potrebné potvrdenie o doru ení. 2: Broker/Client doru í správu práve raz s vyuºitím ²tvor-krokovej inicializácie komunikácie (Four step handshake) Správa má publisher-om danú maximálnu úrove QoS, ktorú si vie odberate vyºiada. ƒo znamená, ºe ak je správa publikovaná v úrovni QoS1, tak si ju vedia odberatelia od broker-a vyºiada v úrovni QoS0 a QoS1. Ak si odberate predsa len vyºiada túto správu vo vy²²ej úrovni, v na²om príklade na príklad QoS2, tak predanie informácie prebehne, ale len v najvy²²ej publikovanej úrovni, v na²om prípade QoS1. 2.3 Retained messages (Zachované správy) Kaºdá správa sa dá nastavi tak, aby po odoslaní danej správy v²etkým odberate om ostala táto správa v pamäti broker-a a to pomocou retain status-u. Tým pádom ak príde nový klient, ktorý sa stane odberate om topic-u, ktorý obsahuje túto správu, tak po vyºiadaní tohoto topic-u bude poskytnutá aj táto uloºená správa. 2.4 Clean session/durable connection Ke sa pripojí klient nastaví si údaj o clean session. Ak je tento údaj nastavený na false, tak je toto pripojenie brané ako stále (durable). To znamená, ºe ak sa tento klient odpojí, tak informácie o jeho odberoch a v²etky správy s QoS1 a QoS2 budú automaticky uloºené v pamäti broker-a pokým sa tento klient nepripojí spä a neprevezme tieto správy. Ak je tento údaj nastavený na true, tak sú v²etky údaje o tomto klientovi po jeho odpojení odstránené. 2.5 Wills (Závete) Ke sa klient pripojí k broker-ovi, vie ho informova, ºe má závet (will alebo last will). Will je správa, ktorá sa publikuje v prípade, ºe sa tento klient ne akane odpojí. Táto správa má takú istú ²truktúru ako ostatné spravy a taktieº ako ostatné správy má topic, Qos a retain status. 8

3 Praktický príklad 1: Rozsvecovanie LED-ky V tomto príklade vyuºívame aplikáciu a free hosting broker-a zo stránky https://test.mosquitto.org/. Aplikácia je volne dostupná na Google Store pod názvom IoT MQTT Dashboard. alej vyuºívame Raspberry Pi a LED-ky v troch rôznych farbách ( ervenú, ºltú a zelenú). Vytvorili sme MQTT komunikáciu, ktorá má dvoch klientov a broker-a. Prvým klientom je aplikácia v ktorej sme si vytvorili publikovanie topic-u, ktorý sme nazvali led. Nastavili sme, ºe tento topic môºe ma hodnoty red, yellow, green alebo none. Tvorbu moºno vidno na obrázku 4. Obr. 4: Vytvorenie publikácie topic-u v aplikácií IoT MQTT Dashboard Ako vidno, QoS sme nastavili na 0, a zachovanie správy (retained messages) na false, iºe správa sa po odoslaní odberate om nezachová. Vytvoril sa nám teda klient, ktorému vieme nastavi o publikuje. Interface na pouºívanie tohoto klienta vidno na obrázku 5. 9

Obr. 5: Publikovanie správy v aplikácií IoT MQTT Dashboard Vieme teda publikova nami ºiadanú správu jednoduchým stla ením tla idla zodpovedajúcemu na²ej poºadovanej hodnote. Ako uº bolo spomenuté, ná² broker beºí na serveri poskytovaným na stránke https://test.mosquitto.org/ a táto aplikácia sa k nemu automaticky pripája. Ako klienta, ktorý pôsobí ako odberate vyuºívame Raspberry Pi. Pre ho sme vytvorili skript v jazyku Python. V tomto prípade nám sta ia dve funkcie a to na pripojenie na server a na prijatie správy. Toto je funkcia na pripojenie klienta k broker-ovi: # The c a l l b a c k f o r when the c l i e n t r e c e i v e s a CONNACK # response from the s e r v e r. def on_connect ( c l i e n t, userdata, rc, s e l f ) : print ( "Connected with r e s u l t code "+str ( rc ) ) # S u b s c r i b i n g in on_connect ( ) means t h a t i f we l o s e the # connection andreconnect then s u b s c r i p t i o n s w i l l be # renewed. c l i e n t. s u b s c r i b e ( " l e d " ) Ako vidno, denovali sme si funkciu on_connect, ktorá pri spustení odberate a aby po úval na topic led. al²ia funkcia nám denuje ako sa spracuje uº prijatá správa. 10

# The c a l l b a c k f o r when a PUBLISH message i s r e c e i v e d from the s e r v e r. def on_message ( c l i e n t, userdata, msg ) : print (msg. t o p i c+" "+str (msg. payload ) ) i f msg. payload == " yellow " : l e d. on ( ) i f msg. payload == " red " : led1. on ( ) i f msg. payload == " green " : led2. on ( ) i f msg. payload == "none" : l e d. o f f ( ) led1. o f f ( ) led2. o f f ( ) V tejto funkcií na základe prijatej správy zapíname alebo vypíname LED-ky, ktoré sme si dopredu denovali a to nasledovne. import paho. mqtt. c l i e n t as mqtt from g p i o z e r o import LED l e d = LED( 4 ) led1 = LED( 5 ) led2 = LED( 6 ) Tu vidno, ºe sme si importovali paho.mqtt.client ako mqtt a zadenovali GPIO pre LED-ky. Teraz nám len zostáva to celé spusti. c l i e n t = mqtt. C l i e n t ( ) c l i e n t. on_connect = on_connect c l i e n t. on_message = on_message c l i e n t. connect (" t e s t. mosquitto. org ", 1883, 60) # Blocking c a l l that p r o c e s s e s network t r a f f i c, d i s p a t c h e s c a l l b a c k s and # handles r e c o n n e c t i n g. # Other loop ( ) f u n c t i o n s are a v a i l a b l e that g i v e a threaded i n t e r f a c e and a # manual i n t e r f a c e. c l i e n t. loop_forever ( ) Najprv sme si zadenovali v²etky potrebné parametre ako client a potom sme sa cez client.connect() pripojili k broker-ovi, ktorý beºí na serveri, tak ako sme to uº vy²²ie spomínali. Nakoniec sme to e²te celé zaciklili, aby sme vedeli prijíma akúko vek zmenu pokým tento skript beºí. Zapojenie LED-iek vyzeralo následovne. 11

Obr. 6: Zapojenie Raspberry Pi a LED-iek 12

4 Praktický príklad 2: Riadenie servo-motora Druhým príkladom ktorý sme si pripravili je riadenie polohy servo-motora. V tomto prípade sme nevyuºívali server ale v²etko beºalo lokálne. Ako publisher-a sme pouºívali len jednoduchý príkaz v príkazovom riadku a to nasledovne. mosquitto_pub -h localhost -t servo -m servo Tento príkaz nám odoslal správu obsahujúcu slovo servo na topic servo. Tým pádom broker beºiaci na localhoste rozpoznal nový topic a správu, lebo ako bolo spomenuté, jediná potrebná inicializácia topic-u je poslanie správy do daného topic-u. Aj tentokrát vyuºívame Raspberry Pi ako odberate a a beºí na om skript pozostávajúci z troch funkcií. Prvou funkciu je uº v prvom príklade spomenutý on_connect, ktorý nám vytvorí odoberanie topic-u servo. # The c a l l b a c k f o r when the c l i e n t r e c e i v e s a CONNACK # response from the s e r v e r. def on_connect ( c l i e n t, userdata, rc, s e l f ) : print ( "Connected with r e s u l t code "+str ( rc ) ) # S u b s c r i b i n g in on_connect ( ) means t h a t i f we l o s e # the connection and reconnect then s u b s c r i p t i o n s # w i l l be renewed. c l i e n t. s u b s c r i b e ( " servo " ) Druhou funkciu je spravovanie prijatej správy, v tomto prípade ak príde správa obsahujúca slovo servo tak sa spustí funkcia servo. # The c a l l b a c k f o r when a PUBLISH message i s r e c e i v e d from the s e r v e r. def on_message ( c l i e n t, userdata, msg ) : print (msg. t o p i c+" "+str (msg. payload ) ) i f msg. payload == " servo " : servo ( ) Tretia funkcia, ktorú sme si denovali je teda funkcia servo() Tá povolí uºívate ovi desa krát zada poºadovaný uhol, do ktorého sa má servo-motor vychýli. def servo ( ) : for i in range ( 1, 1 0 ) : a = input ( "Write an angle : (0 180)" ) angle = a/18 + 3 pwm. s t a r t ( angle ) ) 13

Teraz je potrebné denova si výstupy na ovládanie serva. import paho. mqtt. c l i e n t as mqtt import RPi. GPIO as GPIO GPIO. setmode (GPIO.BOARD) GPIO. setup (11,GPIO.OUT) pwm = GPIO.PWM(11,50) pwm. s t a r t ( 3 ) A na koniec to celé spustíme a taktieº uvedieme do cyklického chodu. c l i e n t = mqtt. C l i e n t ( ) c l i e n t. on_connect = on_connect c l i e n t. on_message = on_message c l i e n t. connect ( " l o c a l h o s t ", 1883, 60) # Blocking c a l l t h a t p r o c e s s e s network t r a f f i c, d i s p a t c h e s c a l l b a c k s and # handles r e c o n n e c t i n g. # Other loop () f u n c t i o n s are a v a i l a b l e t h a t g i v e a threaded i n t e r f a c e and a # manual i n t e r f a c e. c l i e n t. loop_forever ( ) Zapojenie taktieº moºno vidno na obrázku 7. Obr. 7: Zapojenie Raspberry Pi a serva 14

5 Zdroje https://github.com/mqtt/mqtt.github.io/wiki http://mosquitto.org/man/mqtt-7.html https://test.mosquitto.org/ https://play.google.com/store/apps/details?id=com.thn.iotmqttdashboard 15

Zdrojové kódy server-led.py import paho. mqtt. c l i e n t as mqtt from g p i o z e r o import LED l e d = LED( 4 ) led1 = LED( 5 ) led2 = LED( 6 ) # The c a l l b a c k f o r when the c l i e n t r e c e i v e s a CONNACK response from the s e r v e r. def on_connect ( c l i e n t, userdata, rc, s e l f ) : print ( "Connected with r e s u l t code "+str ( rc ) ) # S u b s c r i b i n g in on_connect ( ) means t h a t i f we l o s e the connection and # reconnect then s u b s c r i p t i o n s w i l l be renewed. c l i e n t. s u b s c r i b e ( " l e d " ) # The c a l l b a c k f o r when a PUBLISH message i s r e c e i v e d from the s e r v e r. def on_message ( c l i e n t, userdata, msg ) : print (msg. t o p i c+" "+str (msg. payload ) ) i f msg. payload == " yellow " : l e d. on ( ) i f msg. payload == " red " : led1. on ( ) i f msg. payload == " green " : led2. on ( ) i f msg. payload == "none" : l e d. o f f ( ) led1. o f f ( ) led2. o f f ( ) c l i e n t = mqtt. C l i e n t ( ) c l i e n t. on_connect = on_connect c l i e n t. on_message = on_message c l i e n t. connect ( " t e s t. mosquitto. org ", 1883, 60) # Blocking c a l l t h a t p r o c e s s e s network t r a f f i c, d i s p a t c h e s c a l l b a c k s and # handles r e c o n n e c t i n g. # Other loop () f u n c t i o n s are a v a i l a b l e t h a t g i v e a threaded i n t e r f a c e and a # manual i n t e r f a c e. c l i e n t. loop_forever ( ) 16

servo.py import paho. mqtt. c l i e n t as mqtt import RPi. GPIO as GPIO GPIO. setmode (GPIO.BOARD) GPIO. setup (11,GPIO.OUT) pwm = GPIO.PWM(11,50) pwm. s t a r t ( 3 ) def servo ( ) : for i in range ( 1, 1 0 ) : a = input ( "Write an angle : (0 180)" ) angle = a/18 + 3 pwm. s t a r t ( angle ) # The c a l l b a c k f o r when the c l i e n t r e c e i v e s a CONNACK response from the s e r v e r. def on_connect ( c l i e n t, userdata, rc, s e l f ) : print ( "Connected with r e s u l t code "+str ( rc ) ) # S u b s c r i b i n g in on_connect ( ) means t h a t i f we l o s e the connection and # reconnect then s u b s c r i p t i o n s w i l l be renewed. c l i e n t. s u b s c r i b e ( " servo " ) # The c a l l b a c k f o r when a PUBLISH message i s r e c e i v e d from the s e r v e r. def on_message ( c l i e n t, userdata, msg ) : print (msg. t o p i c+" "+str (msg. payload ) ) i f msg. payload == " servo " : servo ( ) c l i e n t = mqtt. C l i e n t ( ) c l i e n t. on_connect = on_connect c l i e n t. on_message = on_message c l i e n t. connect ( " l o c a l h o s t ", 1883, 60) # Blocking c a l l t h a t p r o c e s s e s network t r a f f i c, d i s p a t c h e s c a l l b a c k s and # handles r e c o n n e c t i n g. # Other loop () f u n c t i o n s are a v a i l a b l e t h a t g i v e a threaded i n t e r f a c e and a # manual i n t e r f a c e. c l i e n t. loop_forever ( ) 17