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

Навигация

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

2705 байт добавлено ,  8 месяцев назад
 
(не показано 16 промежуточных версий 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 ==   
Строка 183: Строка 185:
Если вы разрабатываете собственное ПО для Wiren Board, взаимодействовать с его аппаратными ресурсами лучше всего через протокол MQTT — ваша программа передаёт сообщение по MQTT, драйвер управляет устройством и вашей программе не нужно напрямую взаимодействовать с устройством на низком уровне.
Если вы разрабатываете собственное ПО для Wiren Board, взаимодействовать с его аппаратными ресурсами лучше всего через протокол MQTT — ваша программа передаёт сообщение по MQTT, драйвер управляет устройством и вашей программе не нужно напрямую взаимодействовать с устройством на низком уровне.


Для того, чтобы отправлять сообщения MQTT, для многих языков программирования есть библиотеки:
Языки, для которых есть библиотеки для работы с MQTT, по ссылкам подробное описание:
* Python [https://pypi.org/project/paho-mqtt/ paho-mqtt] или [https://github.com/contactless/mqtt-tools mqtt-tools].
* [[Python]]
* C — [http://mosquitto.org/man/libmosquitto-3.html libmosquitto]
* [[Cpp|C++]]
* [[Go]]
* [[Nodejs]]


=== Просмотр MQTT-каналов в web-интерфейсе ===
=== Просмотр MQTT-каналов в web-интерфейсе ===
Строка 201: Строка 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) ===  
Строка 216: Строка 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
Строка 231: Строка 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]]
Строка 241: Строка 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
Строка 250: Строка 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
Строка 259: Строка 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>


Строка 285: Строка 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>
Строки:
Строки:
Строка 296: Строка 338:
restart_timeout 20
restart_timeout 20


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


Строка 305: Строка 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'''.
Строка 397: Строка 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
890

правок