[轉]Apple Homebridge

http://blog.itist.tw/2017/11/how-to-building-apple-smart-home-solution-by-homebridge-on-raspberry-pi.html

事前準備

  • Rasberry Pi,安裝 Raspbian Stretch 發行版,別忘了先做好 基本設定
  • 無線基地台,並且已經完成 Internet 的連線設定。
  • 支援 Wi-Fi 無線連接與控制的配件週邊。

開始安裝主程式

Homebridge 是用 JavaScript 撰寫,所以必須先把 Node.js 安裝起來才能執行。這次用的版本是 Node.js 8.x 版,相關說明請參閱 Node.js – Installing Node.js via package manager

先加入套件庫資訊。
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash –

再安裝 Nods.js。
sudo apt-get install -y nodejs

由於 CPU 架構不同,使用 Raspberry Pi Zero / 1 來實作的朋友,Node.js 的安裝方式請參閱 Eddie Lee – Running node.js on a Raspberry Pi Zero,選擇各版本的安裝指令。

安裝 Homebridge 之前,還必須先安裝這些相依套件。
sudo apt-get install -y libavahi-compat-libdnssd-dev

才能開始安裝 Homebridge 主程式。
sudo npm install -g –unsafe-perm homebridge

稍等一下下,很快就安裝好了。

修改設定

先建立管理 Homebridge 專用的使用者帳號與目錄。
sudo useradd –system homebridge
sudo mkdir /etc/homebridge

把網路卡的 MAC Address 記下來,如果網路卡的名稱不同,或是使用無線網路卡,記得把 eth0 改成該設備的名稱。
ip address show eth0 | grep link/ether | cut -c16-32 | tr a-z A-Z

建立 Homebridge 的主設定檔,用的是 JSON 格式,各個名詞代表的意義請參閱 HomeKit Glossary of Terms
sudo vi /etc/homebridge/config.json

輸入下列的內容。
{
  “bridge”: {
    “name”: “Homebridge”,
    “username”: “XX:XX:XX:XX:XX:XX“,
    “port”: 54321,
    “pin”: “123-45-678
  }
}

要修改的設定值有:

  • username – 剛剛取得的 MAC Address,英文字一定要大寫。
  • port – 傳輸資料用的通訊埠,建議從 49152 ~ 65535 之間選一個來用。
  • pin – 用來讓家庭 App 加入配件的代碼,格式一定要是 XXX-XX-XXX,數字任選,不能用英文字母跟特殊符號。

如果在修改主設定檔之後,Homebridge 服務無法啟動,可以把設定值貼到 JSONLint 來檢查一下。

Vaild Json 代表語法格式沒錯,Parse error 的話就看看是哪一行出錯。

接著,
為了讓服務在開機後自動啟動,有不少網友的教學文章是用 screen 套件來執行,我不太喜歡這種方式,那只能執行,不能管理。所以,我選擇以 systemd 來管理,除了統一管理方式之外,啟動與停止服務也相對簡單多了。

建立 Homebridge 的相關服務設定檔。
sudo vi /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 /etc/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 vi /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/lib/node_modules/homebridge/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

從家庭 App 加入配件

第一次先手動啟動 Homebridge 服務,這裡才可以看到讓家庭 App 掃瞄用的 HomeKit 代碼。
sudo homebridge -U /etc/homebridge -D

打開 iPhone 裡的 家庭 App,更完整的操作方法請參閱 Apple – 在 iPhone、iPad 和 iPod touch 上使用「家庭」App

第一次開啟的歡迎畫面,點選「開始使用」。

點選「加入配件」。

掃描剛剛在畫面上的 HomeKit 代碼,或是點選「沒有代碼或無法掃瞄」,手動輸入代碼也可以。

因為沒有通過 Apple 的官方認證,所以只能點選「強制加入」。

HomeKit 認證配件的 Logo 長這樣,跟 MFi 一樣要向 Apple 進貢才行。

稍等一下,Homebridge 配件就會被加入家庭 App 裡面。

房間名稱可以自行修改,配件名稱就不用了,因為我們會從 Homebridge 主設定檔裡修改。

直接點選「下一步」。

在「房間」頁籤裡,就可以看到我們加入的 Homebridge 配件。

按「Ctrl+C」將 Homebridge 服務中止。

讓 homebridge 帳號擁有專用目錄的存取權限。
sudo chown -R homebridge:homebridge /etc/homebridge

最後,重新載入 Homebridge 服務,並且讓它在開機後自動啟動。
sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl restart homebridge

安裝插件 (Plugin)

除了主程式之外,為了讓不符合 HomeKit 協定的 SmartHome 配件加入,我們必須安裝對應的插件,我們可以在 npm 官網用 homebridge-plugin 為關鍵字去搜尋可用的插件,2017/11/11 為止已經有 817 個。

我們先用 homebridge-openweathermap-temperature 來小試牛刀,可以從 OpenWeatherMap 取得氣溫預測資料。

使用 npm 指令來安裝。
sudo npm install -g homebridge-openweathermap-temperature

到 OpenWeatherMap 註冊一個帳號,取得 API Key。
https://home.openweathermap.org/api_keys

如果不知道所在位置的城市英文名稱,可以從 Weather maps 裡看到。

編輯 Homebridge 主設定檔。
sudo vi /etc/homebridge/config.json

“accessories”: [
  {
    “accessory”: “OpenweathermapTemperature”,
    “name”: “室外氣溫“,
    “url”: “http://api.openweathermap.org/data/2.5/weather?q=Taichung,TW&appid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  }
]

要修改的設定值有:

  • name – 在家庭 App 裡所顯示的配件名稱。
  • url – 所在位置的城市、國家,和剛剛申請的 32 碼 API Key。

重新啟動服務後就生效了。
sudo systemctl restart homebridge

馬上可以在家庭 App 裡看到它。

也可以用 Siri 叫出來。

這些是我認為還蠻實用的插件。

發佈留言