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

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


работа_с_mqtt

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
работа_с_mqtt [2019/11/11 01:01]
admin
работа_с_mqtt [2020/04/18 13:25]
192.168.88.1
Строка 1: Строка 1:
-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 применяется в данном контроллере:
  
-Имеются два типа топиков - командные и статусные +В общем виде, формат топика выглядит следующим образом:
-По командным - обьекты контроллера получают инструкции извне, интерпретируют их, выполняют и изменившийся статус направляют в статусные топики+
  
-Также, в статусные топики направляется информация если состояние обьекта контроллера изменилось в связи с локальными процессами (например, обьект переключен при помощи локальных входов) +<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"],
Строка 18: Строка 44:
 Настройка mqtt задает (в порядке следования): Настройка mqtt задает (в порядке следования):
  
-* Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается) +* Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается). В данном примере, используется имя **LHexample03**  
 * IP или доменное имя брокера * IP или доменное имя брокера
 * Порт (по умолчанию, 1883) * Порт (по умолчанию, 1883)
 * Имя пользователя и пароль (по умолчанию, отсутствуют) * Имя пользователя и пароль (по умолчанию, отсутствуют)
  
-Настройка topics позволяет определить как формируются MQTT топики у данного контроллера+===== MQTT топики ===== 
 + 
 +Настройка topics в примере выше, позволяет определить как формируются 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/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
  
-(Именно это соответствует настройкам по-умолчанию)+ 
 +(Именно это соответствует настройкам по-умолчанию, если вообще не указан раздел topics в конфигурации)
  
 Зачем два типа командных топиков: Зачем два типа командных топиков:
-Через индивидуальный, можно управлять каждым контроллером домена в отдельности. Через общий широковещательный - выдавать команды сразу всем контроллерам домена+Через индивидуальный, можно управлять каждым контроллером домена в отдельности. Через общий широковещательный - выдавать команды сразу всем контроллерам, с одинаковым параметром //bcst//, если они подключены к одному брокеру и имеют одинаковый //root//
  
 В старой версии контроллера, имя топика завершалось именем item для управления В старой версии контроллера, имя топика завершалось именем item для управления
-В данный //совмещенный// топик можно отправлять как команды ON OFF HALT REST и прочие (см. ниже), так и установки канала (яркость и пр)+В данный //совмещенный// топик можно отправлять как команды ON OFF HALT REST и прочие (см. ниже), так и установки канала (яркость, температура и пр.)
 Отличительная особенность - запись в такой совмещенный топик ненулевого значения включает канал, запись нулевого - выключает канал; Отличительная особенность - запись в такой совмещенный топик ненулевого значения включает канал, запись нулевого - выключает канал;
 Топики данного типа используются для интеграции с системой OpenHab Топики данного типа используются для интеграции с системой OpenHab
  
-В последних версияхдополнительно к ним, организованы топики с окончанием /set /cmd  +===== Суффиксы ===== 
-Это позволяет полностью разнести логику подачи команд каналу и логику установки параметров канала+ 
 +В последних версиях введено понятие "суффикс"ли окончание). Это значение, которое может находиться в конце топика и определяет то свойство канала, к которому надо применить параметр, полученный в Payload  
 + 
 +В первую очередь, остановимся на суффиксах /set и /cmd  
 + 
 +Использование их позволяет полностью разнести логику подачи команд каналу и логику установки параметров канала
 Например, если канал диммера выключен, запись в топик с окончанием /set значения 60 не включит его, а задаст значение яркости 60%. Если следом отправить ON в топик с окончанием /cmd, диммер включится на заранее установленное значение 60% яркости. Данные топики крайне полезны для интеграции LightHub системами HomeAssistant, HomeBridge. Например, если канал диммера выключен, запись в топик с окончанием /set значения 60 не включит его, а задаст значение яркости 60%. Если следом отправить ON в топик с окончанием /cmd, диммер включится на заранее установленное значение 60% яркости. Данные топики крайне полезны для интеграции LightHub системами HomeAssistant, HomeBridge.
  
Строка 62: Строка 112:
 Кроме окончаний /cmd и /set возможны окончания, специфичные для того или иного типа устройства: Кроме окончаний /cmd и /set возможны окончания, специфичные для того или иного типа устройства:
 например, окончания например, окончания
-/fan (значения HIGH, MEDIUM, LOW) + 
-/mode  +Кондиционер:  
-/lock (ON,OFF) + 
-/swing (ON,OFF)+/fan (значения HIGH, MEDIUM, LOW) 
 + 
 +/mode  
 + 
 +/lock (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. (Пока еще не полная поддержка, но основные моменты соблюдены)
Строка 74: Строка 141:
 В частности, контроллер использует топик $state, чтобы отражать текущее состояние ("ready" или "disconnected"), а в топик $stats, раз в 30 секунд  передает uptime и размер доступной памяти В частности, контроллер использует топик $state, чтобы отражать текущее состояние ("ready" или "disconnected"), а в топик $stats, раз в 30 секунд  передает uptime и размер доступной памяти
  
-Важные для понимания моменты:+===== Важные для понимания моменты ===== 
 При старте контроллер сам подписывается на свои статусные топики на период 5 секунд. Таким образом, он получает от MQTT брокера последнее состояние всех своих обьектов (items) и восстанавливает их значения на момент до старта При старте контроллер сам подписывается на свои статусные топики на период 5 секунд. Таким образом, он получает от MQTT брокера последнее состояние всех своих обьектов (items) и восстанавливает их значения на момент до старта
  
Строка 80: Строка 148:
  
 Например, контроллер получил команду "ON" для RGB канала. Он восстанавливает из памяти последнее значения цвета, насыщенности и яркости (HSV) и в статусный топик передает уже эти значения Например, контроллер получил команду "ON" для RGB канала. Он восстанавливает из памяти последнее значения цвета, насыщенности и яркости (HSV) и в статусный топик передает уже эти значения
 +
 +===== Команды и инструкции, которые могут быть переданы в Payload =====
  
 Базовый набор команд (совместим с OpenHab): Базовый набор команд (совместим с OpenHab):
  
-* ON - Turn channel ONIf some previous channel state is stored (ColorVolume- it will be restored backElse 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> - Задает яркость для света (с сохранением цвета), Температуру для термостата, уровень для 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> - Color notation in Hue,Saturation,Volume
 +* <Numeric 0..365>,<Numeric 0..100> - Color notation in Hue,Saturation. Яркость остается неизменной. Сделано для простой интеграции с HomeAssistant, в котором разнесены установки яркости и цвета
  
  
-Расширенный набор комманд (также, данные команды работают для групп каналов):+Расширенный набор команд (также, данные команды работают для групп каналов):
  
 * HALT - выключить канал(группу) * HALT - выключить канал(группу)
Строка 97: Строка 168:
 * 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 пунктов
  
 Команды, применимые для кондиционера и термостата: Команды, применимые для кондиционера и термостата:
 +
 * AUTO * AUTO
 +
 * HEAT * HEAT
 +
 * COOL * COOL
 +
 * FAN_ONLY * FAN_ONLY
 +
 * DRY * DRY
 +
 +* HIGH
 +
 +* MED
 +
 +* LOW
 +
 +Прочие варианты:
 +
 +* ENABLED - аналог ON
 +
 +* DISABLED - аналог OFF
 +
 +* TRUE - аналог ON
 +
 +* FALSE - аналог OFF
 +
 +* INCREASE
 +
 +* DECREASE
  
  
работа_с_mqtt.txt · Последнее изменение: 2023/10/24 18:43 — admin