Edited at

Google Homeとスマートでない家電を接続する

More than 1 year has passed since last update.


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に連携できませんでした。


参考