3692
правки
Admin (обсуждение | вклад) |
|||
Строка 2: | Строка 2: | ||
<translate> | <translate> | ||
<!--T:1--> | <!--T:1--> | ||
'''MQTT''' - | '''MQTT''' - протокол обмена данными, использующийся в [[Программное обеспечение Wiren Board|программном обеспечении Wiren Board]]. [http://en.wikipedia.org/wiki/MQTT Базовая информация по MQTT на Википедии]. | ||
<!--T:134--> | <!--T:134--> | ||
Драйверы, отвечающие за аппаратные возможности контроллера (цифровые входы, АЦП, транзисторный выходы, ...) и функции внешних подключённых устройств (например, подключённых по RS-485 модулей реле) записывают их состояние в | Драйверы, отвечающие за аппаратные возможности контроллера (цифровые входы, АЦП, транзисторный выходы, ...) и функции внешних подключённых устройств (например, подключённых по RS-485 модулей реле) записывают их состояние в MQTT в виде специальных сообщений. Веб-интерфейс читает эти сообщения и на их основе отображает состояние устройств. | ||
<!--T:135--> | <!--T:135--> | ||
Если же происходит нажатие кнопки в веб-интерфейсе, уже веб-интерфейс отправляет сообщение в | Если же происходит нажатие кнопки в веб-интерфейсе, уже веб-интерфейс отправляет сообщение в MQTT, драйвер устройства его получает и отдаёт команду устройству. | ||
== Примеры работы через | == Примеры работы через MQTT == <!--T:3--> | ||
===Получение значения от датчика температуры и вывод его в веб-интерфейс=== | ===Получение значения от датчика температуры и вывод его в веб-интерфейс=== | ||
[[File:Web-devices-1-wire.png|400px|thumb|Показания датчика и его уникальный идентификатор на странице ''Devices'' веб-интерфейса]] | [[File:Web-devices-1-wire.png|400px|thumb|Показания датчика и его уникальный идентификатор на странице ''Devices'' веб-интерфейса]] | ||
Предположим, что к [[Wiren Board]] подключён датчик температуры по шине [[1-Wire]]. Проследим, как данные с него через | Предположим, что к [[Wiren Board]] подключён датчик температуры по шине [[1-Wire]]. Проследим, как данные с него через MQTT попадают в веб-интерфейс: | ||
#Драйвер, отвечающий за данную аппаратную функцию ([https://github.com/contactless/wb-homa-drivers/tree/master/wb-homa-w1 wb-homa-w1]) опрашивает подключённые к контролеру датчики 1-Wire. | #Драйвер, отвечающий за данную аппаратную функцию ([https://github.com/contactless/wb-homa-drivers/tree/master/wb-homa-w1 wb-homa-w1]) опрашивает подключённые к контролеру датчики 1-Wire. | ||
#При получении значения драйвер | #При получении значения драйвер публикует по MQTT сообщение следующего вида: <pre>/devices/wb-w1/controls/28-0115a48fcfff 23.25</pre>Оно значит, что на устройстве 1-Wire с идентификатором ''28-0115a48fcfff'' получено значение 23.25°C. | ||
#Веб-интерфейс, который получает все сообщения из | #Веб-интерфейс, который получает все сообщения из MQTT (он ''подписан'' на все сообщения), получает это сообщение и выводит значение датчика на страницу. | ||
===Нажатие кнопки в веб-интерфейсе и переключение реле на внешнем модуле=== | ===Нажатие кнопки в веб-интерфейсе и переключение реле на внешнем модуле=== | ||
[[File:Web-devices-serial.png|400px|thumb|Веб-интерфейс после нажатия кнопки включения Реле 1 на подключённом по RS-485 релейном модуле [[WB-MRM2]]]] | [[File:Web-devices-serial.png|400px|thumb|Веб-интерфейс после нажатия кнопки включения Реле 1 на подключённом по RS-485 релейном модуле [[WB-MRM2]]]] | ||
Предположим, что к контроллеру по шине [[RS-485]] подключён релейный модуль [[WB-MRM2]]. Пользователь в веб-интерфейсе нажимает кнопку включения реле. Проследим, как команда из веб-интерфейса попадает на внешний модуль: | Предположим, что к контроллеру по шине [[RS-485]] подключён релейный модуль [[WB-MRM2]]. Пользователь в веб-интерфейсе нажимает кнопку включения реле. Проследим, как команда из веб-интерфейса попадает на внешний модуль: | ||
#После нажатия кнопки веб-интерфейс | #После нажатия кнопки веб-интерфейс публикует по MQTT сообщение следующего вида: <pre>/devices/wb-mrm2_130/controls/Relay 1/on 1</pre>Оно значит, что устройство WB-MRM2 с адресом ''130'' должно перевести Реле 1 в состояние логической единицы - "включено". | ||
#[[Драйвер wb-mqtt-serial]], отвечающий за данную аппаратную функцию, получает это сообщение (он ''подписан'' на все сообщения, относящиеся к подключённым по RS-485 устройствам) и посылает по шине RS-485 релейному модулю команду на включение первого реле. | #[[Драйвер wb-mqtt-serial]], отвечающий за данную аппаратную функцию, получает это сообщение (он ''подписан'' на все сообщения, относящиеся к подключённым по RS-485 устройствам) и посылает по шине RS-485 релейному модулю команду на включение первого реле. | ||
#Релейный модуль WB-MRM2 получает команду от контроллера, переключает реле и посылает обратно уведомление ("Реле 1 включено"). | #Релейный модуль WB-MRM2 получает команду от контроллера, переключает реле и посылает обратно уведомление ("Реле 1 включено"). | ||
#Драйвер wb-mqtt-serial получает это уведомление по RS-485 и публикует | #Драйвер wb-mqtt-serial получает это уведомление по RS-485 и публикует по MQTT сообщение:<pre>/devices/wb-mrm2_130/controls/Relay 1 1</pre>Оно значит, что первое реле на устройстве WB-MRM2 с адресом ''130'' находится (уже переведено) в состоянии логической единицы ("включено"). | ||
== Принцип работы | == Принцип работы MQTT == <!--T:136--> | ||
[[File:MQTT.png | thumb | 600px | Через | [[File:MQTT.png | thumb | 600px | Через MQTT работают драйверы внутренних функций, внешних устройств, веб-интерфейс, система правил]] | ||
Система сообщений MQTT построена по следующему принципу: | Система сообщений MQTT построена по следующему принципу: | ||
*есть иерархическая система "топиков" (как на обычных форумах в интернете) | *есть иерархическая система "топиков" (как на обычных форумах в интернете) | ||
Строка 41: | Строка 41: | ||
Полный список MQTT-топиков можно увидеть на странице ''Settings'' веб-интерфейса в разделе ''MQTT Channels'' (появилось в последних версиях [[Обновление прошивки|прошивки]]). | Полный список MQTT-топиков можно увидеть на странице ''Settings'' веб-интерфейса в разделе ''MQTT Channels'' (появилось в последних версиях [[Обновление прошивки|прошивки]]). | ||
=== Клиенты | === Клиенты MQTT === <!--T:138--> | ||
*драйверы внутренних аппаратных функций | *драйверы внутренних аппаратных функций | ||
*драйверы внешних подключённых устройств | *драйверы внешних подключённых устройств | ||
Строка 73: | Строка 73: | ||
<!--T:133--> | <!--T:133--> | ||
Подписаться на сообщения можно и из консоли Linux при помощи утилиты '''mosquitto_sub''' (полное описание работы с | Подписаться на сообщения можно и из консоли Linux при помощи утилиты '''mosquitto_sub''' (полное описание работы с MQTT из командной строки смотрите ниже): | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
root@wirenboard:~# mosquitto_sub -t '/devices/wb-w1/controls/28-0115a48fcfff' -v //получить сообщения из топика устройства 1-Wire с идентификатором 28-0115a48fcfff | root@wirenboard:~# mosquitto_sub -t '/devices/wb-w1/controls/28-0115a48fcfff' -v //получить сообщения из топика устройства 1-Wire с идентификатором 28-0115a48fcfff | ||
Строка 104: | Строка 104: | ||
- веб-интерфейс сначала "даёт указание" включить реле, потом драйвер его включает и записывает актуальное состояние в "канал"("контрол"). | - веб-интерфейс сначала "даёт указание" включить реле, потом драйвер его включает и записывает актуальное состояние в "канал"("контрол"). | ||
==Работа с | ==Работа с сообщениями MQTT== <!--T:142--> | ||
Программа (демон), отвечающая за рассылку сообщений от одних клиентов другим, называется брокером сообщений. В Wiren Board используется брокер сообщений [http://mosquitto.org/ Mosquitto]. Фактически, все драйверы и веб-интерфейс передают свои сообщения именно демону-брокеру Mosquitto. | Программа (демон), отвечающая за рассылку сообщений от одних клиентов другим, называется брокером сообщений. В Wiren Board используется брокер сообщений [http://mosquitto.org/ Mosquitto]. Фактически, все драйверы и веб-интерфейс передают свои сообщения именно демону-брокеру Mosquitto. | ||
===Работа из командной строки=== | ===Работа из командной строки=== | ||
Строка 177: | Строка 177: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Работа с | === Работа с MQTT из внешних программ === <!--T:34--> | ||
<!--T:35--> | <!--T:35--> | ||
Если вы разрабатываете собственное ПО для Wiren Board, взаимодействовать с его аппаратными ресурсами лучше всего через | Если вы разрабатываете собственное ПО для Wiren Board, взаимодействовать с его аппаратными ресурсами лучше всего через протокол MQTT - ваша программа передаёт сообщение по MQTT, драйвер управляет устройством, и вашей программе не нужно напрямую взаимодействовать с устройством на низком уровне. | ||
<!--T:148--> | <!--T:148--> |