Интеграция Apple HomeKit в WB5 (через HomeControl)

В мире домашней автоматизации не так много широко распространённых стандартов, чтобы проходить мимо них. Поэтому я уже давно изучаю вопрос поддержки протокола HomeKit Accessory Protocol (HAP) в WirenBoard. К тому же это даёт очень клёвые бонусы владельцам устройств от эппл: голосовое управление через Сири (особенно когда начнутся продажи Apple HomePod), и красивое мобильное приложение для удалённого управления.

К сожалению, чтобы WB начал официально поддерживать HomeKit (и на него можно было клеить соответствующую наклейку), производителю нужно пройти сертификацию MFi (кажется, это накладно). Но реализовать неофициальную поддержку это не мешает (единственное отличие — при связывании с айфоном появится предупреждение о том, что устройство не сертифицировано). Кстати, некоторое время назад Apple выложила документацию по протоколу HAP для некоммерческих проектов — теперь писать её реализации можно не нарушая никаких terms and conditions.

Примерно год назад я успешно устанавливал на WB одну из таких реализаций — homebridge (и всё чудесно работало). Однако процесс установки оставил не лучшие впечатления. Homebridge написан на NodeJS, а ставить ноду на WB с его малораспространённой архитектурой это боль. Сейчас я даже не могу воспроизвести те шаги, которые пришлось совершить, чтобы всё завелось. К тому же было ощущение, что node жрёт многовато ресурсов не очень мощного девайса. Хочется более простой путь, который можно будет предложить для остальных энтузиастов.

Поэтому я решил посмотреть на другую реализацию — HomeControl. Она написана на Go, поэтому должна быть более эффективной. Однако поставить Go с пол-пинка тоже не получилось. В самой свежей прошивке apt-get install golang что-то успешно устанавливает, но при попытке запустить компилятор, он сразу говорит Illegal instruction, будто в репозиториях лежит сборка не под ту архитектуру. На офсайте сборки для armel нет; единственная готовая сборка, которую удалось найти — версии 1.4.2 вот отсюда (go1.4.2, ARMv5, non-multiarch — go1.4.2.linux-arm~armv5-1.tar.gz). К сожалению, одна из зависимостей HomeControl (библиотека dns) требует версии Go не ниже 1.7, поэтому этот вариант не особо подходит. Видимо, придётся собирать golang из исходников (этого я пока не пробовал).

Эту тему предлагаю посвятить обсуждению следующих вопросов:

  • Интеграция с HomeKit в целом
  • Установка node + npm (и homebridge вслед за ними)
  • Выяснение, почему apt-get install golang ставит битую версию Go
  • Установка не-битого go (или сборка из исходников)
  • Использование HomeControl для интеграции

Буду рад, если кто-нибудь поделится наработками по каким-либо из этих вопросов.

1 Like

Под Wiren Board <=5 лучше сразу эту идею бросить. Обсуждали много раз: Google в libv8 перестал поддерживать нашу архитектуру несколько лет назад, поэтому нода работает только доисторическая. А так как долговременной поддержки у ноды нет, то на доисторической ноде ничего хорошего уже не запустить.

Крайне не рекомендуется собирать на самом контроллере. Для этого есть разработческое окружение, там уже настроен рабочий Go для кросс-компиляции

Намёк на то, что в WB6 будет более современная архитектура?)

Это правда. Но, тем не менее, техническая возможность запустить homebridge даже на доисторической ноде была, как-то у меня это получалось. Впрочем, вариант на Go мне сейчас действительно видится более предпочтительным.

Спасибо, надо попробовать. А почему не рекомендуется на контроллере? Только из-за того, что долго/мало памяти?

Да, в основном это. Плюс довольно старый Debian.
Конкретно для Go смысла в сборке на контроллере вообще нет: там кросс-компиляция отлично работает.

Экспериментирую с окружением. До этого с докером не работал, поэтому не до конца понимаю, что делаю)

По умолчанию там ставится golang 1.6.2, но на его место без особых проблем ставится 1.9. После этого проект с HomeControl успешно компилируется и запускается внутри окружения.

Но собрать deb-пакет по инструкции не получилось пока. Я говорю:
~/wbdev/wbdev gdeb

А он мне отвечает, мол
Warning: WBDEV_TARGET is not set, defaulting to wheezy-armel
tail: cannot open ‘debian/changelog’ for reading: No such file or directory
dpkg-buildpackage: error: tail of debian/changelog gave error exit status 1

Это как следует понимать? Что я неправильно делаю?

Сам спросил, сам отвечу: надо разбираться, как делать deb-пакеты. Оказалось, что одних только исходников на Go для этого недостаточно.

Подробнее об обязательных файлах есть здесь и здесь.

О, чудесный мир разработки нативных приложений под *nix.

Но ещё лучше взять какой-нибудь наш простой пакет под Go, например https://github.com/contactless/wb-mqtt-apcsnmp и сделать папку debian по аналогии.

добрый день, у нас есть работающая версия интеграции для ARM процессоров, если интересно, и будет спрос - то готовы сделать пакет для WB и продавать с лицензиями. цена вопроса порядка 10-20 тыс. за лицензию. В нее также включена работа с HDL, G4, Amazon Alexa, Google Home, MQTT, Samsung TV, Terminal, Xiaomi.
если интересно кому-то - пишите. Будем интегрировать в wb5

1 Like