Ох как долго эта заметка лежала у меня в черновиках. То одно, то другое, то вот и лето наступило - всё никак не мог добраться и нормально написать. Но всё же надо собраться, не раз ведь уже обещал про эту штучку рассказать. Итак, что за зверь такой и зачем он может быть нужен?
Когда-то давным-давно, когда в нашей стране существовала Икеа, я успел купить интересный пультик, который в умах инженеров, его создавших, должен был управлять светом, а у меня стал управлять музыкой. Но это было немножечко не то, как-то неинтуитивно нажимать лево-право и, тем более, вверх-вниз. Поэтому как только на горизонте замаячила крутящаяся кнопка, она была сложена в корзину, оплачена и доставлена мне в руки. Сразу в количестве двух штук.
Не буду тут описывать, как я опять напоролся на неоднократно описанный мною же эффект "поспешишь - людей насмешишь", когда эта штучка не заработала штатно через deConz, но со временем, когда я перешёл на z2m, эта штучка наконец-то нашла своё применение. Даже два.
Но обо всём по-очереди.
Итак, крутилка.
Достаточно большая. Питается от одной батарейки CR2030.
Имеет функционал: крутиться влево, крутиться вправо, нажать, нажать-нажать, нажать и держать, нажать и крутить (тоже влево и вправо).
Может работать в двух режимах - event и command. Это важно! Потому что в режиме event доступно меньше функций и нет возможности получить данные о вращении.
Первое, что приходит в голову (и для чего эту кнопку задумывали инженеры, как будет понятно далее) - это использовать штуку для управления светом - изменение яркости и цвета.
Первое, что пришло в голову мне - это, конечно же, управлять музыкой. Нажатие - play/pause, крутилка влево-вправо - изменение громкости, крутилка с нажатием - предыдущий-следующий трек.
Справедливости ради - вторая крутилка была поставлена в спальне и управляла яркостью светодиодной ленты у кровати, пока лента не ёкнулась.
Тем не менее.
Настраиваем кнопку
Первая итерация: deConz. Тупо не завелось - не было готовой интеграции, а возиться с DDF было как-то лениво.
Вторая итерация: zigbee2mqtt. Добавил в HomeAssistant, настроил простые автоматизации в режиме event, в command как-то не удалось. Отложил.
Третья итерация: zigbee2mqtt в режиме command. Здесь было несколько заходов с автоматизациями, сначала использовал какие-то blueprints из интернета, но они просто читали событие из топика z2m и делали какую-то команду. Для плавного увеличения яркости или громкости такое не очень подходит.
Далее искал информацию и скрипты, чтобы считывать угол поворота и от этого менять яркость или громкость в зависимости от интенсивности кручения. Какое-то время это проработало, более-менее меня устраивало, но вот буквально сегодня, сев писать эту заметку, я подумал что "доколе!" и решил сделать нормально.
Что имелось:
- скрипт автоматизации на блюпринте от pbergman
- ручная автоматизация с собственными доработками
Что получилось:
- скрипт для управления освещения, модернизированный под нужды управления музыкой через Broadlink RM4
Код публиковать не буду, Дзен для этого совсем не подходит, поэтому если кому-то нужен код автоматизации - всегда можно попросить у меня в комментариях или в личку (или в телеграме, на который можно подписаться). Покажу в скриншотах итоговую рабочую схему.
Собственно, сам триггер, который ловит все срабатывания устройства в z2m:
Каждое срабатывание триггера определяет две переменные:
- command - что, собственно, произошло с устройством
- size - на сколько прокрутилось колесо (актуально для поворотов)
Далее обработка всех нужных нам событий.
1. Событие toggle (нажатие) запускает или приостанавливает воспроизведение
2. Событие brigtness_step_up (увеличение яркости, как задумано инженером или поворот по часовой стрелке) - увеличивает громкость, по сути отправляет на пульт команду увеличения громкости количество раз, равное size/12.5, где size - переменная, назначенная выше, а 12.5 - экспериментальным путём подобранное значение, при котором поворот кнопки не слишком быстро и не слишком медленно меняет значение громкости.
3. Событие brigtness_step_down (поворот против часовой стрелки) - делает то же самое, что и brigtness_step_up, но со знаком минус, то есть уменьшает громкость
4. Событие color_temperature_step_up, оно же поворот по часовой стрелке при нажатой кнопке - включает следующий трек на активной колонке
5. Событие color_temperature_step_down, соответтсвенно, поворото с нажатием против часовой стрелки, включает предыдущий трек.
Что очень важно - вся указанная автоматизация должна быть в режиме single! Не queued, не parallel - иначе начнётся бардак с последовательностью выполнения команд, отправляемых кнопкой. Single обеспечивает выполнение только одного действия за раз, что не позволит промотать треки сразу на несколько штук вперёд и назад.
Так что вот, пользуйтесь, а я буду подыскивать нормальную светодиодную ленту себе в спальню, потому что дешёвая лента от Yeelight меня сильно разочаровала, в первую очередь тем, что она работает по своему какому-то bluetooth-протоколу и ничем не поддерживается в Home Assistant. А во вторую очередь тем, что оказалась очень хрупкая и микрочипы в ленте начали гореть, что превратило 6 метров ленты в ненужное барахло.