Настройка работы контроллера TouchOn через MQTT: различия между версиями
Admin (обсуждение | вклад) Нет описания правки |
Admin (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
Для того, чтобы связать контроллер TouchOn с сервером по протоколу MQTT, необходимо выбрать опцию MQTT в поле SRV Type. | Для того, чтобы связать контроллер TouchOn с сервером по протоколу MQTT, необходимо выбрать опцию MQTT в поле SRV Type. | ||
Порт 1883 пропишется автоматически. | Порт 1883 пропишется автоматически. | ||
[[Файл:CTR web-conf-mqtt.jpg|300px|безрамки|центр]] | [[Файл:CTR web-conf-mqtt.jpg|300px|безрамки|центр]] | ||
После старта устройство соединяется с сервером и подписывается на топик: megad/14/cmd, который используется для передачи команд контроллеру. | |||
После старта устройство соединяется с сервером и подписывается на топик: '''megad/14/cmd''', который используется для передачи команд контроллеру. | |||
Здесь 14 - последний байт IP адреса устройства. | Здесь 14 - последний байт IP адреса устройства. | ||
Если прописан MegadID, то используется он. | Если прописан MegadID, то используется он. | ||
Например, если в качестве MegadID указан "test", то контроллер подпишется на топик: test/cmd | Например, если в качестве MegadID указан "test", то контроллер подпишется на топик: '''test/cmd''' | ||
Это же правило работает и при публикации в топиках информации о портах. | Это же правило работает и при публикации в топиках информации о портах. | ||
1486454199: New connection from 10.35.16.12 on port 1883. | 1486454199: New connection from 10.35.16.12 on port 1883. | ||
| Строка 16: | Строка 18: | ||
<br> | <br> | ||
По умолчанию контроллер соединяется с брокером без авторизации. | По умолчанию контроллер соединяется с брокером без авторизации. | ||
Если в поле Passwd указан пароль, используется авторизация. Логином является Megad-ID, который прописывается в соответствующей вкладке. | Если в поле '''Passwd''' указан пароль, используется авторизация. Логином является Megad-ID, который прописывается в соответствующей вкладке. | ||
Опция Retain устанавливает соответствующий флаг в публикуемых сообщениях. Данный флаг указывает MQTT-брокеру сохранять последнее сообщение в каждом топике. Если серверное ПО перезагружалось или какое-то время не работало, то при запуске брокер отправит программному обеспечению опубликованные контроллером сообщения. По одному последнему сообщению на каждый топик. | Опция '''Retain''' устанавливает соответствующий флаг в публикуемых сообщениях. Данный флаг указывает MQTT-брокеру сохранять последнее сообщение в каждом топике. Если серверное ПО перезагружалось или какое-то время не работало, то при запуске брокер отправит программному обеспечению опубликованные контроллером сообщения. По одному последнему сообщению на каждый топик. | ||
В данный момент при срабатывании входа устройство публикует информацию в топике: megad/14/n, где n - номер порта. | В данный момент при срабатывании входа устройство публикует информацию в топике: megad/14/n, где n - номер порта. | ||
| Строка 62: | Строка 64: | ||
Для протокола MQTT контроллер поддерживает технологию "Last Will and Testament". При разрыве соединения контроллера с брокером (по любой причине) последний будет публиковать в топик megad/14/status (а если указан megadID, то [megadid]/status) сообщение с текстом "Offline". Таким образом, сервер может своевременно получить информацию о недоступности контроллера. В то же время при подключении к брокеру контроллер будет публиковать в этот же топик сообщение с текстом "Online". | Для протокола MQTT контроллер поддерживает технологию "Last Will and Testament". При разрыве соединения контроллера с брокером (по любой причине) последний будет публиковать в топик megad/14/status (а если указан megadID, то [megadid]/status) сообщение с текстом "Offline". Таким образом, сервер может своевременно получить информацию о недоступности контроллера. В то же время при подключении к брокеру контроллер будет публиковать в этот же топик сообщение с текстом "Online". | ||
<br><br> | <br><br> | ||
Особенности настройки MQTT-брокера | <big>Особенности настройки MQTT-брокера</big> | ||
<br><br> | <br><br> | ||
Необходимо настроить брокер так, чтобы он автоматически не склеивал пакеты, поступающие со стороны серверного ПО. | Необходимо настроить брокер так, чтобы он автоматически не склеивал пакеты, поступающие со стороны серверного ПО. | ||
Для брокера mosquitto необходимо настроить опцию set_tcp_nodelay. | Для брокера mosquitto необходимо настроить опцию '''set_tcp_nodelay'''. | ||
# Disable Nagle's algorithm on client sockets. This has the effect of reducing | # Disable Nagle's algorithm on client sockets. This has the effect of reducing | ||
# latency of individual messages at the potential cost of increasing the number | # latency of individual messages at the potential cost of increasing the number | ||
# of packets being sent. | # of packets being sent. | ||
set_tcp_nodelay true | set_tcp_nodelay true | ||
Версия от 15:12, 9 декабря 2025
Для того, чтобы связать контроллер TouchOn с сервером по протоколу MQTT, необходимо выбрать опцию MQTT в поле SRV Type. Порт 1883 пропишется автоматически.

После старта устройство соединяется с сервером и подписывается на топик: megad/14/cmd, который используется для передачи команд контроллеру. Здесь 14 - последний байт IP адреса устройства. Если прописан MegadID, то используется он. Например, если в качестве MegadID указан "test", то контроллер подпишется на топик: test/cmd Это же правило работает и при публикации в топиках информации о портах.
1486454199: New connection from 10.35.16.12 on port 1883. 1486454199: New client connected from 10.35.16.12 as megad-14 (c1, k30). 1486454199: Sending CONNACK to megad-14 (0, 0) 1486454200: Received SUBSCRIBE from megad-14 1486454200: megad/14/cmd (QoS 0) 1486454200: megad-14 0 megad/14/cmd 1486454200: Sending SUBACK to megad-14
По умолчанию контроллер соединяется с брокером без авторизации.
Если в поле Passwd указан пароль, используется авторизация. Логином является Megad-ID, который прописывается в соответствующей вкладке.
Опция Retain устанавливает соответствующий флаг в публикуемых сообщениях. Данный флаг указывает MQTT-брокеру сохранять последнее сообщение в каждом топике. Если серверное ПО перезагружалось или какое-то время не работало, то при запуске брокер отправит программному обеспечению опубликованные контроллером сообщения. По одному последнему сообщению на каждый топик.
В данный момент при срабатывании входа устройство публикует информацию в топике: megad/14/n, где n - номер порта. Например, при срабатывании P0 топик будет megad/14/0
1486454392: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/0', ... (22 bytes))
Передача информации происходит в JSON-формате
{"port":"0","cnt":"1"}
Соответственно "сервер", подписанный на megad/14/0 и получивший информацию о событии, публикует сообщение в топике megad/14/cmd Формат сообщений, которые публикуются в топик, соответствует стандартным командам сценариев: 7:2;8:2 (пример)
1486454501: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/0', ... (22 bytes)) 1486454501: Sending PUBLISH to server (d0, q0, r0, m0, 'megad/14/0', ... (22 bytes)) 1486454501: Received PUBLISH from server (d0, q0, r0, m0, 'megad/14/cmd', ... (7 bytes)) 1486454501: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (7 bytes))
В качестве "брокера" можно использовать mosquitto.
В качестве "сервера" можно использовать PHP-скрипт с библиотекой phpMQTT.php
Вот грубый пример такого "сервера".
<?php
require("phpMQTT.php");
$mqtt = new phpMQTT("192.168.0.250", 1883, "server");
if(!$mqtt->connect()){
exit(1);
}
$topics['megad/14'] = array("qos"=>0, "function"=>"procmsg");
$mqtt->subscribe($topics,0);
while($mqtt->proc()){}
$mqtt->close();
function procmsg($topic,$msg){
global $mqtt;
echo "Msg Recieved: ".date("r")."Topic:{$topic} $msg";
$mqtt->publish("megad/14/cmd","8:2;7:2",0);
}
?>
Через протокол MQTT также можно запросить состояние порта устройства. Для этого следует отправить в топик "megad/14/cmd" (где 14 - последний байт IP-адреса) команду вида "get:10" (где 10 - номер порта). Устройство в ответ на полученный запрос опубликует в топике megad/14/10 следующее: {"port":"10","value":"ON"} В поле "value" в текущий момент содержится то, что содержалось бы в ответе на HTTP GET-запрос. В ситуации, когда к порту подключен датчик температуры, ответ будет примерно таким: {"port":"32","value":"temp:26.31"}
Начиная с версии 4.36b4 контроллер может принимать команды, отправленные в топик "cmd", в формате JSON
{"port":6} // получить состояние порта P6
{"port":10,"value":"ON"} // включить порт P10
Для протокола MQTT контроллер поддерживает технологию "Last Will and Testament". При разрыве соединения контроллера с брокером (по любой причине) последний будет публиковать в топик megad/14/status (а если указан megadID, то [megadid]/status) сообщение с текстом "Offline". Таким образом, сервер может своевременно получить информацию о недоступности контроллера. В то же время при подключении к брокеру контроллер будет публиковать в этот же топик сообщение с текстом "Online".
Особенности настройки MQTT-брокера
Необходимо настроить брокер так, чтобы он автоматически не склеивал пакеты, поступающие со стороны серверного ПО.
Для брокера mosquitto необходимо настроить опцию set_tcp_nodelay.
# Disable Nagle's algorithm on client sockets. This has the effect of reducing # latency of individual messages at the potential cost of increasing the number # of packets being sent. set_tcp_nodelay true