User Tools

Site Tools


работа_с_mqtt

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
работа_с_mqtt [2019/12/04 21:43]
admin
работа_с_mqtt [2020/04/18 13:25] (current)
192.168.88.1
Line 1: Line 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"​],​
Line 18: Line 44:
 Настройка mqtt задает (в порядке следования):​ Настройка mqtt задает (в порядке следования):​
  
-* Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается) ​+* Имя контроллера (к одному брокеру может быть подключен только один контроллер с конкретным именем. Если подключается второй с тем же именем - первый отключается). В данном примере,​ используется имя **LHexample03**  
 * IP или доменное имя брокера * IP или доменное имя брокера
 * Порт (по умолчанию,​ 1883) * Порт (по умолчанию,​ 1883)
 * Имя пользователя и пароль (по умолчанию,​ отсутствуют) * Имя пользователя и пароль (по умолчанию,​ отсутствуют)
  
-Настройка topics позволяет определить как формируются MQTT топики у данного контроллера+===== MQTT топики ===== 
 + 
 +Настройка topics ​в примере выше, ​позволяет определить как формируются MQTT топики у данного контроллера
  
 В данном примере: ​ В данном примере: ​
  
 **Командные топики (широковещательные):​** ​ **Командные топики (широковещательные):​** ​
 +
  
 * myhome/​in/<​имя item> * myhome/​in/<​имя item>
Line 34: Line 64:
  
 * myhome/​in/<​имя item>/​cmd * myhome/​in/<​имя item>/​cmd
 +
 +* myhome/​LHexample03/<​имя item>/<​иной специфичный для устройства суффикс>​
  
  
 **Командные топики (индивидуальные):​** ​ **Командные топики (индивидуальные):​** ​
 +
  
 * myhome/​LHexample03/<​имя item> * myhome/​LHexample03/<​имя item>
Line 43: Line 76:
  
 * myhome/​LHexample03/<​имя item>/​cmd * myhome/​LHexample03/<​имя item>/​cmd
 +
 +* myhome/​LHexample03/<​имя item>/<​иной специфичный для устройства суффикс>​
  
  
 **Статусные топики:​** ​ **Статусные топики:​** ​
 +
  
 * myhome/​s_out/<​имя item> * myhome/​s_out/<​имя item>
Line 54: Line 90:
  
  
-(Именно это соответствует настройкам по-умолчанию)+(Именно это соответствует настройкам по-умолчанию, если вообще не указан раздел 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.
  
Line 72: Line 113:
 например,​ окончания например,​ окончания
  
-/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. (Пока еще не полная поддержка,​ но основные моменты соблюдены)
Line 89: Line 141:
 В частности,​ контроллер использует топик $state, чтобы отражать текущее состояние ("​ready"​ или "​disconnected"​),​ а в топик $stats, раз в 30 секунд ​ передает uptime и размер доступной памяти В частности,​ контроллер использует топик $state, чтобы отражать текущее состояние ("​ready"​ или "​disconnected"​),​ а в топик $stats, раз в 30 секунд ​ передает uptime и размер доступной памяти
  
-Важные для понимания моменты:+===== Важные для понимания моменты ​===== 
 При старте контроллер сам подписывается на свои статусные топики на период 5 секунд. Таким образом,​ он получает от MQTT брокера последнее состояние всех своих обьектов (items) и восстанавливает их значения на момент до старта При старте контроллер сам подписывается на свои статусные топики на период 5 секунд. Таким образом,​ он получает от MQTT брокера последнее состояние всех своих обьектов (items) и восстанавливает их значения на момент до старта
  
Line 95: Line 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 - выключить канал(группу)
Line 112: Line 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 пунктов
  
 Команды,​ применимые для кондиционера и термостата:​ Команды,​ применимые для кондиционера и термостата:​
Line 125: Line 183:
 * DRY * DRY
  
 +* HIGH
 +
 +* MED
 +
 +* LOW
 +
 +Прочие варианты:​
 +
 +* ENABLED - аналог ON
 +
 +* DISABLED - аналог OFF
 +
 +* TRUE - аналог ON
 +
 +* FALSE - аналог OFF
 +
 +* INCREASE
 +
 +* DECREASE
  
  
работа_с_mqtt.1575484981.txt.gz · Last modified: 2019/12/04 21:43 by admin