В одной из прошлых статей мы сделали устройство на базе ESP8266, которым можно управлять с устройств Apple, с помощью приложения «Дом». Официально поддерживаемых устройств очень мало, а сторонние легко подключать с помощью HomeBridge, который можно сделать на одноплатном компьютере, например Raspberry Pi. Кстати, в качестве испытуемого я взял самый первый старинный экземпляр c 512мб ОЗУ — по идее, нам же много мощности не надо. Все примеры сделаны для 3 версии компьютера и до последнего я сомневался, заведётся ли это ПО. А что вообще такое HomeBridge? — это сервер, написанный на NodeJS, который эмулирует API HomeKit и позволяет подключать к умному дому Apple не сертифицированные устройства (т.е. всё будет намного дешевле).
Я перепробовал несколько инструкций с рунета, но все они либо старые, либо упускают какие-то шаги. Быстрая установка из 4 команд с гитхаб у меня также не заработала, и я пошёл по длинному пути зарубежного сайта .instructables.com (в итоге рабочему). Сначала нужно скачать образ системы для компьютера. Я выбрал самый минимальный, ведь для homebridge совсем не нужно иметь графический интерфейс системы или подключать монитор. Ссылка на образ

Перед тем, как что-то записывать на флешку, лучше её отформатировать программой SD Formatter. Например, если флеш-карта уже была загрузочной, то средства windows её отформатировать не смогут.

Дальше понадобится программа для создания образов на флешку. Я обычно использую UNETBOOTIN, но также пробовал ETCHER Установки не требует, весит немного, пользоваться просто — указываете образ, имя sd-карты, и нажимаете «ок».

Etcher конечно выглядит по современнее, но смысл один.

Как вы помните, я скачал минимальную версию без десктопа, да и монитор мне подключать лень. К сожалению, поддержка SSH в последних версиях была выпилена, но её несложно добавить обратно. Пока карточка с образом ещё в компьютере, создайте в корне файл без расширения с именем «SSH». Система при загрузке в одноплатном компьютере сама поймёт, что надо включить SSH и удалит этот файл.

Теперь загружаем Raspberry PI и подключаем сетевым патч-кордом в роутер. Смотрим в любой программе сканере адрес, который получил наш компьютер. У меня это 192.168.1.30

Теперь запускаем putty, и переключаем режим на SSH, вводим адрес, который мы узнали в сканере и жмём кнопку «ОК».

Система запросит логин, который будет PI, а далее пароль — raspberry. Это значения по умолчанию

Затем нам придётся вводить много команд, и иногда долго ждать. Сначала обновим систему.
sudo apt-get update
sudo apt-get upgrade
Этот шаг вроде не обязателен, ведь по умолчанию NPM и NodeJS не установлен, но я на всякий случай выполнил эти команды.
sudo apt --auto-remove purge npm
sudo apt --auto-remove purge nodejs
Затем устанавливаем актуальные версии этих пакетов.
sudo apt install nodejs
curl -L https://www.npmjs.com/install.sh | sudo sh
И проверяем версии.
node -v
npm -v

Устанавливаем Homebridge.
sudo apt-get install libavahi-compat-libdnssd-dev
sudo npm install -g --unsafe-perm homebridge
И тестово запускаем его.
homebridge
Прямо в консоли вы увидите работоспособность сервиса. Бридж уже можно добавлять в телефон, но не торопитесь.

Сначала нужно закончить все настройки, для этого создадим следующий файл.
sudo nano ~/.homebridge/config.json
Копируем в новый файл следующий текст. В поле username удалите последовательность XX: XX: XX: XX: XX: XX и введите свой MAC адрес. Проще всего его также подсмотреть в программе advanced IP scanner, которой мы смотрели адрес raspberry на первых шагах. PIN код я также поменял на свой, главное соблюдать последовательность тире.
{
"bridge": {
"name": "HomeBridge",
"username": "XX:XX:XX:XX:XX:XX",
"port": 51826,
"pin": "031-45-154"
},
"description": "Your description here",
"accessories": [
],
"platforms": [
]
}

Чтобы сохранить файл, нажмите CTRL + O, а затем CTRL + X для выхода. Или сразу CTRL + X и затем подтвердите сохранение кнопкой Y + enter. Тем временем нужно сделать ещё один файл.
sudo nano /etc/default/homebridge
Куда сохраняем следующий текст.
# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /var/homebridge
# If you uncomment the following line, homebridge will log more
# You can display this via systemd’s journalctl: journalctl -f -u homebridge
# DEBUG=*
Эти и следующие действия мы делаем для автоматического запуска сервиса, при рестарте компьютера. Вы же не хотите запускать сервис вручную каждый раз, как выключат свет. Создаём третий файл.
sudo nano /etc/systemd/system/homebridge.service
Копируем текст и сохраняем файл.
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target
[Service]
Type=simple
User=homebridge
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
После этого нужно сделать следующую цепочку действий. Команд много, но ждать выполнения почти не придётся, этот блок не отнимет у вас много времени.
sudo useradd --system homebridge
sudo mkdir /var/homebridge
sudo cp ~/.homebridge/config.json /var/homebridge/
sudo cp -r ~/.homebridge/persist /var/homebridge
sudo chmod -R 0777 /var/homebridge
sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl start homebridge
Перезагружаем компьютер
sudo reboot
И проверяем статус сервиса — должно быть active и выделено зелёным.
systemctl status homebridge

Теперь уже можно добавить и в телефон. Не забудьте включить wi-fi и присоединиться к той-же сети. В программе ДОМ (HOME) нажимаем добавить аксессуар, у меня новый bridge высветился автоматически.

Вводим код, который мы создавали в файле (PIN) и соглашаемся, что устройство не сертифицировано и не безопасно.

Теперь во вкладке homebridge мы можем видеть наше устройство.

Осталось сделать последнюю деталь (по желанию) — установить графический интерфейс, который можно открыть по ip-адресу. Для этого установим UI-X для Homebridge.
sudo npm install -g --unsafe-perm homebridge-config-ui-x
Откроем файл
sudo nano /etc/sudoers
И в самый конец допишем следующую строку.
homebridge ALL=(ALL) NOPASSWD: ALL

Сохраняем и переходим к следующему файлу, с которым мы уже работали.
sudo nano /etc/default/homebridge
В конце строки HOMEBRIDGE_OPTS=-U /var/homebridge добавляем пробел и дописываем «-I». Должно получиться так.

Ну и последний редактируемый файл
sudo nano /var/homebridge/config.json
В блок platforms вписываем следующий код. Должно получиться как на скриншоте.
{
"platform": "config",
"name": "Config",
"port": 8080,
"sudo": true,
"restart": "sudo -n systemctl restart homebridge",
"log": {
"method": "systemd",
"service": "homebridge"
}
}

Перезагружаем.
sudo reboot
Вспоминаем свой адрес и добавляем порт :8080.
http://192.168.1.2:8080
Видим интерфейс, где логин и пароль будет admin (можно поменять)

Приятный и понятный интерфейс. Кстати, работает на самой первой модели Raspberry! Даже процессор и память не нагружены по полной.

В следующих статья мы нагрузим бридж разными датчиками и протестируем работу более плотно.
Пингбэк: Влажность и температура через Homebridge (DHT-11)
Error: listen EADDRINUSE: address already in use :::51826
at Server.setupListenHandle [as _listen2] (net.js:1280:14)
at listenInCluster (net.js:1328:12)
at Server.listen (net.js:1415:7)
at EventedHTTPServer._this.listen (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/src/lib/util/eventedhttp.ts:84:21)
at HAPServer._this.listen (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/src/lib/HAPServer.ts:236:22)
at Bridge.Accessory._this.publish (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/src/lib/Accessory.ts:976:18)
at Server.publishBridge (/usr/lib/node_modules/homebridge/src/server.ts:192:17)
at Promise.all.then (/usr/lib/node_modules/homebridge/src/server.ts:164:24)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
[19/02/2021, 16:29:57] Got SIGTERM, shutting down Homebridge…
На порту 8581 завёлся, но ошибки какие-то всё равно есть. Скачал официальный имидж с гетхаба, те же ошибки… пока ничего не прикручивал к мосту, может и ни на что они не влияют, но любопытно что скажет маэстро ;) И да, огромная благодарность за проделанную работу!!!
Error: listen EADDRINUSE: address already in use :::51826
at Server.setupListenHandle [as _listen2] (net.js:1280:14)
at listenInCluster (net.js:1328:12)
at Server.listen (net.js:1415:7)
at EventedHTTPServer._this.listen (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/src/lib/util/eventedhttp.ts:84:21)
at HAPServer._this.listen (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/src/lib/HAPServer.ts:236:22)
at Bridge.Accessory._this.publish (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/src/lib/Accessory.ts:976:18)
at Server.publishBridge (/usr/lib/node_modules/homebridge/src/server.ts:192:17)
at Promise.all.then (/usr/lib/node_modules/homebridge/src/server.ts:164:24)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)