Что такое MQTT (IoT, 'умные' дома) --- объяснение короче 120 строк или 800 слов

Читал как-то про MQTT, IoT, всякие "умные" дома (как будто бы где-то бывают и "глупые" дома). Боже, ну как же хреново люди пишут, а? Не рукоподаю им!

Тут счас я напишу самое короткое и понятное и внятное введение в MQTT.

Историю компьютеров полезно знать. В 1970-х уже были игры текстовые, надо было бродить по всяким подземельям.

Потом появились компьютерные сети, и игры стали многопользовательскими, особенно в 1980-х: MuD.

В этих играх можно было чатиться. Вы заходите в комнату (виртуальную), пишете команду вроде "say [to all] hello", и те игроки что рядом, слышат/читают вас. Могут ответить.

И тут в эти игры стали приходить люди, которым интересно было потрепаться со знакомыми, но сама игра им была не интересна. Комнаты стали вроде клубов, по интересам и темам. Туда приходили игроки только ради чата.

В конце 1980-х появились IRC-чаты, как те MuD-ы, только уже без игровой состовляющей. В 1990-х IRC юзали полным ходом. Кстати, юзают и сейчас (Freenode, потом Libera).

IRC было (и есть) очень примитивным, с кучей проблем. Современная всем известная инкарнация -- discord, где все эти проблемы вроде бы исправили, но добавили много богомерзкого и тормозного visual candy и отвлекающих popup-ов. (Может быть и slack тоже, но я его оч.мало юзал.) Но в discord даже есть команды как у IRC (со слеша начинаются которые).

Одна из попыток пофиксить проблемы IRC (и прочих мессенджеров вроде ICQ) был XMPP/Jabber. Мало кто знает, но например google talk работал на этом протоколе. Ваш покорный слуга, когда еще юзал все эти мессенджеры в нулевых годах и в начале 2010-х, имел Miranda IM, и через XMPP можно было коннектится к google talk, facebook, vkontakte и даже к ЖЖ. Т.е., для чата с публикой в facebook и vkontakte достаточно было XMPP-клиента. Коммерциализация долбанула по всем этим сервисам, и, как я знаю, больше уже никто не позволяет к себе коннектится по этому протоколу. Но было удобно.

Еще надо вспомнить странноватый juick, популярный в быв.СССР, работающий на XMPP.

Так вот, ботнеты, насколько я знаю (гуглите сами, что это), в былые времена, могли контролироваться через IRC. Бот на зараженном компе логинится в IRC-чат, их там в комнате собирается тьма, и ботовод в чат постит команды для них. Что очень логично. Зачем изобретать велик, если можно где-то поднять IRC-сервер а боты пусть коннектятся? Протокол в IRC примитивный, да и библиотек хватало готовых. Для IRC хватало также и чатботов вроде eggdrop, который в отсутствии админов на канале делает какие-то действия, вроде бана за флуд, автоматической раздачи "опов", итд.

Ничего не напоминает? Ах да! И вот тут мы начинаем про MQTT.

MQTT это просто-напросто чат-сервер. А девайсы к нему подключающиеся --- вместо юзеров. Админ управляющий девайсами просто постит команды. Девайсы слушают. Команды могут постить и девайсы для других девайсов, опять, через чат-сервер.

Я понял это когда узнал что у MQTT есть такие термины как publish и subscribe. Это терминология взята из XMPP (хотя я не буду утверждать стопудово). Publish --- вместо поста в канал/комнату, subscribe вместо join-а в канал/комнату.

(Пинги в MQTT такие же как в IRC, впрочем, сложно их придумать как-то иначе.)

Всё это логично --- протокол XMPP откатан, прошел медные трубы и вообще создавался умными дядями с учетом былых граблей. К тому же когда разрабатывали его? Это конец 90-х, большинство инета работало на dial-up-е, так что учитывали плохую связь. Почему бы не использовать их опыт? С мелкими девайсами в IoT тоже связь не очень хорошая. Чай, не "интернет по оптике".

Topic в MQTT --- канал/комната. Вот и всё! Только в MQTT эти каналы могут быть вложенными, что логично, topic может быть вроде "дом/спальня/адский девайс за кучу денег/лампочка на девайсе".

И вот что еще отличает MQTT от чат-серверов --- QoS, чтобы видеть, не села ли батарейка в каком девайсе или не унесли ли его куда-то далеко за пределы работы wifi-роутера вашего.

А почему сервер в MQTT называют брокером? Уж не знаю, откуда растут ноги, однако эта терминология юзается и в netcat/ncat, юзая который вы можете поднять/запустить примитивный чат-сервер:

Connection Brokering

One of Ncat's most useful and unique abilities is called connection brokering.
A listening Ncat in broker mode accepts connections from multiple clients.
Anything received from one of the clients is sent back out to all the others.
In this way an Ncat broker acts like a network hub, broadcasting all traffic to
everyone connected.

Activate broker mode with the --broker option, which must be combined with
--listen. It wouldn't make sense for a client to be a broker. See the section
called “File Transfer” for details on using brokering to transfer files through
restrictive firewalls, and the section called “Chatting” for using brokering to
set up multi-user chat rooms. 

( src )

Считайте MQTT-сервак просто чат-сервером и сразу же всё становится на свои места, глаза открываются, ну итд.

Но производители и маркетологи иже с ними не могут юзать такую простую и понятную терминологию. Им же нужно набивать себе цену, и всем трындеть, что они создали что-то невероятно новое и космически сложное. Кто признает, что они сделали еще один примитивный чат-сервер, только лучше заточенный под мелкие девайсы? Поэтому юзают малопонятные buzz-words. Как раньше говорили у тебя лицо скучное, тебе денег никто не даст. Не рукоподаю!

Но протокол MQTT сознательно разработан примитивным, чтобы его могли юзать маломощные и оч.дешевые микроконтроллеры в оч.дешевых же девайсах.

(the post first published at 20250610, updated 12-jun-2025.)


List of my other blog posts.

Subscribe to my news feed,

Когда-то (перед 24-марта-2025) тут для комментов был скрипт на JS --- Disqus. Я его убрал --- он был слишком пёстрый, отвлекающий, анимированный, и слишком много рекламы там было. Никогда его не любил. Также, комменты не всегда появлялись (Disqus был глючный). Также, блог у меня слишком камерный --- не очень-то много людей мне тут пишут комменты. Так что я решил переключиться на модель что у меня уже была по крайней мере в 2020 --- присылаете мне комменты емейлом на blog at yurichev dot com (и не забудьте указать URL на этот пост в блоге) и я их сюда копи-пащу вручную и может быть отвечу.

Будем тусить так, будто бы сейчас ~1993-1996, в этом радикальном и бескомпромисно-примитивном блоге и сайте, в том стиле что был еще перед web1.0.