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

Нет описания правки
Строка 76: Строка 76:


<!--T:17-->
<!--T:17-->
Подпишемся на сообщения о состоянии встроенного реле Wiren Board:
Подпишемся на сообщения о состоянии первого реле подключённого по RS-485 релейного модуля WB-MRM2:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
root@wirenboard:~# mosquitto_sub -t '/devices/wb-gpio/controls/Relay_1/#' -v
root@wirenboard:~# mosquitto_sub -t "/devices/wb-mrm2_130/controls/Relay 1/#" -v
/devices/wb-gpio/controls/Relay_1/meta/type switch
/devices/wb-mrm2_130/controls/Relay 1/meta/type switch
/devices/wb-gpio/controls/Relay_1/on 0
/devices/wb-mrm2_130/controls/Relay 1/meta/order 1
/devices/wb-gpio/controls/Relay_1 0
/devices/wb-mrm2_130/controls/Relay 1 0
</syntaxhighlight>
</syntaxhighlight>
Тут стоит отметить, что MQTT сохраняет часть сообщений (а именно с флагом retained) вечно, поэтому после подписки вы получите даже те сообщения, которые были отправлен раньше, чем вы подписались.
Тут стоит отметить, что MQTT сохраняет часть сообщений (а именно те, которые при отправке были помечены флагом ''retained'') вечно, поэтому после подписки вы получите даже те сообщения, которые были отправлены раньше, чем вы подписались.


<!--T:18-->
<!--T:18-->
Реле управляется драйвером ''wb-gpio'' (этот драйвер также управляет транзисторными выходами и всем, что в электрическом смысле управляется GPIO). У него есть соответствующий топик-"контрол" ''Relay_1''. У него самого есть значение - ''0'' (реле выключено), и есть два подтопика. Один из них - служебный: в ''/meta/type'' записан тип "контрола". Здесь он ''switch'' - выключатель. Второй подтопик ''/on'' - интереснее: в него клиенты пишут то состояние, в которое они хотят установить реле. Заметим, что оно может не совпадать с тем состоянием, в котором реле находится, так как драйвер реле ведёт себя следующим образом: при получении сообщения в топик ''/devices/wb-gpio/controls/Relay_1/on'' он физически устанавливает его на реле, а лишь затем записывает новое значение реле в топик ''/devices/wb-gpio/controls/Relay_1''.
Релейный модуль управляется драйвером [[Драйвер wb-mqtt-serial]]. У него есть соответствующий топик-"канал"("контрол") ''Relay 1''. У него самого есть значение - ''0'' (реле выключено), и есть два подтопика. Один из них - служебный: в ''/meta/type'' записан тип "контрола". Здесь он ''switch'' - выключатель. Второй подтопик ''/on'' - интереснее: в него клиенты пишут то состояние, в которое они хотят установить реле. Заметим, что оно может не совпадать (и обычно не совпадает) с тем состоянием, в котором реле находится. Драйвер при этом ведёт себя следующим образом: при получении сообщения в топик ''/devices/wb-gpio/controls/Relay_1/on'' он физически устанавливает его на реле, а лишь затем записывает новое значение реле в топик ''/devices/wb-gpio/controls/Relay 1''.


<!--T:19-->
<!--T:19-->
Например, если мы сейчас нажмем на реле в веб-интерфейсе (переключим его состояние), то получим новые сообщения:
Например, если мы сейчас нажмём на кнопку реле в веб-интерфейсе (переключим его состояние), то получим новые сообщения:
<pre>
<pre>
/devices/wb-gpio/controls/Relay_1/on 1
/devices/wb-mrm2_130/controls/Relay 1/on 1
/devices/wb-gpio/controls/Relay_1 1
/devices/wb-mrm2_130/controls/Relay 1 1
</pre>
</pre>
- веб-интерфейс сначала "даёт указание" включить реле, потом драйвер его включает и ставит актуальное состояние в "контрол".
- веб-интерфейс сначала "даёт указание" включить реле, потом драйвер его включает и записывает актуальное состояние в "канал"("контрол").


==Работа с очередью сообщений==
==Работа с очередью сообщений==