• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Настройка MQTT брокера mosquitto

shuraf

Member
Существует пошаговая инструкция с пояснениями по НАСТРОЙКЕ Mosquitto под Windows?
 

shuraf

Member
В принципе MQTT может выдавать какие данные 'по-запросу'?
У меня Mosquitto кладет данные в MS-SQL. Потом запускается какая-то железяка и запрашивает у сервера из базы какой нибудь параметр. Такое возможно? Или только 'по-подписке'?
 

kvint

New member
Прошу помочь начинающему пользователю. Это мой первый опыт использования OpenWRT и mosquitto в частности.
Уже несколько дней пытаюсь поставить mosquitto на роутер Keenetic Extra II (прошивка 2.10, OpenWRT, репозиторий Entware-3x), по команде
opkg install mosquitto
у меня установился mosquitto-nossl, в статье было написано, что надо ставить нет nossl, но в чем там отличия и почему этого делать не надо, я пока не разобрался.
Далее внес указанные в сатье изменения в файл mosquitto.conf, поскольку папки overlay у меня нет, то в mosquitto.conf указал следующие адреса

password_file /etc/mosquitto/users.list
acl_file /etc/mosquitto/mosquitto.acl

Далее создал в папке (/etc/mosquitto/..) файлы mosquitt.acl и users.list, точно так, как указанно в статье.

Но при запуске mosquito, возникает ошибка связанная с пользователем.
Подскажите, что не так я делаю и как зарегистрировать пользователя?

~ # mosquitto
1512922009: mosquitto version 1.4.14 (build date 2017-09-25 19:05:16+0000) starting
1512922009: Using default config.
1512922009: Opening ipv4 listen socket on port 1883.
1512922009: Opening ipv6 listen socket on port 1883.
1512922009: Error: Invalid user 'mosquitto'.
 

Вложения

shuraf

Member
Не знаю как в опенврт, в винде файл с паролями надо скормить пороге mosquitto_pass, и он шифрует его под себя.
Видил где-то на линуксе не могли этого сделать и конвертили под виндой и кидали в линукс готовый файл
 

kvint

New member
Не знаю как в опенврт, в винде файл с паролями надо скормить пороге mosquitto_pass, и он шифрует его под себя.
Видил где-то на линуксе не могли этого сделать и конвертили под виндой и кидали в линукс готовый файл
если я правильно понял, то вы предполагаете, что mosquitto не воспринимает файл "users.list" и можно попробовать предварительно создать его в винде и потом перенести в линукс. Надо попробовать ...
 

telobezumnoe

New member
настроил мост меду mosquitto и mqttcloud,
connection cloudmqtt
address m**.cloudmqtt.com:****
try_private false
notifications false
start_type automatic
remote_username *******
remote_password *****"
topic # both
столкнулся с проблемой, сообщения пометкой retained отправляемые в mqttcloud на локальном mosquitto теряют этот флаг, и локальные клиенты подписанные на эти топики получают их только в случае нахождения онлайн, читал описание настроек, но единственное что нашёл так это cleansession false, но после этих настроек мост перестает работать, может кто знает как победить?
 

shuraf

Member
Флаг retain устанавливает отправляющий.
Не совсем понял вашу ситуацию. Если клиенты отправляют с этим флагом, то когда он теряется?
 

telobezumnoe

New member
Флаг retain устанавливает отправляющий.
Не совсем понял вашу ситуацию. Если клиенты отправляют с этим флагом, то когда он теряется?
клиент1 подключен к cloudmqtt, он публикует в топик данные с пометкой retain, локальный сервер mosquitto мостом подключен к cloudmqtt, к нему подключен другой клиент2, который подписан на тот же топик, проблема в том, что если клиент2 подключенный к локальному mosquitto был офлайн, то при подключении ему не приходят обновившиеся данные с топика на который он подписан. по идее флаг retain должен означать, что при подключении сообщение вновь отправляется сервером всем вновь подключившимся клиентам подписанным на этот топик, но этого не происходит.
 

Алексей.

Active member
Очень странное поведение, это только с мостом происходит? Если клиент 2 подключается без моста происходит тоже самое?
Спрашиваю потому что сам с мостом не работал, а хотелось узнать особенности.
Клиент, с определенным идентификатором, однажды подписавшись на топик и находящийся в офлайне в момент публикации, следующий раз в онлайне опять подписывается на тот же топик и получает как раз ту публикацию, которую он проспал, так почему то у меня работает без моста.
Может у Вас идентификатор клиента (не логин) меняется?
 

Алексей.

Active member
Не знаю как в опенврт, в винде файл с паролями надо скормить пороге mosquitto_pass, и он шифрует его под себя.
Видил где-то на линуксе не могли этого сделать и конвертили под виндой и кидали в линукс готовый файл
:):):)
на линуксе добавляем пользователя myclient2 и вводим пароль два раза
root@my-host:~# mosquitto_passwd -c /etc/mosquitto/passwd myclient2
Password:
Reenter password:

и если уж хотите удалить
mosquitto_passwd -D /etc/mosquitto/passwd myclient2
 
Последнее редактирование:

telobezumnoe

New member
@Алексей. если без моста, то оба сервера работают нормально, и сообщения с retain доставляются заново после подключения клиентов, вероятно отправляя сообщение подписанному клиенту сервер не указывает что это сообщение retain, эта информация остаётся на сервере и он просто заново отправляет сообщения клиентам. а сервер mosquitto для mqttcloud выглядит просто клиентом подписанным на все топики.
 

Алексей.

Active member
Такое впечатление что мост работает почти как тонкий клиент, если подписчик был в онлайне, то прилетевшая публикация от основного брокера доставляется подписчику через мост, если подписчик ушел в офлаайн, то прилетевшая публикация просто теряется в этом мосту.
Зачем тогда нужен такой мост не понятно...
 

shuraf

Member
:):):)
на линуксе добавляем пользователя myclient2 и вводим пароль два раза
root@my-host:~# mosquitto_passwd -c /etc/mosquitto/passwd myclient2
Password:
Reenter password:

и если уж хотите удалить
mosquitto_passwd -D /etc/mosquitto/passwd myclient2
Это через добавление юзера из командной строки. А Автор вопроса, насколько я понял, добавил юзеров и пароли создав файл в текстовом редакторе. Потом этот файл надо 'зашифровать'. Вот это и не понятно делал автор или не делал.
*У меня винда и у меня работает и по первому и по второму варианту.
 

Алексей.

Active member
shuraf, Ключевое слово для меня было
"Видил где-то на линуксе не могли этого сделать и конвертили под виндой"
это меня и позабавило, ну конечно на линуксе ничего толкового не сделаешь.
 

shuraf

Member
shuraf, Ключевое слово для меня было
"Видил где-то на линуксе не могли этого сделать и конвертили под виндой"
это меня и позабавило, ну конечно на линуксе ничего толкового не сделаешь.
Ну на линуксе можно много сделать, чего нельзя на винде, хотя и наоборот есть прецеденты.
 

Алексей.

Active member
telobezumnoe, и я тоже настроил мост :)
установил москиту на ПК и в /etc/mosquitto/mosquitto.conf добавил настройку листнера (сознательно перевесил на другие порты листнеров) и настройки моста

listener 3883

connection bridge-01
address mqtt.my-host.ru:3883
remote_username myclient
remote_password mypassword
topic # both 0 "" ""
и проблем нет, публикую на основном брокере, стартую клиента, работающего с мостом и он получает подписку.
оба брокера москита версии 1.4.8
 

telobezumnoe

New member
@Алексей. спасибо за помощь, но после подключения лисентера на порт cloudmqtt ничего не изменилось, так же при публикации данных с локального сервера, клиент на облачном сервере получает данные при подключении к нему, а локальный клиент не получает сообщение при подключении, если данные публиковались на облачный сервер
 
Сверху Снизу