Добавляем zigbee кнопки STYRBAR IKEA - d51x/openhab-docs-russian GitHub Wiki

STYRBAR Wireless Dimmer E2001

image

Кнопку будем добавлять через MQTT, а в качестве zigbee шлюза используется Homed-zigbee

Сначала создадим MQTT Thing:

styrbar_1

Создадим каналы:

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)

image

В поле event пишем click

image

Это означает, кто триггер канала будет фильтровать знаение и сработает тогда, когда в нем появится значение click.

Далее настраиваем необходимые действия.