1. はじめに
Google Homeを買ったので、いろいろと接続してみようと思ったのですが、残念ながら家にある家電たちはあまりスマートでなくつながりませんでした。いろいろと調べてみたところ、Broadlink RM mini3という安価で面白そうなデバイスがスマートリモコンとして使えそうだったので、さっそく GearBestで購入して試してみることにしました。
2. 解説
2.1 使ったもの
- Google Home
- Broadlink RM mini3: 赤外線リモコンをエミュレートするデバイス
- Broadlink RM Server for IFTTT control: RM mini3を外部から操作するためソフトウェア
- iPhone + HomeBridge: 通信をキャプチャするために使用
- Raspberry Pi: Broadlink RM Server for IFTTT control、HomeBrigeを動かす環境として使用
- IFTTT: Google HomeからBroadlink RM Serverへ中継させるための仕組み
- ngrok: 外部から家のサーバへ接続させるための仕組み
最終形は、Google Home ⇒ IFTTT ⇒ ngrok ⇒ Broadlink RM Server for IFTTT control⇒RM mini3という形になります。
2.2 ステップ
大きく分けて、①RM mini3で機器を制御できるようにする、②Google HomeとRM mini3を接続する、という2つのステップで実現します。
2.2.1 RM mini3で機器を制御できるようにする
RM mini3の通信をキャプチャし、キャプチャしたRM mini3コマンドをサードパーティアプリへ埋め込みます。キャプチャおよびサードパーティアプリを動かすために、Node.jsの環境が必要です。今回は手元にあったRaspberry Piを使いました。
2.2.1.1 Node.jsのバージョン
Node.jsは以下のバージョンを使いました。
$ node -v
v7.10.1
$ npm -v
4.2.0
2.2.1.2 サードパーティアプリ
RM mini3を制御できるサードパーティアプリはいくつかありますが、今回はBroadlink RM Server for IFTTT controlをメインとして、Homebridge RM mini3をキャプチャ用に使用しました。
アプリ | 特徴 |
---|---|
Broadlink RM Server for IFTTT control | node.jsのアプリ、ngrokを使用してIFTTT連携が可能 |
Homebridge RM mini3 | Homebridgeのplugin、Qiitaに日本語の情報がある(HomebridgeとWiresharkでAPI非公開の学習リモコンをHomeKit (Siri) 対応してみた) |
Homebridge Broadlink RM | Homebridgeのplugin、Broadlinkデバイスを自動で発見できる、通信のキャプチャができる、対応しているHomeKitアクセサリの種類が多い |
2.2.1.3 RM mini3のコマンドのキャプチャ
まず、Homebridge Broadlink RMを使い、iPhoneのホームアプリから学習モードにしてリモコンをエミュレートさせるためのコマンドをキャプチャします。
# HomeBridgeのインストール
$ npm install -g homebridge
# Homebridge Broadlink RMのインストール
$ npm install -g homebridge-broadlink-rm
学習モードをオンにするだけなので、設定ファイルは枠だけで大丈夫です。
{
"bridge": {
"name": "Homebridge",
"username": "RM3 miniのMACアドレス",
"port": 51826,
"pin": "XXX-XX-XXX"
},
"description": "Homebridge",
"platforms": [
{
"platform": "BroadlinkRM",
"name": "Broadlink RM",
"accessories": [
{
"name": "TV",
"type": "switch",
"data": {
"on": "",
"off": ""
}
}
]
}
]
}
# homebrdigeを起動
$ homebridge
この状態で、iPhoneからHomeアプリを起動すると、アクササリのところに"Default Room Learn"というボタンが出てきます。このボタンを押してRM mini3を学習モードに設定し、リモコンを操作するとコンソールにRM mini3の制御するためのコマンドのキャプチャが表示されます(下記XXXXXXXXの部分)。
コンソール画面
...
[10/29/2017, 9:32:43 AM] [Broadlink RM] Learn Code (ready)
[10/29/2017, 9:32:50 AM] [Broadlink RM] Learn Code (learned hex code: XXXXXXXX)
[10/29/2017, 9:32:50 AM] [Broadlink RM] Learn Code (complete)
[10/29/2017, 9:32:50 AM] [Broadlink RM] Learn Code (stopped)
...
2.2.1.4 Broadlink RM Server for IFTTT controlのインストールと設定
# homebridge-broadlink-rmのインストール
$ npm install -g homebridge-broadlink-rm
module.exports = [{
"command": "TV_On",
"secret": "任意の文字列(パスワード)",
"ip": "RM mini3のIPアドレス",
"data": "キャプチャしたデータを埋め込み"
}];
# サーバの起動
$ npm start
これでRM3 mini側のセットアップは完了です。このタイミングで、postman等を使ってHTTP Postで通信できることを確認しておくとよいでしょう。
2.2.2 Google Homeとの連携
Google HomeはIFTTTと連携させることができるため、Google Home ⇒ IFTTT ⇒ ngrok ⇒ Broadlink RM Server for IFTTT controlという流れで連携します。
2.2.2.1 IFTTTとBroadlink RM Server for IFTTT controlの連携
IFTTTから家のサーバに接続するため、ngrokを使用します。ngrokを使用すると、接続のための専用のパブリックなURL(下記 https://XXXXX.ngrok.io の部分)が用意されるため、このURLに対してIFTTTから接続します。
# ngrokを起動
$ ngrok http 1880
Session Status online
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://XXXXX.ngrok.io -> localhost:1880
Forwarding https://XXXXX.ngrok.io -> localhost:1880
2.2.2.2 Google HomeとIFTTTの連携
IFTTTには、Google Assisitantとの連携機能が用意されていて、任意のキーワードからIFTTTのアクションを起動できるようになっています。
①トリガの作成
"Say a simple Phrase"を使い、話しかけるキーワードを設定します。
②アクションの作成
URL, Method, Content Type, Bodyを設定します。
これで、Google Homeに「テレビ」と話しかけると、テレビのon/offができるはずです。最初は「テレビをつけて」というキーワードにしたのですが、そうするとGoogle Homeのデフォルトのテレビ連携機能が動作してしまい、IFTTTに連携できませんでした。