В данной публикации я покажу как с нуля настроить и запустить 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 и так далее.
Avenit
Где купить BAOS 838?
bobalus Автор
У дистрибьютора/дилера. Там же, где и блоки питания, дроссели, датчики, исполнительные устройства и прочее. В Москве знаю EIB-Shop продает.