Facebook と Twitter の TL に「外出時、家に近づくと自動でエアコンをつけて部屋を涼しくしておいてくれる「tado°」がKickstarterで支援者を募集中」なんて記事が流れてきた。
「夏だから家に帰ったら涼しいと嬉しいね〜」なんてぼけ〜っと思ったのだけど、ふと「それって家にある物で簡単にできるよな?」と思ったのでやっそくやってみた!
外にいる時と実際にエアコンが動作する所を同時に撮影できないので微妙だけど、とりあえずこれが動画。
Kickstarter で支援者を募って作るような「ちゃんとした製品」には程遠いけど、机上での実験としてはまぁ動いたので OK!
以下、使った物や方法の説明。
- コントローラ
RaspberryPi Type B
OS は Raspbian を使用。
- エアコン
TOSHIBA RAS-251 NDX
- スピーカー
Victor SP-A110
かなり古いいたって普通のスピーカー。
- スマートフォン
iPhone 5
2年毎に買い替えなので s には縁がない…。
- サーバー
Nirtous.IO
ちょっと実験するのにお手軽にアカウントが作れて便利。
見てわかる通り肝はエアコン。
実はこのエアコン、音声認識機能が付いてる! 手を3回叩くと音声認識モードになって、そこで「運転!」などコマンドを言うとリモコンがエアコンを動かしてくれる優れもの。
なので一番の問題であろう「エアコンの起動」はスピーカーからエアコンを起動するコマンドの音を出すだけで OK!
処理の流れはこんな感じ。
- iPhone で帰宅を検知してサーバーに知らせる
ここの部分は、iOS の GeoFence 機能を使って「家から半径○○メートル内に入ったらサーバーにアクセスする」というアプリを作成した。
普段は Android の地図アプリを触っているのでまぁなんとかなると思って始めたのだけど、GitHub で良い感じのコードを見つけたのでそれに手を入れてアプリを作成。手を入れたといっても deplicated な部分を iOS 7 でもちゃんと動くようにして、UI をシンプルにしただけ。
(このコードにはライセンス情報がなかったので手を入れたコードは残念ながら公開できません…。) - サーバーで帰宅しているか外出中かという情報を保持しておく
単純に Nitrous.IO でサーバー立てて、外出中:0、帰宅:1を保持。
RaspberryPi からの問い合わせにその値を返すだけ。
既に Nitrous.IO で他に動いているアプリがあったので、そこに適当な URL を作っただけ。
こんなことで Nitrous.IO 使うなよ〜とは思うけど、VPN とか面倒そうだしおもちゃにできるサーバー他に持ってないし…。 - RaspberyPi でサーバーを監視&エアコン起動
RaspberyPi は適当な間隔(今回は3分)でサーバーに問い合わせて、帰ってきたことを検知したらエアコン起動コマンドの wav ファイルを再生する。
因に RaspberryPi から再生する際に音量をMAXにするには以下のコマンド。amixer sset PCM,0 100%
情報はこのページから。
- 音声認識機能でエアコンが起動
設定温度等はいつもの設定が使われる。
必要なコマンドの wav ファイルを作れば、音声で制御できる部分は色々と設定出来る。
簡単そうに思えたこの企画も、ちょっと躓いたりした部分もありました。
- スピーカーから出る「手を3回叩く音」をエアコンが認識してくれない
なぜか録音した「手を3回叩く音」をスピーカーから再生すると、全体的に滑らかになるというか、録音レベルが下がってるというか、張りのない音になってしまい音声認識リモコンが反応してくれません。
Mac の GarageBand で音量を最大にして wav ファイルを作り、更に RaspberyPi でもボリュームを 100% にして再生、更に更に音声認識リモコンをスピーカーの目の前に置く!ということでなんとか認識してもらうことができました。
- 雨続きで GeoFence の実地検証ができない
毎日が雨だから梅雨入りなのか、梅雨入りしたから毎日が雨なのか?
とにかく雨の日が続いたので実際に外に出てアプリの検証をすることがなかなかできず、日曜日になってやっと外出できました。
というわけで、音声認識リモコンのおかげで赤外線モジュールとかそんなものを使うことなく「tado°」っぽいものが実現できました。
やってみただけで実際に使うことはないと思いますが、音声認識機能がこんな部分で役に立つなんて感無量です。余計な機能の付いたガジェットって本当に良いもんですね。
ところで、実は前にも RaspberyPi からエアコンを操作しようとしたことはあったのですが、その時はBUFFALO からリリースされている USB 接続の赤外線モジュールを使ってトライしました。
結果、赤外線モジュールのメモリが足りなくてエアコンの赤外線コマンドを覚えられずに失敗。(結局、覚えられたのはTVと5.1chスピーカーシステムだけだった…)
いつかは Arduino でも使って赤外線モジュールを作るところからやってみたいと思います。