Hubot
ifttt
RaspberryPi
IoT
GoogleHome

スマート家電も赤外線家電もGoogle Homeでまとめて操作

Google Homeに声をかけるだけで、赤外線では操作できないスマート家電も、赤外線でしか操作できない赤外線家電も、まとめて操作できるシステムを開発しました。
複雑な操作も簡単に実現できるので、シンプルにスマートホームを構築できます。
(他のシステムでは、家電のON/OFFのような単純な操作しかできなかったり、複雑な操作のためには複雑怪奇な設定が必要だったりします。)
「初心者でもできた!」という報告もたくさん頂いているので、ぜひお気軽にお試しください。

できること

  • 「OK Google、行ってきます」の一言で、スマート家電も、赤外線家電も、まとめてOFFにする
  • 「OK Google、暖房 22 度」で、エアコンの設定温度を 22 度にする
  • 「OK Google、エアコンを 6時半 につけて」で、6時半 にエアコンをつける
  • 「OK Google、エアコンを 7時間後 につけて」で、7時間後 にエアコンをつける
  • 「OK Google、テレビの音量を 4 上げて」で、音量アップを 4 回繰り返す
  • Twitterの通知を、Google Homeに喋ってもらう
  • 外出先から、自宅のエアコンを、スマホで操作する

他のスマートリモコンとの比較はこちら → スマートリモコンの比較表

必要なもの

necessary.png

  • Google Home (グーグルホーム)
    • Amazon Echoでも可能ですが、IFTTT連携が使いづらい
    • IFTTTと連携できるなら、ほかのスマートスピーカーでもOK
  • RM Mini3
    • 格安のWiFi付き赤外線スマートリモコン(別名: 黒豆、Black Bean)
    • 海外通販なら千円強、国内通販だと3千円弱
    • ただし、RM Mini3は技適を取っていないため、日本国内では、技適を取った同等の機種(eRemote mini、7千円弱)をお使いください
  • 自宅サーバ
    • Node.jsとRedisが動けばOK
    • Raspberry Piがお手軽
    • Amazon Fire TV Stickもサーバ化できます!
      • 第1世代でも、第2世代でも、動作報告を頂いています
補足

現在市販されている多くのスマートリモコンは、自宅サーバがなくても使えますが、単純な操作しかできなかったり、複雑な操作のためには、複雑で強引な怪しい設定が必要だったりします。ここで紹介するシステムは、自宅サーバを使って、複雑な操作を簡単に実現します。将来的には、スマートリモコン単体やスマートスピーカー単体で、似たようなことができるものと期待しています。本システムは、過渡期をしのぐための、便利なグルー(糊、接着剤)を目指しています。

【追記:2018年1月26日】
この投稿の直後に、RM Mini3が公式にGoogle Homeに対応し、自宅サーバがなくても、色々なことができるようになりました。まずは、RM Mini3を単体で(自宅サーバなしで)使ってみて、物足りなくなったら、自宅サーバを導入するのもよいかなと思います。参考までに、両者(単体 vs. 自宅サーバ)の機能比較を表にまとめました。ついでに、他のスマートリモコンとの比較表も整理しましたのでご活用ください。
→ スマートリモコンの比較表

システム構成

下図のように、Google Home → Google Assistant → IFTTT → Slack → 自宅のhubotサーバ → RM Mini3を経由して、赤外線家電を操作できるようになります。
overview.png
Slackのおかげで、自宅サーバに固定グローバルIPがなくても使えます。
ngrokなどで自宅サーバをネットに晒す必要がないので、安全で簡単です。)

hubotからRM Mini3を操作するための拡張スクリプト(hubot-broadlink-rm)を私が作りました。

システムの構築方法は[こちら]で詳しく解説していますが、まずは以下の本文を読んで、雰囲気を掴むことをおすすめします。

赤外線家電の操作方法

赤外線リモコンの学習と発信
例えば、照明をつける赤外線リモコンを学習するには、
learn light:on
というメッセージを、Slack経由でhubotに送ります。
すると、RM Mini3が学習モードになるので、照明のリモコンの点灯スイッチを押すと、学習が完了します。
学習した赤外線はlight:onという名前でhubotが覚えてくれます。

学習した赤外線を発信するには、
send light:on
というメッセージをhubotに送ります。

Google Homeから家電を操作
IFTTTで、Google Homeに「明かりをつけて」と話したら、
send light:on
をSlackに送るようにすれば、Google Homeから照明を点灯できるようになります。
(ちなみに「OK Google」の代わりに「ねーぐーぐー」や「ねぐぐ」でも反応します。)

外出先からのエアコン操作
IFTTTのButtonトリガーで、
send aircon:on
をSlackに送るようにすれば、スマホのウィジェットを押すだけで、外出先からエアコンをONにできます。
また、スマホの位置情報やWiFi接続の有無をトリガーにすれば、自動でONにすることもできます。

複数の家電をまとめて操作
sendメッセージには、複数の赤外線信号を渡すこともできます。例えば、
send light:on tv:on aircon:on
とすれば、照明とテレビとエアコンを、まとめてONにできます。

発信間隔の調整
赤外線信号を発信する間隔を調整したければ、
send light:on [2s] tv:on [1500ms] aircon:on
というように微調整できます。(詳細はこちら

発信を繰り返す
赤外線を発信する回数を*3と指定すれば、
send tv:vol:up*3  ⇒  send tv:vol:up tv:vol:up tv:vol:up
というように、音量アップを3回繰り返すこともできます。
さらに、繰り返しの間隔も調整したければ、
send tv:vol:up[300ms]*3  ⇒  send tv:vol:up [300ms] tv:vol:up [300ms] tv:vol:up
というように微調整できます。(詳細はこちら

この繰り返し機能を使えば、音量アップのIFTTTアプレットを1つに集約できるので、設定が楽になります。
「OK Google、テレビの音量を # 上げて」と言ったら、
send tv:vol:up*{{NumberField}}
をSlackに送信するIFTTTアプレットを1つ用意するだけで、「音量を 3 上げて」も「音量を 10 上げて」も実現できます。

RM Mini3の使い分け
複数台のRM Mini3を所有している場合には、台所を消灯して寝室を点灯するというような、使い分けもできます。
それにはまず、個々のRM Mini3を、MACアドレスやIPアドレスで識別して、台所(@kitchen)や寝室(@bedroom)という名前を付けます。
set @kitchen aa:bb:cc:dd:ee:ff
set @bedroom 192.168.135.246
すると、sendメッセージの中で、赤外線を発信させるRM Mini3を指定できるようになります。
send light:off@kitchen light:on@bedroom

格安のRM Mini3なら、家中のすべての部屋に設置しても、財布に優しいので、家全体のスマート化に打って付けです。

きめ細かな操作も簡単
これらの機能を組み合わせれば、きめ細かな操作も、簡単に実現できます。
例えば、「OK Google、外部入力 # 番」で、テレビの表示を # 番目の外部入力に切り替えるには、
send tv:dttv [2s] tv:source[3s]*{{NumberField}}
というメッセージを送るIFTTTアプレットを用意します。

「OK Google、外部入力 2 番」と言えば、
send tv:dttv [2s] tv:source[3s]*2 ⇒ send tv:dttv [2s] tv:source [3s] tv:source
となって、地デジ切替(td:dttv)の2秒後に、入力切替(tv:source)が送信され、さらに3秒後に入力切替(tv:source)が送信されるので、テレビには2番目の外部入力が表示されます。

また、「OK Google、外部入力 0 番」と言えば、
send tv:dttv [2s] tv:source[3s]*0 ⇒ send tv:dttv
となって、地デジ切替(td:dttv)だけが送信されます。そこで、Homeアプリのショートカット機能で、「地デジ」を「外部入力 0 番」に置き換えれば、「OK Google、地デジ」と言うだけで、テレビが地デジに切り替わります。

たった1つのIFTTTアプレットだけで、複雑かつ、きめ細かな操作を、簡単に実現できました。

スマート家電の操作方法

赤外線では操作できないスマート家電も、赤外線家電と同じように、sendメッセージで操作できます。

例えば、WebAPIで操作できるスマート家電を考えてみましょう。

このスマート家電の電源をONにするWebAPIのURLが、
https://SMART.DEVICE/API/on
だとすると、以下のようなUNIXのコマンド:
curl -s https://SMART.DEVICE/API/on
を実行すれば、電源をONにできます。

このコマンドをsendメッセージで扱うには、まず、
command smart:on curl -s https://SMART.DEVICE/API/on
というメッセージを送って、smart:onという名前で、hubotにコマンドを登録します。

あとは、赤外線家電と同じように、
send smart:on()
というメッセージを送れば、hubotがコマンドを実行して、スマート家電がONになります。

間隔調整や繰り返しも、同じように指定できます。
send [7h] smart:on()[15m]*3

なお、WebAPIのないスマート家電でも、IFTTTにさえ対応していれば、IFTTT経由でWebhookを簡単に設置できます。(詳細はこちら

スマート家電と赤外線家電をまとめて操作する方法

スマート家電と赤外線家電をまとめて操作するには、単に、
send smart:on() tv:on light:on
と並べるだけです。どんな種類の家電も、分け隔てなく、同じように扱えます。

まとめ

RM Mini3hubot-broadlink-rmを使えば、たった1つのIFTTTアプレットだけで、Google Homeから、様々なデバイスを、ひとまとめに、きめ細かく操作できます。
IFTTTアプレットを無駄にたくさん作らずに済むので、スマートホームをシンプルに構築できます。

生活に直結するものなので、シンプルに、簡単に、運用できることは、このシステムの大きな強みです。
公開から2ヶ月でまだ数千ダウンロード程度ではありますが、「簡単に構築できた!」という声をたくさん頂いています。

より多くの方々に、快適なスマートホームを、手軽に、格安で体験していただければ、開発者冥利に尽きます。
まずは手始めに、赤外線家電のスマート化、スマート電球、スマートコンセントなどから、ご自宅をスマート化してみてはいかがでしょうか。
システムの構築方法は、こちらで詳しく説明しています → RM Mini3とGoogle Homeで家電を操作する方法

おまけ(Twitterの通知をGoogle Homeに喋らせる方法)

(注:Fire TV Stickでは、残念ながらGoogle Homeに喋らせられません。)

まず、「テキストをGoogle Homeに喋らせるUNIXコマンド」を用意します。
次に、このコマンドをsayという名でhubotに登録します。
すると、喋らせたいテキストをsayに与えるだけで、
send say(太郎さんからフォローされました!)
Google Homeが「太郎さんからフォローされました!」と喋ってくれます。

あとは、IFTTTで、twitterでフォローされたら、
send say({{FullName}}さんからフォローされました!)
をSlackに送るよう設定すれば、Twitterの通知をGoogle Homeが教えてくれるようになります。