Статья

Aqara cube + deCONZ. А что же он реально может?

Многие из тех у кого есть даже не предполагают, что он может. Сколько команд он поддерживает? Многие скажут, что 6. Стандартное постукивание, передвижение, повороты. Именно это и может куб подключенный к шлюзу Xiaomi. А что же может куб подключенный к HA через Conbee стик или zigbee2mqtt. Поскольку у меня Conbee 2 стик, то про это я и расскажу.

Итак, мы добавили кубик в deCONZ. Не буду на этом останавливаться. Процедура стандартная и много раз описанная. Но, почему-то новых выключателей в HA не добавилось и все что мы видим это уровень заряда батареи у куба. После недолгих поисков и вопросов нам объясняют что, триггерами для автоматизаций будут deconz_event, которые будут передаваться в HA  при любом действии с кубом. И вот здесь оказывается, что таких event на самом деле не 6... и не 10... а около сорока. Кому интересно то можете посмотреть ролик DrZzs, где все популярно объяснено. И вот тут начинается самое интересное. Нормальный человек скажет: "Зачем мне столько? Я и половины не запомню!". И будет прав. Поэтому уже сделали компонент, который "кастрирует" кубик до привычного состояния  и 6 функций против 40. Я же пошел другим путем и начал рассуждать логически. Кроме двух независимых функций: подбрасывание кубика (event: 7008) и тряска кубика (event: 7007) есть еще 6 функций для КАЖДОЙ грани (event: Х00Х), плюс вращение по часовой стрелке и против.  

И вот тут первое разочарование.  Поскольку, при вращении кубик меняет ID и имеет значения только больше или меньше 0, в зависимости от того, в какую сторону крутить, то эту функцию можно прикрутить только к одной автоматизации. К примеру яркость лампы или громкость плеера. А хотелось большего. Вот если бы можно было и вращение на разных гранях привязать к разным автоматизациям.  И я нашел такое решение. Простое и оригинальное. Но скажу сразу, чтобы использование куба стало приятной процедурой сначала пришлось подумать над логикой и поработать в Photoshop. Кто не может в нем, можете использовать Illustrator, Corel, Painter или детские фломастеры и акварельные краски на худой конец (но за результат я не отвечаю).

Итак, чтобы использовать вращение на каждой грани нам нужен condition для каждой грани и брать мы его будем из input_select.cubemode который сначала и создадим. Для этого в файле input_select.yaml  добавляем наши варианты для кубика

cubemode: name: Cube Mode options: - None - Sony TV - Mi box - Lights initial: None icon: mdi:cube-outline

Если же у вас такого фала нет, то создаем его в папке с configuration.yaml, не забыв добавить в него:

input_select: !include input_select.yaml

Сразу поясню. Сейчас у меня задействовано только три грани: свет, телевизор и mi box в спальне. Mode "None" я предусмотрел для того, чтобы можно было "отключать" куб и избежать ложных срабатываний. Ваши возможности ограничены только вашими фантазиями и количеством граней у кубика. После этого делаем автоматизации для выбора соответствующего mode. Для себя я решил, что движение slide (event: x000) на определенной грани будет активировать автоматизации для этой грани, а shake (event: 7007), будет сбрасывать все моды (None). Для этого в файле automations.yaml добавляем следующие автоматизации:

- alias: Xiaomi Cube - None trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 7007 action: service: input_select.select_option data_template: entity_id: input_select.cubemode option: None - alias: Xiaomi Cube - Cube Mode Sony TV trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 2000 action: service: input_select.select_option data_template: entity_id: input_select.cubemode option: Sony TV

Автоматизации для остальных граней такие же как для Sony TV. Меняется только event  в соответствии с гранью, которую вы выбрали. 

А вот теперь начинается самое интересное. В вас должен проснуться фантазер и по возможности художник. Ибо запомнить все движения куба без визуальной помощи просто невозможно. Немного погуглив я нашел фотобумагу для принтера с клейкой  основой для печати стикеров. Одного листа 10х15 хватает на весь кубик. Пришлось вспоминать молодость и Photoshop.  Мой совет: сначала рисуете, потом пишете код. Вы должны нарисовать все так, чтобы вам было удобно и главное интуитивно понятно.  Вот мой вариант. Пока только две грани. На самом деле рисовать мне гораздо сложнее, чем писать автоматизации. И дело не в умении, а в дурацком перфекционизме.

И только после того как наклейка заняла свое место на кубе можно отлавливать event и делать для них автоматизации.  От себя дополню, что на любой грани двойной удар Double Tap (event: x00x) я назначил на включение (выключение) , чтобы не путаться и у этих триггеров нет условия, поскольку они не повторяются и довольно сложно неправильно стучать кубом. Но это уже на ваше усмотрение. Дальше примеры некоторых автоматизаций. Я выделил самые сложные. 

Включение (выключение) телевизора Sony (для него отведена грань 2) двойной удар:

- alias: Включение телевизора trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 2002 action: - service_template: > {% if is_state('media_player.sony_bravia_tv' , 'off') %} media_player.turn_on {% else %} media_player.turn_off {% endif %} entity_id: media_player.sony_bravia_tv

Выключение звука телевизора и его обратное включение (переворачиваю кубик, а потом возвращаю обратно)

- alias: Sone TV mute on trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 5002 condition: - condition: state entity_id: input_select.cubemode state: 'Sony TV' action: service: media_player.volume_mute data: entity_id: media_player.sony_bravia_tv is_volume_muted: "true" - alias: Sone TV mute off trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 2005 condition: - condition: state entity_id: input_select.cubemode state: 'Sony TV' action: service: media_player.volume_mute data: entity_id: media_player.sony_bravia_tv is_volume_muted: "false"

Громкость телевизора состоит из автоматизации

- alias: Громкость телевизора trigger: platform: event event_type: deconz_event event_data: id: switch_30 condition: - condition: state entity_id: input_select.cubemode state: 'Sony TV' action: service_template: script.tv_volume_{{ 'up' if trigger.event.data.event | int > 0 else 'down' }}

которая запускает скрипты

tv_volume_up: alias: Громкость телевизора UP sequence: - service: media_player.volume_set entity_id: media_player.sony_bravia_tv data_template: volume_level: '{{ states.media_player.sony_bravia_tv.attributes.volume_level 0.05 }}' tv_volume_down: alias: Громкость телевизора DOWN sequence: - service: media_player.volume_set entity_id: media_player.sony_bravia_tv data_template: volume_level: '{{ states.media_player.sony_bravia_tv.attributes.volume_level - 0.05 }}'

А вотпример автоматизации, для листания избранных каналов

- alias: Sone TV chanel trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 3002 condition: - condition: state entity_id: input_select.cubemode state: 'Sony TV' action: service: media_player.select_source data_template: entity_id: media_player.sony_bravia_tv source: > {% if states.media_player.sony_bravia_tv.attributes.source == "Канал 1" %} Канал 2 {% elif states.media_player.sony_bravia_tv.attributes.source == "Канал 2" %} Канал 3 {% elif states.media_player.sony_bravia_tv.attributes.source == "Канал 3" %} Канал 4 {% elif states.media_player.sony_bravia_tv.attributes.source == "Канал 4" %} Канал 5 {% elif states.media_player.sony_bravia_tv.attributes.source == "Канал 5" %} Канал 1 {%- else -%} {% endif %}

То же самое и с гранью которая отвечает за свет (у меня это грань 3). Регулировка яркости у меня раздельно для каждого прикроватного светильника, поскольку если работать с группой, то он будет включать второй светильник, ели он выключен, а так будет регулироваться только включенные светильники

- alias: Светильники в спальне яркость Куб trigger: platform: event event_type: deconz_event event_data: id: switch_30 condition: - condition: state entity_id: input_select.cubemode state: 'Lights' action: - service: light.turn_on data_template: entity_id: light.lamp_nataliya brightness: > {%if trigger.event.data.event | float < 0 and states.light.lamp_nataliya.attributes.brightness | float > 31 %} {} {% else %} {} {%endif %} - service: light.turn_on data_template: entity_id: light.lamp_stephan brightness: > {%if trigger.event.data.event | float < 0 and states.light.lamp_stephan.attributes.brightness | float > 31 %} {} {% else %} {} {%endif %}

На перевороты кубика на различные грани назначены все возможные варианты освещения. И тут все просто. Как пример:

- alias: Светильник Степан включение Куб trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 1003 condition: - condition: state entity_id: input_select.cubemode state: 'Lights' action: - service_template: > {% if is_state('light.lamp_stephan','off') %} light.turn_on {% else %} light.turn_off {% endif %} data: entity_id: light.lamp_stephan

Еще на одной грани у меня Mi box. Но думаю, это уже лишнее. Я просто хотел показать, на что способен Aqara cube при правильном подходе. В настоящее время у меня около 20 команд на трех гранях. Еще три ждут своей очереди. Есть куда расти.

P.S. Ну и напоследок. В чате меня упрекали, что в темноте я ничего не найду и не сделаю..... 

good_natt: alias: Good natt sequence: - service: androidtv.adb_command data: entity_id: media_player.mi_box_4 command: HOME - delay: seconds: 3 - service: media_player.turn_off entity_id: media_player.sony_bravia_tv - delay: seconds: 2 - service: light.turn_off entity_id: light.bedroom - service: automation.turn_on entity_id: automation.temperaturnyi_rezhim_noch

Это скрипт, который запускается подбрасыванием кубика

- alias: Good Natt id: cubetest01 trigger: platform: event event_type: deconz_event event_data: id: mi_magic_cube event: 7008 action: service: script.good_natt

После этого я кладу куб на прикроватную тумбочку гранью Lights вверх. И если мне вдруг придется вставать среди ночи, я нащупаю куб и.... правильно, постучу им пару раз. 

P.P.S Это моя первая статься, поэтому прошу ногами не бить. С удовольствием выслушаю все замечания и предложения. Работа продолжается.


Вернуться назад

Устройства


Phoscon

deCONZ Conbee 2

(5 отзывов)

Вернуться назад