- Установка и запуск MQTT брокера, Mosquitto
- Для чего нужен MQTT?
- Как работает MQTT?
- Как установить сервер MQTT?
- esp8266 — Сообщество разработчиков
- Свой собственный облачный MQTT брокер с поддержкой WebSockets, сертификатами LetsEncrypt, мониторингом и визуализацией в Grafana и сохранением данных в Influx. Бесплатно и навсегда
- Получаем VPS сервер бесплатно и навсегда
- Получаем домен второго уровня бесплатно
- Глава 1. Установка сервера Mosquitto MQTT 3.1.1
- Понимание подходящих для протокола MQTT сценариев
- Работа с шаблоном издатель- подписчик
- Работа с фильтрацией сообщений
- Знакомство с мозаикой MQTT — клиенты, серверы и соединения
- Установка сервера Mosquitto в Linux
- Установка сервера Mosquitto в macOS
- Установка сервера Mosquitto в Windows
- Связанные с запуском сервера Mosquitto в облачном решении вопросы
- Проверьте свои знания
- Выводы
Установка и запуск MQTT брокера, Mosquitto
• 21-11-2018 •
Для чего нужен MQTT?
Если на примере, то предположим, что у вас есть устройство, которое считывает температуру в комнате. И вы хотите передавать данные с этого контроллера к себе на сервер, чтобы потом можно было удаленно проверять температуру. Для этого как раз идеально подойдет протокол MQTT.
Как работает MQTT?
У Mqtt есть понятие сервер или брокер, это главный объект, который получает и передает данные дальше. А все остальные, к примеру устройство которое считывает температуру и сервер, на который вы хотите эту температуру сохранять, это клиенты.
Клиент с температурой будет отправлять данные, брокер MQTT будет их ловить и передавать клиенту серверу, который будет их получать.
Все это в рамках локальной сети!
Как установить сервер MQTT?
Для того чтобы установить брокер MQTT , переходим по ссылке и скачиваем инсталлятор для вышей операционной системы и устанавливаем .
Как запустить брокер MQTT?
Для того, чтобы запустить брокер, запустите консоль (На Windows это Win+R, пишем cmd и нажимаем Enter).
После того, как открылась консоль, переходим в консоле в директорию, где вы установили Mosquitto. Если вы не знаете как пользоваться командной строкой, то вот небольшие подсказки:
- Перейти (к примеру) в папку Games — cd Games
- Вернуться обратно cd ..
- Поменять раздел диска D: или C:
- Посмотреть содержимое папки dir
Этого должно хватить, чтобы добраться до нужного раздела. После того как вы зашли в раздел mosquitto, напишите:
Если вы все правильно сделали, то увидите следующее:
Теперь у вас запущен брокер MQTT. Успехов!
esp8266 — Сообщество разработчиков
Свой собственный облачный MQTT брокер с поддержкой WebSockets, сертификатами LetsEncrypt, мониторингом и визуализацией в Grafana и сохранением данных в Influx. Бесплатно и навсегда
Уровень сложности для продвинутого пользователя ПК: средний. Потребуются навыки работы с командной строкой linux через SSH, возможно понадобится изучение технической документации на английском языке. Хочу предупредить, что эта статья не туториал для начинающих, в котором достаточно скопировать все команды из статьи в консоль и все заработает. То, что мы будем делать, потянет на тестовое задание для начинающего DevOps инженера. Может быть я упустил что-то очевидное для меня и Вам придется немного поработать напильником. Ориентировочное время: от 1 часа до бесконечности, в зависимости от Ваших навыков и желания учиться.
TLDR; Получаем бесплатный VPS сервер, бесплатный домен 2 уровня и запускаем docker контейнеры: portainer, nginx, certbot, RabbitMQ, Grafana, Prometheus, Telegraf, InfluxDB с помощью docker-compose файла, который я заботливо приготовил для Вас.
Для домашней автоматизации часто необходим MQTT брокер, который должен быть доступен из интернета. Поднимать брокер на RaspberryPi и пробрасывать порты во внешний мир через домашний роутер — можно, но это далеко не идеальное решение (еще и валидные сертификаты при этой схеме непросто получить), а вот построить bridge (мост) между домашним брокером и облачным, чтобы иметь доступ и из дома и из любой точки мира и не оказаться в «умершем умном доме» при отсутствии интернета — неплохое решение.
Раньше в качестве облачного бесплатного брокера использовали CloudMQTT.com, но недавно эта компания прекратила регистрацию новых бесплатных инстансов и оставила возможность только платной регистрации.
Чаще всего, в качестве MQTT брокера разворачивают mosquitto — это отличный быстрый брокер, не требующий излишних вычислительных ресурсов. Но есть у него и недостатки — список пользователей и их права доступа необходимо прописывать в текстовых файлах. Я предлагаю Вам пострелять из пушки по воробьям и использовать в качестве MQTT сервера брокер сообщений RabbitMQ, который имеет плагин MQTT в базовой поставке и простой WEB интерфейс для настройки и управления пользователями.
Также мы будем использовать Prometheus плагин для RabbitMQ, для мониторинга состоянии брокера и ресурсов, которые он использует.
RabbitMQ написан на языке erlang, позволяет объединять брокеры в кластер, успешно используется во многих коммерческих проектах.
RabbitMQ имеет и другие замечательные возможности (очереди, например), но описание этих возможностей выходит за рамки данной статьи и я предлагаю Вам самостоятельно их изучить, если будет интересно.
Для полноценного использования MQTT мы настроим автоматическое получение бесплатных SSL(TLS) сертификатов LetsEncrypt, подключение WebSockets (MQTT over WebSockets), настроим WEB сервер nginx, так что сделать еще и собственный сайт — дело пяти дополнительных минут.
Современные DevOps инженеры не представляют свою работу без контейнеров, поэтому и мы будем использовать best practices — развернем весь необходимый софт в контейнерах. Я не фанатичный линуксоид, который признает исключительно командную строку в терминале, поэтому для обычных людей установим Portainer — удобный WEB интерфейс для управления docker контейнерами.
Раз уж мы используем Prometheus для мониторинга брокера, то установим и node-exporter для мониторинга нашего VPS сервера.
Также мы, легким движением руки, реализуем задачу сохранения MQTT сообщений в базе данных InfluxDB, используя для этого Telegraf.
Вишенкой на торте будет визуализация данных в одном из самых популярных современных продуктов — Grafana. Там мы увидим статистику и нашего VPS сервера и статистику RabbitMQ и сами данные, полученные по MQTT. По факту, мы сделаем собственный универсальный dashboard (точнее, можем сделать множество наборов панелей, в зависимости от задач), переплюнув популярные облачные сервисы.
Grafana: мониторинг VPS
Grafana: мониторинг RabbitMQ
Grafana: визуализация MQTT данных
Получаем VPS сервер бесплатно и навсегда
Здесь я не буду останавливаться подробно — Вы сможете без труда найти статьи как это сделать. Мне понравились VPS, которые предоставляет Oracle — они дают две виртуальных машины и у них 1Gb RAM в каждой, а для нашего проекта 512 может не хватить.
Активация аккаунта Oracle для получения бесплатной виртуальной машины требует международную карту Visa/MasterCard типа WORLD с балансом не менее 100 рублей (списанные средства будут возвращены, это необходимо для верификации карты и владельца). Проверить тип Вашей карты можно заранее на любом сервисе по BIN коду (первые 6 цифр карты), в строке Категория карты должно быть WORLD.
Могу сказать, что эта акция на бесплатные VPS действующая, я зарегистрировал такой аккаунт неделю назад (август 2020).
На этапе выбора образа для виртуалки выберите Ubuntu 20.04 или любой другой дистрибутив linux, если обоснованно считаете это необходимым.
На окончании этого шага Вы должны получить доступ по SSH к новой виртуалке и знать ее внешний (публичный) IP адрес (не пугайтесь, с настройками по умолчанию этот адрес не пингуется из интернета). Для новичков могу сообщить, что приватные (частные) IP адреса начинаются на 10. и выглядят, например, так 10.0.0.15 (есть и другие частные подсети, погуглите) Нам нужен не этот адрес, а другой, общедоступный IP-адрес.
Получаем домен второго уровня бесплатно
Если у Вас уже есть собственный домен и DNS, тогда вы должны создать DNS запись типа А и вписать туда общедоступный IP-адрес VPS. После этого можете переходить к следующему пункту.
Если у Вас еще нет собственного домена, то идем на Freenom.com (кредитная карта не понадобится) подбираем свободный домен и регистрируем его. Большинство доменов, даже 4-х буквенные бесплатны, кроме премиальных (по мнению авторов сервиса). Регистрация аккаунта происходит в момент регистрации домена, также пусть вас не смущает кнопка Оформить заказ — да, для регистрации бесплатного домена нужно оформить заказ. Еще не забудьте указать, что регистрируете домен на 12 месяцев (по умолчанию регистрируют только на 3).
Регистрация бесплатного домена
В момент регистрации домена (на большом мониторе, а не на маленьком как у меня на скриншоте) вы можете сразу указать общедоступный IP адрес вашей виртуалки для нового доменного имени. Указать его нужно два раза (обычно для каждого WEB сервера создается две DNS записи: первая только с именем домена и вторая www.+имя домена). Если у Вас нет поля для ввода IP адреса при регистрации, то ничего страшного, Вы сможете это сделать после регистрации.
После регистрации домена и аккаунта на freenom нужно залогиниться и перейти в меню Services — My Domains — напротив Вашего домена нажать Manage Domain, выбрать вкладку Manage Freenom DNS, ввести два раза общедоступный IP-адрес в поле Target и сохранить изменения.
Дальше можете подождать и попить кофе пока обновится кэш DNS.
Успешным результатом этого шага станет возможность подключаться по SSH к Вашей VPS не только по общедоступному IP-адресу, но и по доменному имени.
Глава 1. Установка сервера Mosquitto MQTT 3.1.1
Содержание
В этой главе мы начнём своё путешествие по направлению применения самого предпочтительного IoT протокола обмена сообщениями издатель- подписчик с малым весом в разнообразных IoT решениях, комбинирования с мобильными прикладными программами и веб приложениями. Мы изучим как рабоатет MQTT и его система обмена сообщениями.
Мы разберёмся в мозаике MQTT: клиенты, серверы (ранее именовавшиеся брокерами) и соединения. Мы ознакомимся с процедурами установки сервера Mosquitto MQTT 3.1.1 в Linux, macOS и Windows. Мы изучим особенности запуска сервера Mosquitto в облачном решении (Azure, AWS и прочих поставщиков). Мы разберёмся со следующим:
Понимание подходящих сценариев для протокола MQTT
Работа с шаблоном издатель- подписчик
Работа с фильтрацией сообщений
Понимание мозаики MQTT: клиенты, серверы и соединения
Установка сервера Mosquitto в Linux
Установка сервера Mosquitto в macOS
Установка сервера Mosquitto в Windows
Вопросы запуска сервера Mosquitto в облачном решении
Понимание подходящих для протокола MQTT сценариев
Представим себе что у нас имеются десятки различных устройств, которые должны обмениваться данными между собой. Эти устройства должны запрашивать данные у прочих устройств, а те устройства, которые получают подобные запросы должны отвечать данными. Те устройства, которые запрашивают необходимые им данные, должны обрабатывать эти получаемые с других устройств данные, на которые отвечают требуемыми данными.
Эти устройства являются платами IoT ( Internet of Things ), которые обладают десятками зашитыми в них датчиками. У нас имеются следующие платы IoT с различными по мощности процессорами:
Raspberry Pi 3 Model B+
Qualcomm DragonBoard 410c
e-con Systems eSOMiMX6-micro
MinnowBoard Turbot Quad-Core
Каждая из этих плат способна отправлять и принимать данные. Кроме того, мы хотим чтобы веб приложения имели возможность отправлять и принимать данные. Мы желаем отправлять и принимать данные в близком к реальному масштабе времени через Интернет, и при этом мы можем сталкиваться с некоторыми сетевыми проблемами: наши беспроводные сетевые среды порой ненадёжны и у нас имеются некие среды с высокой латентностью (с большими задержками). Некоторые устройства имеют небольшую мощность, многие из них запитываются от батарей, а их ресурсы очень скудны. Кроме того, мы обязаны заботиться о применении общей пропускной способности сетевой среды, так как некоторые из устройств применяют платные соединения.
Замечание | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Замечание | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Замечание | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Замечание | |||||||||
---|---|---|---|---|---|---|---|---|---|
Замечание | |||||||
---|---|---|---|---|---|---|---|
Замечание | |||||
---|---|---|---|---|---|
Совет | |||
---|---|---|---|
Значение ReturnCode | Описание |
---|---|
Замечание | |
---|---|