2485
правок
Admin (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 23: | Строка 23: | ||
#Драйвер wb-mqtt-serial получает это уведомление по RS-485 и публикует в очереди сообщение:<pre>/devices/wb-mrm2_130/controls/Relay 1 1</pre>Оно значит, что первое реле на устройстве WB-MRM2 с адресом ''130'' находится (уже переведено) в состоянии логической единицы ("включено"). | #Драйвер wb-mqtt-serial получает это уведомление по RS-485 и публикует в очереди сообщение:<pre>/devices/wb-mrm2_130/controls/Relay 1 1</pre>Оно значит, что первое реле на устройстве WB-MRM2 с адресом ''130'' находится (уже переведено) в состоянии логической единицы ("включено"). | ||
== Принцип работы | == Принцип работы очереди сообщений == | ||
Система сообщений MQTT построена по следующему принципу: | Система сообщений MQTT построена по следующему принципу: | ||
*есть иерархическая система "топиков" (как на обычных форумах в интернете) | *есть иерархическая система "топиков" (как на обычных форумах в интернете) | ||
Строка 98: | Строка 98: | ||
- веб-интерфейс сначала "даёт указание" включить реле, потом драйвер его включает и ставит актуальное состояние в "контрол". | - веб-интерфейс сначала "даёт указание" включить реле, потом драйвер его включает и ставит актуальное состояние в "контрол". | ||
==Работа с очередью сообщений== | |||
Программа (демон), отвечающая за рассылку сообщений от одних клиентов другим, называется брокером сообщений. В Wiren Board используется брокер сообщений [http://mosquitto.org/ Mosquitto]. Фактически, все драйверы и веб-интерфейс передают свои сообщения именно демону-брокеру Mosquitto. | |||
=== Управление устройствами из командной строки === <!--T:20--> | === Управление устройствами из командной строки === <!--T:20--> | ||
Строка 113: | Строка 114: | ||
команда включает реле 1 (канал "Relay_1" устройства "wb-gpio"). | команда включает реле 1 (канал "Relay_1" устройства "wb-gpio"). | ||
==== Очистка очереди сообщений ==== <!--T:26--> | |||
=== | |||
== | |||
<!--T:27--> | <!--T:27--> | ||
Строка 151: | Строка 121: | ||
<!--T:28--> | <!--T:28--> | ||
Для удаления топиков можно воспользоваться командой mqtt-delete-retained. | Для удаления топиков можно воспользоваться командой ''mqtt-delete-retained''. | ||
<!--T:29--> | <!--T:29--> | ||
Строка 171: | Строка 141: | ||
<!--T:33--> | <!--T:33--> | ||
- удалит все топики, начинающиеся на '/devices/noolite_tx_1234/' | - удалит все топики, начинающиеся на '/devices/noolite_tx_1234/' | ||
=== Работа с очередью из внешних программ === <!--T:34--> | |||
<!--T:35--> | |||
Если вы разрабатываете собственное ПО для Wiren Board, взаимодействовать с его аппаратными ресурсами лучше всего через очередь сообщений - ваша программа передаёт сообщение в очередь, драйвер управляет устройством, и вашей программе не нужно напрямую взаимодействовать с устройством на низком уровне. | |||
Для того, чтобы отправлять сообщения MQTT, для многих языков программирования есть библиотеки. Примеры: | |||
* Python - [https://github.com/contactless/mqtt-tools] | |||
* C - [http://mosquitto.org/man/libmosquitto-3.html] | |||
=== Отображение устройств в системе сообщений === <!--T:24--> | |||
<!--T:25--> | |||
Логика топиков, соответствующих разным устройствам и их параметрам, основывается на так называемых Conventions. Список актуальных типов здесь: [https://github.com/contactless/homeui/blob/contactless/conventions.md] | |||
Wiren Board использует набор соглашений по работе с MQTT. Эти соглашения описаны ниже. Полное каноническое описание соглашений Wiren Board смотрите в документе [https://github.com/contactless/homeui/blob/contactless/conventions.md Wiren Board MQTT Conventions]. | |||
<!--T:4--> | |||
Архитектура ПО Wiren Board: | |||
<!--T: | <!--T:5--> | ||
[[File:MQTT.png | thumb | 600px]] | |||
<!--T:6--> | |||
Специальные "драйверы" (отдельный для каждой функции контроллера и внешнего устройства) транслируют данные с устройства в очередь в виде сообщений специального формата. Сообщения из этой очереди получает веб-интерфейс и движок правил. Они же могут добавлять туда новые сообщения - например, "включить реле" после получения нажатия в интерфейсе или выполнения нужных условий в каком-нибудь правиле. | |||
[[Веб-интерфейс Wiren Board| Веб-интерфейс]] работает также через систему сообщений MQTT - нажатие кнопки в интерфейсе вызывает отправку сообщения в очередь (а именно брокеру сообщений); изменение показания датчика, поступившее в систему сообщений, тут же вызывает изменения транслируется в веб-интерфейс. | |||
'''Пример:''' если на цифровой вход Wiren Board подан сигнал, драйвер ''wb-homa-gpio'' создаёт сообщение вида .......... - "на входе ... появился сигнал". Веб-интерфейс, который тоже подключён к системе сообщений, получает это сообщение и "зажигает" индикатор в веб-интерфейсе. | |||