Добавляем zigbee кнопки STYRBAR IKEA - d51x/openhab-docs-russian GitHub Wiki
STYRBAR Wireless Dimmer E2001
Кнопку будем добавлять через MQTT, а в качестве zigbee шлюза используется Homed-zigbee
Сначала создадим MQTT Thing:
Создадим каналы:
1. Канал Battery Level
Уровень заряда батарейки в процентах
Тип канала: Number
MQTT State Topic: homed/fd/zigbee/Styrbar_1
Incoming Value Transformations: JSONPATH:$.battery
2. Канал Last Seen
Время (unixtime), когда последний раз устройство было видно шлюзом
Тип канала: Number
MQTT State Topic: homed/status/zigbee
Incoming Value Transformations: JSONPATH:$.devices.[?(@.name=="Styrbar_1")].lastSeen
3. Канал Button Left Event
Событие, когда левая кнопка (стрелка влево) была коротко нажата click
, долго нажата hold
или отпущена release
Тип канала: Trigger
MQTT State Topic: homed/fd/zigbee/Styrbar_1
Incoming Value Transformations:
JSONPATH:$.action∩JINJA:{{ value == "leftClick" ? "click" : (value == "leftRelease" ? "release" : (value == "leftHold") ? "hold" : "") }}
В данном случае применена цепочка трансформаций через символ "∩"
Первая часть трансформации JSONPATH извлекается свойство action
из json вида {"action":"leftClick","battery":100,"linkQuality":160}
Вторая часть трансформации JINJA проверяет, что пришло в свойстве action
.
Согласно правилам трансформации JINJA значение содержится в зарезервированном слове value
.
Если в value
пришло leftClick
, то в канал триггера мы возвратим значение click
.
Если в value
пришло leftHold
, то в канал триггера мы возвратим значение hold
.
Если в value
пришло leftRelease
, то в канал триггера мы возвратим значение release
.
Делается это для унификации значений в триггерах.
Для всех триггеров кнопок я делаю названия значений унифицированными - pressed
, click
, hold
, release
4. Канал Button Right Event
Событие, когда правая кнопка (стрелка вправо) была коротко нажата click
, долго нажата hold
или отпущена release
Тип канала: Trigger
MQTT State Topic: homed/fd/zigbee/Styrbar_1
Incoming Value Transformations:
JSONPATH:$.action∩JINJA:{{ value == "rightClick" ? "click" : (value == "rightRelease" ? "release" : (value == "rightHold") ? "hold" : "") }}
5. Канал Button Up Event
Событие, когда верхняя кнопка была коротко нажата click
, долго нажата hold
или отпущена release
Тип канала: Trigger
MQTT State Topic: homed/fd/zigbee/Styrbar_1
Incoming Value Transformations:
JSONPATH:$.action∩JINJA:{{ value == "on" ? "click" : (value == "stopLevel" ? "release" : (value == "moveLevelUp") ? "hold" : "") }}
6. Канал Button Down Event
Событие, когда нижняя кнопка была коротко нажата click
, долго нажата hold
или отпущена release
Тип канала: Trigger
MQTT State Topic: homed/fd/zigbee/Styrbar_1
Incoming Value Transformations:
JSONPATH:$.action∩JINJA:{{ value == "off" ? "click" : (value == "stopLevel" ? "release" : (value == "moveLevelDown") ? "hold" : "") }}
Использование в правилах
В правилах будем использовать триггеры.
Например, включить свет можно при сработке триггера нажатия верхней кнопки (короткое нажатие)
В блоке When нажимаем Add Trigger и выбираем Thing Event.
Ищем и выбираем thing для StyrBar, который создавали выше.
Оставляем выбранным пункт a trigger channel fired
Выбираем канал (Channel) buttonUpEvent (Button Up Event)
В поле event
пишем click
Это означает, кто триггер канала будет фильтровать знаение и сработает тогда, когда в нем появится значение click
.
Далее настраиваем необходимые действия.