Mqtt брокер на роутере

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

Читайте также:  Роутер для adsl интернета

Добавляем единственные строки

Первая строка запрещает подключение без пароля т. е. анонимным пользователям

Вторая строка объясняет где расположен файл пароля

Третья строка объясняет где расположен файл с доступам к топикам (см. ниже)

Получаем вот так (это можно скопировать и добавить в файл) ссылка на текстовый файл

# За знаком решетки комментарии

Настройка доступа пользователей к топикам

Идем в файл 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 и публиковать их.

Вот такое непримечательное окно, но нам с ним особо не работать, а только проверить.

Источник

Mosquitto MQTT Broker on Open-WRT and ESP Client

This tutorial will show how to set up a MQTT broker on an Open-WRT router. My reason for this is that I am running my own network segment in my apartment so I can run network experiments without worrying about intruding on my flatmates. Also for my privacy since I don’t want them snooping on me either.

I’ve been wanting to explore further IoT methods and I»ve been interested in the MQTT protocol, Message Queuing Telemetry Transport. MQTT is a communicaton protocol for small sensors and devices optimized for high-latency or unreliable networks. For this reason it is a great protocol for IoT devices.

Читайте также:  Симка для роутера huawei

How MQTT operates in a nutshell

MQTT requires a client and a broker. MQTT clients are both subscribers and publishers. The broker is responsible for receiving all messages, filtering the messages, and determining who is subscribed to the message and sends on the messagse to the subscribed clients.

Installing Mosquitto Broker

As described earlier, to use the MQTT protocol you need a broker. There are a number of MQTT broker options, including cloud based and local. I am a big fan of keeping things inhouse so I chose an open source MQTT broker called Mosquitto to run locally. I decided to set up my broker my Open-WRT router since I figured why not, the openwrt is already switching tcp, it might as well switch mqtt.

On the router you can run: 1. opkg update 2. opkg install mosquitto mosquitto-client libmosquitto

Begin mosquitto with: 1. /etc/init.d/mosquitto enable 2. /etc/init.d/mosquitto restart

Create user and add password:

Edit your mosquitto configuration file with your favorite editor.

  • vim /etc/mosquitto/mosquitto.conf
  • allow_anonymouse false
  • password_file /etc/mosquitto/passwd
  • /etc/init.d/mosquitto restart

Now you can open two sessions on your router and on one session you can subscribe to a topic with: mosquitto_sub -h localhost -t test -u «» -P «»

and on another session you can enter mosquitto_pub -h localhost -t «test» -u «» -P «»

You should see be able to see the message passed to your first session.

Connecting to broker with ESP-8266

These steps assume you know how to connect to a network with ESP 8266. We’ll be using the PubSubClient library to connect to the broker and pub/sub messages in topics.

To connect to the mqtt server:

const char* mqttServer=""; const int mqttPort=1883; // default is 1883 const char* mqttUser="""; const char* mqttPass="";

We’ll declare a WiFiClient which allws a connection to a specified IP and port, and declare a PubSubClient object that takes the wificlient as the input.

WiFiClient espClient; PubSubClient client(espClient);

You’ll need to specify the address and port of the MQTT server using the setServer method and use the setCallback method to specify a handling function when a message is received.

client.setServer(mqttServer, mqttPort); client.setCallback(callback); while(!client.connected()) < Serial.println("Connecting to mosquitto. "); if(client.connect("ESP8266Client", mqttUser, mqttPass))< Serial.println("Connected to mosquitto."); >else < Serial.print("Failed with State "); Serial.print(client.state()); delay(1000); >>

After connecting to the MQTT broker you can publish and subscribe to topics using the PubSubClient method publish and subscribe:

client.publish("esp/test", "Hello from a little device"); client.subscribe("esp/test");

Your callback that handles messages when received by client looks like:

void callback(char* topic, byte* payload, unsigned int length) < Serial.println("##########"); Serial.print("Message arrived in topic: "); Serial.println(topic); Serial.print("Message: "); for(int i = 0; i< length; i++)< Serial.print((char)payload[i]); >Serial.println(); Serial.println("##########"); >

Your loop will call the loop method of the PubSubClient. This will allow the client to pass incoming messagse and maintain its connection.

Now you can communicate between your open-wrt mosquitto broker and your esp8266 device.

Источник

Оцените статью
Adblock
detector