Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
Следующая версия
Следующая версия справа и слева
|
работа_с_mqtt [2019/12/11 21:53] evgeni |
работа_с_mqtt [2021/04/13 16:20] 192.168.88.1 |
Поподробнее про 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 применяется в данном контроллере: |
| |
Имеются два типа топиков - командные и статусные | В общем виде, формат топика выглядит следующим образом: |
По командным - обьекты контроллера получают инструкции извне, интерпретируют их, выполняют и изменившийся статус направляют в статусные топики | |
| |
Также, в статусные топики направляется информация если состояние обьекта контроллера изменилось в связи с локальными процессами (например, обьект переключен при помощи локальных входов) | <code> |
| root/id-устройства_или_bcst_или_out/имя_item-a/[subitem/]suffix |
| </code> |
| |
| * **root**: это значение имеет смысл, если один брокер обслуживает много абсолютно независимых систем или пользователей. По умолчанию - myhome |
| |
| * **id-устройства** - индивидуальное Имя контроллера, задаваемое в его конфигурации (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается). |
| |
| * **bcst** - групповое (широковещательное) имя контроллера. Может быть одинаковое у многих контроллеров, подключенных к одному брокеру. Используя это имя, можно выдавать команду сразу на группу контроллеров (при этом, конечно, требуется чтобы item (устройство или группа устройств), которому адресована данная команда был настроем с одним именем на всех устройствах |
| |
| * **item** - устройство или группа устройств, обслуживаемое данным контроллером. Настраивается в разделе items конфигурации |
| |
| * **subitem** - значение, интерпретируемое драйвером устройства. Опционально |
| Для адресной светодиодной ленты: 10-20 будет значить, что команду надо применить к пикселям в интервале 10-20. |
| Также, если в качестве subitem указать значения из набора ON,OFF,HALT,AUTO,HEAT,COOL,DRY,FAN_ONLY то команда будет применена только к устройствам, находящимся в указанном состоянии. Очень удобно для управления группой устройств. Например, через топик //myhome/in/floor/AUTO/set// можно дать команду всем теплым полам в группе floor всех контроллеров. Команду выполнят только полы, находящимся в режиме AUTO. Теплые полы в режиме OFF или HEAT эту команду проигнорируют. Очень удобно, чтобы автоматически регулировать температуру в зависимости от времени суток/тарифов электроэнергии. В режиме Авто пол на автопилоте, но его можно или насильственно включить или выключить через тот же интерфейс Home Assistant. |
| |
| * **suffix** - параметр определяет какое именно свойство объекта меняется. Может быть одним из стандартного набора **cmd,set** или значением, специфичным для конкретного устройства. Например, для кондиционера или термостата **mode,lock,swing,queit,fan** для цветного освещения: **hue,sat,hsv,rgb**. Подробнее - см ниже. |
| |
| Имеются три типа топиков - командные, статусные и служебные |
| |
| По командным - объекты контроллера получают инструкции извне, интерпретируют их, выполняют и изменившийся статус направляют в статусные топики. |
| |
| Программы удаленного доступа используют статусные топики для отображения актуального текущего состояния устройств в своем интерфейсе, вне зависимости от того, как инициировано изменение, контроллер направит информацию об этом изменении в статусные топики. Данная информация публикуется контроллером с ключом PERSISTENT. Это позволяет любой программе управления, подключившись к брокеру и подписавшись на статусные топики, сразу получить от брокера и отобразить весь актуальный статус устройств. Брокер сам вышлет вновь подключившейся программе последний актуальный статус. |
| |
| Также, в статусные топики направляется информация если состояние объекта контроллера изменилось в связи с локальными процессами (например, объект переключен при помощи локальных входов) |
| |
| Служебные топики используются для нужд, напрямую не связанных с управлением устройствами. Предназначены для удаленного управления контроллером, для информационных сообщений от контроллера относительно настроенных топиков, времени работы, свободной памяти |
| |
| ===== Пример настройки MQTT в JSON конфигурации: ===== |
| |
Пример настройки MQTT в JSON конфигурации: | |
<code> | <code> |
"mqtt":["LHexample03","test.mosquitto.org",1883,"user","password"], | "mqtt":["LHexample03","test.mosquitto.org",1883,"user","password"], |
Настройка mqtt задает (в порядке следования): | Настройка mqtt задает (в порядке следования): |
| |
* Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается) | * Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается). В данном примере, используется имя **LHexample03** |
* IP или доменное имя брокера | * IP или доменное имя брокера |
* Порт (по умолчанию, 1883) | * Порт (по умолчанию, 1883) |
* Имя пользователя и пароль (по умолчанию, отсутствуют) | * Имя пользователя и пароль (по умолчанию, отсутствуют) |
| |
Настройка topics позволяет определить как формируются MQTT топики у данного контроллера | ===== MQTT топики ===== |
| |
| Настройка topics в примере выше, позволяет определить как формируются MQTT топики у данного контроллера |
| |
В данном примере: | В данном примере: |
| |
**Командные топики (широковещательные):** | **Командные топики (широковещательные):** |
| |
| |
* myhome/in/<имя item> | * myhome/in/<имя item> |
| |
* myhome/in/<имя item>/cmd | * myhome/in/<имя item>/cmd |
| |
| * myhome/LHexample03/<имя item>/<иной специфичный для устройства суффикс> |
| |
| |
**Командные топики (индивидуальные):** | **Командные топики (индивидуальные):** |
| |
| |
* myhome/LHexample03/<имя item> | * myhome/LHexample03/<имя item> |
| |
* myhome/LHexample03/<имя item>/cmd | * myhome/LHexample03/<имя item>/cmd |
| |
| * myhome/LHexample03/<имя item>/<иной специфичный для устройства суффикс> |
| |
| |
**Статусные топики:** | **Статусные топики:** |
| |
| |
* myhome/s_out/<имя item> | * myhome/s_out/<имя item> |
| |
| |
(Именно это соответствует настройкам по-умолчанию) | (Именно это соответствует настройкам по-умолчанию, если вообще не указан раздел topics в конфигурации) |
| |
Зачем два типа командных топиков: | Зачем два типа командных топиков: |
Через индивидуальный, можно управлять каждым контроллером домена в отдельности. Через общий широковещательный - выдавать команды сразу всем контроллерам домена | Через индивидуальный, можно управлять каждым контроллером домена в отдельности. Через общий широковещательный - выдавать команды сразу всем контроллерам, с одинаковым параметром //bcst//, если они подключены к одному брокеру и имеют одинаковый //root// |
| |
В старой версии контроллера, имя топика завершалось именем item для управления | В старой версии контроллера, имя топика завершалось именем item для управления |
В данный //совмещенный// топик можно отправлять как команды ON OFF HALT REST и прочие (см. ниже), так и установки канала (яркость и пр) | В данный //совмещенный// топик можно отправлять как команды ON OFF HALT REST и прочие (см. ниже), так и установки канала (яркость, температура и пр.) |
Отличительная особенность - запись в такой совмещенный топик ненулевого значения включает канал, запись нулевого - выключает канал; | Отличительная особенность - запись в такой совмещенный топик ненулевого значения включает канал, запись нулевого - выключает канал; |
Топики данного типа используются для интеграции с системой OpenHab | Топики данного типа используются для интеграции с системой OpenHab |
| |
В последних версиях, дополнительно к ним, организованы топики с окончанием /set и /cmd | **Внимание, начиная с версии ПО 3.0.0 появилось различие:** |
Это позволяет полностью разнести логику подачи команд каналу и логику установки параметров канала | |
Например, если канал диммера выключен, запись в топик с окончанием /set значения 60 не включит его, а задаст значение яркости 60%. Если следом отправить ON в топик с окончанием /cmd, диммер включится на заранее установленное значение 60% яркости. Данные топики крайне полезны для интеграции LightHub системами HomeAssistant, HomeBridge. | Топики с суффиксом /set и /hsv оперируют значениями 0..255 для настройки яркости/уровня PWM, одновременно с этим, в топиках без суффикса сохранена старая нотация 0..100 для совместимости с OpenHAB |
| |
| |
| ===== Суффиксы ===== |
| |
| В последних версиях введено понятие "суффикс" (или окончание). Это значение, которое может находиться в конце топика и определяет то свойство канала, к которому надо применить параметр, полученный в Payload |
| |
| В первую очередь, остановимся на суффиксах /set и /cmd |
| |
| Использование их позволяет полностью разнести логику подачи команд каналу и логику установки параметров канала |
| Например, если канал диммера выключен, запись в топик с окончанием /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 |
| |
| * /sat - насыщенность цвета. 0 - белый, 100 - максимально насыщенный |
| |
| * /hsv - цвет в нотации hue,saturation,volume (три параметра через запятую). Также, этот формат принимается по-умолчанию при записи в иные топики |
| |
| * /rgb - Цвет в нотации RGB (#RRGGBB) - не рекомендованый вариант - данная цветовая схема преобразуется в нотацию HSV для дальнейшего использования |
| |
| ===== Служебные топики ===== |
| |
LightHub (во многом) руководствуется конвенцией [[https://homieiot.github.io/|homie]] для формирования структуры топиков MQTT. (Пока еще не полная поддержка, но основные моменты соблюдены) | LightHub (во многом) руководствуется конвенцией [[https://homieiot.github.io/|homie]] для формирования структуры топиков MQTT. (Пока еще не полная поддержка, но основные моменты соблюдены) |
В частности, контроллер использует топик $state, чтобы отражать текущее состояние ("ready" или "disconnected"), а в топик $stats, раз в 30 секунд передает uptime и размер доступной памяти | В частности, контроллер использует топик $state, чтобы отражать текущее состояние ("ready" или "disconnected"), а в топик $stats, раз в 30 секунд передает uptime и размер доступной памяти |
| |
Важные для понимания моменты: | ===== Важные для понимания моменты ===== |
При старте контроллер сам подписывается на свои статусные топики на период 5 секунд. Таким образом, он получает от MQTT брокера последнее состояние всех своих обьектов (items) и восстанавливает их значения на момент до старта | При старте контроллер сам подписывается на свои статусные топики на период 5 секунд. Таким образом, он получает от MQTT брокера последнее состояние всех своих обьектов (items) и восстанавливает их значения на момент до старта |
| |
| |
Например, контроллер получил команду "ON" для RGB канала. Он восстанавливает из памяти последнее значения цвета, насыщенности и яркости (HSV) и в статусный топик передает уже эти значения | Например, контроллер получил команду "ON" для RGB канала. Он восстанавливает из памяти последнее значения цвета, насыщенности и яркости (HSV) и в статусный топик передает уже эти значения |
| |
| ===== Команды и инструкции, которые могут быть переданы в Payload ===== |
| |
Базовый набор команд (совместим с OpenHab): | Базовый набор команд (совместим с OpenHab): |
| |
* ON - Turn channel ON. If some previous channel state is stored (Color, Volume) - it will be restored back. Else channel will be turned on with default values (White colour/100% volume/20 degrees Celsius in most cases) | * ON - Включить канал. Если сохранились предыдущие значения (яркость, температура и пр) то эти значения будут восстановлены. (Исключение - если яркость была менее 30% то будет установлена яркость 30%). Если предыдущие значения не найдены, будут заданы значения по-умолчанию: Для света - белый, яркостью 100%, для термостата - 20 градусов цельсия |
* OFF - just turn channel off | * OFF - Выключить канал |
* <Numeric value 0..100> - Volume for Dimmer/PWM/FM/Thermostate etc. channels | * <Numeric value 0..100 или 0..255> - Задает яркость для света (с сохранением цвета), Температуру для термостата, уровень для PWM |
* <Numeric 0..365>,<Numeric 0..100>,<Numeric 0..100> - Color notation in Hue,Saturation,Volume | * <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 - выключить канал(группу) | * HALT - выключить канал(группу) |
* TOGGLE: Переключать из состояния ON в OFF. Если применяется для группы - то принимается что если хоть один канал, входящий в группу включен - она активна и при получении TOGGLE произойдет выключение того, что включено. Последующая команда TOGGLE включит все каналы, входящие в группу. | * TOGGLE: Переключать из состояния ON в OFF. Если применяется для группы - то принимается что если хоть один канал, входящий в группу включен - она активна и при получении TOGGLE произойдет выключение того, что включено. Последующая команда TOGGLE включит все каналы, входящие в группу. |
* #AABBCC: Color notation in RGB - Home Remote app color picker compatible | * #AABBCC: Color notation in RGB - Home Remote app color picker compatible |
| * %-N : Уменьшить значение (яркость, уровень и пр) канала на N пунктов |
| * %+N : Увеличить значение (яркость, уровень и пр) канала на N пунктов |
| |
Команды, применимые для кондиционера и термостата: | Команды, применимые для кондиционера и термостата: |
* DRY | * DRY |
| |
| * HIGH |
| |
| * MED |
| |
| * LOW |
| |
| Прочие варианты: |
| |
| * ENABLED - аналог ON |
| |
| * DISABLED - аналог OFF |
| |
| * TRUE - аналог ON |
| |
| * FALSE - аналог OFF |
| |
| * INCREASE |
| |
| * DECREASE |
| |
| |