Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
работа_с_mqtt [2021/09/25 03:49] 65.21.180.7 старая версия восстановлена (2021/09/23 03:27) |
работа_с_mqtt [2023/10/24 18:43] (текущий) admin [Команды и инструкции, которые могут быть переданы в Payload] |
MQTT является, пожалуй, самым общим и распространенным протоколом в IoT | MQTT является, пожалуй, самым общим и распространенным протоколом в IoT |
Работа контроллера LightHub полностью управляется при помощи данного протокола | Работа контроллера LightHub полностью управляется при помощи данного протокола. |
Поподробнее про MQTT можно прочитать [[https://www.lazyhome.ru/index.php/featurerequest/15-overview/32-mqtt|тут]] | |
| Прочитать про MQTT, а также, ознакомиться с основными принципами протокола и понятиями, которые используются далее, можно [[https://www.lazyhome.ru/index.php/featurerequest/15-overview/32-mqtt|тут]] |
| |
| Именно MQTT является протоколом для интеграции контроллера в системы Умного Дома под управлением таких открытых систем автоматизации как [[интеграция_с_homeassistant|HomeAsistant]], [[openhab|OpenHab]], IOBroker, NodeRed и прочих. (по ссылками приведены примеры конфигураций систем Умного дома) |
| |
Теперь о том, как MQTT применяется в данном контроллере: | Теперь о том, как MQTT применяется в данном контроллере: |
Настройка mqtt задает (в порядке следования): | Настройка mqtt задает (в порядке следования): |
| |
* Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается). В данном примере, используется имя **LHexample03** | * Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается). В данном примере, используется имя **LHexample03** |
| |
* IP или доменное имя брокера | * IP или доменное имя брокера |
* Порт (по умолчанию, 1883) | * Порт (по умолчанию, 1883) |
* Имя пользователя и пароль (по умолчанию, отсутствуют) | * Имя пользователя и пароль (по умолчанию, отсутствуют) |
| |
===== MQTT топики ===== | ===== MQTT топики ===== |
| |
| |
* myhome/in/<имя item> | * myhome/in/<имя item> |
| |
* myhome/in/<имя item>/set | * myhome/in/<имя item>/set |
| |
* myhome/in/<имя item>/cmd | * myhome/in/<имя item>/cmd |
| |
* myhome/LHexample03/<имя item>/<иной специфичный для устройства суффикс> | |
| |
| |
| |
| |
* myhome/LHexample03/<имя item> | * myhome/LHexample03/<имя item> |
| |
* myhome/LHexample03/<имя item>/set | * myhome/LHexample03/<имя item>/set |
| |
* myhome/LHexample03/<имя item>/cmd | * myhome/LHexample03/<имя item>/cmd |
| |
* myhome/LHexample03/<имя item>/<иной специфичный для устройства суффикс> | * myhome/LHexample03/<имя item>/<иной специфичный для устройства суффикс> |
| |
| |
| |
| |
* myhome/s_out/<имя item> | * myhome/s_out/<имя item> |
| |
* myhome/s_out/<имя item>/set | * myhome/s_out/<имя item>/set |
| |
* myhome/s_out/<имя item>/cmd | * myhome/s_out/<имя item>/cmd |
| |
| |
Отличительная особенность - запись в такой совмещенный топик ненулевого значения включает канал, запись нулевого - выключает канал; | Отличительная особенность - запись в такой совмещенный топик ненулевого значения включает канал, запись нулевого - выключает канал; |
Топики данного типа используются для интеграции с системой OpenHab | Топики данного типа используются для интеграции с системой OpenHab |
| |
| **Внимание, начиная с версии ПО 3.0.0 появилось различие:** |
| |
| Топики с суффиксом /set и /hsv оперируют значениями 0..255 для настройки яркости/уровня PWM, одновременно с этим, в топиках без суффикса сохранена старая нотация 0..100 для совместимости с OpenHAB |
| |
| |
===== Суффиксы ===== | ===== Суффиксы ===== |
| |
Использование их позволяет полностью разнести логику подачи команд каналу и логику установки параметров канала | Использование их позволяет полностью разнести логику подачи команд каналу и логику установки параметров канала |
Например, если канал диммера выключен, запись в топик с окончанием /set значения 60 не включит его, а задаст значение яркости 60%. Если следом отправить ON в топик с окончанием /cmd, диммер включится на заранее установленное значение 60% яркости. Данные топики крайне полезны для интеграции LightHub системами HomeAssistant, HomeBridge. | Например, если канал диммера выключен, запись в топик с окончанием /set значения 60 не включит его, а задаст значение яркости 60 (из 255). Если следом отправить ON в топик с окончанием /cmd, диммер включится на заранее установленное значение (из 255) яркости. Данные топики крайне полезны для интеграции LightHub системами HomeAssistant, HomeBridge. |
| |
| |
Кондиционер: | Кондиционер: |
| |
* /fan (значения HIGH, MEDIUM, LOW) | * /fan (значения HIGH, MEDIUM, LOW) |
| |
* /mode | * /mode |
| |
* /lock (ON,OFF) | * /lock (ON,OFF) |
| |
* /swing (ON,OFF) | * /swing (ON,OFF) |
| |
/quiet (ON,OFF) | * /quiet (ON,OFF) |
| |
Цветное освещение: | Цветное освещение: |
| |
* /hue - цвет. Шкала 0-365 | * /hue - цвет. Шкала 0-365 |
| |
* /sat - насыщенность цвета. 0 - белый, 100 - максимально насыщенный | * /sat - насыщенность цвета. 0 - белый, 100 - максимально насыщенный |
| |
* /hsv - цвет в нотации hue,saturation,volume (три параметра через запятую). Также, этот формат принимается по-умолчанию при записи в иные топики | * /hsv - цвет в нотации hue,saturation,volume (три параметра через запятую). Также, этот формат принимается по-умолчанию при записи в иные топики |
| |
* /rgb - Цвет в нотации RGB (#RRGGBB) - не рекомендованый вариант - данная цветовая схема преобразуется в нотацию HSV для дальнейшего использования | * /rgb - Цвет в нотации RGB или RGBW. (3 или 4 цифры, разделенные запятыми). В отличии от HSV нотации, формат не позволяет менять яркость канала путем передачи значения 0.255 в топик с окончанием /set. Но, как и в случае HSV, цвет сохраняется в MQTT брокере на случай перезапуска, работают команды ON, OFF, XON, XOFF, HALT, REST |
| |
===== Служебные топики ===== | ===== Служебные топики ===== |
| |
В частности, контроллер использует топик $state, чтобы отражать текущее состояние ("ready" или "disconnected"), а в топик $stats, раз в 30 секунд передает uptime и размер доступной памяти | В частности, контроллер использует топик $state, чтобы отражать текущее состояние ("ready" или "disconnected"), а в топик $stats, раз в 30 секунд передает uptime и размер доступной памяти |
| |
| В командный топик $command (например, myhome/controllerName/$command можно записывать CLI команды, и они будут выполняться таким же образом, как и в случае получения через последовательный порт (см. [[cli_интерфейс]]) |
| |
===== Важные для понимания моменты ===== | ===== Важные для понимания моменты ===== |
===== Команды и инструкции, которые могут быть переданы в Payload ===== | ===== Команды и инструкции, которые могут быть переданы в Payload ===== |
| |
Базовый набор команд (совместим с OpenHab): | === Базовый набор команд (совместим с OpenHab):=== |
| |
| * ON - Включить канал. Если сохранились предыдущие значения (яркость, температура и пр) то эти значения будут восстановлены. (Исключение - если яркость была менее 30% то будет установлена яркость 30%). Если предыдущие значения не найдены, будут заданы значения по-умолчанию: Для света - белый, яркостью 100%, для термостата - 20 градусов цельсия |
| |
| * OFF - Выключить канал |
| |
| * <Numeric value 0..100 или 0..255> - Задает яркость для света (с сохранением цвета), Температуру для термостата, уровень для PWM |
| |
| * <Numeric 0..365>,<Numeric 0..100>,<Numeric 0..100 или 0..255> - Color notation in Hue,Saturation,Volume |
| |
| * <Numeric 0..365>,<Numeric 0..100> - Color notation in Hue,Saturation. Яркость остается неизменной. Сделано для простой интеграции с HomeAssistant, в котором разнесены установки яркости и цвета |
| |
| |
| === Расширенный набор команд (также, данные команды работают для групп каналов):=== |
| |
| * HALT - выключить канал(группу) |
| |
| * REST - включить канал(группу), канал будет включен только если он был успешно выключен перед этим командой HALT (крайне удобно для Master выключателей. Контроллер умеет включать только то, что было выключено при уходе) |
| |
| * XON - включить канал (группу) (если это не запрещено командой DISABLE). Также см. [[работа_с_mqtt#команды_включаемые_на_время]] |
| |
| * XOFF - выключить (но только при условии что канал был включен командой XON) - идеально для временного включения освещения по детектору движения |
| |
| * TOGGLE: Переключать из состояния ON в OFF. Если применяется для группы - то принимается что если хоть один канал, входящий в группу включен - она активна и при получении TOGGLE произойдет выключение того, что включено. Последующая команда TOGGLE включит все каналы, входящие в группу. |
| |
| * #AABBCC: Color notation in RGB - Home Remote app color picker compatible |
| |
| * %-N : Уменьшить значение (яркость, уровень и пр) канала на N пунктов |
| |
| * %+N : Увеличить значение (яркость, уровень и пр) канала на N пунктов |
| |
| ==== Команды, применимые для кондиционера и термостата:==== |
| |
| * AUTO |
| |
| * HEAT |
| |
| * COOL |
| |
| * FAN_ONLY |
| |
| * DRY |
| |
| * HIGH |
| |
| * MED |
| |
| * LOW |
| |
| Соответственно, данное значение может быть записано в командный топик термостата или кондиционера hbath1. Например: в "myhome/in/h_bath1/cmd" |
| |
| Температура - в топик "myhome/in/hbath1/set" |
| |
* ON - Включить канал. Если сохранились предыдущие значения (яркость, температура и пр) то эти значения будут восстановлены. (Исключение - если яркость была менее 30% то будет установлена яркость 30%). Если предыдущие значения не найдены, будут заданы значения по-умолчанию: Для света - белый, яркостью 100%, для термостата - 20 градусов цельсия | Соответственно, термостат или кондиционер hbath1 свое состояние будет отражать в следующих статусных топиках: |
* OFF - Выключить канал | |
* <Numeric value 0..100> - Задает яркость для света (с сохранением цвета), Температуру для термостата, уровень для PWM | |
* <Numeric 0..365>,<Numeric 0..100>,<Numeric 0..100> - Color notation in Hue,Saturation,Volume | |
* <Numeric 0..365>,<Numeric 0..100> - Color notation in Hue,Saturation. Яркость остается неизменной. Сделано для простой интеграции с HomeAssistant, в котором разнесены установки яркости и цвета | |
| |
| * Режим работы: "myhome/s_out/hbath1/cmd" |
| |
Расширенный набор команд (также, данные команды работают для групп каналов): | * Установленная температура: "myhome/s_out/hbath1/set" |
| |
* HALT - выключить канал(группу) | * Текущая температура: "myhome/s_out/tbath1" |
* REST - включить канал(группу), канал будет включен только если он был успешно выключен перед этим командой HALT (крайне удобно для Master выключателей. Контроллер умеет включать только то, что было выключено при уходе) | |
* XON - включить канал (группу) | |
* XOFF - выключить (но только при условии что канал был включен командой XON) - идеально для использования совместно с детекторами движения | |
* TOGGLE: Переключать из состояния ON в OFF. Если применяется для группы - то принимается что если хоть один канал, входящий в группу включен - она активна и при получении TOGGLE произойдет выключение того, что включено. Последующая команда TOGGLE включит все каналы, входящие в группу. | |
* #AABBCC: Color notation in RGB - Home Remote app color picker compatible | |
* %-N : Уменьшить значение (яркость, уровень и пр) канала на N пунктов | |
* %+N : Увеличить значение (яркость, уровень и пр) канала на N пунктов | |
| |
Команды, применимые для кондиционера и термостата: | |
| |
* AUTO | |
| |
* HEAT | ==== Прочие команды: ==== |
| |
* COOL | * ENABLE для PID регулятора - разрешить авторегулирование, для всех каналов - разрешить команду XON |
| |
* FAN_ONLY | * DISABLE для PID регулятора - запретить авторегулирование, для всех каналов - запретить команду XON. Использование данной пары команд очень удобно для разрешения - запрещения сценариев временного включения канала. Например временного включения света по датчику движения. |
| |
* DRY | * FREEZE - заблокировать канал, после этого он игнорирует поступающие команды |
| |
* HIGH | * UNFREEZE - разблокировать канал |
| |
* MED | Последние 4 команды передаются на статусный топик MQTT с суффиксом /ctrl вместо /cmd как для прочих команд. При рестарте контроллера, эти значения, также, считываются из статусных топиков и восстанавливаются. Это позволяет запоминать комбинации состояний канала в брокере. Например, канал может быть одновременно заблокирован и включен |
| |
* LOW | * INCREASE N - увеличить значение канала на N (аналог %N) |
| |
Прочие варианты: | * DECREASE N - уменьшить значение канала на N (аналог %-N) |
| |
* ENABLED - аналог ON | |
| |
* DISABLED - аналог OFF | ==== Команды с задержкой ==== |
| |
* TRUE - аналог ON | Команды "ON","OFF","REST","TOGGLE","HALT","XON","XOFF","INCREASE","DECREASE","ENABLE","DISABLE","UNFREEZE","FREEZE","AUTO","FAN_ONLY" могут быть выполнены с задержкой после получения, если вместо командный топик с суффиксом /cmd их направить в топик с суффиксом /del и в Payload после названия команды, через пробел, указать величину задержки в миллисекундах |
| |
| |
* FALSE - аналог OFF | ==== Команды, включаемые на время ==== |
| |
* INCREASE | Если после команды указать целое положительное число, то команда будет выполнена, но спустя указанное время, будет выполнена обратная команда |
| |
* DECREASE | Взаимно - Обратные Команды |
| * "ON","OFF", |
| * "TOGGLE","TOGGLE" |
| * "REST","HALT", |
| * "XON","XOFF", |
| * "INCREASE","DECREASE", |
| * "ENABLE","DISABLE", |
| * "UNFREEZE","FREEZE" |
| |
| |
| ==== Команды, с криптографической подписью ==== |
| |
| В том случае, если надо гарантировать, что, даже получив доступ к локальной сети, MQTT брокеру или HTTP API, потенциальный злоумышленник не сможет выполнить критичную команду (например, открытие ворот), можно использовать механизм цифровой подписи команды. |
| |
| подробное описание тут [[криптоподпись_команды]] |
| |