HomebridgeをDockerで導入してRM mini3を動かすまで

#HomebridgeをDockerで導入してRM mini3を動かすまで
## はじめに
RM mini3を使ってiosのhomeアプリからhomebridge経由で家電を操作する方法について備忘録としてまとめました。同様の記事は山ほどあるのですが、Dockerを使った環境構築の記事がなく、またRM mini3の最初の設定関連でハマる箇所が多かったので記事にしました。

##必要なもの
- RM mini3 <br>
Broadlink社が製造するスマートリモコンです。国内ではLink Japanがe Remote miniという名前で販売していますが、高いです(6000円くらい)。今回はgearbestで17ドルくらいで買いました。<br>
- PC　<br>
raspberry piを使う人が多いです。今回は普通のデスクトップpcでosはubuntu18.04です。
- iPhoneもしくはiPad

##RM mini3の設定 <br>
専用のアプリからRM mini3の設定をすることになります。
国内向けのBroadlink e-controlというアプリは使うことができず、代わりのアプリを使うことになります。以前はIntelligent Home Centerというアプリをダウンロードする必要があったのですが、現在はIntelligent Home Center for EUが使えるので、これをダウンロードしました。
https://apps.apple.com/jp/app/intelligent-home-center-for-eu/id1384362587

ihcをダウンロードしたらwifiを2.4GHzのものに接続します。RM mini3は5Ghzのwifiに対応していないので、注意してください。

アプリを起動したらアカウントを適当に作成し、ihcのホーム画面からデバイスを追加を選択します。
![C91EBBC0-3554-450F-BA6E-21803942610E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305772/7be0a0d2-7950-65f7-6952-6c7320c5d922.jpeg)

デバイスを追加の画面でRM mini3を選択します。
![07E64432-5214-4FF6-87F9-5944AC7A24F9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305772/f8c95a61-aaee-00fb-7559-fb01960a88ec.jpeg)

指示に従ってwifiのパスワードを入力して設定完了です。
![AAC23EDC-F257-49E5-B1EA-626D8C59D605.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305772/f225ea2e-561a-39e0-e43d-689eb74dead6.jpeg)

上手くいかない場合はRM mini3のデバイスをリセットする必要がある場合があります。その場合は後ろのリセットボタンを５秒以上押してください。(ちゃんと５秒以上長押しするとランプの点滅の仕方が変わります。)
![4C0800FC-C9CA-49E0-8F8D-AD1CA499305B.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/305772/af5dce94-1741-71ea-9f54-e97a73de48e4.jpeg)

これで設定完了です。このままihcアプリを使って赤外線リモコンを学習させていくこともできます。今回はhomeアプリからRM mini3を動かしたいので次に進みます。

## Homebridgeの設定
Homebridgeの設定は<br> https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker　<br>を参考にしました。
Dockerを使って環境構築します。Dockerが入ってない人は↓
https://docs.docker.com/
Dockerを入れたら,Docker Composeが入っているか確認します。

```
$ docker-compose --version
```
入ってなかったので公式から入れました。
https://docs.docker.com/compose/install/

Dockerの準備ができたらdocker-compose.ymlという名前のファイルを作ります。中身は次の内容にします。

```docker-compose.yml
version: '2'
services:
  homebridge:
    image: oznu/homebridge:latest
    container_name: homebridge
    restart: always
    network_mode: host
    environment:
      - TZ=Australia/Sydney
      - PGID=1000
      - PUID=1000
      - HOMEBRIDGE_CONFIG_UI=1
      - HOMEBRIDGE_CONFIG_UI_PORT=8080
    volumes:
      - ./homebridge:/homebridge
```
上のファイルがあるディレクトリでコンテナを立ち上げます。

```
$ docker-compose up -d
```

次にRM mini3用のプラグインを用意します。今回使用したのは <br>https://github.com/lprhodes/homebridge-broadlink-rm <br>です。プラグインをインストールします。

```
$ docker exec homebridge npm install homebridge-broadlink-rm
```
このとき、-gオプションはつけなくて良いです。

次にhomebridgeにあるconfig.jsonを書き換えます。書き方は次のような感じです。

```config.json
{
 "bridge":{
   "name":"Homebridge",
   "username":"XX:XX:XX:XX:XX:XX",
   "port":XXXXX,
   "pin":"XXX-XX-XXX"
 },
 "description":"Homebridge",
 "accessories":[

 ],
 "platforms":[
   {
     "hosts": [
       {
         "address": "XXX.XXX.XX.XX",
         "mac": "XX:XX:XX:XX:XX:XX",
         "isRFSupported": true
       }
     ],
     "platform":"BroadlinkRM",
     "name":"Broadlink RM",
     "hideScanFrequencyButton": false,
     "hideLearnButton": false,
     "hideWelcomeMessage": false,
     "accessories":[
       {
         "name":"Auto-off Switch",
         "type":"switch",
         "enableAutoOff": true,
         "onDuration": 5,
         "data":{
           "on":"2600500000012...",
           "off":"2600500000012..."
         }
       },
       {
         "name":"TV On/Off",
         "type":"switch",
         "data":{
           "on":"2600500000012...",
           "off":"2600500000012..."
         }
       },
       {
         "name":"Channel Up",
         "type":"switch",     
         "data":"2600580000012...",
         "enableAutoOff": true,
         "onDuration": 1
       },
       {
         "name":"Channel Down",
         "type":"switch",
         "enableAutoOff": true,
         "onDuration": 1,
         "data":"2600580000012a..."
       }
      ]
    }
  ]
}
```
一番最初にある"bridge"のvalueはデフォルトのままで良いです。

"hosts"は公式ではRM miniの一台使用なら必要ないとされているので書かなくても良いですが、上手くいかないことが多いので記述することをオススメします。"address"はRM mini3のIPアドレス、"mac"はRM mini3のMACアドレスです。IPアドレスの確認はwifiルーターの設定画面からの確認が最も簡単だと思います。MACアドレスの確認方法はihcアプリから行うことができ、<br> デバイス→RM mini3→右上の…→device infoでMACアドレスを確認することができます。様々なやり方があるみたいなので参考までに載せておきます。
https://qiita.com/canadie/items/3110a0f0ff4f4749e039

config.jsonを編集し終えたらHomebridgeを再起動してください

```
$ docker restart homebridge
```
config.jsonが更新されていれば成功です。

成功しているかの確認のためにログを確認します。

```
$ docker logs -f homebridge
```

このとき次のようなエラーが出てきたら、下を試してみてください。

```
Error: Cannot find module 'hap-nodejs'
Error: The requested platform 'BroadlinkRM' was not registered by any plugin.

```

```
$ docker exec homebridge npm install hap-nodejs
```

##homeアプリとの連携
iPhone(もしくはiPad)にhomeアプリをダウンロードします。
Homebridge側ではペアリング用のコードを表示します。

```
$ docker logs -f homebridge
```
homeアプリを起動し、表示されたQRコード、もしくはコードを入力するとペアリングできます。
アプリの表示画面にlearnというアイコンがあり、これをタップすると赤外線リモコンの学習モードになります。学習モード中はRM mini3のライトが白く光るので、この間にリモコンのスイッチをRM mini3に向けて押してください。
学習できるとHomebridge側では赤外線のHex codeが表示されます。

```
[4/19/2020, 11:23:34 PM] [Broadlink RM] [RESULT] Learn Code (learned hex code: 2600500000012a91151015351536151015351511151015111535153515351511153515111535151015111510151115351535151115101511143615351535151115101536143615351500052200012a4815000d050000000000000000)
```
このcodeを対応するconfig.jsonの"data"の値に入れて、準備完了です。
config.jsonを更新したら、homebridgeを再起動します。

```
$ docker restart homebridge
```
これで使えるようになりました。

##おわりに
config.jsonファイルを書き換えればスイッチの数や種類を増やしたり、細かい設定を付け加えることができます。詳細については公式を参照してください。
https://lprhodes.github.io/slate/#advanced-setup

設定はHomebridge Config UI Xから確認することもできます。http://\<ip of machine>:8080で設定画面に入れます。プラグインの確認には便利なので見てみてください。
https://github.com/oznu/homebridge-config-ui-x

あとこの手法の問題点なんですが、wifiが再接続されるとbridgeの情報が更新されて上手くいかないことがあります。その場合は最初からセットアップするしかないです。別の良い方法があったら教えていただけると嬉しいです。m(_ _)m