
В данной публикации я покажу как с нуля настроить и запустить homebridge(реализация HomeKit Accessory Protocol на nodejs) на базе Raspberry Pi, Weinzierl KNX BAOS 838 module kBerry и bobaos.
Предварительные требования.
- Raspberry Pi с установленным модулем BAOS 838 kBerry.
- Raspbian с установленными: nodejs, npm (в моем случае raspbian stretch lite, nodejs 8 версия).
Поехали
Настраиваем серийный порт
Для Raspberry Pi 3:
sudo sh -c "echo dtoverlay=pi3-miniuart-bt >>/boot/config.txt"
Из файла /boot/cmdline.txt убираем запись console=ttyAMA0,115200.
Добавляем пользователя в группу dialout, перезагружаем
sudo usermod -a -G dialout pi sudo reboot
Устанавливаем bdsd.sock
curl -L https://raw.githubusercontent.com/bobaos/bdsd.sock/master/bdsd_install.sh | bash
Содержимое скрипта:
#!/bin/bash sudo npm install -g bdsd.sock --unsafe-perm sudo npm install -g bdsd-cli --unsafe-perm SERVICE_NAME=bdsd.service mkdir $HOME/.config/systemd mkdir $HOME/.config/systemd/user touch $HOME/.config/systemd/user/$SERVICE_NAME SERVICE_PATH=$HOME/.config/systemd/user/$SERVICE_NAME echo "[Unit]" > $SERVICE_PATH echo "Description=Bobaos Datapoint Sdk Daemon" >> $SERVICE_PATH echo "[Service]" >> $SERVICE_PATH echo "ExecStart=/usr/bin/env bdsd.sock" >> $SERVICE_PATH echo "[Install]" >> $SERVICE_PATH echo "WantedBy=default.target" >> $SERVICE_PATH systemctl --user daemon-reload systemctl --user enable $SERVICE_NAME sudo loginctl enable-linger pi systemctl --user start $SERVICE_NAME
Скрипт установит последнюю версию bdsd.sock из npm, создаст bdsd.service файл в $HOME/.config/systemd/user/, настроит автозапуск, запустит сервис.
Проверяем с bdsd-cli, переводим KNX модуль в режим программирования:
bdsd-cli connected bobaos> setProgrammingMode -v 1 Set programming mode: success bobaos>
На плате должен загореться красный светодиод, сигнализирующий о том, что устройство в режиме программирования. Переходим к следующему шагу.
Конфигурация в ETS
Любая KNX инсталляция конфигурируется в ETS(Engineering Tool Software), наша не исключение. Нас интересует аппликация KNX BAOS 830 от Weinzierl. Добавляем, настраиваем. В моем случае 4 реле, с объектами 101-108.
Пишем физический адрес, далее частичная загрузка. После этого переходим к следующему шагу.

Установка и настройка homebridge
Устанавливаем homebridge из npm:
sudo npm install -g homebridge --unsafe-perm
Устанавливаем homebridge-bobaos. На данный момент версия 0.0.1, т.к. плагин находится в начальной стадии разработки.
sudo npm install -g homebridge-bobaos
Далее, нам надо создать конфигурационный файл config.json, расположенный в $HOME/.homebridge/config.json.
Минимальное содержимое:
{ "bridge": { "name": "Homebridge", "username": "CC:22:3D:E1:CE:36", "port": 51822, "pin": "031-45-154" }, "accessories": [], "platforms": [] }
Далее, нам необходимо добавить платформу Bobaos в конфигурационный файл, прописать аксессуары, сервисы, характеристики. JSON редактировать вручную довольно проблематично — нечитаемо, большая вероятность ошибки — можно забыть кавычки, лишние запятые, вложенность. Поэтому я для конфигурации использую YAML. Типичный конфиг может выглядить так:
accessories: - name: Livroom lights services: - type: Lightbulb name: Livroom lights characteristics: - type: On control: 101 status: 105 - name: Livroom lights 2 services: - type: Switch name: Livroom lights 2 characteristics: - type: On control: 102 status: 106 - name: Kitchen lights services: - type: Lightbulb name: Kitchen lights characteristics: - type: On control: 6 status: 6 - type: Brightness control: 2 status: 2 - name: Kitchen Fan services: - type: Fan name: Kitchen Fan characteristics: - type: On control: 103 status: 107
Сервисов пока поддерживается немного: Switch(On), LightBulb(On, Brightness), Fan(On), в процессе добавление остальных.
Сохраняем в отдельный файл, для примера homebridge.yml. Теперь нам необходимо YAML документ перевести в JSON формат. В составе пакета homebridge-bobaos есть утилита genBobaosAccessories. Используем ее:
genBobaosAccessories homebridge.yml ~/.homebridge/config.json { "bridge": { "name": "Homebridge", "username": "CC:22:3D:E1:CE:36", "port": 51822, "pin": "031-45-154" }, "accessories": [], "platforms": [ { "platform": "Bobaos", "name": "bobaos", "accessories": [ { "name": "Livroom lights", "services": [ { "type": "Lightbulb", "name": "Livroom lights", "characteristics": [ { "type": "On", "control": 101, .... ....
Первым аргументом мы передаем yml конфиг, вторым — существующий config.json. Скрипт парсит оба файла, добавляем в список платформ новую, в случае если платформы Bobaos нету, или же обновляет элемент в массиве в случае присутствия. Если вывод утилиты без ошибок, перенаправляем в config.json:
genBobaosAccessories homebridge.yml ~/.homebridge/config.json > ~/.homebridge/config.json
Запускаем homebridge и переходим к следующему шагу
homebridge
Автозапуск
Для автозапуска настраиваем systemd сервис. Для этого создаем сервисный файл по пути $HOME/.config/systemd/user/homebridge.service со следующим содержимым:
[Unit] Description=Homebridge service [Service] ExecStart=/usr/bin/env homebridge [Install] WantedBy=default.target
Далее запускаем:
systemctl --user daemon-reload systemctl --user start homebridge.service
Проверяем. Если все работает хорошо, назначаем автозапуск:
systemctl --user enable homebridge.service
На этом статья подходит к концу. Осталось высказать благодарности, и на этом попрощаюсь.
Предыдущие публикации
- Bobaos — доступ к шине KNX TP/UART c Raspberry Pi
- Bobaos — KNX TP/UART, Raspberry Pi и Unix Domain Socket
Благодарности
- В первую очередь Weinzierl за отличное KNX оборудование, без него не было бы этого проекта.
- Raspberry Pi за отличный компьютер.
- Всему open-source сообществу за Linux, nodejs, git, vim и так далее.
