Инструменты пользователя

Инструменты сайта


работа_с_mqtt

Это старая версия документа!


MQTT является, пожалуй, самым общим и распространенным протоколом в IoT Работа контроллера LightHub полностью управляется при помощи данного протокола Поподробнее про MQTT можно прочитать тут

Теперь о том, как это применяется в данном контроллере:

Имеются два типа топиков - командные и статусные По командным - объекты контроллера получают инструкции извне, интерпретируют их, выполняют и изменившийся статус направляют в статусные топики

Также, в статусные топики направляется информация если состояние объекта контроллера изменилось в связи с локальными процессами (например, объект переключен при помощи локальных входов)

Пример настройки MQTT в JSON конфигурации:

 "mqtt":["LHexample03","test.mosquitto.org",1883,"user","password"],
 "topics":{"root":"myhome","bcst":"in","out":"s_out"}

Настройка mqtt задает (в порядке следования):

* Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается) * IP или доменное имя брокера * Порт (по умолчанию, 1883) * Имя пользователя и пароль (по умолчанию, отсутствуют)

Настройка topics позволяет определить как формируются MQTT топики у данного контроллера

В данном примере:

Командные топики (широковещательные):

* myhome/in/<имя item>

* myhome/in/<имя item>/set

* myhome/in/<имя item>/cmd

Командные топики (индивидуальные):

* myhome/LHexample03/<имя item>

* myhome/LHexample03/<имя item>/set

* myhome/LHexample03/<имя item>/cmd

Статусные топики:

* myhome/s_out/<имя item>

* myhome/s_out/<имя item>/set

* myhome/s_out/<имя item>/cmd

(Именно это соответствует настройкам по-умолчанию)

Зачем два типа командных топиков: Через индивидуальный, можно управлять каждым контроллером домена в отдельности. Через общий широковещательный - выдавать команды сразу всем контроллерам домена

В старой версии контроллера, имя топика завершалось именем item для управления В данный совмещенный топик можно отправлять как команды ON OFF HALT REST и прочие (см. ниже), так и установки канала (яркость, температура и пр) Отличительная особенность - запись в такой совмещенный топик ненулевого значения включает канал, запись нулевого - выключает канал; Топики данного типа используются для интеграции с системой OpenHab

В последних версиях, дополнительно к ним, организованы топики с окончанием /set и /cmd Это позволяет полностью разнести логику подачи команд каналу и логику установки параметров канала Например, если канал диммера выключен, запись в топик с окончанием /set значения 60 не включит его, а задаст значение яркости 60%. Если следом отправить ON в топик с окончанием /cmd, диммер включится на заранее установленное значение 60% яркости. Данные топики крайне полезны для интеграции LightHub системами HomeAssistant, HomeBridge.

Кроме окончаний /cmd и /set возможны окончания, специфичные для того или иного типа устройства: например, окончания

/fan (значения HIGH, MEDIUM, LOW)

/mode

/lock (ON,OFF)

/swing (ON,OFF)

/quiet (ON,OFF)

для канала управления кондиционером

LightHub (во многом) руководствуется конвенцией homie для формирования структуры топиков MQTT. (Пока еще не полная поддержка, но основные моменты соблюдены)

В частности, контроллер использует топик $state, чтобы отражать текущее состояние («ready» или «disconnected»), а в топик $stats, раз в 30 секунд передает uptime и размер доступной памяти

Важные для понимания моменты: При старте контроллер сам подписывается на свои статусные топики на период 5 секунд. Таким образом, он получает от MQTT брокера последнее состояние всех своих обьектов (items) и восстанавливает их значения на момент до старта

Принимая в качестве команд расширенный набор команд, контроллер интерпретирует их и в статусный топик передает уже интерпретированные значения.

Например, контроллер получил команду «ON» для RGB канала. Он восстанавливает из памяти последнее значения цвета, насыщенности и яркости (HSV) и в статусный топик передает уже эти значения

Базовый набор команд (совместим с OpenHab):

* ON - Включить канал. Если сохранились предыдущие значения (яркость, температура и пр) то эти значения будут восстановлены. (Исключение - если яркость была менее 30% то будет установлена яркость 30%). Если предыдущие значения не найдены, будут заданы значения по-умолчанию: Для света - белый, яркостью 100%, для термостата - 20 градусов цельсия * 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, в котором разнесены установки яркости и цвета

Расширенный набор команд (также, данные команды работают для групп каналов):

* HALT - выключить канал(группу) * 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

* FAN_ONLY

* DRY

работа_с_mqtt.1632530990.txt.gz · Последнее изменение: 2021/09/25 03:49 — 65.21.180.7