RF433 кнопки по Mqtt - d51x/openhab-docs-russian GitHub Wiki
Один из вариантов добавления радио-кнопок в OpenHAB это использование esp8266/esp32
с примеником радио-сигналов с какой либо кастомной прошивкой (tasmota, esphome, wifi-iot и т.д.).
Устройство на esp
сигналы от радио-кнопок, транслирует их в коды кнопок и публикует их в соответствующий топик.
wifi-iot:
<login><device-name>/rcdata
например в топик dacha/lr-light/rcdata
придет сообщение с кодом кнопки 8353160
Tasmota:
TBD
Далее создаем Mqtt Thing
и настраиваем channel
Заполняем поля:
-
Channel Identifier
- указываем название канала, например, button (если устройство имеет только одну физическую кнопку) или button1 (если устройство имеет несколько физических кнопок), или buttonLeft, ну и так далее.. -
Label
- указываем понятное человеческое название -
Description
- заполняем по желанию. Я указываю код кнопки, чтобы всегда было видно и не забыть -
Channel type
- выбираем Trigger -
MQTT Trigger Topic
- указываем топик, куда публикуются коды
Так же ставим галку Show advanced
и дополнительно настраиваем трансформацию
JINJA:{{ value == 8353160 ? "pressed" : "" }}
Смысл этого действия - триггер будет иметь значение pressed
, если пришел, именно, такой код, иначе будет пусто.
Далее мы это будем использовать в правилах для управления светом или вентилятором.
Важно!
Требуется установка дополнительной трансформации JINJA
Теперь создадим правило для управления светом при нажатии кнопки.
Есть много вариантов создания правил, но я настраиваю так - одно правило для включения, второе правило для выключения (это имеет свои преимущества в некоторых случая).
Добавляем триггер, при котором сработает правило.
Выбираем Thing Event
Далее выбираем Thing, который создавали (сейчас картинка будет отличаться, т.к. скрин с боевой среды)
Далее выбираем a trigger channel fired
, т.е. когда сработает триггер, выбираем channel
, т.е. при получении кода нужной кнопки
Далее надо надо в поле event
указать, при каком условии реагировать.
Указываем pressed
, то значение, которое писали в шаблоне трансформации выше
Настройка триггера готова. Теперь настроим действия и условия.
Все делаем тоже самое, настраиваем тот же самый триггер.
А далее делаем так
Можно было бы так не делать, не создавать Thing, а просто в правиле прописать в триггере условие по изменению состояния item, если оно равно коду кнопки (при условии, что у вас уже есть другой thing, который имеет канал, который принимает коды и есть привязанный item, который подставляется код).
Либо можно было бы настроить условие в триггере канала не как presses
, а как код кнопки.
В любом случает, тогда коды кнопок были бы размазаны по разным правилам.
В моем подходе появляется абстракция устройства с кнопками.
Эти абстрактные кнопки уже используются в правилах.
Во-первых, не используя код (javascript, blockly, dsl), на текущий момент, OpenHAB не умеет одним действием в правиле переключать состояние Switch-item.
Если использовать код (скрипт), в котором будет проверяться состояние и преключаться item, это имеет один существенный недостаток для меня.
В ОХ 4, если используется DSL или JavaScript (GraalVM), то первый запуск правила длится очень долго. В моем случае (либо на raspberry pi3, либо на TV Box), первый запуск длится около 20 сек - происходит компиляция кода, но потом код выполняется быстро в следующие разы. В community.openhab.org есть такая тема, в которой обсуждают эту проблему, там так же до 20 сек доходит первый запуск.
Поэтому, когда вы перезапустили OpenHAB (причина не важна, например, отключали электричество), то после запуска OpenHAB вы нажимаете на кнопку и ....
- в случае 2-х правил - свет у вас сразу включается
- в случае одного правила со скриптом - свет у вас не включается, вы ждете 20 сек и беситесь )))