読者です 読者をやめる 読者になる 読者になる

LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

Siriを使って家の家電を制御できるようにした

こんにちは。iOS開発Gの石田です。 iPhone6とiOS8が出てしばらく経ちますが、もうすでに入手されたかたも多いかと思います。

iOS8の新機能で僕が注目しているのが、Homekitです。家電をiOSデバイス経由で操作することができる機能で 寒い冬は家に帰る前にエアコンをつけておいてあったかくしておくとか、Siriに「電気消して!」と頼んだら消してくれるようになりそうです。

しかしこのHomeKitなのですが、家電がHomeKitに対応していないと使うことができません。 現状で対応している家電としては

こんな室温調節器や http://lyric.honeywell.com/

こんな電球がありますが http://www2.meethue.com/ja-jp/

海外メーカーしかなく、家電量販店などで我々が目にするメーカーはまだ対応していません。 今後対応機種が発表されていくと思いますが、現在はシミュレータで開発するしかない状況です。

そこでSiriとIRKitという赤外線学習を使えば、HomeKitなしで似たようなことができるのでは・・・と思い立ち 作ってみました。

IRKitについて

IRKitとは、Wifi機能がついた赤外線リモコンで、外部からアプリを通してリモコンの信号を送ることができます。 このIRKitはAPIが公開されており、簡単に自分でアプリなどに組み込めるため、様々な方が開発を行っています。 http://getirkit.com/

これを用いれば、赤外線リモコンで操作ができる家電であれば遠隔操作することができます。また赤外線で操作できない家電でもこのようなキットをを使うことで、 家電を赤外線に対応することができます。 http://hitoriblog.com/?p=24191

iOS8でのSiriの新機能

iOS8の新機能として、「Hey! Siri」と呼びかけるとSiriが起動する機能が追加されました。 そこから質問を投げかければ、Siriが質問に答えてくれるようになっています。 ここで重要なのが、画面がロックされていても電源に繋がっている状態であればSiriが起動することです。 しかしながら現在、Siriからサードパーティ製のアプリを操作するといったことはできません。SiriのAPIは公開されていないので appleのアプリであるタイマー、アラーム、天気、メモなどの操作しかできません。 ただアプリ名を言うと、そのアプリを起動することができます。

つまり電源に繋がっているiPhoneに「Hey,Siri アプリ名」と呼びかければ、待機状態のiPhoneのアプリを起動することができるということです。

実現方法

iOS8のSiriとIRKitを組み合わせて、Siriに家電を操作してもらうようにします。

方法以下の通りです。

「電気つけて」など命令形の名前のアプリを作り、そのアプリが起動したらIRKit経由で家の電気がつくようにする。 そのアプリを「Hey Siri」で起動することにより、疑似的にSiriが家電を操作しているようになる!

つまり命令の数だけアプリを作り、Siriに命令しているかのように話すと、Siriはアプリを立ち上げるのです。 ここで注意点としては、命令文のアプリを作っても起動してくれないことがあります。 例えば「テレビつけて」という名前のアプリを作って、「Hey,Siri テレビつけて」と言っても 「いいえ、それはできません」と断られてしまいます笑。これは、Siriが「テレビつけて」という言葉をちゃんと命令として 認識してしまうことが原因です。現状でこの現象が起きたのはテレビだけで、「電気つけて」や「電気消して」は大丈夫でした。 いわばSiriの認識の甘さを利用しているだけなので、Siriがもっと賢くなって命令として認識されてしまうとこの手法は使えません。 現状で命令と認識されてしまうものについては、別の言葉にするしかありません。例えば今回は、「テレビ電源」という言葉に置き換えています。

アプリについて

Siriで起動して、家電を操作するアプリですが、非常にシンプルなものになります。 初回起動時のみ、家電の赤外線情報を登録する画面が出て、使いたい家電のリモコンをIRKitに向かって押し、登録します。 それ以降の起動では、Wifiに繋がっているIRKitを探し、登録されている赤外線信号を送信、その後すぐにアプリを終了します。 もちろん1アプリ1命令になるため、命令の数だけアプリを作ってiPhoneにインストールします。 IRKitの検索、信号の送信などの機能の組み込みは、SDKが公開されているので非常に簡単に行うことができました。

f:id:nextdeveloper:20141027190211p:plain

作って実際にやってみた

https://www.youtube.com/watch?v=3df-6wTeDZY


Siriで家電を操作してみた

動画では、間接照明のON・OFF、テレビON、チャンネルの変更を行っています。 割と正しく認識して、家電を操作してくれます。Siriの認識、アプリの起動、IRKitの検索、信号の受信という過程があるため、 命令してから実際に操作が完了するまでに少しラグがあります。 またテレビを付けたあとの命令の認識に特に時間がかかっています。 これはテレビの音声をSiriが拾ってしまうことが原因です。なのでチャンネル替えや音量調節といったテレビの操作は 現状では難しそうです。

最近では、テレビに音声認識機能がついたものが相次いで発売されています。リモコンに向かって、 ボタンを押している間だけ認識されるものが多いので、そういったものであれば認識は素早くできそうです。 (リモコンに向かって話しかけるくらいなら、リモコンのボタンを押した方が早いとは思いますが・・)

認識できる距離ですが、iPhoneにある程度の声量が届けば認識してくれるので、隣の部屋くらいであれば大丈夫そうです。

使い方としては、帰宅後に暗くて電気のスイッチがどこにあるのか分からないときに、暗闇に向かって命令すると 電気をつけてくれるのが便利です。 また家を出るときや帰宅後に着換えながら、テレビを消すといった使い方も便利です。手を使えない状況では重宝します。

最後に

なんとか使えるレベルにはなりましたが、まだまだSiriが認識してくれるように意識して丁寧に話さないとうまくいきません。 今回作った似非HomeKitでは、「電気つけといて」「電気オン」「ライトつけて」という別名アプリをたくさん作らないと 別の言い回しには対応してくれません。 本物のHomeKitでは、もっと適当に話しても読み取ってくれる高い認識精度を期待します。

とりあえず似非HomeKitの次の機能追加としては、iBeaconを連携させることを考えています。 また本アプリは、名前だけ変えて同じアプリを複数インストールする必要があるため、iOS Developer Programの登録が必要です。 App Storeへの審査・配布は機能的に難しいと思いますので Homekitが待ち遠しい方は、ぜひIRKitを使って開発してみてください。