Перейти к содержанию

Навигация

MQTT: различия между версиями

2869 байт добавлено ,  8 месяцев назад
 
(не показано 15 промежуточных версий 2 участников)
Строка 10: Строка 10:


Структура топиков описана в [https://github.com/wirenboard/conventions/blob/main/README.md Wiren Board MQTT Conventions].
Структура топиков описана в [https://github.com/wirenboard/conventions/blob/main/README.md Wiren Board MQTT Conventions].
В контроллере используется MQTT брокер mosquitto, который по умолчанию разрешает соединения без пароля с любых хостов. Если вы хотите настроить авторизацию, [https://mosquitto.org/man/mosquitto-conf-5.html обратитесь к официальной документации].


== Примеры работы через MQTT ==   
== Примеры работы через MQTT ==   
Строка 203: Строка 205:


Альтернативный вариант — использовать [[MQTT Explorer]].
Альтернативный вариант — использовать [[MQTT Explorer]].
=== Установка пароля на MQTT брокер ===
Установить пароль на MQTT-брокер можно следующим образом.
#Добавьте нового пользователя в файл конфигурации, выполнив команду:
#:<syntaxhighlight lang="bash">
mosquitto_passwd -c /etc/mosquitto/passwd/default.conf username
</syntaxhighlight>
#:Вместо username можно указать произвольное имя пользователя.
#:После ввода команды появится запрос на ввод пароля, который нужно будет ввести два раза.
#Далее в файле <code>/etc/mosquitto/conf.d/10listeners.conf</code> установите параметр <code>allow_anonymous false</code> (по умолчанию true).
#:Изменить файл можно открыв его в текстовом редакторе, например, nano:
#:<syntaxhighlight lang="bash">
nano /etc/mosquitto/conf.d/10listeners.conf
</syntaxhighlight>
#В файле  <code>/etc/mosquitto/acl/default.conf</code> добавьте следующую запись:
#:<syntaxhighlight lang="bash">
user username
topic readwrite #
topic readwrite $SYS/#
</syntaxhighlight>
#:где, username — имя пользователя, заданное на первом шаге.
#:Открыть файл для редактирования:
#:<syntaxhighlight lang="bash">
nano  /etc/mosquitto/acl/default.conf
</syntaxhighlight>
#Перезапустите mosquitto командой:
#:<syntaxhighlight lang="bash">
systemctl restart mosquitto
</syntaxhighlight>
После выполнения этой инструкции анонимные подключения к брокеру станут недоступны. Поэтому нужно будет использовать установленный пароль в веб-интерфейсе контроллера, который по умолчанию использует анонимное подключение.
Для чтения топиков с компьютера на Linux в той же сети теперь нужно использовать команду:
<syntaxhighlight lang="bash">
mosquitto_sub -h 192.168.0.67 -p 1883 -v -t "/devices/power_status/controls/Vin" -i Test_Client -u username -P password
</syntaxhighlight>


=== Настройка MQTT моста (bridge) ===  
=== Настройка MQTT моста (bridge) ===  
Строка 218: Строка 258:
# Зарегистрируйтесь на http://cloudmqtt.com/
# Зарегистрируйтесь на http://cloudmqtt.com/
# Зайдите в свой аккаунт на http://cloudmqtt.com/ и посмотрите настройки: сервер, порт, логин, пароль.
# Зайдите в свой аккаунт на http://cloudmqtt.com/ и посмотрите настройки: сервер, порт, логин, пароль.
# Зайдите на контроллер и добавьте в конец файла <code>/etc/mosquitto/mosquitto.conf</code> следующие строки:
# Зайдите на контроллер и добавьте в конец файла <code>/etc/mosquitto/conf.d/20bridges.conf</code> следующие строки:
#: <syntaxhighlight lang="bash">
#: <syntaxhighlight lang="bash">
connection cloudmqtt
connection cloudmqtt
Строка 233: Строка 273:
# Перезапустите <code>mosquitto</code>, выполнив в консоли:
# Перезапустите <code>mosquitto</code>, выполнив в консоли:
#: <syntaxhighlight lang="bash">
#: <syntaxhighlight lang="bash">
service mosquitto restart
systemctl restart mosquitto
</syntaxhighlight>
</syntaxhighlight>
[[File:Clusterfly3.png | thumb | 400px | Настройки брокера CLUSTERFLY]]
[[File:Clusterfly3.png | thumb | 400px | Настройки брокера CLUSTERFLY]]
Строка 243: Строка 283:


# Зарегистрируйтесь на https://clusterfly.ru/
# Зарегистрируйтесь на https://clusterfly.ru/
# Зайдите в свой аккаунт на https://clusterfly.ru/ и выберите "Профиль" посмотрите настройки: сервер, порт, логин и сгенерируйте пароль. Для пересылки используйте сервер <code>srv1.clusterfly.ru</code>.
# Зайдите в свой аккаунт на https://clusterfly.ru/ и выберите «Профиль» посмотрите настройки: сервер, порт, логин и сгенерируйте пароль. Для пересылки используйте сервер <code>srv1.clusterfly.ru</code>.
# Зайдите на контроллер и добавьте в конец файла <code>/etc/mosquitto/mosquitto.conf</code> следующие строки:
# Зайдите на контроллер и добавьте в конец файла <code>/etc/mosquitto/conf.d/20bridges.conf</code> следующие строки:
#: <syntaxhighlight lang="bash">
#: <syntaxhighlight lang="bash">
connection clusterfly
connection clusterfly
Строка 252: Строка 292:
try_private false
try_private false
notifications true
notifications true
notification_topic /client/wb_6/bridge_status
notification_topic /client/wb_7/bridge_status
start_type automatic
start_type automatic
topic /# both 0 "" user_xxxxxx
topic /# both 0 "" user_xxxxxx
Строка 261: Строка 301:
# Перезапустите <code>mosquitto</code>, выполнив в консоли:
# Перезапустите <code>mosquitto</code>, выполнив в консоли:
#: <syntaxhighlight lang="bash">
#: <syntaxhighlight lang="bash">
service mosquitto restart
systemctl restart mosquitto
</syntaxhighlight>
</syntaxhighlight>
#: Потребуется подождать некоторое время пока брокер <code>mosquitto</code> сможет организовать соединение. Подписавшись на контроллере к топику <code>/client/wb_6/bridge_status</code> можно увидеть статус соединения.
#: Потребуется подождать некоторое время пока брокер <code>mosquitto</code> сможет организовать соединение. Подписавшись на контроллере к топику <code>/client/wb_7/bridge_status</code> можно увидеть статус соединения.
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
mosquitto_sub -v -t "/client/wb_6/bridge_status"  
mosquitto_sub -v -t "/client/wb_7/bridge_status"  
/client/wb_6/bridge_status 0
/client/wb_7/bridge_status 0
/client/wb_6/bridge_status 1
/client/wb_7/bridge_status 1
</syntaxhighlight>
</syntaxhighlight>


Строка 287: Строка 327:
'''Решение:''' На контроллере ''DestinationController'' добавьте в конфиг:
'''Решение:''' На контроллере ''DestinationController'' добавьте в конфиг:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
mcedit /etc/mosquitto/conf.d/bridge.conf
nano /etc/mosquitto/conf.d/20bridges.conf
</syntaxhighlight>
</syntaxhighlight>
Строки:
Строки:
Строка 298: Строка 338:
restart_timeout 20
restart_timeout 20


topic /temp1/# in 2 /devices /client
topic /temp1/# in 1 /devices /client
</syntaxhighlight>
</syntaxhighlight>


Строка 307: Строка 347:
'''ВАЖНО:''' перед перезапуском желательно [[watchdog |остановить watchdog]]. В случае ошибки в конфигурационных файлах брокер не запустится и watchdog вызовет перезапуск контроллера.
'''ВАЖНО:''' перед перезапуском желательно [[watchdog |остановить watchdog]]. В случае ошибки в конфигурационных файлах брокер не запустится и watchdog вызовет перезапуск контроллера.


Рассмотрим подробнее строчку <code>topic /temp1/# in 2 /devices /client</code>
Рассмотрим подробнее строчку <code>topic /temp1/# in 1 /devices /client</code>
где:
где:
* <code>/temp1/#</code> это топик от «корня». На брокере-источнике /client/'''temp1'''.
* <code>/temp1/#</code> это топик от «корня». На брокере-источнике /client/'''temp1'''.
Строка 399: Строка 439:
=== Настройка моста на контроллере ===
=== Настройка моста на контроллере ===


Создайте файл конфигурации моста, для этого:
Создайте конфигурацию моста, для этого:
# Создайте файл <code>/etc/mosquitto/conf.d/bridge1.conf</code>
# Откройте файл <code>/etc/mosquitto/conf.d/20bridges.conf</code>
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
nano /etc/mosquitto/conf.d/bridge1.conf
nano /etc/mosquitto/conf.d/20bridges.conf
</syntaxhighlight>
</syntaxhighlight>
# Вставьте в него строки, где <code>10.0.0.105</code> — адрес брокера:
# Вставьте в конец файла строки, где <code>10.0.0.105</code> — адрес брокера:
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
connection bridge1
connection bridge1
wb_editors
889

правок