やること
いわゆるスマートリモコン、**RM mini3を使ってSiriから家電を音声コントロールさせるところまでを解説します。RM mini3はeRemote mini**とほぼ同じものですがeRemoteよりもずっと安く(2,500円程度)売られています(ただし多分技適がないのと、後述する日本のストアにあるアプリでは一部機能制限がかかります)。
本記事は、別の記事にあったWireSharkを使ってペイロードを取り出して……という方法がうまくいかなかったため新たに書き起こしました(キャプチャしたパケットを直接UDPで投げつけてもなぜかダメでした)。
前提
サーバーとしてローカルのWiFiに接続されているUNIXライクOSを使います。MacOSのターミナルやWindowsのUbuntu/Bashでもいけるはずです。もちろんサーバーの電源が入っている間しか使えませんので、Raspberry Piのような省電力の端末を選ぶのもよいでしょう。またnode.js/npmが使える前提で解説していくので、環境がない人は**こことかここ**を見ながら設定しましょう。
ペアリング
RM mini3にはボタンも何もないので、mini3からWiFiに接続するためにスマホ用のアプリを使います。Amazon Echoを購入した時最初にやるあれです。
iTunesストア(日本)にあるiPhoneアプリ**e-Controlをダウンロードします。こいつはスマホの言語設定とRM mini3のMACアドレスを見て機能を制限**してきやがりますが、Homebridgeを使用するのに必要なWiFiへの接続設定までは問題なくできます(なおiPhoneの言語設定を英語にするとこの制限が外れて普通に使えます)。USアカウントをお持ちの方はIntelligent Home Centerを。日本語対応で機能制限もありません。
まずスマホをWiFiにつなぎます。なおmini3は5GHzに対応していないので2.4GHzの電波を選びましょう(ここでめっちゃハマりました)。次にアプリを起動します。RM mini3をUSB電源につなぎ、USBの口の上にある小さな穴にボールペンの先やクリップなどで根気よく長押しをします。0.3/秒くらいの頻度で高速点滅しはじめたら、WiFiのパスフレーズをアプリに入力してペアリングしてください。ペアリング手順は**ここ**に詳しいです。
完了画面が出たらペアリング成功です。
RM mini3のIPアドレスとMACアドレスを探す
**後述する方法**で取得できます。うまく行かない時は下記のping
を使う方法を試してみてください。
`ping`と`arp`を使って取得する方法
$ ping 192.168.10.3
PING 192.168.10.3 (192.168.10.3): 56 data bytes
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
↑ハズレです
$ ping 192.168.10.4
PING 192.168.10.4 (192.168.10.4): 56 data bytes
64 bytes from 192.168.10.4: icmp_seq=0 ttl=255 time=102.344 ms
64 bytes from 192.168.10.4: icmp_seq=1 ttl=255 time=146.518 ms
64 bytes from 192.168.10.4: icmp_seq=2 ttl=255 time=194.303 ms
↑何か機器がつながっています
IPアドレスが分かればarp
コマンドでMACアドレス(物理アドレス)が分かります。arp
はping
コマンド使用時のキャッシュを使用するため、失敗する場合は再度ping 'IPアドレス'
を実行してやり直してみてください。
$ arp 192.168.10.4
? (192.168.10.4) at 34:ea:34:40:xx:xx on en0 ifscope [ethernet]
IPアドレスとMACアドレスが判明したらそれぞれ控えておきましょう。
homebridgeとプラグインをインストール
nodebridge
を使っている場合はsudoは不要です。
$ npm install -g --unsafe-perm homebridge
一度homebridgeを起動します。
$ homebridge
起動したらCtrl-C
で一旦終了させます。こうすることで~/.homebridge
に設定ディレクトリが出来ます。続いてプラグインをインストールします。
$ npm install -g homebridge-broadlink-rm
RM mini3のアドレスを探す
インストールしたら、homebridge-broadlink-rm
の配下にあるhelpers/getDevice.js
でLAN上にあるRM mini3を探すことができます。nodebrew
を使っている場合、
$ node ~/.nodebrew/current/lib/node_modules/homebridge-broadlink-rm/helpers/getDevice.js
のようにコマンドを実行すれば、
Discovered Broadlink RM device at 192.168.10.4 (34:ea:34:40:XX:XX)
のように返答が返ってくるので控えておきましょう。上記の場合、192.168.10.4
がIPアドレス、34:ea:34:40:XX:XX
がMACアドレスになります。
これでhomebridge
+RM mini3
が使えるようになります。次に設定をしていきます。~/.homebridge/config.json
というファイルを以下の内容で作成します。
{
"bridge":{
"name":"Homebridge",
"username": "34:EA:34:40:XX:XX",
"port":51826,
"pin":"031-45-123"
},
"description":"Homebridge",
"platforms": [
{
"platform": "BroadlinkRM",
"name": "Broadlink RM",
"accessories": [
{
"name": "エアコン",
"type": "switch",
"data": {
"on": "",
"off": ""
}
}
]
}
]
}
ここでusername
の部分をさっき調べたMACアドレスで置き換えます。またPINは適当に変更した方が良いかもしれません。ここで、MACアドレスの英字は大文字にしてください。(なおvimだとCtrl-v
で選択してU
をタイプすると大文字に置き換わります)
再び起動します。
$ homebridge
QRコードのようなものが表示され待機状態になったら成功です。
あとはiPhoneの「ホーム」というプリインストールされているアプリを起動し「アクセサリを追加」でhomebridgeを追加します。
iPhone「ホーム」アプリの画面に「デフォルト…のLearn」というボタンが追加されるのでタップしてみましょう。
[2017-12-11 23:28:31] [Broadlink RM] Learn Code (ready)
と端末に出て、mini3の本体LEDが白く光ったらが赤外線信号を受信する準備ができています。mini3に向けてなにかリモコンのボタンを押してみましょう。
[2017-12-11 23:31:21] [Broadlink RM] Learn Code (learned hex code: 26006600091a083d091a091a081a093e081a091a091a081a091a093d083e081a091a0900060f091a083d091a091a081b081a093d093d083e093c093e081a091a083d093c08000584081a093e081a091a081b083d081b081a091a091a081a093e083e081b081a09000d050000)
この文字列がリモコンから発信された信号になります(パケットキャプチャで拾えるペイロードとは異なります)。ちなみにエアコンのリモコンを使うととても長い文字列になりますが、これはエアコンのリモコンが温度や風速などの情報を一度に全て送信しているためです。そのためエアコンの制御は細かく制御することが難しく、いくつかプリセットを覚えさせる必要があります。よく学習リモコンで「エアコン対応」とエアコンを特別枠にしているのはそのためです。
話がそれましたが、このリモコンの文字列(16進数列)をコピーし、.homebridge/config.json
に
"platforms": [
{
"platform": "BroadlinkRM",
"name": "Broadlink RM",
"accessories": [
{
"name": "エアコン",
"type": "switch",
"data": {
"on": "2600bc01713b0f0d0……",
"off": "2600bc01713b0e0e……"
}
},
のようにセットしてhomebridgeを再起動するとiPhoneの「ホーム」アプリの画面からリモコンが操作できるようになっています。
この「ホーム」アプリはSiriと連携しているので、「Hey Siri エアコンをオンにして」というとエアコンの電源が入ります。
とりあえず以上! Enjoy!
#まだ細かい説明を省いた状態ですが一旦公開します。