Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
98
Help us understand the problem. What is going on with this article?
@akuroda

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

More than 3 years have 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に連携できませんでした。

参考

98
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
akuroda

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
98
Help us understand the problem. What is going on with this article?