Google HomeとeRemote miniではじめるスマートホーム (Windows版)

Google Homeを購入したので、スマートホーム構築に挑戦しました。フィリップスの出来合いシステムなどを購入すれば簡単に構築できそうですが、安価なeRemote mini(RM mini3)で挑戦しました。屋内にnodeサーバーを設置する必要があり少しハードルが高かったのでメモとして残します。

既出の記事ではRaspberry Piを利用していることが多いのですが、手っ取り早く動くことを確認したかったのでWindows PCを使いました。

必要なもの

  • Google Home
    もちろんGoogle Home miniでも。
  • eRemote mini
    上位機種のeRemoteや、輸入版のRM mini3やRM proでもOKです。上位機種には温度センサーが付いているようですが、利用できないので意味なしです。
  • 屋内サーバー
    Raspberry Piでサーバーを構築する記事が多いのですが、24時間電源ONでよければWindows PCやMacでもOKです。
  • 赤外線リモコン対応家電
    エアコンやテレビなどは大概大丈夫なのですが、リモコン対応照明の中には赤外線ではない周波数のリモコン機器もありますので要注意です。赤外線リモコンであることを確認してください。

利用するWEBサービス

  • IFTTT (イフト)
    Google Homeの音声指示を受け取りどう対応するかを設定するサービスです。
  • ngrok (エヌジーロック/エングロック)
    屋内サーバーへ外部(ネット上)からアクセスするために使います。

流れ

以下のルートで音声命令が家電に伝わります。2-3秒程度の遅延がありますがGoogle Homeに「了解しました」的な返事をさせればごまかせます。

  1. Google Home
  2. IFTTT
  3. ngrok
  4. 屋内サーバー
  5. eRemote mini
  6. 家電

準備

以下の作業を事前に行っておきます。

Google Home

特に何もしません。

IFTTT

アカウントを作って、Google Homeから何かしらのアクションを設定する練習をしておいてください。(話しかけるとメールが届く的な)

ngrok

特に何もしません。
アカウントを作る必要はありません。ただし、実運用では課金(ドメインを固定する)をする必要がありそうです。その理由は後述します。

屋内サーバー

24時間稼働するWindows PCかMac、もしくはRaspberry Piを用意します。eRemoteと同じWi-Fiに接続しておきます。

eRemote mini

Wi-Fiに繋げ、何かしらのリモコン信号を取得しておきましょう。スマホが必要です。Wi-Fiに繋げるには「e-Control」アプリを、信号を取得するには「RM Bridge」アプリを利用します。

作業

1.屋内サーバーの設置

屋内サーバーからeRemoteを操作できるようにします。Node.jsで書かれた「Broadlink RM Server for IFTTT control」サーバーをWindows PC内に立ち上げ、家庭内LAN越しにeRemoteを操作してもらいます。

Windows PowerShellでNodeがインストールされているか確認します。以下のコマンドを打ち込み、バージョン番号が返ってきたらOKです。インストールされていない場合には公式サイトからダウンロードしインストールしてください。

node -v

ドキュメントフォルダ内に適当なフォルダを作っておきます。
「Broadlink RM Server for IFTTT control」をgitHubからダウンロードし、ファイル一式を先ほど作成したフォルダに配置します。ここでは「remote」フォルダとします。

「remote」フォルダに移動します。

cd パス/remote

npmを使い、「Broadlink RM Server for IFTTT control」に必要なモジュール群をインストールしてもらいます。

npm install

取得済みのリモコン信号を登録します。「remote」フォルダ内にある「commands.js」を編集します。

module.exports = [{
 "command": "test",
 "secret": "xxxx",
 "mac":"eRemoteのMACアドレス(小文字で)",
 "data": "リモコン信号"
 }];

サーバーを起動させます。

npm start

Server running, go to http://localhost:1880
Discovered Broadlink RM device at [IPアドレス] ([MACアドレス])

とかえってこればOKです。「Discovered…」が表示されない場合には、サーバーがeRemoteを検出できていないので、同じWifiにつながっているかなど、接続を確認してください。

「Postman」というChromeアプリを使って接続テストをします。設定項目のみ箇条書きにします。

  • 接続方法:POST
  • アドレス:http://localhost:1880/command/test
  • Header:「Content Type」 / 「application/json」
  • Body:「secret」/ 「xxxx」

「send」をクリックし、eRemoteからリモコン信号が発信され、家電が動くのを確認してください。感動します。

ngrokのwindows版をダウンロードし、「ngrok.exe」ファイルを「remote」フォルダに配置します。

別のWindows PowerShellを立ち上げ、ngrok.exeを実行します。

cd パス/eremote
.\ngrok.exe http 1880

Forwarding http://サブドメイン.ngrok.io -> localhost:1880
Forwarding https://サブドメイン.ngrok.io -> localhost:1880

というアドレスが返ってきますので、httpsから始まるアドレス(「https://サブドメイン.ngrok.io」部分)をコピーします。

再度「Postman」を使い、ネット越しに家電を操作できるかテストします。
先ほどの設定項目の「アドレス」部分を以下の様に変更します。

アドレス:https://サブドメイン.ngrok.io/command/test

家電が動けば成功です。感動します。

これで屋内サーバーの設置は終了です。

2.IFTTTの設定

新規でアプレットを作成し、Google Homeの音声に反応して「Webhooks」でngrokのアドレスへPOSTリクエストします。さきほど「Postman」でテストしたPOSTリクエストを「Webhooks」に行わせる感じです。

  • URL:https://5da59759.ngrok.io/command/test
  • Method:POST
  • Content Type:application/json
  • Body:{“secret”:”xxxx”}

設定が完了したら、Google Homeに指示すると家電が動きます。感動します。

実運用について

ngrokの無料版では、ngrokを立ち上げるごとにアドレスが変わってしまいます。IFTTTに多くのアプレットを設定している場合には、そのすべてでwebhooksの送信先アドレスを変更する必要があり、実用的ではありません。

固定アドレスを取得するために毎月500円をngrokに課金する必要がありそうです。もしくはアドレス変換を行う別サーバーを挟むのもありかもしれません。

どうぞ参考にしてみてください。

Leave a Reply

Your email address will not be published. Required fields are marked *