04:11rubySiriProxy-iRemoconって何?SiriProxy-iRemoconSiriProxyのプラグインの形で、Siriで家電を操作できるものを作りました。今のところ電気のON/OFFだけですが、こんな感じでライトを付けてライトを消してとSiriに言う事で、部屋の電気を操作できます。エアコンのON/OFFの様子も追加しました。部屋の電気の操作ってどうやってるの??このブログでは定番になってきましたが、やはりiRemoconを利用しています。詳しくはこちらをどうぞ。ネット上で話題になっている番組に自動的にTVのチャンネルを変えるpop-zapSiriProxyって何?SiriProxyはその名のごとくSiriのProxyサーバで、プラグイン形式で質問文に対して独自の処理を追加することができるものです。Readmeがしっかり書かれているとは言え、日本語のまともな導入事例の記事が無い+公式のReadmeが手順が間違ってる箇所があったのですこし手まどりましが、こんな感じで導入できます。Ruby1.9.3の導入RVMでインストール可能です。bundlerもあわせて導入。dnsmasqiOSデバイスからSiriへの通信は全てguzzoni.apple.com宛に送信されるのですが、この通信を全てSiriProxyが動作するサーバへ転送させる必要があります。そこで、SiriProxyを起動するマシンで内部DNSを立てて、iOSデバイスのWiFiネットワークのDNSをこの内部DNSを向けさせてあげることで、iOSデバイスのSiriの通信はすべてSiriProxyを向くことになります。公式ではdnsmasqの導入で実現を行っています。全体を通してここが一番厄介ですが、Homebrewを利用することで次のように導入可能です。/usr/local/etc/dnsmasq.confここで、dnsmasq.confには次のようにaddress情報を追記します。/usr/local/sbin/dnsmasqで、稼働します。稼働後、iOSのネットワークの設定で、DNSのアドレスを先ほどdnsmasqを設置したマシンのアドレスに上書きします。元々のDNSはアドレスは192.168.0.1でしたが、192.168.0.6で更新しています。SiriProxyのセットアップここまでくると後はそんなに詰まることが無いと思います。必要なライブラリや証明書を作成します。gencerts最後のgemcertsで~/.siriproxy/ca.pemな証明書が作成されているので、この証明書をメールで添付してiOSデバイス宛に送信します。iOSのメールアプリでメールを開くと、証明書のインストールが可能になります。siriproxy.gemspecの編集2013.1.5時点のgemspecにはバグがあって、最新のCFPropertyListを問答無用で利用しようとしてiOS6によるSiriの音声パケットの解析でコケる問題を持っています。'2.1.2'と、修正します。config.ymlの編集このままSiriProxyを起動してもサンプルのプラグインは稼働しますが、SiriProxy-iRemoconのようにプラグインを追加するとなると、config.ymlを書き換える必要があります。~/.siriproxy/config.ymlのpluginsを次のような内容を追記します。この内容はSiriProxy-iRemoconの中のconfig-info.ymlと同一のものです。'192.168.0.9'hostはiRemoconに割り当てられているIPアドレスになります。(これ書いてる途中で電気のON/OFFの赤外線IDが自宅の内容固定のまま公開してることに気づいた。あとで外部から設定できるように変更します。serverで、SiriProxyが起動します。あとは冒頭の動画のようにSiriの内容を解析して動作するはずです。SiriProxyのプラグインってどうなの?びっくりするくらい簡単に書けます。基本的には期待する文章を正規表現でマッチさせるそのブロック内で行いたい処理を書くだけ。今回のプラグインもこんな感じのコードになっています。endendlisten_forメソッドの引数の正規表現が期待する文章です。ちなみに「ライト?」となってるのは、僕の滑舌が悪くて何度やっても「ライ」にしか聞き取ってくれなかったのでその補正です。あとは別途定義したsignal_to_iremoconで家電操作を行う信号を発信させるだけですね。最後のrequest_completedの呼び出しは、SiriProxyの作法的なものらしく、かならずブロックの最後で呼び出す必要があるそうです。まとめこんな簡単にSiriに追加処理が書けるなんてSiriProxyかなり革命的です。前回のエントリでRails4で家電操作サーバ作ろうとしてましたが、Siriの操作の方が楽しそうなのでこっちにシフトしようと思いますよ。これは21世紀の「開けゴマ!」状態ですね。家電の操作にとどまらず、何でもSiriに仕事を任せることができそうで夢広がりまくりです。>SiriProxyのプラグインとしてSiriで家電を操作するSiriProxy-iRemoconAboutこのBlogはクックパッドに勤めるWebエンジニアがLLネタや情報技術について直感で思ったことを何も考えず発信するサイトです。コメントやお問い合わせ、執筆依頼などは@ryo_katsuma宛のmention、またはメールなどでお待ちしています。