はじめに
IoT(Internet of Things: モノのインターネット)時代到来により、様々なセンサ・デバイスがインターネットに繋がるようになり始め、多種多様なガジェットが開発・販売されるようになってきました。
- モノのインターネット - Wikipedia
- IoT Funding Guide | 2019 and Historic Timeline of Internet of Things Acquisitions and Venture Capital Investments
私はインターネットにつながる PC / スマホ以外のガジェットとして、WeMo Motion / WeMo Switch / Hue / Netatomo / Blink(1) / iRemocon / Future Home Controller / Pebble 等を保有しているので、これらを組み合わせて照明や室温の管理、音声認識や Twitter、腕時計からの操作、音声合成による返答、IFTTT 連携などを行う部屋を作成してみました。その内容の紹介と、今回作って色々と思ったことをあれこれと考察してみた内容をエントリにまとめてみました。
概要
コードは以下になります。
ごちゃごちゃしていますが、システムの全体像を示すと以下になります。
メインは Node.js で立てた API サーバで、諸々のデバイスを制御する Node モジュールを利用しています。自然言語による API をメインのインターフェース(叩くとガジェットが動作して返答が json で返ってくる)として、音声認識や Web からのリクエスト、Twitter や各サービスと連携させています。
ネットワークから操作できないような機器に関しては、ネットワーク型学習リモコンの iRemocon を通じて赤外線操作しています。学習は面倒なので IRKit も導入したいです。
- iRemoconトップページ
- IRKit - Open Source WiFi Connected Infrared Remote Controller
- 家電を自由に操作するiOSアプリがつくれる『IRKit』 - その後のその後
また、最近の多くのスマートデバイスは IFTTT と連携しているので、使えるものはこれを利用します。各サービスとの連携は、トリガを連携したいサービス、アクションを Gmail によるメールの送信として、送られてきたメールを監視することで実現しています。
各ガジェットの物理的な配置は以下のようになっています。
図に書くと余り操作できる機器が無いように感じるのでもっと色々欲しくなってきます。。iBeacon したい。
デモと解説
Web から操作
Web から操作できるようにしておけば、取り敢えず室内にある各スマホやタブレット、PC から操作できます(作るのが面倒だったので UI がすごくアレですが...)。モニタの ON/OFF は WeMo Switch や赤外線コンセントタップを利用しています。WeMo と iRemocon の操作は自作の node-wemo と node-iremocon を利用しています。
- GitHub - hecomi/node-wemo: Belkin 社の WeMo を操作する Node モジュールです
- GitHub - hecomi/node-iRemocon: iRemocon module for Node.js
ちなみに舞台裏を紹介すると、凄いイケてないのですが大変地味な作業で IR 信号の登録と自然言語によるコマンドの登録をしています。
音声認識で操作
声でお願いすると実行してくれて声で結果が返ってきます。これには Julius と OpenJTalk を Node.js から簡単に扱えるようにした自前の node-julius と node-openjtalk を利用しています。
- GitHub - hecomi/node-julius: Node.js module for voice recognition using Julius
- GitHub - hecomi/node-openjtalk: Node.js TTS module using OpenJTalk
PS3 の操作は別売りの赤外線リモコン(本体には USB ドングルを挿す)経由で行っており、torne は、PS3 が起動してから 3 回左押して 1 回下押して決定、という決まった動きなのでマクロにしています。
音声認識家電操作をお手軽にやりたい場合は Future Home Controller がオススメです。私はバックアップ機として現在利用させて頂いています。
あと SiriProxy を使いたかったのですが、iOS 7 から塞がれてしまったようで使えず残念です。
Pebble から操作
スマートウォッチの Pebble からも操作できます。Pebble アプリは楽なので Simply.js で作成しています。
動体検知でライト点灯
動きを検知できる WeMo Motion とスマート照明 Hue の連動です。Hue の操作には node-hue-api を利用しています。
ちなみに、これはやるだけであればわざわざシステムを組まなくても IFTTT のチャンネルがあるので、トリガに WeMo Motion を、アクションに Hue を指定するだけで出来ると思います。
IFTTT 連携
IFTTT 連携を利用して、スマホのいち情報と連動させて、家の近くの駅につくと家電を ON、逆に遠のくと OFF にしてます。あとは Google カレンダー連動をして、登録してある定期的な予定を実行したりしています。
(おまけ2)PC の赤外線操作
Windows から IR 信号を発したり逆に受け取れる IR ドングルもあったりします。私はネットワークで制御すれば良いか、と思って使わなくなってしまいましたが、音量下げるとかは赤外線信号でお手軽にできます。
思ってること
プロジェクタをつけたり、寝る前におやすみなさいコマンドで全部電気を OFF ったり、そういった自分から操作する系の雑事はかなり楽になりました。ただ、2点不満があって、複数の機器を組み合わせた処理を書くのが面倒なの点と、各デバイスのセットアップと API を利用できるようにするまでの準備が面倒な点です。そういった点はデバイスやサービス側でうまく対応してほしいなぁ、と思ったりします。この辺り掘り下げて考えてみます。
1点目の機器の組み合わせについてです。ネットワークに繋がってアレコレ出来るガジェットはクラウドファンディングの登場なども後押ししてとても多くなってきたように感じます。そして各々見た目も綺麗で使いやすい Android / iOS アプリや Web インタフェースを提供してくれています。なので、単体のデバイスだけであればかなり満足度高く扱うことが出来ますし、2,3個程度であれば IFTTT のインターフェースでかなりうまく扱えると思います。
が、将来的に5個、10個、更には家中にあって数十個とか百個とかそういった数になってくると、途端に扱うのが面倒で難しくなると思います。インタフェースがもっとビジュアルプログラミングっぽいものになれば良いかというと、確かに組み合わせるのは楽にはなりますが、それでも面倒なのと、学習コストがあるので普及はしなそうです。
そこでヒントになりそうなことが日経エレクトロニクスの 2014年4月28日号に書いてありました。これから向かおうとしている1兆個のセンサが覆う世界では、1次情報(例えば GPS の生値)よりも2次情報、3次情報(泊まってる宿の近くにはその人が良く行くスタバがある、とか1次情報を加工して得られるより高次な情報)が価値をもつ時代だと言われています。
私も小規模ながら今回作成して色々と感じるところがありました。結局やりたいことは「部屋の温度を快適に保ってほしいなぁ、省エネで」ということなのに、これを自分で組もうとすると沢山の1次情報を組み合わせて、例えば「自分が部屋にいて且つ温度が○○以下だったら△△度にエアコンを設定して、□□度以上だったら××度にして...」と頑張ってコードを書いて、ようやく2次情報を生成出来ることはできるけど、面倒で大変だしスケールしないなぁ、などです。なので予めこれこれこういう1次情報群があればこの2次情報が提供できますよ、それらは後から増やせるし共有もできますよ、みたいな、フレームワークがあると良いなぁ、と思いました。on{x} とか近い気がします。
ちょっと例が良くないかもしれませんが、この「1箇所に留まっていたら」部分が高次の情報になります(どういうコードになっているかも見れて面白いです)。このままだとちょっとギークよりな感じはしますが、こういった自然言語に近いインターフェースや部屋の間取り図などを利用しながら、色んなガジェットをハンドルしていることを意識せずに、目的が実現できたら良いなぁと妄想してます。しかしながらセンサ群がそこそこ統一されているスマホと異なり、スマートデバイスではデバイス毎に特徴がありすぎて、こういうフレームワークって難しいだろうなと思いました。
例えば WeMo は SOAP でコマンドを受け付けて、Hue や Netatmo は HTTP リクエストを投げるのは同じですが、Hue はローカルのサーバへ、Netatmo はリモートのサーバへリクエストを投げます。機器毎にセンサ(温度や動体検知)を備えていたりアクション(照明やスイッチON)も異なります。2点目の不満も関係してきて、機種ごとにそもそも最初のセットアップが面倒で、Hue や iRemocon といった有線デバイスはまだ自動で見つかるのでよいのですが、無線デバイスは WiFi Direct で接続してネット繋いで云々やる必要があります。こういった差異を抽象化するのは大変なので、標準化してインターフェースを揃えないと難しいと思います。
そこで、国内でこれをやろうとしているのが ECHONET Lite だと思います。
2011 年末に経産省に認定された HEMS(Home Energy Management System)用の通信プロトコルです。萌え家電で有名な Sony CSL の Kadecot がこれをかなり先進的に取り入れているようで、下記ページの説明や動画が分かりやすいです。
Kadecot は Android 上のアプリとして動いて、ネットワーク内にある ECHONET Lite 規格の機器を自動認識、それらを WebAPI(JSONP / WebSocket)として提供してくれるもののようです。規格の上でこういうことが出来るのであれば、将来的に上述の不満を解消してくれるように思えます。
しかしながら、一番の問題はこの規格が日本国内向けだということではないかと思っていて、野心的なスマートデバイスは資金調達もしやすい海外から出ることが多いようにも思われます。とはいっても、海外と日本では電力事情(国内では電力会社の地域独占)や、家電の特徴も異なるため、最初から世界規模の統一をやっていくのは非現実的にも思えます。むしろ日本に特化している分、ECHONET Lite ではカバーしている家電が多いこともあるので、国内で暮らしていく上では ECHONET Lite に乗っかっていくのが一番楽しそうかな、と思いました。次回の勉強会やハッカソンがあったら行って勉強してみたいです。
なんか考えがまとまらくてぐだぐだになってしまいましたが、結局のところスマートデバイス、スマートハウス周りの世界はまだまだ黎明期だと思うので、そこは黎明期らしくあれこれと色々と手を出して失敗したりしながら楽しんでいきたいなと思いました。是非マゾヒストな皆さんも一緒にやってみませんか?