2020年最新版！ Homebridge + NatureRemoでイケイケStayHome


こんにちは。
新型コロナの影響で、毎日StayHome。感染リスクの中、医療や社会インフラを支えていただいている方々には頭が上がりません。本当にありがとうございます。

そんなリモート生活の息抜きのために、最近HomePodを買ってみました。２年以上前の製品なので型落ち感は否めないですが、４月末まで量販店でセールやってたので……つい。

そこでHomePodを活用すべくHomebridgeを久々に触っていたら、つい最近（４/27なので１週間以内）に大型リリースがあった模様。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">そんでHomeBridgeっていつからこんなイケイケになったの？<br>GUIあるのはじめて知った <a href="https://t.co/qhhzhjky0Y">pic.twitter.com/qhhzhjky0Y</a></p>&mdash; sho (@sskmy1024r) <a href="https://twitter.com/sskmy1024r/status/1255117882503032833?ref_src=twsrc%5Etfw">April 28, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

というわけで今回は、今が旬のHomebridgeを使って、お家で出来るApple信者のためのライフハックを紹介します！

# 🏠 Homebridgeとは

の前に、HomeKitについて。
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/75e603ec-2f66-524c-b4ad-ceb3767986f4.png">

Appleが提供しているIoT機器向けシステムのことです。HomeKit対応の家電製品を使うと、iOSやmacOSの`Siri`や`ホーム.app`から、家電を操作することができます。

- *Hey Siri! ドアの鍵を開けて*
- *Hey Siri! 部屋の電気つけて*
- *Hey Siri! コーヒーメーカーをつけて*

などなど。iPhoneはもちろん、Apple WatchのSiriに話しかけるだけでIoT家電を操作することが出来ちゃいます。

主に海外のメーカーが出しているものが多いのですが、種類もそこそこ増えてきました。
https://www.apple.com/jp/ios/home/accessories/

が、**HomeKit対応製品はお値段が高い！**
イニシャルコストが高く、とてもじゃないけど人に勧めるのは難しい。何より自分もこれを買い揃えるのは財布が許してくれない。

## 🌉 そこでHomebridge

<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/59e458dd-975f-6db1-26b8-9322a10d9b02.png">

[Homebridge](https://homebridge.io/)は、**HomeKitに対応していないIoT機器でも制御出来るようにする**ソフトウェアです。

OSSの為、[Github](https://github.com/homebridge/homebridge)でソースコードも公開されています。プロジェクト自体は数年前からあるので、ご存知の方も多いかもしれません。
コミュニティーも非常に活発で、最近はかなり頻繁にアップデートが公開されています。

> ![image.png](https://camo.githubusercontent.com/e9e98b1b146452a6987e4a05dd4ece8c34781643/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f31306c373949436f6854753469512f67697068792e676966)
> HomeKit非対応デバイスをApple Watchから使う様子 (GitHub READMEより）

### GUIで簡単設定ができるように

このHomebridgeですが、以前はCLIで設定をしていました。
ところがつい最近、**WebGUIコンソールが登場しました！！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/f03c87ff-550c-0e53-a3fd-dac9ec704478.png)

Homebridge自体のアップデートや、プラグインの管理、サーバ情報やHomeBridgeのログのモニタリングなどを全てWebから確認できる優れものです。超イケイケ！

# 🧑‍💻 とりあえず使ってみよう

何はともあれ、まずは触ってみましょう。

### 環境
* macOS 10.14.3
* Node v13.12.0
* npm 6.14.4

本来は常設するためにラズパイなどを使うのが良いのですが、テストのために今回はmacOSでやってみます。
Homebridge自体は、WindowsやLinuxなども対応しているので、他のOSのインストール方法は[こちら](https://github.com/homebridge/homebridge#installation)を参考に。

## 1. インストール

```sh
# homebridgeのパッケージとGUIをインストール
sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x

# サービスプロバイダをインストール
sudo hb-service install
```

終わり。これだけで準備は完了です。

## 2. 管理画面を開いてみる

ブラウザから、`http://localhost:8581`を開いてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/a0ea5268-e63f-c539-d62e-90c519fdf1c5.png)

見事なログイン画面。日本語も対応している。すごい。
デフォルトのユーザ名・パスワードは、`admin`に設定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/f03c87ff-550c-0e53-a3fd-dac9ec704478.png)

ログインすると、左上に大きなQRコードが。これが、Appleデバイスに登録するためのQRコードになります。早速登録してみましょう。

iPhoneなどのカメラアプリや、ホーム.appなどから登録できます。
登録の方法は、https://support.apple.com/ja-jp/HT204893#add

## 3. NatureRemoを登録してみよう

iPhoneにHomeBridgeを登録しても、初期状態では何のデバイスも登録していないので、何も出てきません。

今回は表題の通り、Nature Remoを登録してみたいと思います。
なお、事前にNature Remoへのリモコン登録は済ませているものとします。

### 3-1. 🔍 NatureRemoの情報を取ってくる

NatureRemoのAPIを使うので、[こちら](https://home.nature.global/)からアクセストークンを取ってきましょう。

次に、NatureRemoに登録されている家電の固有ID（appliance Id）を取得します。
ターミナルから、以下のコマンドを実行しましょう。

```sh
/usr/bin/curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer ${access-token}" > appliance_id.json
```

取得したデータは、こんな感じになっています。

```json:appliance.json
{
  {
    "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", # <- **これが、appliance Id**
    "device": {
      ... # <- NatureRemoの個体情報
    },
    "model": null,
    "type": "IR",
    "nickname": "照明", <- NatureRemoに登録されている名前
    "image": "ico_light",
    "settings": null,
    "aircon": null,
    "signals": [
      {
        "id": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyy",
        "name": "オン",
        "image": "ico_lightup"
      },
      {
        "id": "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzz",
        "name": "オフ",
        "image": "ico_lightdown"
      }
    ]
  },
  ...
}
```

これ以降の設定で使うデータになるので、適当な場所に保存しておきましょう。

### 3-2. 🌡 NatureRemoに搭載されているセンサー類を設定してみる

管理画面のプラグインページを開き、`Nature Remo`で検索をしてみます。
すると、npmに登録されているhomebridgeプラグインを検索して表示してくれるので、その中の `Homebridge Nature Remo Sensor`をインストールしてみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/c8b54a31-61d2-3b10-614b-dac8342d4fee.png)

次に、HomebridgeにNatureRemoの情報を登録します。

管理画面のコンフィグページよりエディタを開き、json形式で以下のように設定していきます。
`accessories`がない場合は、適宜追加してください。

```json:config.json
{
    "bridge": {
        ... <- Homebridgeの設定が自動入力されている
    },
    "accessories": [
        {
            "accessory": "remo-sensor",
            "name": "室温センサー",
            "mini": false,
            "schedule": "*/5 * * * *",
            "accessToken": "${NatureRemoのアクセストークン}",
            "sensors": {
                "temperature": true,
                "humidity": false,
                "light": false
            }
        },
   ],
   ...
}
```

設定する項目は以下の通り

* `accessory` : プラグインの識別子。`remo-sensor`を指定
* `name` : HomeKitに表示される名前。Siriにお願いをするときは、この名前を使う
* `mini` : Nature Remoか、 Nature Remo miniかどうか
* `schedule` : センサー情報の更新頻度をcron形式で指定
* `accessToken` : 先ほど取得したアクセストークン
* `sensors` : HomeKitに表示するセンサーの種類。NatureRemoMiniの場合、室温しか検知できない

コンフィグを書き換えたら保存をして、管理画面の右上の電源ボタンからHomebridgeを再起動しましょう。

### 3-3. 🎐 エアコンを設定してみる

先ほど同様、プラグインページから検索をして`Homebridge Nature Remo Cloud Aircon`をインストールしてみましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/26fbf065-51a7-f8d8-2be0-7a95d42d1e81.png)

また同様に、管理画面のコンフィグページよりエディタを開き、json形式で以下のように設定していきます。

```json:config.json
{
    "bridge": {
        ...
    },
    "accessories": [
        {
            "accessory": "NatureRemoAircon",
            "name": "エアコン",
            "access_token": "${NatureRemoのアクセストークン}",
            "appliance_id": "",
            "useDryForCool": false,
            "skip_command_request_if_no_change": true
        }
   ],
...
}
```

設定する項目は以下の通り

* `accessory`: プラグインの識別子
* `name` : デバイス名。Siriにお願いをするときは、この名前を使う
* `access_token` : 先ほど取得したアクセストークン
* `appliace_id` : 取得したappliance_idを指定。エアコンが１台しかない場合は空文字でも可
* `useDryForCool` : 冷房の代わりにドライにする。ホームアプリ側にドライの項目がないので、排他的に選択しなければならない。
* `skip_command_request_if_no_change` : ステータスに変更がない場合、APIを叩くのをスキップする

コンフィグを書き換えたら保存をして、管理画面の右上の電源ボタンからHomebridgeを再起動しましょう。


### 3-4. 💡 照明を設定してみる

そろそろ慣れてきましたね。今回は`Homebridge Nature Remo Cloud`です。検索けんさくぅ〜。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/b736ed6c-9fcf-a346-aed7-e31cd11b016f.png)

設定はこんな感じです。

```json:config.json
{
    "bridge": {
        ...
    },
    "accessories": [
        {
            "accessory": "NatureRemoCloud",
            "accessToken": "${NatureRemoのアクセストークン}",
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
            "type": "light",
            "name": "電気"
        },
    ],
    ...
}
```

設定する項目は以下の通り

* `accessory`: プラグインの識別子。`NatureRemoCloud`
* `accessToken` : 先ほど取得したアクセストークン
* `id` : 操作する機器の`appliance_id`を指定
* `type` : 機器の種類。このプラグインでは、`signal`|`light`|`tv`を指定できる
* `name` : デバイス名。Siriにお願いをするときは、この名前を使う

なお、この`Homebridge Nature Remo Cloud`にはREADMEがなかったのでコードを直接読んで設定しています。
Homebridgeはプラグイン自体も簡素な作りで済むので、読むのも楽チンですね。

## ✅ 設定した結果

NatureRemoで、室温センサーとエアコン・部屋の電気を設定したのが、こちら。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265811/f7617492-61b2-eb84-313e-6525a64aec88.png)

電気のオン・オフだけでなく、エアコンも基本的な操作はホーム.appからできるように！！
何より、今までフォルダの奥底に眠らせていたホーム.appが活躍する日が来ようとは……！！

もちろんSiriに話しかけて操作もできるので、HomePodやAppleWatchからの操作することも可能です。

# 〆

長々と書いてしまいましたが、まとめると……

* Homebridgeがアツい
* HomeKit対応製品じゃなくてもSiriで操作できるよ
* StayHomeの今だからこそ、IoT生活を充実させよう

というお話でした。

これから試してみたい、という方の参考になれば嬉しいです！