凹みTips

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

5 年前のおうちハックと今を比較してみた

はじめに

おうちハック関連の久しぶりの記事です。以前は自前で声や時計、スマホで操作できる家のシステムを作っていたのですが、スマートスピーカの登場以後そのシステムが置き換わっていき、今は完全に Google Home プラットフォーム上に乗っかる形で生活しています。その変遷や考えていること、今行っていることをまとめたくなり、今回記事を書いてみました。

当時の活動

2012 ~ 2015 年辺りまで未来のお部屋というタグでガジェットやサービスを連携させて生活を便利にしよう活動の記事を書いていました。おそらく当時の感じを一番説明できている記事はこちらです:

tips.hecomi.com

2014 年当時のシステムとしては、音声認識音声合成で返答する仕組みを作り、そこに WiFi 経由のガジェット操作ZigBee 経由のリモコン、iRemocon を使った赤外線による家電操作、IFTTT を通じたサービス連携を乗っけていました。

f:id:hecomi:20140501150258p:plain

f:id:hecomi:20140430175214p:plain:w640

この運用を続けてしばらくした後、おうちハックナイトというイベントで発表をさせてもらい、その生活の感想について話してきました。

tips.hecomi.com

当時の「おうちハックをした結果、生活が劇的に便利になったか?」という問いに対する返答は「あまりならなかった」でした。その理由としては、トリガ(例. 音声認識やドアの開閉検知)とアクション(例. 電気をつける、テレビを消す)の数が増えるに従って予期せぬバグが生活に混入したり(意図せず勝手に電気がついたり、逆に動作しなかったり)、その修正・改善に伴うメンテナンスコストが大きかった、というものでした。

f:id:hecomi:20200323132508p:plain

仕組みを作ることそれ自体は文句なくめちゃめちゃ面白いですし勉強にもなって一石二鳥だったのですが、バグったときのストレスもそれなりに大きく、当時の結論としては「スイッチなど明示的に操作するものは便利」「自動の場合アクションするかは一度尋ねる、または誤発しても問題ないものに留める」と保守的な設計にしたり、もしくは「いい感じの統一規格が出ないかな」*1といったハードウェア側の対応頼みのものでした。以下は「アクションするかは一度尋ねる」の中でも便利だなと思えた一例で、ドアの開閉を検知して Android Wear に音声操作またはタップによるコマンドリストを提示するものです。

f:id:hecomi:20151011022002p:plain

ただ、こういったインタラクションや動作を作り込む段になって色々難しいなと思う点が出てきてしまい、プロトタイプ感がなくなってきてちょっとモチベが落ちたり、また仕事が忙しくなったりしてそれ以降のアップデートはあまりしていない状況になっていきました。

スマートスピーカーの登場

それからしばらくして Amazon AlexaGoogle Home が発表され、これらは発表からしばらく経った 2017 年にやっと日本でも使えるようになりました。また、当時はスピーカー(HomePod)はないですが HomeKit があり、homebridge を使えば対応していないスマートガジェットの管理や連携もできるようになってきていました。私もスピーカー両方とも買って試してみたり、古い iPad を HomeKit の基幹として家に置いて試したりしていましたが、最終的に Google Home 一本になりました。 アカウントのセットアップだけしておけば適度に使えるおもてなし感や、声質、音声認識精度の良さを気に入ったのが大きな理由です。

それまでは正規表現のサブセットによるコマンドマップを作成し、これを適当に変換したファイルを音声認識エンジン Julius の文法認識モードに食わせていた関係上、書いた文法に対応する文章しか対応できませんでしたが、そこは Google 先生の力で多少の言い回しの誤差は良い感じに解釈されるようになったのも大きいです。具体的には「(全部|全て)の?(電気|ライト|明かり)を?(消して|オフ)」をコマンドとして登録していたときに「全部電気オフ」は OK ですが「電気全部オフ」は順番が異なるので駄目で気づいたらメンテしないとなりませんでした。Google Home なら上記の言い回しでも動作するようになります。もちろん通らない言い回しはたくさんありますが自分でメンテするより大分楽でした。また音声認識精度も高く、誤動作も少なくなり誤認識によるストレスは圧倒的に減りました(自前の仕組みは起動ワードもないですし、ノイズリダクションもビームフォーミングも勿論ないので湧き出しがたくさん起きていました)。

Google Home では Home アプリ上から設定することで大体のガジェット・サービス連携は可能で、また IFTTT もつながるので、自分のシステムでの音声認識部分は全てこちらに移行しました。1点、好きな文章を(デフォルトの声で*2)喋らせる API がないので自由に返答を作れない不自由さだけが残っていました。具体的には IFTTT の THAT 部分に音声発話を差し込むことができないため、サービスやガジェット側が起点となる通知を喋らせられませんでした。例えば、朝玄関のあたりで天気を自動で喋ったり、換気扇を回さずに料理をし始めたときに Netatmo で二酸化炭素濃度上昇を検知した際にそれを声で通知する術がない、といったものです。ただマイナーな事例ですし、勝手にしゃべりまくってても怖いので、これらの機能が無くなるのは許容範囲内でした。色々自分で設定したい場合は Alexa の通知の機能とかを使ったほうが色々出来るかもしれません(こちらは自動で喋るのではなく一旦通知音 x LED なのでむしろよりスマートかも)。

そして引っ越しで二人暮らしになるタイミングで音声認識以外の部分も含め自分のシステムは完全に止めてしまって、Google Home のプラットフォーム上に完全に乗っかる形にしました。妻の保有分も合わせて Google Home Mini の数も増えたので家中にばらまき、今では 6 個(Home Mini x 4、Nest Hub x 1、Nest Mini x 1)設置されています。

前述のように一部対応できなくなったケースもありますが、メインのユースケースは概ね全てカバーできて、結果として自前で色々作っていたときより格段に楽になりました。メンテナンスコストも、基本的にはデバイスを買い足したときだけ Home アプリで追加すれば良いのでほとんどありません(引越し時の Hue の設定などで戸惑うことはありましたが...)。また、上述した「統一規格」に関しても、Google Home(Alexa も HomeKit もです)がデバイスの発見や登録・使用可能コマンドを良い感じに管理してくれるため、もはや規格云々も意識しなくて良くなりました。基本は起動ワード、またはスマホGoogle Assistant 立ち上げ(Pixel なら Active Edge、いわゆる「ぎゅっ」)を起点とするので誤発も少なく、イライラすることも少ないです*3。当時考えていた問題点はもはや概ねカバーされ、更には自分ではあまり深く追求していなかったマルチユーザ対応もしています。Nest Hub に至っては画面付きで情報も見せてくれます。

store.google.com

自前で作ってきたシステムと別れを告げるのはちょっと寂しかったですが、生活を単純に便利にしたい欲求が満たされ、且つ実際に便利になったので満足しています。

具体的な使いみち

実際、そんなに自動化して便利になる?むしろ音声認識にするケースそんなにある?みたいな話もあるので、我が家利用しているシーンを簡単に紹介していきたいと思います。

家電の ON / OFF

操作可能な家電は以下のとおりです:

  • 電気
    • Hue x 13
    • SwitchBot x 2
  • エアコン
    • Nature Remo
  • テレビ
  • PC / ゲーム機のモニタ
    • WeMo
  • ルンバ
  • 風呂
    • SwitchBot

電気は基本はリビング・ダイニング・趣味部屋・寝室は Hue にしました。初期で買っていたのはフルカラーだったのですが部屋を青とか赤にする機会は友だちに見せるくらいしかないので一人暮らし時からの買い足し分は全てホワイトグラデーション版です。

寝室は Hue Go も置いています。

キッチンと風呂の電気だけは即時性が求められるケースが多く音声認識経由では遅かったので、そのまま備え付けのスイッチでオンにしています。ただオフにし忘れが良くあるので、これを防ぐために SwitchBot をつけています。

片一方でなく ON / OFF のトグルも紐で引っ張る仕組みが SwitchBot にはあるのですが、うちで試したら配置が難しくてスイッチカバーがベコッと外れてしまうので諦めました。

お風呂の ON / OFF も同じ仕組みで動かしています。風呂の ON / OFF とか洗うのは手動なんだし自動化しないでしょw と思っていたのですが意外と便利でした。我が家の風呂が自動 ON の場合お湯を一定時間おきに循環する仕組みになっていて、そのまま栓を抜いてしまうとお湯が出続けてしまい、寝室で寝ているときにシュゴーッと風呂から音が聞こえて慌てて止めに行くことが何度かありました。設置してからは落ち着いて「風呂止めて」とお願いすれば、実際にスイッチの場所まで行かなくても布団の中から止められるようになって精神的な安定を得られるようになりましたし、風呂をご飯の前に洗っておいて入る前に電源を入れる際に、椅子から ON できるのもまぁまぁ便利です。

なお、SwitchBot を Google Home で動かすには Hub が必要で、合計では結構いいお値段になります。。しかも実際 Hue で Dimmer スイッチを使って ON / OFF しても良いのですが...、サーボが動いているのを見るのは可愛いので良しとしています。

エアコンはリビングと寝室それぞれ用に Nature Remo を 2 台配置してあります。「リビングのエアコン暖房22度にして」とか「全てのエアコンオフ」などのコマンドで制御できます。ただエアコンのステート管理が赤外線信号に全てのパラメタを含んで操作する仕組みの関係?で、リモコンと併用したときに、今冷房なのか暖房なのか何度なのか分からなくなってしまうので、寒くなってきたときに「一度上げて」といった場合に本当に今の設定から一度あがるかどうか分からない点だけが不満点です。Remo のみから操作するように意識すればアプリから現在のステートは確認できるので、ここは将来的にエアコンそのものがつながってくれることに期待です。

テレビは Chromecast の HDMI CEC 経由で ON / OFF をしています。モニタは以前と同じく WeMo で電源タップの ON / OFF といった感じです。WeMo も Google Home で直接追加できます。

ルンバは毎朝平日朝 10:00 に動作するようにしているのですが、体調不良で寝室で寝ていたときにウィィィンと結構大きな音で動いてしまうので、「ルンバを止めて」というと止まってくれるのが便利です(アカウント接続するだけででき、言葉の設定は不要でした)。休日でも出かけるときは「ルンバを使って掃除して」というと掃除してくれるのも便利。

また、Home アプリからルーティンという形で複数の動作をまとめるマクロを定義することができます。

行ってきます、で全部消し、ただいま、で必要な電気をまとめてつける、といった設定をしています。

メッセージ

我が家では Slack をメインのコミュニケーションツールに使ってます。チャンネルを分けて、普段の会話や行きたい場所、開発関連の情報共有、支払建て替え、その他後述するサービスの通知を集約するようにしています。バックアップサーバを立ててログを収集して見やすいように一覧化もしています(鋭意更新中)。

それぞれ別に暮らしている時は IFTTT を使って Google Home に対して喋った内容をそのまま投稿できるようにしていました。「Slack に投稿、寝ています」みたいな感じで喋ると「寝ています」が書き込まれる形です。ただ Slack にIFTTT 経由で投稿すると、どちらの Google Home から投稿しても投稿者が IFTTT ボットになってしまうので、どちらの書き込みかわかりやすいように次のように各アイコンを登録してメッセージの前にそれぞれのアイコンがつくようにしていました(図で言う :hecomi: のところ)。

f:id:hecomi:20200323222435p:plain

お風呂でもスマホGoogle Assistant 経由で喋れば同じ仕組みが動いて投稿できるので、水で入力が難しいときにも使えます。ただ残響が大きい環境で喋ると認識に失敗しやすいのでご注意…(誤認識でドシモネタが投稿された、Google 先生…)。

買い物リスト

買い物リストや ToDo の管理は Todoist を使っています。Google Home も標準の買い物リストがあるのですが、アクセスするための階層が深くてこちらは使うのをやめました。「買い物リストに追加、醤油」みたいな形で登録できるようになっています。Todoist にアイテムが追加されると Slack の #todo チャンネルにそれが投稿され、買いものをして Todoist 上で完了処理をすると、同様に Slack へ通知が飛ぶようになっています。#todo チャンネルには他にも Wrike で結婚式関連のタスク管理をしていて、その通知も飛ぶようにしていました。

タイマー / アラーム

キッチンにも 1 つ置いてあるので料理のときのタイマーで使っています。上述の買い物リストの登録も、キッチンに置いてあるとないものに気づいたときにすぐ出来て便利です。ただキッチンは調理のノイズが大きいので、配置を工夫しないと反応が悪いです。うちは場所の都合上ケトルの横に置いてましたが、ケトルでお湯を沸かしているときはちょっと厳しかったです。

音楽再生

Google Cast 経由で SpotifyGoogle Play Music の曲を流すことが出来ます。「アーティスト名曲名 を再生して」や「複数の部屋で○○を再生して」*4といった具合に喋ると、登録している音楽再生デバイスすべてから曲が流れます。

support.google.com

f:id:hecomi:20200328235156p:plain

また、スマホからもキャストすることで同様に曲を流すことが出来ます。うちでは以下の計 8 個のデバイスから音楽が流れるようになります。

Nest Hub やテレビでは今何が流れているか見えるのも良いです。音質はもちろんしっかりとしたスピーカーよりは劣りますが、廊下や洗面所へ行ってもずっと音楽がなり続けているのはお店みたいで楽しいです。デバイスごとのボリュームや遅延も調整できます:

f:id:hecomi:20200329131439p:plain

動画再生・画面共有

上記機能は音楽だけでなく、Youtube や d アニメストアなど動画コンテンツをスマホタブレットからもキャストできます。見たいコンテンツをスマホで探してキャストしたり、キャストできない場合でもスマホの画面自体もキャストできるので、ちょっとした情報共有に便利です。またパソコンの画面もキャスト出来るので、コードをテレビに映してペアプロみたいなこともたまにしています。

f:id:hecomi:20200329132713j:plain

マルチユーザ

バイスの登録は「家」>「部屋」の階層で場所を設定でき、「家」にメンバーを招待して登録したデバイスをそれぞれの Google アカウントで共有できます。そうすれば自分がポチポチ登録していれば家族の方では特に設定しなくても全てのデバイスを利用することが出来ます。また、Voice Match を設定することで、どちらのアカウントが喋っているかの認識も出来ます。

support.google.com

これによってアカウントごとの設定(リンクされた音楽や動画サービス)が喋った人によって反映されます。他にも「私は誰?」と聞くと「はい、へこみさんですよね」と答えてくれます。ただ、IFTTT もアカウントをリンクして Google Assistant 経由で使う関係上、IFTTT に何か設定されている場合は、冗長ですがそれぞれの IFTTT アカウントで同じ設定をしないとなりません。

どうしても設定し忘れはあるので、そういうときは声色を変えると Voice Match を欺くことができました。具体的には男性は裏声、女性は頑張って低い声を出すとそれぞれのアカウントの設定の設定でコマンドを実行することが出来る感じです。ただ、最近難しくなってきたように感じるので、どんどんアップデートして改善されているのかもしれません。

出先から操作

これは便利で、寒い日や暑い日に駅についたタイミングで Assistant 経由でお願いしておけばエアコンをつけれます。また、電気やエアコンを消し忘れたときも消せますし、前述したようにルンバも動かせます。

スケジュール

Google アカウント上でカレンダー共有をしていれば、家族の誰が尋ねても「週末のスケジュールを教えて」と言えば答えてくれます。また、階層は深いですが、どのカレンダーを使うかの設定も「Google Home > 設定 > その他の設定 > サービス」からできます:

ニュース・天気

朝、洗面所でニュースと天気を聞いています。ニュースの順番は上記スケジュールの画像と同じ画面で設定できます。電気の ON/OFF の次位の頻度でこれが一番使ってます。

その他色々質問

適当に「○○って何?」と聞くと、検索時にナレッジグラフで表示されるものを(Hub なら画像つきで)再生してくれます。多くは Wikipedia からですが、載っていない言葉は様々なサイトから収集してくれていて、ちょっとしたことを聞くのは便利です。

不満点

Alexa にしたら解決!みたいなのもあると思いますが...、現状感じている不満点です。

近いやつが反応してほしい

複数のデバイスが声を聞き取った場合、基本的には話しかけた位置から近いもののみが反応するようになっている(他のものは棄却される))ようなのですが、同時に 2 つ反応してしまうことはそこそこあります。キッチンでタイマーを仕掛けて趣味の部屋の方のものも反応してしまうと解除するのが面倒です。また、Nest Hub に分からない言葉を画面付きで解説して欲しく聞いたつもりなのに、Nest Mini の方が反応してしまってムムッとなることもあります。

その他のデバイス起点

基本的に、Google Assistant 起点でしかガジェットを操作できないのですが、例えば温度計などのセンサが室内にあった場合に「部屋の温度は?」はと聞くと答えてくれたり、先述しましたが「エアコンの設定温度は?」なども教えてくれたら良いなぁ、と思います。ただこれらは Google が設定した言葉以外を喋らせることを許可することになるので、なかなか対応はむずかしそうです。例えば「温度」を返すガジェットが悪さをして温度に対して変な言葉を返すようにすれば、Google Home が変なこといってる!といった事態になってしまいます。流石にこういった単純なケースは温度を Int にしてバリデーションするといった制約をかけるとか設計すればある程度は対応できるかもしれませんが、メンテも大変ですし他にも色々と問題がありそうです。Netatmo Weather をいい感じに活用したいのですが、まだしばらく掛かりそうですね。

追記(2020/03/31)

Twitter@piyo3728 さんに教えていただいたのですが、温度などに関しては現在対応しているようです。うちでは「部屋の温度は?」という聞き方では答えてくれませんでしたが、「リビングのエアコンの温度は?」や「リビングの温度は?」と聞くと、「現在の室温は 22 ℃です」と、Remo アプリで見た現在の室温を返してくれました(設定温度は答えてくれないようです)。ただうちの設定ではその後に「リビングのエアコンはそのモードに対応していません」、という返答が返ってきてしまい...、更に「エアコンの温度は?」と部屋を限定しないで聞くと、「現在の室温は 22 ℃です。現在の室温は 21 ℃です。2台のエアコンはそのモードに対応していません。」となってしまいカオスな感じです。惜しい...!

また、Google Home / Alexa 対応のエアコンもあるようです。

www.fujitsu-general.com

うちは賃貸なので置き換え出来ないですが、どなたかお持ちの方いらっしゃいましたら詳細を教えてもらえると嬉しいです。対話モードはルンバのように、いったん Google Home の声を離れて別のモードに入るのでしょうか?(ルンバは、「はい、ルンバです。」といって別の声による返答モードに入ります)。

また、Hass.io というオープンソースのホームオートメーションシステムもあるようです。

www.home-assistant.io

webnetforce.net

Google Home や Alexa にもつながるようで、昔作りたくて作れなかったのはこれだったんだ...、という感じがします。時間が出来たらこちらも試してみます。

喋り長過ぎる

「○○って何?」と聞いたときにナレッジグラフに表示される文章が長いせいか、ずっと喋り続けているときがあります。せめて Nest Hub のように画面があるときは 1 文章までであとは画面で表示、みたいなのをやってくれたら良いなぁ。

音楽

「複数の部屋で△△の○○を再生して」がおそらくある程度正確に認識されないと再生してくれないように感じます。結局、スマホSpotify を開き曲を選択してキャスト、みたいな使い方をすることが多くなっています。

まだまだ設定難しい問題

最後になりましたが、バイスやルール、ユーザの管理はまだ難しいです。例えば上述したように IFTTT を使うといくつかルールを追加できます。また、Hue など個別のアプリでルーティンが組めるものもあります。

こういったように色々な場所で自由に設定できるのですが、その自由さが逆に仇になることもあります。例えば「エアコンつけて」と言ったら基本的にはリビングのエアコンをつけてほしいので、これを上書きするために IFTTT で「エアコンつけて」コマンドを「リビングのエアコンをつけて」に変換するようにしていました。が、設定したのはおそらく 2 年以上前で、ブログを書いているときに完全にこの設定を忘れていて、どこでもエアコンをつけてというとリビングのがついてしまう、良く分からん状態になっていました。また、引っ越しのタイミングで Hue で設定していた朝/夜電気消すルーティンが発火してしまい、どこでこの設定を解除すれば良いんだ状態になったこともあります。

これらは自分が悪いといえばそうなので、そう言われてしまったら仕方ありません…。が、更に上述したように IFTTT は Google アカウント紐付けの関係上ユーザごとに設定が分かれてしまうので、複雑度が増しています。こちらは IFTTT 側の課題(ユーザ間でアプレットを共有・同期する仕組みが必要)かもしれないですが、対応コストも高くレアなケースなので、これを IFTTT に求めるのは難しそうです。

また、Voice Match もユーザごとに階層が深い設定画面からデバイスを追加する設定になっていたりと、ユーザビリティ的に難しいなぁ、と感じることもあります。妻が Nest Hub で識別されていない問題があり、以下の画面(Home > 設定 > その他の設定 > アシスタント > Voice Match)で Nest Hub が追加されていないのが原因だった、というのも執筆時に分かったりしました:

まだ「良く分からないけど良い感じに邪魔せず全部色々やってくれる」状態にはならないので、まだまだある程度自分たちで機能を把握して付き合っていく必要があるなぁ、と感じています。

おわりに

昔「未来のお部屋」と呼んでやっていたものは、ソフト・ハード両面からのバグやメンテナンス問題で難しいなと感じる面が多々ありましたが、スマートスピーカの登場により問題が色々と解決され、未来ではなくなり現代のお部屋になってきました。コードを書いて頑張らないと行けなかったところはアプリやサービスからポチポチと設定できるようになり、更に多くのデバイスやサービスがつながるようになりました。結果として誰でもガジェットを買ったりアイディア次第でそれを組み合わせたりしながら、自分の暮らしをより便利にすることが出来るようになり、おうちハックがハックでなくなってきたように感じます。もちろんまだ不満点はありますが、今後のアップデートやいろいろな商品の登場により解消され、さらに発展していく未来が楽しみです。

家から出るのが難しいこんな時期ですし、セットアップされていない皆さんもぜひ家の最適化に挑戦して知見を共有してみませんか?(個人的には Alexa ユーザの方々の状況を知りたいです)

あと、この記事でブログの継続期間が 100 ヶ月になりました!お読みいただきありがとうございます。今後も変わらずアップデートを続けていこうと思いますので引き続き凹みTipsをよろしくお願いいたします。

*1:海外では Control4 があったり、日本でも ECHONET Lite があったりしましたが自分が使ってるガジェットでは使えず...

*2:デフォルトでなければ喋らせる方法はあります

*3:それでもかなり稀ですが時々はして突然何か喋ったりはしています

*4:「複数の部屋」と名付けたスピーカーグループを作成しています