1. はじめに

Google Homeを買ったので、いろいろと接続してみようと思ったのですが、残念ながら家にある家電たちはあまりスマートでなくつながりませんでした。いろいろと調べてみたところ、Broadlink RM mini3という安価で面白そうなデバイスがスマートリモコンとして使えそうだったので、さっそく GearBestで購入して試してみることにしました。

rm_mini_3.jpg

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

学習モードをオンにするだけなので、設定ファイルは枠だけで大丈夫です。

~/.homebridge/config.json
{
    "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の部分)。

home_learn.PNG

コンソール画面

...
[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
~/.homebridge/config.js
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"を使い、話しかけるキーワードを設定します。
ifttt_trigger.PNG

②アクションの作成
URL, Method, Content Type, Bodyを設定します。
ifttt_action.PNG

これで、Google Homeに「テレビ」と話しかけると、テレビのon/offができるはずです。最初は「テレビをつけて」というキーワードにしたのですが、そうするとGoogle Homeのデフォルトのテレビ連携機能が動作してしまい、IFTTTに連携できませんでした。

参考

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.