凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

色んなガジェットを組み合わせて作った部屋で実際に暮らして思ったことや次バージョンへの思いをまとめてみた

 

この記事は おうちハック Advent Calendar 2014 23 日目の記事です。前日は @jojonki 氏の「ちょっと未来のティッシュケースを考えてみた」でした。ティッシュ箱光るのおしゃれで良いですね。他にも日常のいろいろな些細な動作にフィードバックをつけられると楽しそうです。

はじめに

今年の半ばに「色んなガジェットを組み合わせた部屋を作ってみたので色々と考察してみた - 凹みTips」というエントリを書きまして、大きな反響を頂きました。ありがとうございます!

本エントリでは、これを書いた後に、人柱として実際に生活しながら思ったこと、現在世の中も踏まえて個人的に考えていること、そして今後作っていくならどのような UI が良いか考察した内容などを雑多にですがまとめてみようと思います(本当はモノを作ろうと思ってたのですが、間に合わず...)。

おさらい

以前、こんなシステムの部屋を作ってみてました。

f:id:hecomi:20141223000538p:plain

f:id:hecomi:20141223000555p:plain

実際に生活して...

便利になった点

自分で能動的にコントロールする作業は凄い楽になりました。

例えば電気をまとめてつけたり消したり、リモコンを決まった順番に押して特定の機能を起動したりするやつです。操作するのに一番良かったのは Pebble からの操作で、常に腕に付いているので布団に入ってからya部屋の電気やパソコンのモニタを消し忘れても消せるのは重宝しました。

便利にならなかった点

逆に自動で機器を制御する点に関しての大部分はなかなか思うとおりになりませんでした。

例えばトイレの電球を hue にして WeMo Motion を置いて動体検知をし、「トイレに入ったら電気がつく」「トイレから出たら電気が消える」としました。で、1ヶ月位過ごしてみたのですが、結論から言うとしんどくてやめました。理由はいくつかあるのですが「ぶっちゃけスイッチで ON/OFF した方が早い」「動かないと勝手に消えるのが面倒」などです。パラメタ調整で改善できる部分もあるのですが、パラメタ調整するためにパソコンに向かうのは正直しんどいです。

他にもスマホの位置連携で部屋の電気を制御する、とかやってみていたのですが、誤発(家にいるのに家から離れたことになって電気が消える等)が激しくてやめています。カレンダー連携も平日の出社後に電気が消える、とかは良いのですが、寝る時間などはまちまちな生活をしているので、微妙でした。

廊下の電気が自動でつく、とかは良いなと感じました。

システムが止まる、電波届かない

また便利にならない以前の問題もいくつかあり、日々立ち向かわないといけません。私の設計がクソなのもあるのですが、気づいたらシステムが止まってる時があってデバッグするのがしんどかったです。

具体的には、スマートコンセント / 動体検知を担当する WeMo の IP / Port が定期的に変わるのでそれに追従しようと苦労したり、照明コントロール用の hue のブリッジから電球(ZigBee 経由)に電波が届かないせいか廊下通っても電気がつかないみたいなことや、サーバに利用している Node.js のモジュールがバグっていて調べたりして結構時間使いました。

反省・考察

コントローラは多いほうが良い

自分で操作できるコントローラが多いのは良いなぁ、と感じました。PC、スマホタブレット、スマートウォッチ、Twitter音声認識などなど色々用意していますが、どれも便利です。むしろ足りないくらいで、もっと各所に欲しいです。

唯一、音声認識だけ誤動作が不安なので、音声認識マジックワード(Ok, Google とか Hey, Siri みたいな言葉)と組みあわせるか、ボタンを押しながらとかが良いと思います。ちなみに我が家は壁が薄い気がするので余り使わなくなってしまいました...。

単一機器毎に API サーバ化した方が良い

どう作ってもエラーは取り除けないですし、メンテしやすいようにエラーはある前提の設計をするべきです。以前の設計では 1 つの API サーバで複数の機器を取り扱っていましたが、機器毎に API サーバは分けたほうが良いかなと思います。これによって、エラーの切り分けがしやすくなり、メンテ中も他の機器に与える影響を抑えることが出来ます。また、新しい機器を追加するときも独立して追加することができるので楽なはずです。

理想的には、各機器自身が共通の言葉を話す API サーバを立ててくれると良いのですが、現実的にはまだまだ厳しいので、自分の PC 上で独立した API サーバとして立てるのが良いと思います。

IP 直打ちはやめて機器発見にする

各機器らルータの電源を落として再起動したタイミングで IP が変わって、あれ動かない、となることがしばしばありました。WeMo だけはその仕組から SSDP で機器発見するようにしていたのですが、他の機器も機器発見ベースでやった方が安定稼働できるな、と思いました。

ログとエラーと状態の見える化

どんなに頑張ってもバグるので、サーバ側だけではなくてクライアント側からログとエラーはすぐに確認できるようにするのが必要だな、と思いました。何が起きてるかログインしないとわからないのは正直つらいです。

あと、エアコンが今何度設定になってるのか、家を離れている時に電気がついてるのかどうか確認する、みたいな状態確認系もないとツライなと思いました。

複数のイベントをとりまとめるのが面倒

HTTP GET ベースの API で設計していたので、出口をまとめる(部屋をまとめて消す1秒おきに決まった赤外線を発信)系は簡単なのですが、センサからの入力を複合的に扱って一つのイベントを作るのが面倒でした。WebSocket 使ってイベント駆動にすれば良かったと思ってます

なんでも自動化は正直難しい

自分が思った通りに電気が良い感じについて、温度も完全に制御され、かつ省エネ、寝たいタイミングで静かに音楽が流れながら寝ると電気も消え音楽も止まるみたいなキレイな生活は、相当気を使った設計をしないと難しい気がします。おそらく普通にやると、ポルターガイストのように電気がついたり消えたり、旅行から帰ってきたらエアコンがフルで回り続けてたり、寝てたら音楽爆音で鳴り出す、みたいなことが往々にして生じると思います。

そもそも自動化をするためにそういったルールをポチポチと登録するのも面倒ですし、上記のようにバグった時にメンテをするのは更に面倒です。以前、ポチポチ登録する仕組みを作ったのですが、面倒いのでやめたことがあります。

そもそものユーザ体験は?

それ以前に、そもそも使い手の生活の質を向上させるのか、IoT が具体的にユーザの生活をどう変えるのか考える必要があるのではないかと考えています。現在、世の中の IoT の議論は「どうつなぐか」「何の技術を利用するか」について開発者目線からは色々と議論されていますが、具体的にユーザにどう提示して何をさせて結果どうなるか、みたいな所が抜け落ち気味な気がします。

機器間のやり取り(M2M)は HTTP が良いのか、MQTT が良いのか、それぞれのメリット / デメリットなのかみたいなところや、機器発見の方法などは議論されていますが、ルールはどういう UI を通じて設定するのか、その UI はユーザが使いやすいのか、結果として何の機器が動いていてユーザはそれをどう確認するのか、みたいなところの議論は、あまり表に出てきません。ユーザから見れば機器が WiFi でつながってようが ZigBee ベースだろうが、プロトコルが HTTP だろうが独自だろうが正直関係ないので、この辺りが具体的に色々見えるようになると、もっとイメージが掴める気がします。このことは、以下の日経コンピュータの記事でも言及されています。

なので、どうせ個人でやるので、主に UI 周りを意識しながら作ろうと思います。

世の中で実践してる例: IFTTT

具体的に、上記を UI に落としこんでいるところもあります。例えば IFTTT の UI はとても良くて、スマートデバイスの単機能を IF THEN で接続することが出来ます。登録も各アプリが用意してくれていたりして簡単ですし、接続できる機器も最近ではものすごい増えました。

発火されると通知を飛ばしてくれますが、実際に WeMo Motion と hue を接続すると、動いてから数秒してようやく電気がつく、みたいな感じになります(実は hue の反応が遅い or WeMo Motion のネットへの送信が遅いだけという可能性もあるので要検証)。インターネット上のサービスであれば数秒の遅延は許されたりしますが、実世界の数秒の遅延は苛立ちしか産みません。即時性が求められます。これは以下の記事でも言及されています。

また、以前の記事でも言及したように、IFTTT の単機能はデバイス数が少ないときは良いのですが、増えてくると大変です。

その他大手

その他大手はどうしてるか見てみます。Apple の HomeKit は未だ情報が少ないようで、学習リモコン的な役割?と推測されています。

Apple みたいな大手だと皆が対応してくれるので、接続はすごい楽になりそうな予感はします。

Nest を買収した GoogleGoogle Now と紐付けて音声認識による命令や帰宅時間に合わせた温度調節が出来るようです。

個人的には、この「帰宅時間にあわせて Google Now でカードが表示される」のがグッと来ます。が、もっと出来ること増えるようにカード増やして欲しいです。

あと、Control4 が気になってるので、海外在住の人で使用されている方がいたら教えてください。Youtube で検索して動画見るとかなり色々出来ていてアメリカすごいってなります。

どうする、我が家

反省を踏まえて次のシステムを考える

明示的な操作によるコントローラはうまくいっていますので、UI を改良しながらこのまま使おうと思います。自動化については諦めてコントローラのみにしてあげれば普通に便利にはなるとは思います。が、自動化はロマンあるのでもうちょっとチャレンジしたいです。とは言え上手くいかないと生活に支障をきたすので、ちょっと保守的な方向に振ってやっていこうと思ってます。

実現したい内容は「色んな状況に応じて、サクッと部屋をコントロールしたい」です。手段としては、色々なセンサからの入力を複合的に扱って、それに応じたコントローラを動的に生成する、みたいなことをしようと思ってます。ユーザ目線だと「思った時に操作したい内容が表示されてるリモコンがある」という感じです。先行事例としては、本カレンダーを立ち上げられた @yumu19 さんが iBeacon でユーザの位置に応じたリモコンを作られています。

こちらは、位置を入力としたリモコンでしたが、この入力をより多くの情報の組み合わせで出来るようにしようと思ってます。また出力に関しても、無数のリモコンを生成するのは大変なので、Google Now の様なカード形式を想定しています。イベントを察知すると、通知を生成して、スマホやスマートウォッチ、パソコンに飛ばして、操作をしたかったらリモコンを操作する、という感じです。イメージはこんなです(イメージなので操作できるものは盛ってます)。

f:id:hecomi:20141223233319p:plain

あるイベントが発火されるとカードの形式でコントローラが生成され、自動ではなくそのカードを通じてイベントに紐付けられた操作をユーザが明示的に操作する形にします。メリットとしては、

  • 誤動作しても発火させなければ影響なし
  • 簡単にカスタム出来る(エアコンの温度の微調整とか)
  • 遅延実行できる(寝る前に出てきたコントローラを寝るタイミングで参照して操作)

操作以外にも色んな通知をセンサの情報に合わせて出してくれたりするようにしたり、いらなくなったら直ぐに消したり、逆にアクションを増やせたり、例ではスマホですが、PC やスマートウォッチでも同じように通知を受け取れて操作できるようにしたいです。お察しの通り Google Now のパクリです...。

左側が複合的な情報で作られたイベント、右側がそれに対応するコントローラになります。例えば「温度低下」は家にいてかつ温度が下がった時、「出社」は朝の特定の時間帯に玄関を通ったらなどです。IFTTT が単一機能同士のみを扱うのに対して、こういった感じで高次の情報や操作を同じく IF THEN ベースのルールに押し込む感じです。

作るのめんどそうですが、スケールするようにうまく設計考えます。

登録はやっぱり面倒

これで誤発によるイライラは解消されると思います。が、やっぱりルールの登録は面倒です。ここらはやっぱりビジュアルプログラミングなのかなぁ...。と思ってます。Kadecot も Blockly というビジュアルプログラミングフレームワークを利用した環境を提供していました。

前回は、ここは自分しか使わないのであればもうコード書いたほうが速いな、と割りきってしまったのですが、ここはもう少し掘ってみようと思います。

あとは、仮に同じような仕組みを沢山の人が利用すると出てくる恩恵はある気がします。例えば、新しいデバイスやセンサを買ってくると、他の人はこんな設定をしてますけどどうですか?みたいな推薦がやってきてちょっとカスタム、機器を設置するだけでカードが増えて便利、みたいな世界になると幸せになれないかなとか妄想してました。

なるべく省エネで作る

作りこめば作りこむほどよいものは出来ると思うのですが、汎用性が失われるのとメンテがしんどいので、ありものを最大限に利用して作る方針でやろうと思います。あと設計は簡単にポイポイ捨てられるように作ります。この辺りの知見は出来次第また別途まとめます。

おわりに

今回の内容については、実際に開発してみて、もう少し整理・実験して来年のおうちハック発表会で発表する予定です(おそらく 1 月末か 2 月頭)。

正直なところ、上の議論が正しい、正しくないとかはどうでも良くて、多くの人がこういったことを具体的に考えることで、色々議論が盛んになって世の中がより便利に楽しくなったら良いなと思っています。

あと最後に、一部屋だとハックしがいないので誰か広い家ください。

お家ハックアドベントカレンダー 次回

明日 24 日目は K-A-Z さんによる記事です。