- PVSM.RU - https://www.pvsm.ru -

Как подружить Siri и Xiaomi

В этой статье представлен гайд по настройке совместной работы светильников Xiaomi, работающих по Wi-Fi и Bluetooth, с Siri при помощи Homebridge. А также описаны грабли, на которые я успел наступить.

Как подружить Siri и Xiaomi - 1

Зима. Холод. Темнота. Подниматься с утра тяжело.

Сказали, что освещение, имитирующее рассвет может помочь проснуться.

Ну что же? Взял ночник от Xiaomi, а точнее Yeelight. Поигрался немного, расстроился от криво работающего софта. Но яркое и красочное освещение прибавило позитива, рабочее место преобразилось, стало уютнее.

Полистал каталог, нашёл светодиодную ленту с возможностью подключения по Wi-Fi. Сравнил с аналогами, оказалась ярче и дешевле. Беру!

И снова проблемы с ПО. Отваливается устройство, приходится переподключаться при входе в программу. Объединение в группу также не всегда корректно работало, да и тянуться до телефона для настройки и включения — занятие не самое благодарное. Искать и покупать дополнительные хабы не стал, отложил всё до лучших времён.

На день рождения коллеги подарили «малинку», в просторечии — Raspberry Pi 3 Model B. Важно, что у устройства есть и Wi-Fi, и Bluetooth модуль. Так как софт для работы с HomeKit-устройствами я уже писал и изучил много материалов, то вспомнил, что можно включить в эту инфраструктуру неподдерживаемые устройства через homebridge [1] — сервер, написанный на NodeJS, который эмулирует HomeKit API.

Шаг 1. Установка ОС

Начинаем с установки ОС. Я выбрал Raspbian в качестве дистрибутива.

  • Берём карту памяти на 8 Гб или больше (мне попалась на 16 Гб от компании %#&@).
  • Форматируем и копируем инсталятор

На этом этапе возникли первые проблемы. Файлы по какой-то причине не копировались на карту корректно, хотя форматирование с помощью фирменной утилиты SD Memory Card Formatter [2] проходило успешно. Собрался сдавать карту в магазин и брать другую, но решил попробовать перед этим внешний кард-ридер. И, о чудо — всё заработало!

Оказалось, что проблема была в Mac mini, который не поддерживал карты формата SDHC.

  • Вставляем карту в «малинку», подключаем клавиатуру, мышь и монитор через HDMI и включаем питание.

Инсталлятор очень простой, а загрузка проходит достаточно быстро. Если возникнут проблемы, загляните в официальную документацию [3].

Шаг 2. Начальная настройка ОС

  • Меняем пароли и настраиваем учетки.

Для удаленной работы с Rasperry Pi

  • Включаем доступ по SSH и VNC [4]. Можно через графический интерфейс.

Как подружить Siri и Xiaomi - 2

Изначально «малинка» питалась от USB-порта, но при этом на экране появлется индикация о том, что питания категорически не хватает. Зарядник от iPhone + micro USB-шнурок решили эту проблему.

Все манипуляции проводились в офисе из-за отсутствия монитора для первоначальной настройки дома.

К выходным «малинка» добралась до квартиры, а руки уже чесались поскорее заняться подключением умных лампочек.

Запустил Raspberry…

Попытка подключения по VNС… Чёрный экран.

Попытка подключения по SSH… Никакой реакции.

Жду понедельника и возвращаюсь на работу. Подключаю клавиатуру, мышь и монитор.
Система не старует. Возможно, проблема возникла из-за повреждений SD-карты или божественного вмешательства.

Переустановил систему. Вспомнил старую цитату: «Люди делятся на две категории:
те, кто еще не делает бэкапы, и те кто их уже делает»
, и принял волевое решение.

Шаг 0. Делаем бэкап

Способов много. Я выбрал самый, на мой взгялд, простой. Полное копирование образа SD карты [5] на флешку.

Создаем образ

  • Находим SD-карту в списке:
    diskutil list

Как подружить Siri и Xiaomi - 3

  • Сохраняем образ на диск:
    sudo dd if=/dev/disk2 of=~/Desktop/raspberrypi.dmg

Восстанавливаем образ

  • Находим SD-карту в списке:

    diskutil list

  • Размонтируем SD-карту:

    diskutil unmountDisk /dev/disk2

  • Форматируем карту. Можно через утилиту, можно через Terminal:

    sudo newfs_msdos -F 16 /dev/disk2

  • Восстанавливаем ранее сохранённый образ:
    sudo dd if=~/Desktop/raspberrypi.dmg of=/dev/disk2

Недостаток — долгое время восстановление образа. Зависит от объёма карты, её скорости и характеристик кард-ридера. У меня процесс занял около 4-х часов.
Преимущество — простота и надёжность.

Кстати, можно попытаться ускорить этот процесс. Подробная инструкция на
StackExchange [6].

Через пару дней пришлось снова выполнять восстановление из бэкапа. При выполнении любой операции возникала ошибка «segmentation fault». Скорее всего, проблема была из-за неисправной карты памяти. Приобрёл новую, на этот раз от Transcend, пока что полёт нормальный.

Шаг 3. Установка компонентов

Начинаем с компонентов, которые понадобятся для запуска [7] сервера:

Как всегда начинаем с обновления системы:

sudo apt-get update
sudo apt-get upgrade

После обновления проверяем версию g++:

g++ -v

У меня оказалась gcc version 6.3.0, для установки homebridge нужна версия 4.9+.

Далее устанавливаем NodeJS. Я поставил 9 версию:

curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
sudo apt-get install -y nodejs

Следующий шаг — установка Avahi, библиотеки для работы с сервисами Apple Bonjour:

sudo apt-get install libavahi-compat-libdnssd-dev

На этом этап предварительной подготовки завершён.

Шаг 4. Установка homebridge

Теперь можно следовать основной инструкции в репозитории проекта [1].
С помощью команды npm install -g homebridge установку произвести не удалось, поэтому следуем указаниям автора проекта и запускаем инсталлятор с sudo и флагом -g --unsafe-perm homebridge:

sudo npm install -g --unsafe-perm homebridge

Homebridge установлен. Если у вас возникли проблемы, можете почитать
wiki [7].

Переходим к настройке и подключению устройств:

  • Xiaomi Yeelight Smart Light Strip
  • Xiaomi Yeelight Bedside Lamp

Шаг 5. Yeelight Smart Light Strip

Как подружить Siri и Xiaomi - 4

Light Strip подключается по WiFi, его настройка проще. Начинаем с установки плагина [8]:

sudo npm install -g homebridge-re-yeelight
sudo npm install -g miio@0.14.1

Версию miio ограничиваем 0.14.1, с более новой плагин работать на данный момент не будет.

Теперь выполняем поиск устройств в локальной сети. Перед этим, естественно, нужно подключить Yeelight Smart Light Strip по WiFi:

miio --discover

Получаем примерно такой вывод в консоль:

INFO  Discovering devices. Press Ctrl+C to stop.

Device ID: xxxxxxxx
Model info: yeelink.light.strip1
Address: 192.168.1.xxx
Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx via auto-token
Support: At least basic

Записываем на листочке и переходим к настройке файла конфигурации.

Шаг 6. Создание config.json

Создаём файл конфигурации. Переходим в каталог ~/.homebridge:

touch config.json
nano config.json

Добавляем хаб и устройства, которыми хотим управлять, в файл конфигурации. Обычно конфигурации для конкретных устройств указаны на странице с проектом плагина, в файле config.json.

В конфиг добавляем следующую информацию о homebridge и устройстве, которое мы получили на предыдущем шаге.

{
    "bridge": {
        "name": "Yeebridge",
        "username": "18:00:27:40:BC:1B",
        "port": 51825,
        "pin": "031-45-154"
    },
    "platforms": [
        {
            "platform": "ReYeelightPlatform",
            "deviceCfgs": [{
                "type": "ColorLEDStrip",
                "ip": "192.168.1.253",
                "token": "5d0b94f872b4372164b6e61d472d424b",
                "Name": "LED Strip",
                "updatetimer": true,
                "interval": 5
            }]
        }
    ]
}

  • name — имя под которым хаб отображается в приложении Home (Дом).
  • pin — пин-код, понадобится для подключения homebridge к приложению Home.
    Далее идет описание подключенных платформ и аксессуаров.
    В качестве платформы для WiFi-устройств от Yeelight мы используем ReYeelightPlatform.

Конфигурация устройств для этой платформы:

  • type — обычно на странице проекта указываются типы для каждого поддерживаемого устройства.
  • ip и token — получили на предыдущем шаге.
  • name — имя для отображения в приложении Home.

Шаг 7. Подключение Xiaomi Yeelight Bedside Lamp

Как подружить Siri и Xiaomi - 5

Устройство подключается через BLE. То есть понадобится установленный Bluetooth-модуль с поддержкой BLE. Для работы с подобными устройствами нужна другая платформа — ReYeelightBLEPlatform [9]

Устанавливаем библиотеки для работы со стеком Bluetooth:

sudo apt-get install libbluetooth-dev libudev-dev

Находим папку с установленными node модулями:

npm -g root

У меня она оказалась по адресу /usr/lib/node_modules. Устанавливаем необходимые права и выполняем установку.

Если не установить права, а выполнить установку под sudo, в дальнейшем могут возникнуть проблемы:

sudo chown -R $(whoami) /usr/lib/node_modules/

npm install noble

sudo apt-get install libcap2-bin

sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)

sudo hciconfig hci0 up

Теперь устанавливаем плагин HomeBridge для поддержки Xiaomi Yeelight Bedside Lamp [10]:

sudo npm install -g homebridge-re-yeelight-ble

Будьте внимательны при установке других модулей, управляющих устройствами через Bluetooth, могут возникнуть проблемы совместимости. Например, я долго не мог разобраться, почему у меня постоянно происходило отключение лампы. Оказалось, что проблема в установленном homebridge-yeelight [11]. После его удаления нормальная работа была восстановлена. Возможно, вам тоже пригодится эта команда:

sudo npm uninstall -g homebridge-yeelight

Адрес устройства ищем с помощью:

sudo hcitool -i hci0 lescan

Вывод может выглядеть примерно так:

LE Scan ...
8C:26:A6:3D:67:40 (unknown)
8C:26:A6:3D:67:40 (unknown)
FF:B6:36:78:96:A6 RK-M171S
F6:24:41:E8:6B:14 XMCTD_
F6:24:41:E8:6B:14 XMCTD_
76:79:01:46:86:5A (unknown)
76:79:01:46:86:5A (unknown)
D6:64:11:49:E6:8D RK-G200S
F6:BC:36:68:96:A3 (unknown)
D6:66:11:49:E6:8D (unknown)

Нужное устройство помечено, как XMCTD_.

В моём случае F6:24:41:E8:6B:14 XMCTD_
Добавляем в config.json новую платформу ReYeelightBLEPlatform и необходимое устройство с указанным адресом.

Итоговый config.json будет выглядеть примерно так:

{
    "bridge": {
        "name": "Yeebridge",
        "username": "18:00:27:40:BC:1B",
        "port": 51825,
        "pin": "031-45-154"
    },
    "platforms": [
        {
            "platform": "ReYeelightBLEPlatform",
            "defaultValue": {
                "F6:24:41:E8:6B:14": "Bedside Lamp"
            }
        },
        {
            "platform": "ReYeelightPlatform",
            "deviceCfgs": [{
                "type": "ColorLEDStrip",
                "ip": "192.168.1.253",
                "token": "560696f676b4672164b6e61d472d424b",
                "Name": "LED Strip",
                "updatetimer": true,
                "interval": 5
            }]
        }
    ]
}

Шаг 8. Запуск homebridge

Запускаем Homebridge для проверки с помощью команды homebridge в консоле.

На экране появляется QR-код для добавления хаба в приложение Home (Дом). А чуть ниже — PIN-код из файла config.json, он используется для ручного подключения.

Как подружить Siri и Xiaomi - 6

Если видим заветную строку [ReYeelight][BLE]Timer Started, то скорее всего вы настроили BLE-устройство правильно.

Ваша лампа Xiaomi Yeelight Bedside Lamp начнёт мигать, соединение установлено. Необходимо подтвердить его с помощью нажатия кнопки MODE на лампе.

На этом этапе у нас имеется настроенный хаб и 2 подключенных к нему устройства.

  • Запускаем приложение Home.
  • Жмём добавить аксессуар.
  • Сканируем QR код и соглашаемся на подключение несертифицированного устройства.
    home
    Для каждого из подключаемых устройств можно выбрать имя, по которому к нему можно обращаться через Siri, и комнату, в которой устройство располагается.

Как подружить Siri и Xiaomi - 7 Как подружить Siri и Xiaomi - 8 Как подружить Siri и Xiaomi - 9

При настройке/перенастройке устройств может возникнуть проблема с повторным добавлением homebridge в приложение Home. Для её устранения выполняем следующие операции [12] в папке с настройками homebridge.

  • Останавливаем работу homebridge.
  • Удаляем каталоги accessories и persist:

rm -r accessories
rm -r persist

Запускаем homebridge и снова добавляем хаб в приложение Home.

Более подробно о настройке аксессуаров, помещений и сценариев читайте на сайте Apple [13].

Шаг 9. Запускаем Homebridge при загрузке Raspberry Pi

После перезагрузки устройства необходимо автоматически возобнолять работу Homebridge. Для этого выполним запуск [7] в качестве сервиса [14].

Загружаем два файла, homebridge и homebridge.service по ссылке [15]. Файл homebridge размещаем в /etc/default. Файл homebridge.service помещаем в /etc/systemd/system.

В файл homebridge.service вносим изменения. Путь ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS меняем на ExecStart=/usr/bin/homebridge $HOMEBRIDGE_OPTS.

Добавляем пользователя, под которым будет запускаться сервис:

sudo useradd --system homebridge

Создаем папку для хранения конфигурации homebridge, копируем конфиги и устанавливаем права:

sudo mkdir /var/homebridge
sudo cp ~/.homebridge/config.json /var/homebridge/
sudo cp -r ~/.homebridge/persist /var/homebridge
sudo cp -r ~/.homebridge/accessories /var/homebridge

Запускаем сервис:

sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl start homebridge

Проверяем его статус:

systemctl status homebridge

Шаг 10. Siri. Трудности перевода

Siri — не самая лёгкая в общении девушка.
Например, светодиодную ленту не стоит называть «Подсветка стола». Siri пытается выполнить «Под светку стало», при этом отвечает, что она не может закрыть программу.

Как подружить Siri и Xiaomi - 10

Также не следует называть осветительный прибор «Настольной лампой». Если сказать «Включи настольную лампу», включается весь свет в помещении. При выполнении команды «Выключи настольную лампу» выключается только настольная лампа. Скорее всего, это название для группы, но отсутствие вменяемой документации по Siri в этом разобраться никак не помогает.

Поменять цвет освещения — тоже задача нетривиальная. Например, по-английски команда звучит и произносится очень просто: «Change light color to green». На русском получаем: «Установи цвет света на зелёный».
Поменяй или измени, вместо установи не сработает. Вместо «цвет света» Siri постоянно распознаёт команду, как «свет света», либо «цвет цвета». Пора к логопеду. Проще в этой фразе поменять слова местами, тогда у Siri реже будут возникать промашки. В результате, «стоп-фраза» звучит как «Установи Света цвет на синий». Да, Света в запросе будет с заглавной буквы!

Как подружить Siri и Xiaomi - 11

Небольшая шпаргалка для [16] работы с Siri:

Привет, Siri, включи свет.
Привет, Siri, выключи свет.
Привет, Siri, установи яркость света в спальне на 50%.
Привет, Siri, установи цвет света на красный.

Небольшое демо напоследок.

Заключение

Уже 2 недели сервер стабильно работает и радует возможностью простого управления устройствами через приложение Home. Немного расстраивает, что работа над плагинами забрасывается разработчиками, но исходники есть на github, а у Homebridge присутствует документация, в которой описан процесс создания собственного плагина. В дальнейшем планирую добавлять в Home новые устройства и датчики, а также автоматизировать процесс запуска устройств при входе в квартиру. Если возникнут вопросы или пожелания, пишите в комментах, буду рад помочь и ответить на ваши вопросы.

Всем добра и тёплой весны! ^_^

Автор: GxocT

Источник [17]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/275005

Ссылки в тексте:

[1] homebridge: https://github.com/nfarina/homebridge

[2] SD Memory Card Formatter: https://www.sdcard.org/downloads/formatter_4/

[3] официальную документацию: https://www.raspberrypi.org/documentation/installation/installing-images/

[4] SSH и VNC: https://www.raspberrypi.org/documentation/remote-access/vnc/README.md

[5] копирование образа SD карты: https://computers.tutsplus.com/articles/how-to-clone-raspberry-pi-sd-cards-using-the-command-line-in-os-x--mac-59911

[6] StackExchange: https://askubuntu.com/questions/523037/how-would-i-speed-up-a-full-disk-dd

[7] понадобятся для запуска: https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi

[8] установки плагина: https://github.com/Zzm317/homebridge-re-yeelight

[9] ReYeelightBLEPlatform: https://www.npmjs.com/package/homebridge-re-yeelight-ble

[10] Xiaomi Yeelight Bedside Lamp: https://github.com/Zzm317/homebridge-re-yeelight-ble

[11] homebridge-yeelight: https://github.com/vvpossible/homebridge_yeelight

[12] выполняем следующие операции: https://github.com/nfarina/homebridge/issues/1231

[13] Apple: https://support.apple.com/ru-ru/HT204893

[14] сервиса: https://timleland.com/setup-homebridge-to-start-on-bootup/

[15] ссылке: https://gist.github.com/johannrichard/0ad0de1feb6adb9eb61a/#file-homebridge

[16] шпаргалка для: http://voiceapp.ru/articles/siri-commands

[17] Источник: https://habrahabr.ru/post/350312/?utm_source=habrahabr&utm_medium=rss&utm_campaign=350312