Skip to content

Настройка подключения к MQTT серверу

vvip-68 edited this page Dec 26, 2020 · 13 revisions

Для управления устройством может использоваться канал связи с использованием технологии MQTT (Message Queue Telemetry Transport). В интернете можно найти множество статей, объясняющих принципы функционирования протокола, дающие понятия о подписках, публикациях и другие основные сведения.

Список публичных MQTT-серверов можно найти здесь
Один из обзоров публичных MQTT серверов можно изучить на этой странице.

Как правило, сервера отличаются наличием наряду с платными, бесплатных сервисов, которые, однако, имеют ограничение на количество одновременных подключений к брокеру, количество разрешенных запросов в период времени, наличие / отсутствие авторизации при подключении, поддержкy SSL и так далее. Выберите подходящий именно вам MQTT брокер, изучите документацию на него, настройте подключение.

В этой статье дана инструкция по настройке MQTT соединения для управления устройством на примере российского бесплатного MQTT-брокера mqtt.4api.ru.

Настройка сервера

Зарегистрируйтесь на сервере. Сервер предлагает вариант регистрации на основе одной из социальных сетей. Выберите подходящую вам социальную сеть и нажмите на ее значок внизу окна регистрации.

Fast Patch

Если сеть запросит разрешение на использование аккаунта - подвердите, что вы согласны и осознаете свои действия.
Когда согласие будет получено, вы увидете страницу вашего личного кабинета на MQTT-сервере.

Fast Patch

Вам предлагается на выбор два варианта MQTT-брокера - [SRV.1] и [SRV.2]. Для наших целей нет разницы, какой из серверов использовать. Их отличие - [SRV.2] поддерживает SSL соединение и требует предварительной регистрации списка устройств, от которых будут приниматься сообщения.

SSL в нашей прошивке не используется, сервер [SRV.1] проще в настройке - я предлагаю использовать его. Кому нужно шифрование и ограничение списка подключаемых устройств - изучайте настройку брокера [SRV.2]. Впрочем, какой сервер использовать - один из этих, другой или вообще свой собственный - решать вам.

Итак, я предлагаю использовать брокер [SRV.1]. Для просмотра параметров подключения к брокеру, перейдите по ссылке "Профиль" раздела СЕРВЕР [SRV.1]

Fast Patch

Открывшаяся страница содержит сведения о параметрах подключения, ожидаемых брокером.

Fast Patch

Прежде всего, нас интересуют следующие поля:

  1. Сервер - имя сервера, к которому будет выполняться подключение для создания MQTT-канала управления
  2. Протокол|Порт - порт подключения устройства
  3. Протокол|Порт - порт подключения браузерной панели управления
  4. Пользователь - имя пользователя для подключения к серверу
  5. Пароль - пароль для подключения к серверу

Пароль скрыт и не отображается. Нажмите надпись "Запросить новый". Пароль отобразится вместо текста "Пароль скрыт"
Запишите этот пароль. Здесь вы его можете увидеть лишь один раз. При каждом повторном нажатии на "Запросить новый" будет генерироваться новый пароль и вам придется менять соответствующие настройки в прошивке.

Этих сведений достаточно для настройки соединения в скетче.
Откройте в Arduino IDE файл прошивки "a_def_soft.h". Найтите строки 308-322.

Fast Patch

Перенесите значения соответствующих настроек из окна "Профиль" настроек подключения в скетч

  • DEFAULT_MQTT_SERVER "srv1.clusterfly.ru" // MQTT сервер
  • DEFAULT_MQTT_USER "user_af7cd12a" // Имя mqtt-пользователя (укажите имя пользователя для вашего соединения)
  • DEFAULT_MQTT_PASS "pass_eb250bf5" // Пароль mqtt-пользователя (укажите пароль вашего соединения)
  • DEFAULT_MQTT_PORT 9123 // Порт mqtt-соединения

Строки 308-322 содержат недействительные учетные данные для примера.

Обратите внимание на строку #define A_DEF_PASS 1 определенную в выбранном вами профиля устройства в файле a_def_hard.ino

Fast Patch

Если параметр A_DEF_PASS определен как 1 - это означает, что ваши настройки с чувствительными данными хранятся в отдельном файле с именем "a_def_pass.h", который не включен в состав исходников. Вам нужно будет создать этот файл и перенести в него настройки с вашими персональными учетными данными.

Fast Patch

Если параметр A_DEF_PASS определен как 0 - это оначает, чтонастройки вашего аккаунта для подключения к MQTT-серверу задаются непосредстванно в строках 308-322 вкетча в файле "a_def_soft.h".

Fast Patch

Строка 25 файла "a_def_hard.h" содержит общий идентификатор класса устройств этого проекта - все устройства это устройства - "WiFiPanel". Конкретный профиль устройства задается значением DEVICE_ID, объявленным в в строке 26.

Комбинация HOST_NAME и DEVICE_ID образуют

  1. Имя клиента при подключении к MQTT-серверу
  2. Начальную часть топика публикации сообщений MQTT-брокеру

Так, идентификатор клиента для профиля DEVICE_ID 0 в этом примере - "WiFiPanel-0", и создается по правилу: HOST_NAME + "-" + DEVICE_ID

Итак, параметры соединения определены, прошивку можно загружать в устройство.
После того как прошивка загружена и стартовала, в мониторе порта будет виден лог подключения.
Если все прошло успешно, вы увидите примерно следующее:

Fast Patch

Проверить установку соединения можно в разделе "Web-client" личного кабинета. Нажмите на указанную ссылку

Fast Patch

На странице Web-клиента укажите свой пароль полученный ранее. Нажмите кнопку "Подключиться".

Fast Patch

В поле "Топик" введите префикс в виде имени пользователя (сервер требует эту часть как префикс топика), Идентификатор устройства и строку топика публикации. Как пример в данном случае строка топика будет "user_af7cd12a/WiFiPanel-0/cmd", в поле команды - какую-нибудь подходящую команду из API управления устройством. Нажмите кнопку "Отправить". Если все сделано правильно, в мониторе порта вы увидите запись о входящей команде и результат ее выполнения в логе и на матрице.

Fast Patch

Тем не менее данный Web-client ограничен в своих возможностях и мало на что годится.

Панель управления

Для управления устройством и наблюдения за его функционированием удобнее использовать более специализированную консоль, например эту.

Fast Patch

Заполните поля, необходимые для подключения к нашему MQTT-брокеру.

  • В поле "Host" - имя MQTT-сервера из настроек - "srv1.clusterfly.ru"
  • В поле "Port" - номер порта Websocket - 9123
  • В поле "Client ID" - идентификатор клиента управляющей панели - оставьте имя клиента, сгенерированное по-умолчанию
  • В поле "Username" - имя вашего пользователя для подключения к брокеру (в нашем примере - "user_af7cd12a")
  • В поле "Password" - пароль из настроек выше (в нашем примере - "pass_eb250bf5")
  • Нажмите кнопку "Подключить"

Если все идентификационные данные введены верно и сервер доступен, панель параметров подключения свернется, индикатор станет зеленого цвета - connected.

Fast Patch

Следующий шаг - регистрация топиков, которые брокер ожидает от устройства. Нажмите кнопку "Add New Topic Suscription". В открывшейся панели введите название топика, выберите цвет пометки сообщений и нажмите кнопку "Subscribe"

Fast Patch

Используемый нами брокер ожидает топик подписки, сформированный по следующему правилу:
MQTT_USER + "/" + MQTT_CLIENT_ID + "-" - DEVICE_ID + "/" + TOPIC_XXX
что в нашем случае означает user_af7cd12a/WiFiPanel-0/#

В соответствии справилами подписки, знак '#' означает - все "топики" ниже уровня user_af7cd12a/WiFiPanel-0
Значени топиков, используемых в прошивке смотри в разделе API управления устройством по каналу MQTT

При желании можно оформить отдельную подписку на каждый из топиков и задать им соответствующие цвета пометки сообщений. В этом случае результат коммуникации панели управления с устройством может выглядеть примерно так

Fast Patch

В разделе Publish панели управления, в поле "Topic" вы можете указать топик для отправки команд - user_af7cd12a/WiFiPanel-0/cmd, затем в поле "Message" - какую-нибудь подходящую команду из API управления устройством и отправить её, нажав кнопку "Publish". Реакцию устройства на команду можно видеть в мониторе порта и в секции "Messages" панели управления

На этом настройка устройства для управления по каналу MQTT завершена.
В настоящее время нет специальной программы для управления устройством через MQTT, хотя планы на ее создание есть.

Если у вас есть соответствующие знания - вы можете настроить управление устройством через голосовые помощники, например - Яндекс Алиса или Google Assistant. На данный момент есть несколько реализаций интеграции устройства в систему управления умным домом с помощью Home Assistant. Одна из реализаций описана тут.

Настройка параметров MQTT приложении

Продолжение следует...

Clone this wiki locally