Со всеми доступными протоколами обмена сообщениями может быть трудно выбрать только один. И с таким количеством вариантов слишком легко оказаться в ситуации, когда вы пробуете тот, который не работает для вас или вашей команды. Mqtt — это легкий протокол, для которого требуются только клиенты и брокеры, поэтому он идеально подходит для ситуаций, когда вы не хотите никаких хлопот. В этой статье мы рассмотрим, на что способен этот протокол и как он достигает этих целей!
Что такое MQTT?
Mqtt — это упрощенный протокол обмена сообщениями, для которого требуются только клиенты и брокеры. Он идеально подходит для ситуаций, когда вы не хотите хлопот и суеты, ведь от вас требуется так мало.
Что такое протокол обмена сообщениями?
Протокол обмена сообщениями — это набор правил, позволяющих приложениям на разных компьютерах обмениваться данными. Mqtt был специально разработан для Интернета вещей (IoT). С таким широким спектром других доступных протоколов может показаться странным создавать еще один для этой цели. Но, поскольку на это поле опирается так много устройств и сервисов, со временем мы, вероятно, будем видеть их все больше и больше!
Что хорошего в MQTT?
Mqtt действительно уникален, потому что он дает вам так много практически ничего. Вам не нужен выделенный сервер или сервер пересылки, как для многих других протоколов, что означает отсутствие проблем с инфраструктурой. Все, что вам нужно, это уже существующий брокер и любое оборудование с подключением к Интернету. Благодаря качеству своей работы и тому, насколько он легкий, этот протокол становится все более популярным. Поскольку это открытый исходный код и его можно использовать бесплатно, вы можете легко начать работу без каких-либо сборов или подписки. А благодаря поддержке брокера, встроенной в библиотеку MQTT для Arduino, мы рады видеть, какие замечательные продукты появятся на нашем пути.
Каковы особенности MQTT?
Mqtt — один из лучших примеров простого и легковесного протокола обмена сообщениями. Его основным преимуществом является простота использования — любое устройство с подключением к Интернету может воспользоваться преимуществами этого протокола. Но в этом протоколе есть нечто большее, чем просто простота использования. Давайте посмотрим, что еще вы можете ожидать от него!
Примеры использования MQTT
а. Устройства IoT на заводе, управляющие насосами и клапанами
б. Метеостанция с датчиком, отправляющим отчеты в базу данных в облаке.
в. Система сигнализации, которая сообщает, когда двери открываются или закрываются
д. Некоторые огни в офисе включаются при обнаружении движения
1. Что такое MQTT и каковы его особенности?
MQTT расшифровывается как Message Queuing Telemetry Transport, что может показаться сложным, но просто означает, что это способ для устройств IoT взаимодействовать друг с другом через Интернет. Он работает поверх TCP/IP, такого как HTTP, SMTP и т. д., но в отличие от HTTP, предназначенного для связи через Интернет, MQTT используется с устройствами, которые подключены друг к другу через сеть, обычно IP-сеть. Чаще всего он используется в IoT со встроенными устройствами с низким энергопотреблением, которые подключаются к таким вещам, как платы Raspberry Pi или Arduino.
2. Как это работает?
Это работает как электронная почта. Устройство IoT публикует сообщение в теме. Это как отправить электронное письмо кому-то, но вместо человека это название темы. Сообщение может содержать до 2 КБ данных и отправляется в виде пакета.
Второй подписчик MQTT прослушивает пакеты со своим уникальным идентификатором или идентификатором клиента. Затем он что-то делает с сообщением. Это похоже на то, как когда кто-то получает электронное письмо, он что-то с ним делает; прочитал, отправил куда-то еще и т.
MQTT имеет уровень качества обслуживания (QoS), что означает, что для сообщений могут быть разные уровни приоритета. Уровень QoS устанавливается клиентом, и каждый отправленный пакет имеет этот уровень приоритета.
3. Преимущества MQTT
Он легкий, работает на TCP/IP, меньше накладных расходов, чем HTTP.
Сообщения хранятся в очереди до тех пор, пока они не будут отправлены на устройство назначения.
Он имеет встроенную поддержку повторного подключения
Каждый клиент может иметь собственную конфигурацию безопасности для аутентификации и шифрования.
QoS позволяет различным типам сообщений иметь разные уровни приоритета.
4. Применение MQTT
Некоторые примеры того, как это используется в реальном мире, — это M2M Alliance, проект, целью которого является соединение «вещей» с безопасной платформой для передачи данных между устройствами. Другой пример использования — проект CEPH. Это облачная система хранения, которая может хранить и обмениваться файлами одновременно с несколькими пользователями. Он использует MQTT для защиты распределенного доступа путем шифрования данных, что позволяет передавать их между устройствами IoT с использованием различных шлюзов, не беспокоясь о безопасности данных.
5. Начало работы с MQTT
Первое, что нужно, это клиент MQTT; это приложение, которое отправляет и получает сообщения. У фонда Raspberry Pi есть руководство по началу работы с MQTT на вашем устройстве Pi. Существуют также другие доступные руководства, такие как это от Hackster, которое дает вам код для запуска на языке программирования Python.
Лучшие онлайн-курсы MQTT
- Освоение MQTT
- Основной протокол MQTT
- Разработать клиентское приложение MQTT для Android
- Мастер-класс по MQTT
- Освоение протокола MQTT: руководство от начального до продвинутого уровня
- Интернет вещей: MQTT с Adafruit, App Inventor и ESP8266
- MQTT Nodemcu (ESP8266) с Nodered, Wi-Fi и Bluetooth
TLS против SSL для создания брокера MQTT
Плюсы использования TLS:
-Безопасность: TLS обеспечивает безопасное соединение между клиентом и брокером. Это помогает защититься от атак «человек посередине» и прослушивания.
– Аутентификация: TLS обеспечивает аутентификацию брокера и клиента, помогая гарантировать, что только авторизованные клиенты могут подключаться к брокеру.
-Шифрование: TLS обеспечивает шифрование данных между клиентом и брокером, помогая защитить информацию от просмотра посторонними лицами.
Минусы использования TLS:
-Производительность: TLS может увеличить нагрузку на связь, что может снизить производительность.
-Сертификаты: чтобы использовать TLS, вам нужны сертификаты как для клиента, так и для брокера. Получить эти сертификаты может быть сложно, а их использование может быть дорогим, что может увеличить стоимость использования TLS.
Плюсы использования SSL:
-Безопасность: SSL обеспечивает безопасное соединение между клиентом и брокером, как и TLS. Это также помогает защититься от атак «человек посередине» и прослушивания.
-Сертификаты: поскольку SSL построен поверх TLS, вы можете использовать те же сертификаты для шифрования трафика.
Минусы использования SSL:
-Производительность: шифрование между клиентом и брокером увеличивает нагрузку на связь, что снижает производительность.
-Использование памяти: протокол SSL будет использовать больше памяти, чем другие протоколы, поскольку он поддерживает сеанс шифрования/дешифрования с брокером.
– Проблемы с версией: SSL — более старый протокол, и он не поддерживает некоторые функции, предоставляемые TLS (например, более новые шифры).
Как видите, и TLS, и SSL обеспечивают безопасность, аутентификацию и шифрование для связи между клиентами и брокерами; однако они делают это немного по-разному. Когда дело доходит до принятия решения о том, следует ли вам использовать TLS или SSL для вашего брокера MQTT, нет однозначного победителя, поскольку решение будет зависеть от того, что вам нужно от вашей инфраструктуры и сколько времени/денег вы можете потратить.
В заключение я бы сказал, что есть правильный ответ в зависимости от потребностей проекта. В этом случае лучше использовать TLS, так как он дает больше преимуществ, чем SSL.
5 главных причин использовать протокол MQTT в ваших IoT-проектах
MQTT — это протокол обмена сообщениями между машинами (M2M), разработанный для устройств с ограниченными ресурсами, который подключает устройства к облаку.
1. Он легкий и простой в использовании: MQTT — это протокол обмена сообщениями публикации/подписки, который разработан, чтобы быть легким и простым в использовании.
2. Он занимает мало места: MQTT использует около 1/10 пропускной способности HTTP, что делает его идеальным для приложений IoT с ограниченными сетевыми ресурсами.
3. Поддерживает QoS: MQTT поддерживает качество обслуживания (QoS), что гарантирует доставку сообщений с желаемой задержкой или качеством.
4. Он может работать в любой сети: MQTT — это кроссплатформенный протокол, который может работать в сетях Wi-Fi, Bluetooth с низким энергопотреблением (BLE) или сотовых сетях 2G/3G.
5. Он имеет несколько клиентских библиотек, доступных на многих языках программирования: есть клиентские библиотеки для C, C++, JavaScript, Arduino IDE, Python и Java.
Как настроить брокера MQTT с помощью контейнера Docker на вашем ПК или сервере VPS?
MQTT — это протокол обмена сообщениями между машинами (M2M)/IoT, разработанный как чрезвычайно легкий транспорт обмена сообщениями публикации/подписки. Это полезно для соединений с удаленными местами, где требуется небольшой объем кода и / или пропускная способность сети имеет большое значение.
В этой статье мы покажем вам, как настроить брокера MQTT с помощью контейнера Docker на вашем ПК или сервере VPS.
Docker — это механизм контейнеризации, который помогает вам легко развертывать приложения со всеми его зависимостями. Он обеспечивает согласованную среду на каждом хосте Docker, позволяет сэкономить время и повысить переносимость вашего кода между различными дистрибутивами Linux. Например, если какое-либо приложение зависит от большого количества системных библиотек или некоторых редких версий библиотек и, следовательно, не может быть легко переносимым, вы можете просто обернуть все это и развернуть как контейнер Docker.
1) Установка Docker для Windows/Mac
Docker доступен для пользователей Microsoft Windows и Mac OS X. Вы можете скачать соответствующую версию отсюда: https://docs.docker.com/docker-for-windows/install/.
2) Установка Docker-compose на ваш хост
Чтобы легко развернуть наш самодельный MQTT-брокер, мы будем использовать инструмент docker-compose. Он позволяет определять и запускать многоконтейнерные приложения Docker с помощью простого файла YAML. Вы можете узнать больше о docker-compose здесь: https://docs.docker.com/compose/.
Вы можете скачать инструмент создания докеров здесь: https://github.com/docker/compose/releases/. Как только это будет сделано, вы сможете запустить команду «docker-compose» в своем терминале и проверить ее версию или использовать любую из ее подкоманд.
Основная терминология Docker для этой статьи:
1) «Контейнер Docker» — это процесс, который запускается в фоновом режиме, когда вы запускаете образ с помощью команды запуска docker. Работающий экземпляр образа называется «контейнером» в связи с его созданием при сборке докера.
2) «Docker image» — шаблон только для чтения с инструкциями по созданию docker-контейнера. Он состоит из ряда слоев файловой системы, представляющих различные состояния конечного изображения, которое мы хотим создать.
3) Команда copy at docker build создает образ, читая его описание из Dockerfile в текущем рабочем каталоге, а затем выполняя соответствующую команду в новом слое поверх текущего образа.
4) «Тома» — это папки, которые позволяют вам сопоставлять локальные папки на вашем хост-компьютере с каталогами внутри ваших док-контейнеров. Это полезно, если, например, вы хотите сохранить некоторые данные о вашем контейнере или файлах конфигурации. Вы можете создать том, указав путь к папке из вашей хост-системы, используя docker run.
Файл YAML — это конфигурационный файл, который содержит информацию для подключения к внешней базе данных, серверу MQTT и т. д., а также информацию о том, как и какие контейнеры следует создавать. Мы создадим файл YAML для настройки нашего брокера в следующем разделе.
3) Создание файла YAML для настройки вашего брокера MQTT.
Файлы YAML обычно состоят из нескольких пар ключ-значение, которые соединяются двоеточиями (“:”). Вы можете узнать больше о YAML здесь: https://en.wikipedia.org/wiki/YAML#Syntax.
В нашем случае мы создадим файл YAML для настройки брокера MQTT следующим образом:
версия: “3”
В этом разделе YAML мы определяем имя контейнера как «homer-mqtt» и указываем образ, который следует использовать для его создания. В этом случае мы выберем образ «davidtgoldblatt/homer-mqtt» из Docker Hub отсюда: https://hub.docker.com/_/homer-mqtt/.
В нашем файле YAML мы также объявляем пару томов следующим образом:
тома:
– /var/run/docker.sock:/var/run/docker.sock
Эти тома позволят нам иметь постоянное хранилище для контейнера докеров, позволяя нашим настройкам сохраняться при перезагрузках и сбоях сервера. Вы можете узнать больше о томах здесь: https://docs.docker.com/engine/userguide/dockervolumes/.
Чтобы указать детали нашей базы данных, мы добавляем раздел «db_addresses» со следующими записями:
db_адреса:
– “host=172.17.0.2 port=3306 user=homer dbname=homer”
В приведенном выше примере мы указываем хост и порт для нашего экземпляра базы данных. Обратите внимание, что при указании пользователя необходимо добавить символ «@» перед именем пользователя. Это связано с тем, что в системах Unix имя пользователя состоит как из букв, так и из цифр. Если вы опустите это, Docker жалуется на такие ошибки:
вам нужно экранировать специальные символы, такие как @ или *
Чтобы указать учетные данные нашей базы данных, мы добавляем раздел «database_password» следующим образом:
пароль_базы_данных: “homerun1”
В приведенном выше примере вы должны использовать пароль по вашему выбору. Если вы хотите установить пароль базы данных в первый раз, вы можете ознакомиться с нашим руководством по созданию нового пользователя root без пароля здесь: https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user .html
Чтобы указать детали нашего сервера MQTT, мы добавляем раздел «mqtt_server» со следующими записями:
mqtt_сервер:
– имя: mqtt хост: 172.17.0.1 порт: 8883 имя пользователя: “homerun” пароль: “homerun1”
В приведенном выше примере мы запускаем брокер на порту 8883 и используем имя пользователя «homerun» и пароль «homerun1», которые мы создали в нашей базе данных.
4) Запустите свой брокер MQTT с помощью Docker
На этом этапе мы создадим контейнер Docker из нашего файла YAML и запустим его.
Для этого перейдите в каталог, где у вас есть файл YAML, и запустите «docker-compose up» следующим образом:
$ docker-компоновать
Эта команда создаст новый контейнер докеров на основе описания в вашем файле YAML и запустит его.
Если вы хотите запустить это в фоновом режиме, вместо этого используйте «docker-compose up -d». Если вы хотите распечатать журналы вашего контейнера Docker, запустите «docker-compose logs mqttclient» следующим образом:
$ docker-compose журналы mqttclient
Вы также можете увидеть контейнер Docker в режиме реального времени, используя «docker-compose ps» следующим образом:
$ docker-compose ps
5) Запуск вашего MQTT-клиента с помощью Docker
На этом этапе мы создадим контейнер Docker из нашего файла YAML и запустим его.
Для этого перейдите в каталог, где у вас есть файл YAML, и запустите «docker-compose up» следующим образом:
$ docker-компоновать
Эта команда создаст новый контейнер докеров на основе описания в вашем файле YAML и запустит его.
Если вы хотите запустить это в фоновом режиме, вместо этого используйте «docker-compose up -d». Вы также можете увидеть контейнер Docker в режиме реального времени, используя «docker-compose ps» следующим образом:
$ docker-compose ps
6) Использование вашего MQTT-клиента с Docker
Теперь, когда наш файл YAML настроен, мы можем начать использовать наш клиент MQTT с Docker.
Для этого перейдите в каталог, где у вас есть файл YAML, и запустите «docker exec» следующим образом:
$ docker exec -it mqttclient /bin/bash
Теперь вы должны увидеть каталог с именем «/home/homerun» (который является домашним каталогом для нашего контейнера докеров), и вы должны находиться внутри этого каталога.
Теперь вы можете увидеть свои базы данных, набрав «mysql -uroot -proot» следующим образом:
$ mysql-uroot-proot
Вы должны увидеть все свои базы данных на экране. Вы можете увидеть, как создать нового пользователя root без пароля для экземпляра MySQL здесь: https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user.html
Чтобы запустить клиентскую команду MQTT в Docker, вам нужно ввести «sbin/mqtt» следующим образом:
$ sbin/mqtt -c /home/homerun/config.yaml
В приведенном выше примере мы указываем файл конфигурации с флагом -c, который считывает наши настройки MQTT из файла конфигурации, который мы создали в этом руководстве.
Чтобы проверить, запущен ли ваш клиент MQTT, вы можете использовать «docker-compose ps» следующим образом:
$ docker-compose ps
В приведенном выше примере наш клиент MQTT был успешно запущен. Теперь вы должны увидеть все свои базы данных на экране.
Чтобы запустить клиентскую команду MQTT в Docker, вам нужно ввести «sbin/mqtt» следующим образом:
$ sbin/mqtt -c /home/homerun/config.yaml
В приведенном выше примере мы указываем файл конфигурации с флагом -c, который считывает наши настройки MQTT из файла конфигурации, который мы создали в этом руководстве.
Чтобы проверить, запущен ли ваш клиент MQTT, вы можете использовать «docker-compose ps» следующим образом:
$ docker-compose ps
В приведенном выше примере наш клиент MQTT был успешно запущен. Теперь вы должны увидеть все свои базы данных на экране, и вы можете попробовать опубликовать несколько сообщений, чтобы проверить, все ли работает нормально:
$ docker exec -it mqttclient /bin/bash
$ sbin/mqtt publish -t ‘test’ -h 172.17.0.1 -m ‘привет, мир!’
$ docker exec -it mqttclient /bin/bash
$ sbin/mqtt подписаться -t ‘тест’ -h 172.17.0.1 -u mqttuser
7) Очистка вашего MQTT-клиента с помощью Docker
Чтобы остановить ваш док-контейнер, вам нужно запустить «docker-compose down» следующим образом:
$ docker-compose вниз
8) Очистка вашего MQTT-клиента с помощью Docker Volumes
Чтобы остановить создание базы данных mysql и пользователя mqtt, вы можете использовать флаг -v.
$ docker-compose вниз -v
Вы также можете очистить свою среду, удалив каталог, содержащий файл YAML.
База данных Mysql и пользователь mqtt успешно созданы! Они будут автоматически удалены при удалении контейнера докеров. Теперь вы можете выйти из этой оболочки, набрав «exit».
В этом руководстве мы увидели, как настроить клиент MQTT через контейнер Docker.
Заключение
MQTT — это протокол подключения между машинами (M2M) или «Интернет вещей». Он был разработан как чрезвычайно легкий транспорт обмена сообщениями публикации/подписки. MQTT полезен для подключения к облаку маломощных датчиков, носимых устройств и других крошечных устройств, подключенных к Интернету. Поскольку MQTT использует модель публикации/подписки, она идеально подходит для устройств, которым необходимо нечасто отправлять данные или где пропускная способность сети имеет большое значение.