Internet Of Things е изцяло насочен към използването на физически обекти и възможността им да комуникират помежду си. Можете да накарате домашната си пощенска кутия да ви каже какви писма са пристигнали, да направите така, че прозорците ви да се затворят сами, когато започне да вали или пък миялната да се спира сама, когато някой влезе в банята. MQTT или MQ Telemetry Transport е отворен протокол, който позволява на устройствата да изпълняват команди с помощта на съобщения.
С MQTT сравнително лесно можете да настройвате програми на машина с инсталиран Linux, които да събират информация и да я публикуват в мрежата, като я подават на малки, ограничени откъм ресурси микроконтролери, които да видят тази информация и да извършат командата. Наскоро появилите се WiFi микроконтролери, като например ESP8266 правят цялото това нещо изключително достъпно и вълнуващо.
Преимуществото на това да използвате съобщения е, че устройствата могат да „слушат“ за интересни неща и да изпратят всякаква информация, която смятат за важна. Също така, няма нужда всяко устройство да знае за другите свързани в мрежата. Например, станцията за времето, може да направи публикация – каква е температурата, влажността, скоростта и посоката на вятъра и останалите „неща“ могат да се абонират, за да се възползват от информацията. Въпреки че има много начини за изпращане на съобщения през Linux, MQTT би ви позволил да пратите съобщения към и от своите Arduino или mbed смарт устройства. Ако сте заинтересовани да си купите IoT или smart device, най-вероятно ще искате да знаете дали messaging използва open standard, също като MQTT.
MQTT e направен от OASIS и е open standard. Много имплементации на MQTT са налични, включително и този, върху който ще се фокусираме повече – Mosquitto. Mosquitto може да бъде инсталиран на Fedora23 използвайки първата команда за инсталиране и втората за стартиране:
#dnf install mosquitto -devel
#systemctl start mosquitto
Програмите се абонират към съобщенията, от които се интересуват и програмите могат да публикуват информативни съобщения към клиентите, така че да бъдат видени. За да заработи всичко това, MQTT използва брокер процес, който всъщност е централен сървър, който следи кой какво иска да чуе и изпраща съобщенията към съответните клиенти.
За да се установи кои клиенти от кои съобщения се интересуват, всяко съобщение има тема, например: /sensors/weather/temperature. Един клиент може да направи request само към съобщението с температурата или да използва wild карти, за да се абонира към цяла колекция от съобщения. Например, /sensors/weather/# ще чува всички съобщения, които започват с /sensors/weather. Наклонената черта се използва както при path-а на файловете и папките, с които работим ежедневно.
Следните 2 команди показват колко лесно може да бъде използването на MQTT. Двете команди трябва да бъдат в различни прозорци, като първо трябва да бъде execute-нат mosquitto_sub.
Когато run-нете mosquitto_pub, трябва да виждате abc на терминала, който run-ва mosquitto_sub.
-t опцията определя темата (topic-а), a -м към mosquitto_pub дава съобщението да изпраща.
$ mosquitto_sub -t /linux.com/test1
$ mosquitto_pub -t /linux.com/test1 -m abc
Уместен въпрос би бил: „Какво ще стане ако run-нем първо mosquitto_pub?“
Нищо лошо, но mosquitto_sub изобщо няма да види съобщението „abc”. Ако topic-ът беше текущата температура, и ако се публикува всеки час. Най-вероятно не бихте искали клиентът да чака толкова дълго, за да узнае текущата температура. Можете да направите така, че станцията за времето да публикува температурата на по-чести интервали, например на всеки 5 минути или 5 секунди. Но от друга страна, няма смисъл да изпращате толкова често съобщения за нещо, което почти не се променя за малък период от време.
За да настройвате таймингът, MQTT има запазваща опция (retain option). Автоматично се set-ва, когато публикувате съобщение използвайки -r и казва на брокера да запази тази стойност и да я report-не веднага към всички нови клиенти, които се абонират за съобщенията към самия topic. Ползвайки retain, можете да използвате publish командата посочена първа по-долу. След това, веднага щом mosquitto_sub се изпълни, ще можете да видите def.
$ mosquitto_pub -t /linux.com/test2 -r -m def
$ mosquitto_sub -t /linux.com/+
def
Има много и различни опции за работа с процесите на изпращане и получаване на съобщения (-q опциите се използват за избор на това какъв QoS quality of service бихме искали за тези съобщения), както и поправки на евентуални проблеми, които биха изникнали, като например програмата да спре да работи.
Има много интересни функции и команди, които бихме искали да ви покажем, но най-добре е да ги видите в github за ESP8266 Arduino. Или просто да дойдете на събитието ни на тема „Комуникация между Internet Of Thing чрез MQTT“, на която ще ви разкажем много и различни начини за това как да работите с MQTT.
Автор: Даниел Иванов
Визия: idg.bg