В данной публикации я покажу как с нуля настроить и запустить homebridge(реализация HomeKit Accessory Protocol на nodejs) на базе Raspberry Pi, Weinzierl KNX BAOS 838 module kBerry и bobaos.


Предварительные требования.


  1. Raspberry Pi с установленным модулем BAOS 838 kBerry.
  2. 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

На этом статья подходит к концу. Осталось высказать благодарности, и на этом попрощаюсь.


Предыдущие публикации


  1. Bobaos — доступ к шине KNX TP/UART c Raspberry Pi
  2. Bobaos — KNX TP/UART, Raspberry Pi и Unix Domain Socket

Благодарности


  1. В первую очередь Weinzierl за отличное KNX оборудование, без него не было бы этого проекта.
  2. Raspberry Pi за отличный компьютер.
  3. Всему open-source сообществу за Linux, nodejs, git, vim и так далее.

Комментарии (2)


  1. Avenit
    27.04.2018 17:22

    Где купить BAOS 838?


    1. bobalus Автор
      27.04.2018 22:25

      У дистрибьютора/дилера. Там же, где и блоки питания, дроссели, датчики, исполнительные устройства и прочее. В Москве знаю EIB-Shop продает.