- MQTT что это такое, установка на роутер, настройка.
- Практическая реализация
- Брокер (сервер) Mosquitto
- Настройка
- Настройка пароля и пользователя
- Отступление о запуске программы с параметрами командной строки
- Настройка через OpenWRT и командую строку
- Символ решетки
- Символ плюса (+)
- LWT — Last Will and Testament
- Проверка
MQTT что это такое, установка на роутер, настройка.
MQTT (Message Queue Telemetry Transport) — сетевой протокол, работающий как правило поверх TCP/IP, ориентированный для обмена сообщениями между устройствами по принципу издатель-подписчик.
Этот протокол не такой и старый появился он в 1999 году, в 2014 году стандартизирован, а в апреле 2019 года вышла MQTT v5.0
Основные особенности протокола MQTT:
- Асинхронный протокол
- Компактные сообщения
- Работа в условиях нестабильной связи на линии передачи данных (так в официальном руководстве, но у меня к этому пункту больше вопросы)
- Поддержка нескольких уровней качества обслуживания (QoS)
- Легкая интеграция новых устройств
Устройства протокола MQTT
Кроме всего прочего используется понятие топик это сообщение
Вот схема как все это выглядит.
Протокол MQTT работает на прикладном уровне поверх TCP/IP и использует порты:
Кроме этого существуют ещё некоторые термины, о которых необходимо знать:
QoS (Quality of Service – качество обслуживания)- этот показатель обозначает вероятность прохождения пакета между двумя точками сети.
- QoS 0 — не более одного раза, сервер отправляет и забывает. Сообщения могут быть потеряны или продублированы, этот уровень самый быстрый, но ненадёжный;
- QoS 1 — по крайней мере один раз, получатель подтверждает доставку. Сообщения могут дублироваться, но доставка гарантирована. Этот уровень используется по умолчанию.
- QoS 2 — ровно один раз, сервер обеспечивает доставку. Сообщения поступают точно один раз без потери или дублирования. Это самый надёжный уровень, но самый медленный.
Устройства MQTT используют определенные типы сообщений для взаимодействия с брокером, ниже представлены основные (в реальности их больше):
- Connect – установить соединение с брокером
- Disconnect – разорвать соединение с брокером
- Publish – опубликовать данные в топик
- Subscribe – подписаться на топик
- Unsubscribe – отписаться от топика
Практическая реализация
Брокер (сервер) Mosquitto
Пожалуй это самый известный сервер (брокер)
Доступны два типа пакетов:
Для создания пользователей и генерации паролей необходимо установить пакет mosquitto-client
Установим пакеты с шифрованием, конечно будем использовать командную\ю строку, терминал в данном случае PuTTY ( официальный сайт ):
- SSL — ( Secure Sockets Layer, уровень защищённых сокетов) — протокол шифрования.
- mosquitto — известный сервер Mosquitto программное обеспечение с открытым исходным кодом, который реализует протокол MQTT версии 3.1 и 3.1.1.
- mosquitto-client -програмное обеспечение для публикации сообщений на серверах MQTT
- lib mosquitto — библиотеки автоматически подтянутся при установке.
После установки все само появляется в автозагрузке
Но если что, то включаем в автозагрузке и стартуем
Можно перезагрузить роутер
И все, мы все установили, но работать ничего не будет, дальше все это нужно настроить.
Настройка
Настройка пароля и пользователя
Настройку можно произвести двумя способами через WIndows или через роутер, через роутер легче и быстрее, но возможно кому то понадобится через Windows или привычнее, но еще раз так дольше
Через ОС Windows 10 (лучше делать через роутер так быстрее, см. ниже)
— Скачиваем с официального сайта Mosquitto ( http://mosquitto.org ) под Windows
— Создаем файл с расширением . bat, например StartPWD.bat (имя может быть любое)
Отступление о запуске программы с параметрами командной строки
Запустить программу с определенными значениями в среде Windows можно двумя способами
С помощью ярлыка
Создаем ярлык, Свойства. Откроется окно, в котором нас интересует поле Объект. Именно в нем, после кавычек, и следует дописать нужную нам команду.
С помощью «bat» файла
start «» путь_к_программе
Если путь содержит пробелы, возьмите весь путь в двойные кавычки, например: start «» «C:\Program Files\program.exe»
После пути к программе можно также указать параметры, с которыми она должна запускаться, например (аналогично, если параметры запуска содержат пробелы, возьмите их в кавычки): start «» c:\windows\notepad.exe file.txt
Например создадим пользователя «test»
start «» «C:\Program Files\mosquitto\mosquitto_passwd.exe» -c C:\user.list test
«C:\Program Files\mosquitto\mosquitto_passwd.exe» — путь в кавычках где установлен mosquitto
-c C:\m user.list ИМЯ_Пользователя — ключ и путь расположения файла пароля
Файл пароля можно открыть в текстовом редакторе он имеет вид
Имя_пользователя: Зашифрованный пароль
— Запускаем наш bat файл от администратора.
— Возникает окно с запросом пароля для пользователя имя которого мы указали выше. Вводим пароль два раза (он не отображается), Формируется файл mosquitto.pwd
— Находим файл который находится в корневом каталоге С: C:\user.list
— Загружаем программу WinSCP и переносим созданный файл на роутер в /etc/mosquitto/ config/
Настройка через OpenWRT и командую строку
Сначала создадим файлы и папки
Мы это делаем для того, что бы все файлы с настройками и паролями хранились в одном месте и их можно было легко перенести и сохранить. Все будем хранится в папке » config «. Создаем папку » config » в etc/mosquitto вот полный путь: /etc/mosquitto/config таким образом
Создаем файл «main.conf » в /etc/mosquitto/config получается вот так /etc/mosquitto/ config/main.conf
там же создаём файл /etc/mosquitto/ config/mosquitto.acl все вместе вот так:
Открываем любой терминал (чаще всего это Putty), заходим и вводим
mosquitto_passwd -c /etc/mosquitto/ config/user.list ИМЯ_ПОЛЬЗОВАТЕЛЯ
Ну например ИМЯ_ПОЛЬЗОВАТЕЛЯ будет test или dom
Возникает окно с запросом пароля для пользователя имя которого мы указали выше. Вводим пароль два раза (он не отображается ), Формируется файл user.list
Теперь редактируем основной конфигурационный файл «mosquitto.conf»
Таким образом что бы подгружать конфигурации из указанной папки, а мы ее создали выше (в нашем случае это файл main.conf )
Идем в mosquitto.conf это основной конфигурационный файл и открываем его, например с помощью nano
или с помощью SFTP и программы WinSCP и вносим единственную правку в секцию External config files добавляем (на самом деле пофиг куда добавлять, все равно там все закомментировано, но так по феншую, этот раздел находится в самом низу документа):
include_dir /etc/mosquitto/config
тем самым говорим где искать конфигурационные файлы
В файл main.conf например с помощью nano
или с помощью SFTP и программы WinSCP
Добавляем единственные строки
Первая строка запрещает подключение без пароля т. е. анонимным пользователям
Вторая строка объясняет где расположен файл пароля
Третья строка объясняет где расположен файл с доступам к топикам (см. ниже)
Получаем вот так (это можно скопировать и добавить в файл) ссылка на текстовый файл
# За знаком решетки комментарии
Настройка доступа пользователей к топикам
Идем в файл mosquitto.acl
который мы создали ранее и редактируем его, настраиваем нужный доступ по нужным пользователям, для тестирование даём доступ пользователю test или dom ко всем топикам это знак решетки
Вот так, ссылка так как используется решетка
Символ решетки
Говорит о том что клиент подписан на все топики, а вот так temp/# только на топике о температуре, и этот клиент получит все сообщения которые будут отправлены вот в такие топики:
Символ плюса (+)
К примеру, нам необходимо получить данные о температуры во всех комнатах:
/home/living-space/ + /temperature
В результате получаем данные с топиков:
- /home/living-space/living-room1/temperature
- /home/living-space/living-room2/temperature
- /home/living-space/living-room3/temperature
LWT — Last Will and Testament
Еще есть одна фишка это LWT — Last Will and Testament или Последняя воля и завещание. Нормальная работа это подключение клиента к серверу MQTT и отсылка топиков, но если клиент непланово отключился, например сломался, пропала связь, села батарейка и так далее. Как тогда узнать что это произошло, вот для этого и служит LWT. Как она работает? При подключении клиент говорит серверу: «слушай, когда я отключусь, ты, пожалуйста, вот в этот топик положи вот такое сообщение». Сервер принимает такое «завещание» от клиента и когда этот клиент отключается, MQTT сервер выполняет «последнюю волю» клиента. А когда подключается обратно то появляется другое сообщение о подключении.
Таким образом можно точно знать что устройство ушло в offline или вернулось в online.
В ESP8266 есть такие настройки:
- Controller LWT Topic — в какой топик писать LWT
- LWT Connect Message — (Сообщение о подключении)
- LWT Disconnect Message — (Сообщение о отключении)
Настройка завершена, теперь перезагружаем службу:
Настройка mosquitto завершена создан пользователь test или dom который имеет доступ ко всем топикам.
Проверка
Для проверки будем использовать MQTTLens клиент под Windows, а именно приложение Google Chrome, которое подключается к брокеру MQTT и может подписываться на топики MQTT и публиковать их.
Вот такое непримечательное окно, но нам с ним особо не работать, а только проверить.