eRemote mini + Raspberry Pi + Homebridgeで「Hey Siriリビングの照明つけて」を実現するメモ

eRemote miniを購入し、Hey Siriでコントロールできるようにしたので作業記録です。
Raspberry Pi 3でHomebridgeを動作させ、実現しています。

特に新しい技術はなく、HomebridgeとWiresharkでAPI非公開の学習リモコンをHomeKit (Siri) 対応してみた - Qiita の通りに実施しただけです。
記事中ではRM mini3とありますが、eRemote miniはRM mini3の日本版なので全く同じ要領でできました。

Siriに家電を対応させる方法は、IRKitを使った記事をよく見かけますが、eRemote miniではあまり見かけず、上記の記事でもeRemote mini という単語が登場しないこと、少し詰まった点があることから、誘導がてら記事にすることにしました。
上記の記事にあるように、eRemote miniはAPIが公開されていないのでネットワークアナライザで通信内容を傍受してそのデータを使います。

こんな感じのことができるようになります

eRemote mini の準備

まず、買います。
自分調べでは、赤外線リモコンを学習して、スマホで操作できる系のデバイスではeRemote miniが一番安いのではないでしょうか。
せっかくやるなら家の全部屋分買いたいので、お値段は大事ですよね。
Amazon Echoにも対応しているようですね。Amazon Echoも購入予定なので楽しみです。

日本版でないもの↓も買えるようですが、サポートされたいので普通に日本版として販売されているものを買いました。

購入したら、説明書に従って各種家電をe-Controlアプリでコントロールできるように設定します。
エアコンは、電源ボタンを読み取るだけで、どこのメーカーか判断し、こんな感じでで自動的に各種ボタンを設定してくれました。

外出先からでも操作できるので、旅行中に照明をオンオフしたりすると防犯対策に良さそうです。

Raspberry Piのセットアップ

下記の記事の通りに実施しました。記事の通り、Nodeも新しめのを入れます。

Raspberry piのセットアップ作業メモ

Homebridge のインストール

Raspberry Pi 上で実施します。
公式 の通り、

sudo npm install -g --unsafe-perm homebridge

とします。
下記のようなエラーになりました。

/usr/bin/homebridge -> /usr/lib/node_modules/homebridge/bin/homebridge

> mdns@2.3.3 install /usr/lib/node_modules/homebridge/node_modules/mdns
> node-gyp rebuild

make: Entering directory '/usr/lib/node_modules/homebridge/node_modules/mdns/build'
CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o
In file included from ../src/dns_sd.cpp:1:0:
../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory
#include
^
compilation terminated.
dns_sd_bindings.target.mk:150: recipe for target 'Release/obj.target/dns_sd_bindings/
src/dns_sd.o' failed
make: Entering directory '/usr/lib/node_modules/homebridge/node_modules/mdns/build'
CXX(target) Release/obj.target/dns_sd_bindings/src/dns_sd.o
In file included from ../src/dns_sd.cpp:1:0:
../src/mdns.hpp:32:20: fatal error: dns_sd.h: No such file or directory
#include
^
compilation terminated.
dns_sd_bindings.target.mk:150: recipe for target 'Release/obj.target/dns_sd_bindings/src/dns_sd.o' failed
make: *** [Release/obj.target/dns_sd_bindings/src/dns_sd.o] Error 1
make: Leaving directory '/usr/lib/node_modules/homebridge/node_modules/mdns/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack at emitTwo (events.js:126:13)
gyp ERR! stack at ChildProcess.emit (events.js:214:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
gyp ERR! System Linux 4.9.35-v7+
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/lib/node_modules/homebridge/node_modules/mdns
gyp ERR! node -v v8.9.1
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! mdns@2.3.3 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the mdns@2.3.3 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2017-11-08T14_13_36_071Z-debug.log

dns_sd.h がないみたいなことを言われているので、

sudo apt-get install libavahi-compat-libdnssd-dev

を打ってから、再実行したらうまくいきました (参考)

Homebridgeのrm-mini3プラグインのインストール

sudo npm install -g homebridge-rm-mini3

これだけでした。

(https://github.com/lprhodes/homebridge-broadlink-rm ってのもあるようです。こっちのほうが多機能そう??)

パケットキャプチャして、config.jsonを書く

Wiresharkによるパケットキャプチャ

参考記事の通り、

Xcodeを開き、MacとiPhoneをつなぎ、Window->Devicesを開き、接続したiPhoneを選択して、iPhoneのIdentifierをコピーします。
次に下のコマンドで仮想インターフェースを作成し、Wiresharkで読み取れるようにします。
rvictl -s <コピーしたIdentifier>

を実行

Starting device (コピーしたIdentifier) [SUCCEEDED] with interface rvi0

と表示されればOK。

Wiresharkを開いて、歯車アイコンを押して、rvi0の行を選択して、開始を押します。
iPhoneの[設定]->[Wi-Fi]->[繋いでいるSSIDの右の(i)]とたどると、iPhoneのIPアドレスがわかるので、こちらを確認し、ip.src == 192.168.0.123 のように、フィルタを書きます。

その状態で、e-Controlアプリで適当なボタンを押すと、ピロッと1行ボタンを押したことに対応する行が増えます。


この、192.168.0.12 に該当する部分がeRemote mini のIPアドレスです。
これを受け、ip.src == 192.168.0.123 and ip.dst == 192.168.0.12とフィルタを書くと、iPhoneからeRemote miniへの通信のみが表示される状態になります。

config.jsonを書く

サンプルが、プラグインのGitHubリポジトリにあるので、これを改変していきます。
https://github.com/tattn/homebridge-rm-mini3/blob/master/config-sample.json

bridgename, username, port, pin はそのままでも書き換えてもOKのようです。
descriptionも書き換えてもそのままでもOKのようです。
platforms はよくわかりませんが、そのままにしておきました。

次に、accessoriesの配列に各家電の情報を格納しておきます。
accessory はHomebridgeでどのプラグインを使うかの決定に使われるので "RM mini3" のまま、変えてはいけません
name"リビングのエアコン" のようなわかりやすい名前をつけておきます。
host は、先程確認したeRemote miniのIPアドレス(192.168.0.12)を入れます。

data の、type"on"にしておきます。
例には"channel"もありますが、Hey Siriに対応しないのであまり意味がなさそうです (多分)。

onoffがeRemote miniに送るコマンド本体です。
このデータを確認するために、Wiresharkを接続した状態で、e-Controlアプリで、(例えば)リビングのエアコンをオンにするボタンを押します。
そうすると、Wiresharkに1行ピロッと出ます。それがエアコンをオンにするデータですので、[右クリック]->[コピー]->[16進数ストリームとして]でこれをコピーします。
QUICのことをよくわかっていないのですが、前半28バイトはヘッダか何かのようで、Wiresharkでバイト列の後半にカーソルを当てたときに青くなる29バイト目以降がデータの本体 (ペイロード) のようなので、5aa5aa55... からをコピーして、onのところに書きます。

off も同じ要領でオフにするときのデータをキャプチャして書きます。

同じ要領で、家電の数だけ、accessories配列にオブジェクトを書いたら、config.jsonは完成です。
このファイルは ~/.homebridge/config.json に配置しておきます。

Homebridge の起動とiPhoneへの設定

homebridge

と打ちます。
画面上にQRコードが表示されるので、iPhoneの「ホーム」アプリを開いて、「アクセサリの追加」を押して、QRコードを読み込ませます。
すると、config.jsonに書いた家電類が追加されます。
部屋名や家電名を適宜設定すると、Siri上でもその部屋名、家電名でオンオフできるように鳴ります。

成果物

成果物はこんな感じです。

You may also like...

コメントを残す

メールアドレスが公開されることはありません。