Проводник Mqtt, как использовать
Обновлено: 21.11.2024
Темы MQTT — это форма адресации, которая позволяет клиентам MQTT обмениваться информацией.
Темы MQTT имеют иерархическую структуру, аналогичную папкам и файлам в файловой системе, с использованием косой черты (/) в качестве разделителя.
С помощью этой системы вы можете создавать удобные и информативные структуры именования по вашему выбору.
- С учетом регистра
- используйте строки UTF-8.
- Должен состоять как минимум из одного символа.
За исключением темы $SYS, нет стандартной или стандартной структуры темы.
То есть в брокере по умолчанию не создаются темы, кроме темы $SYS.
Все темы создаются подписывающимся или публикующим клиентом и не являются постоянными.
Тема существует только в том случае, если клиент подписался на нее или у брокера есть сохраненные или последние сообщения, сохраненные для этой темы.
Тема $SYS
Это зарезервированная тема, которая используется большинством брокеров MQTT для публикации информации о брокере.
Это темы только для чтения для клиентов MQTT. Для этой структуры темы нет стандарта, но здесь есть руководство, которому следуют большинство реализаций брокера.
Я создал информационную панель с красным узлом, которая отслеживает тему $SYS и отображает изображение, как показано ниже:
Вот схема:
Подписка на темы
Клиент может подписаться на одну или несколько тем.
Примеры названий тем:
Действительные подписки на темы
Подписки на одну тему
- /
- /дом
- дом/комната/основной свет
- дом/комната/боковой свет
Использование подстановочных знаков темы
- дом/комната1/основной свет
- дом/комната1/сигнализация
- дом/гараж/основной свет
- дом/главная дверь
- дом/
- дом
- и т. д.
Подписка на тему house/+/main-light
- дом/комната1/основной свет
- дом/комната2/основной свет
- дом/гараж/основной свет
но не распространяется
- дом/комната1/боковой свет
- дом/комната2/боковой свет
Недействительные подписки на темы
Публикация в темах
Клиент может публиковать только в отдельной теме. То есть использование подстановочных знаков при публикации запрещено.
Например, чтобы опубликовать сообщение в двух темах, вам нужно опубликовать сообщение дважды
Когда создаются темы
Темы создаются динамически, когда:
- Кто-то подписывается на тему
- Кто-то публикует сообщение в теме с сохраненным сообщением, установленным на True.
Когда темы удаляются из брокера
- Когда последний клиент, подписавшийся на этого брокера, отключается, и чистый сеанс имеет значение true.
- Когда клиент подключается с чистым сеансом, для которого установлено значение True.
Повторная публикация данных темы
Это, скорее всего, будет сделано при изменении или объединении схем именования.
Идея состоит в том, что клиент подписывается на тему, например,
hub1/sensor1 и повторно опубликуйте данные, используя новое название темы house1/main-light.
Видео: Руководство для начинающих по темам MQTT
Простые рекомендации по темам
- Поскольку темы чувствительны к регистру, используйте только нижний регистр.
- Разделите темы команд и ответов с помощью префикса, например команда/ и ответ/
- Не используйте темы с пробелами.
- Используйте только буквы, цифры и тире.
- Включите информацию о маршрутизации в структуру темы.
Распространенные вопросы и ответы
В. Как подписаться на все темы?
В. Как мне подписаться на все темы $SYS?
В. Должен ли я начинать свою иерархию тем с /.
A- В этом нет необходимости, просто добавляется еще один уровень в структуру.
В. Могу ли я получить список всех тем у брокера?
A- Нет, если вы не подпишетесь на все темы и не просмотрите их.
В. Могу ли я узнать, кто подписан на тему?
А– Нет
В. Как найти темы?
A- В настоящее время для этого нет механизма, кроме описанного в списке всех тем.
Связанные учебные пособия и ресурсы:
57 комментариев
(Протестировано с mosquitto, mosquitto_sub и mosquitto_pub)
Спасибо за это, я включу его.
С уважением,
Стив
Привет, Стив!
Мне кажется странным, что у брокера невозможно получить список тем (подписанных).
Брокер должен знать, какую тему отправить какому клиенту, поэтому этот список должен где-то существовать, но недоступен?
Или брокер просто отправляет каждое сообщение каждому клиенту и позволяет клиенту решить, принять его или нет? (что было бы довольно неэффективно)
Некоторые брокеры могут это делать, но в настоящее время mosquitto этого не делает. Однако, как вы сказали, нет причин, почему бы и нет.
привет, мой проект состоит в том, чтобы связать брокера mosquitto с API (созданным с использованием django).
Мой esp32 отправляет данные датчиков комару с помощью Mqtt, и я бы отправил эти данные в API. Любая идея может помочь мне, пожалуйста!
Кажется, что API должен запросить данные у брокера путем подписки, но без более подробной информации я не могу сказать.
С уважением
Стив
Привет, Стив!
Я делаю IoT-приложение, в котором мне нужно подключиться к темам нескольких аптек с несколькими холодильниками, каждый из которых содержит 7 переключателей (показывает состояние включения и выключения), а также один датчик температуры и один датчик влажности.
Мои темы выглядят так:
Для холодильника 1 в аптеке 1: Аптека1/Холодильник1/Выключатель1 …. (7 тем для переключателей), Аптека1/Холодильник1/датчик1, Аптека1/Холодильник1/датчик2
Для холодильника 2 в аптеке 1: Аптека2/Холодильник2/Выключатель1 ………. и так далее.
МОЕ действие на выключатели другое, действие на влажность другое и на температуру другое.
Я пытался использовать подстановочный знак для подписки, но тогда я не могу использовать действие отдельно для переключателей и датчиков.
<р>2. Я хочу посчитать выключатели в каждой аптеке. Поэтому я поместил функцию обратного вызова в полезную нагрузку. Но мой код работает только для холодильника1 в аптеке1. Я хочу посчитать выключатели (которые включены) для всех холодильников в каждой аптеке.Как найти только темы переключения/только датчики из длинного списка? Так как я хочу сделать его масштабируемым для большого количества аптек и холодильников.
Здравствуйте,
Я бы посмотрел на такую структуру, как
iot/pharmacy1/refrigerator1/switches/switch1
iot/pharmacy1/refrigerator1/sensors/temp
Вы не можете использовать подстановочные знаки в операторе ==
Я бы использовал разделение, чтобы получить массив из темы, например
[iot,pharmacy1,refrigerator1,switches,switch1]
Надеюсь, это поможет
с уважением
стив
Я хочу подписаться на несколько тем одновременно. Что мне нужно сделать?
в python вы можете передать список тем, подобных этому
[(topic1,qos),(topic2,qos)]
Другие клиенты работают почти так же
Rgds
Стив
Привет!
У меня есть такая структура:
устройство1/температура
устройство1/влажность
устройство2/температура
устройство2/влажность
устройство3/температура
устройство3/влажность
Привет,
Труба не разрешена. Вам необходимо подписаться на
устройство 1/температура
устройство 1/влажность
устройство 3/температура
устройство 3/влажность
Чтобы получить то, что вы хотите.
С уважением,
Стив
Привет, Стив,
У меня есть случай, когда было бы здорово, если бы брокер мог сообщить, есть ли какие-либо подписки на определенную тему. Основываясь на том, что я прочитал, я считаю, что ответ отрицательный, но я надеюсь, что ошибаюсь.
Спасибо
Рик
В MQTTv3.1.1 это правильно, но в версии 5 нет соответствующего подписчика в сообщении PUBACK. Поэтому вам нужно опубликовать эту тему с QOS 1 или 2.
С уважением
Стив
Здравствуйте, Стив! У меня есть шлюз MQTT для моих контроллеров, и я настроил для него тему публикации. Когда я подписываюсь на него, сообщения, которые отображаются (которые я получаю), имеют много символов замены, они выглядят как �J�o����
+��)1�
Является ли проблема в протоколе, по которому мой шлюз отправляет данные, или что-то еще?
Заранее спасибо,
с уважением
Возможно, это потому, что вы не используете Unicode для этой темы
Если вы получаете их от hivemq, вы должны получить их от test.mosquitto, если они не отключили публикацию в нем. Попробуйте другую тему, например test/house/house1, и посмотрите, изменится ли она.
У меня есть подписка с подстановочным знаком, и я хочу убедиться, что получил все доступные темы, прежде чем моя программа продолжится.
Есть ли способ сделать это, кроме как просто использовать таймер, чтобы дождаться установленного времени и надеяться, что все получено?
Отличная информация здесь и очень полезная!
Привет,
Невозможно узнать, сколько есть подтем, а также можно добавить больше, поскольку дерево тем является динамическим. Однако, даже если ваша программа переместится, сообщение в новую тему все равно будет получено.
В Python я храню темы в словаре, используя тему в качестве ключа.
Надеюсь, что это поможет,
С уважением,
Стив
Можете ли вы предложить, как я могу реализовать эту функцию в MQTT. Я смотрю ваши уроки и пока только установил Mosquitto.
Можете ли вы помочь мне с дальнейшими шагами.Как запустить эти функции для обработки данных, полученных от каждого из этих датчиков. Я хочу даже использовать подписку на интерфейсе, чтобы брокер отправлял данные на интерфейс только тогда, когда есть изменения, а не наоборот.
В основном я хочу знать
1. Как создавать темы в Mosquiito
2. когда данные получены для темы, они должны быть обработаны моими приложениями на сервере (как их вызвать)
3. Затем, как сообщить Mosquitto, что данные изменены, поэтому он должен отправить их в интерфейс браузера (/приложений Android и IOS), если они вообще открыты / вошли в систему
Если вы можете предоставить мне какие-либо ссылки на ваши уроки, которые вы уже показали, как это сделать, были бы очень полезны.
Я полный новичок в MQTT. Я хорошо разбираюсь в Linux, C, C++, JAVA, Python. Мои текущие сервисы написаны на JAVA.
Заранее спасибо 🙂
Спасибо и признателен, если вы можете указать мне, что здесь упущено.
В этой статье MQTT Explorer используется в качестве инструмента тестирования клиента MQTT для подключения к облачной службе MQTT — EMQX Cloud. Благодаря этой статье вы сможете быстро понять основы использования MQTT Explorer, а также основные концепции и использование протокола MQTT.
Введение в MQTT Explorer
- Базовая функция подписки/push/соединения
- Функция аутентификации пользователя
- Поддержка WebSocket
- Поддержка просмотра различий и различных типов полезной нагрузки.
- Журнал основной исторической информации
- Поддержка подключения TLS
- Поддержка ночного режима.
- Автоматическая подписка на тему $SYS для удобной проверки информации о статусе брокера
- Организуйте список подписки в виде древовидной структуры, чтобы пользователи могли просматривать свою атрибуцию.
- С функцией визуализации сообщений и интуитивно понятным и интерактивным дизайном статистических диаграмм.
MQTT Explorer может удовлетворить большинство потребностей разработчиков, но у него есть и некоторые недостатки:
- Единовременно может существовать только одно подключение, что неудобно при отладке нескольких подключений.
- Полезная нагрузка публикации и список сообщений о подписке не разделены в дизайне пользовательского интерфейса, поэтому проверить статус отправки и получения сообщений непросто.
- Отсутствует полная запись журнала операций, из-за чего разработчикам неудобно проверять информацию, взаимодействующую с сервером.
Введение в облако EMQX
EMQX Cloud — это полностью управляемая облачная служба MQTT, запущенная компанией EMQ, которая может подключаться к большому количеству устройств Интернета вещей и интегрировать различные базы данных и бизнес-системы. Являясь первой в мире полностью управляемой общедоступной облачной службой MQTT 5.0, EMQX Cloud предоставляет службу сообщений MQTT с универсальным управлением эксплуатацией и обслуживанием и уникальной изолированной средой.
В эпоху Всеобъемлющего Интернета EMQX Cloud может помочь пользователям быстро создавать отраслевые приложения для области Интернета вещей и легко реализовать сбор, передачу, расчет и сохранение данных Интернета вещей.
В этой статье в качестве адреса сервера MQTT для этого теста будет использоваться бесплатный общедоступный сервер MQTT, предоставленный EMQX Cloud. Информация о доступе к серверу выглядит следующим образом:
Использование MQTT Explorer
Предварительный просмотр функции
На рисунке ниже показана главная страница с панелью поиска темы и конфигурацией подключения вверху. В левом нижнем углу страницы находится древовидная структура темы, а справа — столбец «Публикация», столбец «Подписка», столбец «Полезная нагрузка» и столбец управления информацией «История».
Подключение/подписка MQTT
Страница инициализации
Страница конфигурации появится при первом входе в MQTT Explorer.
Создать подключение
Нажмите «Подключения», чтобы создать новое подключение, и заполните поле «Хост» как broker-cn.emqx.io, порт 1883 и протокол как протокол MQTT.
Подписаться на тему
Подключить
Наконец, нажмите «Назад», чтобы вернуться на страницу конфигурации подключения, и нажмите «Подключиться», чтобы завершить подключение EMQX Cloud и подписку темы test/1 .
После успешного подключения вы можете увидеть, что структура дерева подписки имеет узлы test и 1, а строка состояния в правом верхнем углу показывает, что подключение было установлено, а заголовок темы test/1 содержится на право.
Публикация сообщений MQTT
После того, как соединение будет установлено, введите /test/1 в поле темы в правом нижнем углу страницы и введите какой-нибудь текст, а затем нажмите "Опубликовать", чтобы отправить сообщение.
Получать сообщения о подписке
После успешной публикации только что опубликованное сообщение будет получено на карточке "Значение" в правом верхнем углу.
Получение истории
На карточке «История» в правом нижнем углу страницы вы можете увидеть записи сообщений, полученных соответствующей темой подписки.
Статистическая информация
Статистическая информация будет отображаться в правом нижнем углу страницы.
Подходящие инструменты являются важной частью настройки и тестирования установки MQTT.
Инструменты доступны для Windows, Linux, Android и iPhone
В этом уроке я дам вам обзор популярных инструментов, доступных для загрузки в Интернете, а также некоторые из моих собственных инструментов, которые я создал, которые также могут быть полезны
Инструменты моделирования клиента
Существует множество инструментов для использования на ПК, а также на смартфонах/планшетах.
- Инструменты командной строки
- Инструменты браузера
- Инструменты для смартфонов и планшетов
Инструменты командной строки
Эти инструменты являются частью установки брокера mosquitto в Windows, но устанавливаются отдельно в Linux (Raspberry Pi).
Mosquitto_sub — простая утилита подписки для тестирования. Это происходит с брокером Mosquitto.
Mosquitto_pub — простая утилита публикации для тестирования. Это происходит с брокером Mosquitto.
Инструменты браузера — Chrome
MQTT-Lens – надстройка Chrome для публикации и подписки на брокера MQTT. –Использование MQTT-Lens – Руководство для начинающих
MQTT-Box– надстройка Chrome для публикации и подписки. Более многофункциональный, чем MQTT-Lens. Поддерживает веб-сокеты.
Приложения для Windows, Linux и Mac
Обозреватель MQTT: исследуйте структуру тем MQTT, графические данные, удаляйте сохраненные сообщения, отправляйте и получайте сообщения. Поддерживает веб-сокеты.
Инструменты Android — Смартфон и планшет
Панель мониторинга MQTT — простой инструмент для публикации и подписки.
MQTT Dash — создавайте информационные панели MQTT для умного дома
Примечание: на этой странице есть лучший список и дополнительная информация об основных клиентских инструментах MQTT
Инструменты тестирования брокера
Тематический монитор $SYS
Этот красный поток узла будет отслеживать тему $SYS выбранного брокера и отображать изображение, как показано ниже:
Москит-брокер $SYS Monitor
Эталонное тестирование
Просмотр файла конфигурации брокера
Если вы отредактировали файл mosquitto.conf по умолчанию и вам трудно найти свои изменения, этот скрипт будет вам полезен.
Он сканирует файл и печатает номер строки и содержимое любой строки без комментариев.
Для этого требуется только один аргумент -f имя файла, если он опущен, будет проверен файл mosquitto.conf, если он доступен.
Проверить файл конфигурации
Простой тестировщик соединений Python MQTT Broker
Я использовал этот инструмент для проверки ограничения максимального количества подключений в 1024 в Linux. Он создает несколько соединений, включая ssl-соединения, и отправляет тестовые сообщения. сообщает о максимальной, минимальной и средней задержке сообщений.
В этом видео демонстрируется и объясняется, как использовать t.
Мои инструменты для тестирования сценариев Python
Эти сценарии написаны мной во время экспериментов с MQTT.
Эхо-запрос MQTT
Этот инструмент тестирования представляет собой простой скрипт Python, который проверяет, работает ли брокер и сколько времени занимает передача сообщений, точно так же, как и традиционная утилита проверки IP-адресов.
Использование проверки связи MQTT
Утилита предназначена для запуска из командной строки.
Сценарию требуется только один параметр: IP-адрес или доменное имя брокера. Введите python mqtt-ping.py -h
Примеры
Утилита сохраненных сообщений —
Два скрипта: один для отображения и, при необходимости, удаления сохраненных сообщений в дереве тем. Другой используется для создания тем с сохраненными сообщениями в целях тестирования.
Учебник здесь. включает ссылку для загрузки скриптов
MQTT-Monitor-Monitors Выбранные темы
Это очень полезный инструмент для мониторинга тем на брокере. Я часто использую его при тестировании.
По умолчанию отображаются только измененные сообщения.
Использование:
Введите python mqtt-monitor.py -h
Примеры
- Можно добавить несколько тем повторным использованием параметра -t
- Используйте -v no для отображения только измененных сообщений
- Используйте -c 100, чтобы остановить через 100 секунд.
- Используйте значение -q (0, 1 или 2), чтобы задать QOS для всех тем.
- Используйте -d yes, чтобы включить режим отладки
Сценарий предназначен для запуска из командной строки.
Монитор свечей зажигания
На основе приведенного выше монитора MQTT, но с декодированием сообщений Sparkplug.
Для работы монитору необходимо декодировать буферы протокола Google, и для этого используются два файла, доступные на github, но также включенные в загрузку. Они
Я поместил их в ту же папку, что и файл монитора Sparkplug, но они могут находиться где угодно, если модуль может их найти.
Переключатель -v отображает тему и сообщение, а по умолчанию отображается только тема.
Мост Python MQTT
Эта функция аналогична мосту в брокере mosquitto, но реализована во внешнем клиенте Python.
Это означает, что вам не нужно быть администратором брокера mosquitto, чтобы настроить его.
MQTT-Explorer доступен в виде AppImage, что означает "одно приложение = один файл", который вы можете загрузить и запустить в своей системе Linux, при этом вам не нужен менеджер пакетов, и в вашей системе ничего не меняется. Потрясающе!
AppImages — это однофайловые приложения, которые работают в большинстве дистрибутивов Linux. Загрузите приложение, сделайте его исполняемым и запустите! Нет необходимости устанавливать. Никакие системные библиотеки или системные настройки не изменяются. Большинство образов AppImage работают в последних версиях Arch Linux, CentOS, Debian, Fedora, openSUSE, Red Hat, Ubuntu и других распространенных дистрибутивах для настольных ПК.
Запуск MQTT-Explorer в Linux без установки
В отличие от других приложений, AppImages не нужно устанавливать перед использованием. Однако перед запуском их необходимо пометить как исполняемые. Это функция безопасности Linux.
Вот! AppImages обычно не проверяются другими. Следуйте этим инструкциям, только если вы доверяете разработчику программного обеспечения. Используйте на свой страх и риск!
Загрузите MQTT-Explorer AppImage и сделайте его исполняемым с помощью файлового менеджера или введя следующие команды в терминале:
Затем дважды щелкните AppImage в файловом менеджере, чтобы открыть его.
Песочница MQTT-Explorer
Если вы хотите ограничить возможности MQTT-Explorer в вашей системе, вы можете запустить AppImage в изолированной программной среде, такой как Firejail. Это совершенно необязательно и в настоящее время должно быть настроено пользователем.
Обновление MQTT-Проводника
Если вы хотите перейти на новую версию, просто загрузите новый образ приложения MQTT-Explorer.
Интеграция AppImages в систему
Если вы хотите, чтобы исполняемый бит устанавливался автоматически, и вы хотели бы, чтобы MQTT-Explorer и другие AppImages были интегрированы в систему (меню, значки, ассоциации типов файлов и т. д.), вы можете проверить необязательный демон AppImage.
Примечание для авторов приложений
Спасибо за распространение MQTT-Explorer в формате AppImage для всех распространенных дистрибутивов Linux. Здорово! Вот несколько идей, как сделать его еще лучше.
Советы по дальнейшему улучшению изображения приложения MQTT-Explorer
Рассмотрите возможность добавления информации об обновлении в MQTT-Explorer AppImage и отправьте файл .zsync, чтобы его можно было обновить с помощью AppImageUpdate. Такие инструменты, как appimagetool и linuxdeployqt, могут легко сделать это за вас.
Улучшите эту запись, отправив файл метаинформации AppStream внутри AppImage в каталог usr/share/metainfo.У нас есть онлайн-инструмент, который упрощает его создание.
Снимок экрана для MQTT-Explorer был автоматически сделан во время полностью автоматизированного тестирования. Вы можете указать более удобный URL-адрес, отправив файл метаинформации AppStream.
Если вы хотите видеть здесь ссылку для пожертвования для приложения, включите ее в данные AppStream.
Читайте также: