1,980円（Raspberry Pi Zero W）で Homebridge 環境を作ろう！

この記事は、ハンズラボ Advent Calendar 2020 1日目の記事です :snowman:

# はじめに
ハンズラボのPOSチームでテックリードをしている @zizi4n5 です :snowboarder:
最近、自宅のスマートホーム化にハマっているのですが、**Raspberry Pi Zero W** で安く簡単に **Homebridge** 環境構築できて感動したので記事にしてみました。
基本的には、Homebridgeが公開している [**Homebridge Raspberry Pi Image**](https://github.com/homebridge/homebridge-raspbian-image) の手順をベースに、補足を交えながらの説明となります。

# Homebridgeとは？
[**Homebridge**](https://github.com/homebridge/homebridge)とは、[**Apple HomeKit**](https://www.apple.com/jp/ios/home/)に対応していないデバイスをHomeKit対応アクセサリとして操作可能にする**Bridgeアプリケーション**です。
OSSで開発されており、いろいろなデバイス向けのplugin開発も活発に行われています。

私の環境ではHomebridgeを利用して、**Nature Reomo**、**SwitchBot**、**Boseのスピーカー**などをHomeKit対応アクセサリとして操作可能にしています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63892/b5686be8-d36c-574b-a77e-64c8b4882668.png" width="300">

本記事はRaspberry Pi Zero Wでの環境構築をしていきますが、macOS/Linux/Windows等のOSでも動作します。
詳細については、公式の[**README.md**](https://github.com/homebridge/homebridge)を参照してみてください。

また、pluginのRuntimeは**Node.js**なので、pluginを**JavaScript/TypeScript**で独自に実装することも可能です。
公式が用意しているpluginテンプレート [**Homebridge Platform Plugin Template**](https://github.com/homebridge/homebridge-plugin-template) が参考になるので、興味がある方はぜひ読んでみてください。[^0]

[^0]: 私もOSSとしてSwitchBot用のplugin [**Homebridge SwitchBot**](https://github.com/zizi4n5/homebridge-switchbot-for-mac) を開発しているので、こちらもよかったら参考にしてみてください。

# 購入が必要なもの（約1,980円）

まず最初に、いくつか必要なものを購入しておく必要があります。

|部品名|値段|備考|
|:-:|:-:|:--|
|Raspberry Pi Zero W[^1]|1,320円|私が購入した時は、スイッチサイエンスさんが1番安かったです。<br/>https://www.switch-science.com/catalog/3200/|
|microSDカード|400円前後|私は16GBを利用しています。<br/>今のところ特に容量問題などもありません。|
|電源コード|300円前後|5V/USB Micro-Bコネクタ または GPIOコネクタ<br/>私は家にあるものを利用しました。|

[^1]: 自分が購入したタイミングではWの在庫がなくWH（ピンヘッダ付き）を購入しました。ただ、ピンヘッダを利用する予定がない場合はRaspberry Pi Zero Wの方が値段も500円ほど安いのでオススメです。

あとは、スマートフォン、Terminalを利用できるPC/Macがあれば、特に問題ありません。
Raspberry Pi Zero W自体はモニタやキーボードと直接接続することなく、全ての設定を行うことが可能です。[^2]

[^2]: 自分はそんなに簡単だと知らずに有線のHDMIケーブル（タイプAオス - ミニタイプCオス）を購入したのですが、無駄になってしまいました。。。


# OSイメージのダウンロード

Raspberry Piを動作させるためのOSイメージとして、最新の **Homebridge Raspberry Pi Image(Homebridge-Raspbian-v0.0.0.zip)**[^3] を以下からダウンロードします。

[^3]: 2020/11/30時点での最新版は、**Raspbian-Homebridge-v1.0.15.zip**でした。

https://github.com/homebridge/homebridge-raspbian-image/releases/latest

# microSDカードへの書き込み
**Homebridge Raspberry Pi Image(Homebridge-Raspbian-v0.0.0.zip)** をmicroSDカードへ書き込みます。
公式の手順では、[Etcher](https://www.balena.io/etcher/)の利用が簡単でオススメとありました。

# ネットワークのセットアップ
公式サイトではEthernetとWi-Fi両方の説明が記載されていますが、Raspberry Pi Zero W/WHの場合はLAN端子ありません。
このため、今回はWi-Fiとして手順を進めていきます。

1. SDカードをRaspberry Piに挿入
2. Raspberry Piの電源をオン
4. 1,2分後に、スマートフォンでWi-Fiネットワークをスキャンする
5. **Homebridge WiFi Setup** という名前のWi-Fiに接続する
6. CAPTIVE PORTALが開くまでしばらく待ち、利用環境にあるWi-Fiを設定する  

> ![WiFi Setup](https://user-images.githubusercontent.com/3979615/75397237-7e525b80-594a-11ea-9be0-4f064b6a4178.png)
> ※ 画像は公式サイトからの引用です。

なお、Wi-Fiの設定が正常に終了しなかった場合、Homebridge WiFi Setupが再表示されるので再試行してください。

# Homebridgeの初期設定

ここまでの設定が正しく行われていれば、http://homebridge.local にアクセスすることで Homebridgeの管理画面にアクセスすることができます。（Windowsの場合は名前解決できない場合があるみたいです。[^4]）
このため、初期パスワード（必要であればユーザも）を変更しておきましょう。

[^4]: `http://homebridge.local`でアクセスできない場合は、ルータの管理画面もしくは、スマートフォンでHomebridge管理画面にアクセスするなどして、Raspberry Piに割り当てられたIPアドレスを見つけて、`http://<ip address>`でアクセスしてみてください。

1. http://homebridge.local にアクセスする
2. デフォルトのuser/passwordである**admin**/**admin**でログインする
3. 管理画面右上の**[設定]-[ユーザーアカウント]**から、デフォルトのuser/passwordである**admin**/**admin**を変更する

>![Homebridgeの初期設定](https://user-images.githubusercontent.com/3979615/71886653-b16d3f80-3190-11ea-9ff8-49dc4ae4fff0.png)
> ※ 画像は公式サイトからの引用です。

# SSH接続の初期設定
pluginモジュールの追加インストールなどで必要となるSSHですが、デフォルトで有効になっています。
このため、初期パスワードを変更しておきましょう。

1. デフォルトのuser/passwordである**pi**/**raspberry**でSSH接続する
2. passwdコマンドでデフォルトpasswordである**raspberry**を変更する[^5]

[^5]: 新たなユーザを追加した際に権限周りでいくつか問題が起きたため、パスワードのみ変更としました。

```terminal
$ssh pi@homebridge.local
$passwd
```

# ホームアプリとの連携

Homebridge管理画面に表示されている**QRコード**を、iOS端末の**ホームアプリ**でスキャンしてください。
登録が正常に行われると、**ホームアプリ**の**[ホーム設定]-[ハブ & ブリッジ]**にHomebridgeが追加されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63892/2fb84be7-4f37-5b02-343c-c182ba7ca5b6.png" width="300">


# 最後に

以上で**Homebridge環境の構築**は完了です。
あとは、Homebridge管理画面から保有しているデバイスのpluginをインストール・設定することで、HomeKit対応アクセサリとして操作可能になります！

私自身は、Nature RemoやSwitchBot、BoseのスピーカーなどをHomebridge経由で操作していますが、オススメのデバイス、pluginなどあれば是非コメントで教えてください！ 

# 参考情報
* [Homebridge](https://github.com/homebridge/homebridge)
* [Homebridge Raspberry Pi Image](https://github.com/homebridge/homebridge-raspbian-image)
* [Homebridge Platform Plugin Template](https://github.com/homebridge/homebridge-plugin-template)