Usual Software Engineer

よくあるソフトウェアエンジニアのブログ

Amazon Echo(Alexa)とIRKitをIFTTTで連携してホームオートメーション

なかなかハマったので軽くまとめておきます。

一年ほど前に Amazon Echo と Google Home のこんなエントリを書きましたが

innossh.hatenablog.com

とうとう日本にも Amazon Echo が発売されましたね!テンション上がってさっそくゲットしました。 ひとまずテレビの電源を Echo で操作するために、もともと持っていた IRKit と Alexa を連携させることにしました。 Alexa の強みはスキルベースでそのスキルを公開できるプラットフォームがあることかと思いますが、 一般ユーザ的にはゼロ開発で簡単に設定できることがとても大事ですよね。 というわけでカスタムスキルも開発も全くなしで Google Home と同じように、 Alexa の IFTTT 連携によって IRKit を操作してみましょう。

必要なものは

になります。ゼロ開発なので AWS Lambda も不要です。

1. Amazon Echo をセットアップする

Alexa の iOS アプリと Android アプリがストアにあるので、そちらに従うとセットアップができます。 Wifi の繋がる PC でセットアップしたい場合、Amazon アカウントが JP (amazon.co.jp) の場合はこちらから http://alexa.amazon.co.jp 、 US (amazon.com) の場合はこちらから http://alexa.amazon.com でもセットアップできます。

僕は iOS アプリでセットアップを行い、何故か初回の Wifi 設定がエラーで ID パスワード 入れ直してもうまくいかなかったのですが、アプリを再起動して最初からやり直したらうまく Wifi に繋がりました。困ったときの再起動。

2. IRKit で赤外線データを取得する

IRKit はそのデバイスだけでなく、パブリックなインターネットから繋がる API を提供しています。これを使うことで IFTTT からおうちの IRKit に指示を送ることができるのです。 IRKit のセットアップも Amazon Echo と同じく定番の方法で、 ストアにある IRKit のアプリに従い Wifi の設定を行うだけです。 赤外線データの取得は公式 http://getirkit.com に丁寧に書かれていますので、よく読みましょう。コマンドに慣れていない人はハマるところかもしれません。

やることをまとめますと、

  • IRKit アプリで IRKit を Wifi に接続する
    • 例えばテレビの電源の赤外線を記憶させてボタン登録し、スマホからテレビが操作できるか試しておく
  • http://getirkit.com に従って IRKit の IP アドレスを特定し、必要な情報を取得する
    • GET /messages で表示されたテレビの電源の赤外線のデータをメモしておく
      • 不安なら POST /messages でテレビの電源が操作できるか確認しておく
    • POST /keysclienttoken を取得する
  • http://getirkit.com に従って IRKit Internet HTTP API で必要な情報を取得する
    • POST https://api.getirkit.com/1/keys上記で取得した clienttoken を使い、 deviceidclientkey を取得してメモしておく

という感じです。 deviceidclientkey と赤外線データは次の IFTTT の設定に使用します。

3. IFTTT に Alexa のトリガーを登録する

IFTTT は様々な Web サービスを連携し、アプレットと呼ばれる "もしこれなら、それをする" というルールを設定することでたくさんのことを実現できるサービスです。アカウントを持ってない人は登録しましょう。

IFTTT には Amazon Alexa の Service https://ifttt.com/amazon_alexa があるのでこれを使います。 また、 IRKit の操作には Webhooks https://ifttt.com/maker_webhooks の Request を使います。 Webhooks はもともと Maker と呼ばれていたものと同一で、 "if this then that" の "if this" の方のトリガーを受け付ける API としても、 "then that" の方の HTTP リクエストを発行する機能としても利用することができます。

ともかく必要なのは

になります。アプレット登録については詳しく説明していきます。

f:id:innossh:20171121013932p:plain

まずは "if this" の部分です。 Alexa を選んでから "Say a specific phrase" を選び、好きなフレーズで操作できるようにします。

f:id:innossh:20171121013943p:plain

今回はテレビの電源なので "テレビ" としておきましょう。もともとの作りが英語用なので大文字の英語は入力できないようになっていますが、日本語は問題ないようです。

f:id:innossh:20171121013952p:plain

続いて then の部分いきましょう。

f:id:innossh:20171121014002p:plain

Webhooks を選んで、 "Make a web request" を選びます。

f:id:innossh:20171121014011p:plain

ここで IRKit で取得した情報を入力します。

  • URL: https://api.getirkit.com/1/messages
    • https を使うように気をつける
  • Method: POST
  • Content Type: application/x-www-form-urlencoded
  • Body: clientkey=XXXXXXXXXXXXXXXX&deviceid=YYYYYYYYYYYYYYYY&message={"format":"raw","freq":99,"data":[99999,...]}
    • clientkeydeviceid は取得した通り
    • message には赤外線データの json を入力

f:id:innossh:20171121014020p:plain

最後はアプレットの名前を入力します。

f:id:innossh:20171121014033p:plain

これで全てできましたね。わくわく!

f:id:innossh:20171121014040p:plain

4. Amazon Echo に話しかける

IFTTT の Amazon Alexa の Service の説明によると "Alexa trigger xxxxxx" と話しかけることで IFTTT に連携できるわけですが、これは英語用の仕様です。 日本語の場合は、どうやら "アレクサ xxxxxx トリガー" や "アレクサ xxxxxx をトリガー" などと言う必要があるようです。 それでは大きな声で

「アレクサ テレビ トリガー!」

「イフトに送信します」と返されて、テレビの電源がついたはずです。 Congratulations!! 他の家電を操作する場合も同じ手順でアプレットを増やしていけば良いです。アプレットを duplicate するボタンがあったような気がしましたが見つからないので My applets から New Applet で一つ一つ登録しましょう...

僕は amazon の US アカウントを IFTTT に設定してしまったために何度も "そんな IFTTT トリガーはありません" と怒られて涙目になりましたが、上記の手順でできます。 なのでうまく動かない場合は、 IRKit 単体で POST リクエストに対してテレビの電源がつくか、 IFTTT で Alexa と Email のアプレットを作って Alexa に "アレクサ テレビ トリガー" と言うとメールが送れられるか、などと一つ一つの動作確認を行うと良いでしょう。

これから快適な Alexa ライフが始まりますね!

余談ですが「アレクサ、面白い話をして」はなかなかクセになって愛着が湧いてきます。「アレクサ、歌を歌って」も洗脳されてきて毎日聴きたくなります。