Лучшее решение для HomeKit камеры и лайфхак плавного видео для всех Xiaomi камер
Однажды мы уже рассказывали про камеры в homekit, но недавно на одном из русских аналогов AliExpress были неплохие скидки на камеру XiaoFang от Xiaomi, поэтому решил ее приобрести и завести себе в дом.
Как и в случае с большинством камер от Xiaomi, необходимо будет поставить хак. Это всё достаточно подробно расписано на гитхабе разработчика, но на всякий случай опишу своими словами, потому что в некоторых местах можно запутаться.
Установка хака
- Заходим на страницу гитхаба и скачиваем актуальную прошивку для нашей камеры. На момент написания статьи ссылка на прошивку вела сюда
- Форматируем microSD в формат FAT32. На macOS это делается стандартной программой «Дисковая утилита». Если не получилось, то открываем Terminal и используем следующие команды:
- diskutil list
и ищем среди списка диск с нашим именем (должно быть что-то типа disk1) - sudo diskutil eraseDisk FAT32 <NAME> MBRFormat <DISK>
где вместо <NAME> пишем имя нашей карты (по-умолчанию, это ‘NO NAME’), а вместо <DISK> то, что мы нашли в пункте 1
В таком случае наша команда будет выглядеть вот такsudo diskutil eraseDisk FAT32 ‘NO NAME’ MBRFormat /dev/disk1
- diskutil list
- После чего закидываем скачанную прошивку на отформатированную SD карту и переименовываем её в demo.bin
- Вставляем карту в камеру, зажимаем кнопку setup на нижней стороне камеры и подаём питание (кнопку не отпускаем)
- Сначала загорается желтая лампочка, потом белая, и когда начнет мигать желтая лампочка, отпускаем кнопку setup
- Дальше по инструкции автора мы должны подождать 3 минуты, после чего лампочка перестанет мигать. В моем случае она мигала минут 10, после чего я решил пойти дальше, не дожидаясь того когда лампочка перестанет мигать (т.е. просто выдернул питания не дожидаясь окончания миганий)
- Следующим шагом мы отключаем камеру от питания и вынимаем карточку
- Скачиваем репозиторий с файлами с гитхаба (просто нажимаем DOWNLOAD ZIP по ссылке)
- Переносим все файлы из папки «firmware_mod» в корень карты, а сам файл прошивки с карты можем удалить. Должно получиться примерно так:
E:/
├── Media
├── autoupdate.sh
├── bin
├── config
├── controlscripts
├── driver
├── run.sh
├── scripts
├── uEnv.bootfromnand.txt
├── uEnv.bootfromsdcard.txt
├── uboot-flash
└── www - Переходим в папку config/
- Открываем файл wpa_supplicant.conf.dist в текстовом редакторе Sublime или что-то на подобие
- Заполняем своими данными Wi-Fi (в большинстве случаев достаточно поменять ssid (название вашей wi-fi сети) и psk (пароль)
- Сохраняем файл, как wpa_supplicant.conf (без dist)
- Вставляем карту в камеру и подаем питание
- После чего можете попробовать перейти по ссылке https://dafang или же если не получилось, то найти в роутере устройство с именем DAFANG и перейти по адресу с указанием IP типа https://192.168.31.222
- После чего вам необходимо будет принять сертификат и пройти форму авторизацию (логин:root, пароль ismart12)
На этом базовая установка хака закончена. Дальше перейдем к настройкам для проброса её в HomeKit.
Настройка камеры
Проводим следующие настройки на самой камере. Для этого заходим в веб-интерфейс камеры:
- Переходим во вкладку System -> Video и повторяем там эти настройки
- Если вы купили камеру недавно, то скорее всего у вас нет датчика освещенности (в смысле в новых камерах производитель убрал этот датчик), и поэтому переводим настройки Auto Night Mode в положение SW (режим sw позволяет определять день/ночь по анализу самого изображения без датчика света) и на всякий случай нажимаем на off и потом on для того, чтобы точно применить настройки (не забудьте проверить работоспособность этой настройки, потому что веб-интерфейс иногда не с первого раза применяет их — при необходимости повторите действия)
- А если вы захотите также и получить адекватный звук на выходе в HomeKit, то необходимо перейти во вкладу System -> Audio и выполнить настройки со скриншота (не забываем выполнить Reboot камеры после внесения изменений).
Настройка HomeBridge
Теперь переходим к HomeBridge.
Тут мы НАСТОЯТЕЛЬНО рекомендуем выполнить данные шаги инструкции, т.к. это сильно изменит ваш опыт использования данной камеры и в общем любой камеры, которая изначально поставляет поток видео в h264 (а это практически любая xiaomi camera).
Особенность данного потока в том, что его можно практически полностью проксировать в том виде, который поставляется от камеры, из-за чего нам не нужно напрягать нашу Raspberry Pi лишним кодированием видео. К сожалению, на момент написания статьи (версия плагина homebridge-camera-ffmpeg 0.1.11) в плагине из коробки такой возможности нет, поэтому нам необходимо будет модифицировать код плагина, чтобы тот не производил лишних операций в нашем видео.
Справка: кодирование видео достаточно сильно сьедает CPU нашей Raspberry, для того, чтобы его избежать нам необходимо будет передать на вход vcodec copy (означающий «ничего не делай с нашим видео") и убрать так называемый скейлинг (увы, это нужно сделать в самом коде, а не в параметрах конфига).
Для этого:
- Если вдруг у вас еще не установлен плагин homebridge-camera-ffmpeg и не собран ffmpeg, то идем в данную статью и делаем это (сразу делаем это вместе со звуком)
- Находим где установлен плагин homebridge-camera-ffmpeg и файл ffmpeg.js
- Скорее всего он будет у вас по адресу /usr/local/lib/node_modules/homebridge-camera-ffmpeg/ffmpeg.js
- Редактируем данный файл
sudo nano /usr/local/lib/node_modules/homebridge-camera-ffmpeg/ffmpeg.js
- Ищем в файле строку #300 с содержанием
if (videoFilter !== null) {
- Заменяем данную строку на следующее содержание
if (videoFilter !== null && vcodec !== "copy") {
- Сохраняем изменения (ctrl + C, потом Y и enter)
Теперь переходим в конфиг HomeBridge и добавляем следующие настройки:
"platforms": [ { "platform": "Camera-ffmpeg", "cameras": [ { "name": "Camera 5", "videoConfig": { "source": "-rtsp_transport tcp -y -i rtsp://192.168.31.222:8554/unicast", "maxFPS": 30, "vcodec": "copy", "packetSize": 376, "audio": true } } ] } ]
Т.е. всё, что нам нужно указать, это source, подставив там IP вашей камеры, указать фпс, обязательно указать vcodec: copy и по желанию добавить audio: true для передачи звука и задать packetSize для того, чтобы аудиокодек не захлебывался и отдавал качественный звук.
После этого сохраняем конфиг, перезапускаем homebridge и довольствуемся результатом.
Итоги
В итоге в приложении Дом вы получите плавное и качественное видео со звуком (да, ffmpeg поставляет не лучший звук, но в общем-то годный).
По итогам скажу, что за 1400 рублей (или за 700-800 рублей со скидками) эту камеру можно назвать лучшим решением для HomeKit камеры, которая передает качественное видео без залипаний и тормозов, звук и ночное видение. Ссылка на Aliexpress.
При этом порывшись в плагинах хомбриджа из камеры также можно вытащить и много других настроек, таких как определение движения по MQTT. Но сегодня не об этом…