Что такое MQTT и зачем он умному дому
Знакомимся с протоколом, на котором держится большинство умных домов.
MQTT — лёгкий протокол обмена сообщениями по модели «публикация/подписка»: устройства шлют сообщения в топики, а получают их через посредника — брокера.
Чем плох HTTP для умного дома
HTTP-запрос — это «спросил и получил ответ». Но умному дому нужно другое: датчик должен сам сообщать об изменении, а лампа — мгновенно получать команду, не опрашивая сервер каждую секунду. Постоянные HTTP-опросы тратят энергию и трафик. MQTT решает это: соединение держится открытым, и сообщения летят в обе стороны мгновенно и экономно.
Модель publish/subscribe
В центре стоит брокер — сервер-посредник. Устройства не общаются напрямую:
Датчик --publish--> [ топик: home/temp ] --> БРОКЕР
|
+--subscribe--> Дисплей
+--subscribe--> Сервер
+--subscribe--> ТелефонДатчик публикует температуру в топик home/temp. Все, кто подписан на этот топик, мгновенно получают сообщение. Отправитель не знает и не заботится, кто слушает.
Топики — как папки
Топик — это иерархический путь, похожий на адрес:
| Топик | Смысл |
home/livingroom/temp | температура в гостиной |
home/kitchen/light | свет на кухне |
home/+/temp | температура в любой комнате (+ — wildcard) |
home/# | всё про дом (# — всё ниже) |
Разбор топика — на чистом Python
Логику маршрутизации сообщения по топику можно проверить в браузере:
def route(topic, payload):
parts = topic.split("/") # home/livingroom/light
if len(parts) == 3 and parts[2] == "light":
room = parts[1]
action = "включить" if payload == "ON" else "выключить"
return f"{action} свет в комнате '{room}'"
return "неизвестная команда"
print(route("home/livingroom/light", "ON"))
print(route("home/kitchen/light", "OFF"))Вывод:
включить свет в комнате 'livingroom' выключить свет в комнате 'kitchen'
Как работает под капотом
Клиент устанавливает с брокером одно постоянное TCP-соединение и держит его открытым «лёгким» способом (периодически шлёт крошечные пакеты-пинги, чтобы связь не оборвалась). Когда кто-то публикует в топик, брокер мгновенно рассылает сообщение всем подписчикам этого топика. Сами сообщения очень компактны — заголовок MQTT занимает считанные байты, поэтому протокол работает даже на медленных каналах и экономит батарею.
Частые ошибки
- Путать MQTT с прямой связью устройств. Всё идёт через брокер; без него обмена нет.
- Считать, что publish гарантированно дойдёт. Уровень доставки задаёт параметр QoS; по умолчанию гарантий минимум.
- Слишком общие топики. Подписка на
#завалит устройство лишними сообщениями.
Итог
- MQTT — лёгкий протокол publish/subscribe для интернета вещей.
- Брокер — посредник; устройства публикуют в топики и подписываются на них.
- Топики иерархичны;
+и#— шаблоны подписки. - Постоянное соединение делает обмен мгновенным и экономным.