maaash.jp

what I create

Amazon Alexaにエアコンをつけてもらう

Nature Remoは、機能的にはIRKitの正統な進化形と考えていただいてよいと思います。

と書き先日告知したNature RemoのKickstarterが成功して終了しました!!
応援していただいている方、ありがとうございます。

昨日から、引き続きMakuakeでクラウドファンディングを開始していますので、
Kickstarterを逃した方はぜひ!!

今日は、Kickstarterサイトでも提供すると約束していて、個人的にもすごく熱いと思っている、Alexa連携をIRKitで試してみました。
Nature Remoで試すとサンプルコードまだ出せないのでね。

Alexaは様々な理由から

  • Amazon Echoは国内で販売していない Amazon Tapはあるようだなあ…
  • Amazon.comアカウントが必要
  • Amazon.co.jpのPrimeアカウントが使えない><
  • 日本語対応していない

日本では流行ってる話をほとんど聞きませんが、こないだ渡米した時に感動して買ってきてしまいました。

感動ポイントはとにかく音声認識がすごいこと。

遠くからでも、音楽再生するなど雑音環境下でも、ほとんど認識失敗にしない感覚があります。
Siriだと、認識失敗したら「まだSiriにはできないか(落胆)」と感じるところ、
Alexaだと、「あれ、自分の英語の発音が悪かったかな」ってなる。
音声認識って使えるじゃん

Alexaの認識対象の語彙を限定するルールベースのアプローチがしばらくは優位なんじゃないか


さて、Alexaに何か音声でしゃべりかけて外部サービス連携するためには、Alexa Skills Kit (ASK)を使います。

Alexa Skills Kitの中にはCustom SkillsとSmart Home Skillsがあり
まずは簡単なCustom Skillsで作ります。

手順は

  1. Skillをつくる

  2. Invocation Nameを設定

    上のビデオの中で “Ask {IRKit} to turn on the air conditioner” と話していた {IRKit} の部分
    これはSmart Home Skillsでは操作対象が制限される分必要なくなるようだが、Custom Skillsには必要

  3. Intent Schemaの設定

    音声で操作したい内容を定義する

     {
       "intents": [
         {
           "intent": "ControlAC",
           "slots": [
             {
               "name": "Control",
               "type": "LIST_OF_CONTROLS"
             }
           ]
         },
         {
           "intent": "AMAZON.HelpIntent"
         },
         {
           "intent": "AMAZON.StopIntent"
         },
         {
           "intent": "AMAZON.CancelIntent"
         }
       ]
     }
    

    ControlACというのがエアコンの操作で、LIST_OF_CONTROLSというCustom Slot Typeで今回のアプリケーション固有の単語を設定する。
    今回は on | off | start | stop のみ。

  4. Sample Utterancesの設定

    音声認識する語彙を設定

     ControlAC turn {Control} my air conditioner
     ControlAC turn {Control} my AC
     ControlAC turn {Control} the air conditioner
     ControlAC turn {Control} the AC
     ControlAC turn {Control}
     ControlAC turn {Control}
     ControlAC {Control} my air conditioner
     ControlAC {Control} the air conditioner
    

    この文字列をしゃべると、{Control}に入ってたon | off | start | stopをLambda関数に渡してくれます。

  5. AWS Lambda関数を作成

    TriggerにAlexa Skills Kitを設定
    LambdaのNodejsのコードは最後に。
    IRKitにエアコンコントロールしてもらうのにIRKitのInternet HTTP APIを使うので必要なdeviceidclientkeyを取得します。

  6. これでiPhoneのAlexaアプリを開き Skills -> Your Skills と開くと

    Untitled

    IRKit Skillが見つかれば準備OK

  7. Alexaにしゃべりかける

    “Alexa, ask IRKit to turn on the air conditioner”

  8. 他の人にも使ってもらうためには審査に提出するが今回はしない

ということで、開発者であればわりと簡単に、
自分のIRKitをAlexaを通して音声で操ってエアコンをコントロールする、
ところまでいけますが、
開発者でない方でも(または開発者でも面倒であれば)、音声エージェントに話しかけてスマートホームしたければ、
ぜひ早期割引期間中にNature Remoをゲットしてください!!!!


Lambdaのコードはこんな。

Comments