Продолжение эпопеи с голосовым управлением
В предыдущей части через Алису голосом управляли контроллерами MiLight. Но такие контроллеры стоят совсем не в каждом доме, что сильно ограничивает наши возможности. Поэтому я задался целью расширить голосовое управление на обычные лампы, светильники, люстры и так далее, но с минимальной переделкой стандартной системы освещения. Все что будет нужно для такой системы — это замена обычных выключателей на смарт-выключатели, работающие по протоколу ZigBee и установка USB ZigBee-координатора СС2531. Естественно, из предыдущей статьи у нас уже есть умная колонка Яндекса и настроенный распбери.
По затратам CC2531 обошелся рублей в 250, программатор для него CC-Debugger Texas Instrument — 500 руб. Дороже всего обошлись сенсорные смарт-выключатели Livolo VL-C701Z-11 — около 2000 руб за штуку, а чуть позже добавился кнопочный выключатель Aqara Wall Switch Zigbee тоже около 2000.
Изначально я планировал управлять выключателями через фирменный ZigBee шлюз-маршрутизатор Livolo C700ZW-12, подключить его к опенхабу и рулить с помощью Алисы через yandex2mqtt. Подключил железки к электричеству, настроил приложение от Livolo на телефоне. Шлюз выключатели увидел, соединился и с телефона все прекрасно работало. Но опенхаб с маршрутизатором срастить не удалось из-за отсутствия необходимого функционала в опенхабе.
Пришлось отказаться от шлюза и сращивать выключатели напрямую с донглом CC2531. И вот в этом помог проект zigbee2mqtt от товарища Koenkk. В результате удалось соединиться ZigBee-координатором со смарт-выключателями, проверить сначала их работу через запросы в mqtt-топик на распбери, а потом и настроить управление с помощью Алисы.
Итак, как происходила настройка:
1. Прошиваем сниффер CC2531 прошивкой координатора и втыкаем его в юсб-порт распбери. Для того, чтобы не было сообщений о нехватке питания, распбери лучше подключать к 5В источнику питания не меньше 2А. Проверяем, что стик в системе правильно определился: ls -l /dev/serial/by-id покажет что-то вроде usb-Texas_Instruments_TI_CC2531_USB_CDC___0X00124B0458ED3DDF-if00 -> ../../ttyACM0. Наличие последнего куска вывода "-> ../../ttyACM0" очень важно если что. Стик может определиться и без этой части и работать ничего не будет. Мне при такой проблеме помогла перепрошивка стика.
2. Устанавливаем Zigbee2mqtt, но не запускаем.
3. Здесь важно правильно настроить /opt/zigbee2mqtt/data/configuration.yaml. Дело в том, что смарт-выключатели Livolo работают на 26-м канале, поэтому этот канал нужно явно задать в файле. И еще важно обратить внимание на количество пробелов в начале строк файла. Для проверки синтаксиса конфигурационного файла можно использовать YAML-валидатор.
4. После того, как конфигурационный файл прописан правильно и донгл воткнут, запускаем zigbee2mqtt. Потом топаем к выключателям, запускаем сопряжение и смотрим на вывод консоли. Появятся строки обмена данными, взаимные расшаркивания между устройствами и наконец что-то вроде этого:
MQTT publish: topic 'zigbee2mqtt/0x001*********a8c9', payload '{"state_left":"OFF","state_right":"OFF","linkquality":60}'
. Это значит, что выключатель подключен и прислал свой статус. Если запустить еще пару консолей, то можно через mqtt-топик поуправлять светом: выключить - mosquitto_pub -d -h localhost -t zigbee2mqtt/0x001*********a8c9/left/set -m OFF -u a**** -P *****
и включить — mosquitto_pub -d -h localhost -t zigbee2mqtt/0x001*********a8c9/left/set -m ON -u a**** -P *****
, а также можно проконтролировать команды в топике: mosquitto_sub -d -h localhost -t zigbee2mqtt/0x001*********a8c9/left/set -u a**** -P *****
. Кстати, для Livolo и Aqara топики различаются не только идентификаторами 0x0..., но и структурой. Структуру топиков для поддерживаемых устройств можно посмотреть тут.5. После того, как проверили, что мы можем управлять устройствами через mqtt, будем сопрягать все с Яндексом. Здесь появился некоторый нюанс. Команды для управления устройствами через zigbee2mqtt в топики приходили в виде ON/OFF, а yandex2mqtt как оказалось выдает 1/0. Решением этой неувязочки была правка в yandex2mqtt файла /mnt/data/root/yandex2mqtt/device.js. Нужно в switch в кейсе «on» заменить значения int = val? на 'on': 'off' вместо '1': '0'. Естественно, пришлось команды переключения также поправить в опенхабе в соответствующих топиках. Без этого свет на Milight перестал бы работать. И самое интересное выявилось тут же — так как yandex2mqtt и zigbee2mqtt публикуют все на локальный сервер mqtt, то для управления устройствами zigbee оказался вроде и не нужен опенхаб. Связка работает напрямую — yandex(Алиса)-yandex2mqtt-mqtt-zigbee2mqtt-устройство zigbee. Даже неожиданно как-то. Но продолжим. Топик управления устройством запиливаем в конфигурационный файл /mnt/data/root/yandex2mqtt/config.js в новое виртуальное устройство, обновляем список устройств в системе диалогов яндекса и можно пинать Алису, чтобы включила лампочку.
6. Также удалось подключить к системе пару датчиков Xiaomi, датчик протечки и датчик температуры/влажности/давления. Работают на батарейках 2032. Они естественно не управляются, а просто периодически в топики скидывают информацию типа
#033[32mzigbee2mqtt:info #033[39m 2020-05-04 21:12:21: MQTT publish: topic 'zigbee2mqtt/0x0015************', payload '{"battery":91,"voltage":2985,"temperature":26.2,"humidity":28.65,"pressure":1006.9,"linkquality":52}' - это датчик #всегочтоестьнасвете или #033[32mzigbee2mqtt:info #033[39m 2020-05-04 21:21:07: MQTT publish: topic 'zigbee2mqtt/0x001************7', payload '{"battery":100,"voltage":3025,"linkquality":0,"water_leak":true}'
— датчик протечки в стакане с водой. Пока никакой особой пользы нет, но если все это отпарсить и сделать что-то реагирующее типа отправки смс или циферок в какую-нибудь вебморду, то будет очень хорошо.И немного видео:
mikes
Какой-то сложный и дрогой путь вы выбрали, куда проще взять тот же sonoff и управлять ими локально через wifi с нужными интеграциями (home assistant, openhub и тд)
Или вообще перешить их в tasmota и получить mqtt.
Бонусом идёт отсутствие необходимости менять проводку ибо работают без нуля.
alex1iam Автор
Недопонял немного вопроса. Алиса распознает речь, лампочки включаются. Проводку менять не надо, выключатели без нулевого провода. Разверните, плиз, что вы имели ввиду
mikes
вопрос только архитектурного характера так сказать :) почему именно такое оборудование, что было решающим фактором? именно zigbee для выключателей. получается дороже в 2 раза просто чет те которые по wifi.
alex1iam Автор
Есть выключатели, работающие вообще на 433 мегагерцах. Они еще дешевле, чем зигби и вайфай. Есть очень большая, просто огромная разница. Лучше, если вы сами прочитаете в инете.
goodic
Sonoff в своей линейке имеет выключатели которые не требуют нулевого провода в месте установки выключателя. Минус один — некоторые светодиодные лампы начинают мигать. И с недавнего времени Sonoff может управляться Алисой. Достаточно добавить аккаунт.
alex1iam Автор
Аккаунты можно добавить на кучу разных устройств и пользоваться ими, это стандартная фишка производителей. И зависеть от работоспособности той же кучи посторонних серверов, потому что ваше устройство будет зависеть не только от яндекса, но и от работы сервера производителя.
goodic
Ваша правда. Пока готов мириться с тем, что Алиса не всегда сможет свет выключить. На что-то более критичное я такие устройства не ставлю. И в планах заменить прошивку выключателей на поддерживающую работу с локальным сервером «умного дома».