Alexaスキル開発 〜男一人暮らしがただいまを言わなきゃいけないこんな世の中じゃ、Akerun〜

この記事は Akerun Advent Calendar 2019 - Qiita の14日目の記事です。

はじめに

はじめまして、今年10月にPhotosynthにWebエンジニアとして入社したt-ikeと申します。 IoTサービス想定してた以上に面白くて毎日楽しみながら仕事してます。ハードが絡むといいですね。 大変な部分もありますがw

本題

みなさんスマートホーム化してますか?

自分も半年前ぐらいから急に普段の生活の無駄を感じるようになり、alexaを使って自宅の家電を徐々にスマートホーム化してます。 照明、エアコン、テレビあたりは声やアプリで操作できるようになりました。

そして、入社を機に、ドッグフーディングとしてAkerunを自宅にとりつけてスマートロックも実現できるようになりました。 携帯(NFCカード)で鍵を開けたり、オートロックにしたり、本当に便利です。

が、人間というのは貪欲な生き物で、慣れるとまた新たに不便だなと感じるポイントがでてきます。

「家帰ってきて、鍵開けてから、”アレクサ、ただいま”っていうのだるいな・・・」

そうです、男の1人暮らしで、家の中で発話をするという行為は基本不要なもので、 何よりも恥ずかしく、エネルギーのかかることなのです・・・!

Akerunを使ったスマートホーム

やりたかったこと

  • 家の鍵が空いた時に、照明やエアコンなどの電源も一緒につける

が、ダメっ・・・・!

大変残念なことに、Akerunでは鍵の開閉を検知してAlexaなどのサービスにプロアクティブに通知する機能は現状提供していないのです。。

なので鍵の開閉をトリガーにはできませんでした。

やったこと

  • alexaアプリの定型アクションで「鍵の解錠・家電スイッチON」をできるようにする

Akerun契機で動かせないなら、Alexa契機で動かそうということで、alexaからakerunを操作できるようにして、定型アクションに組み込んでしまおうというわけです。

Alexa SKill開発

Alexa Skillとは

Amazon Echoなどで受けた発話の内容を解析し、内容に応じた処理を可能にするもの。 天気やニュースを通知する機能もAlexaSkillの一つです。

スマートホームスキル

Alexa Skillにはいくつかの種類がありますが、デバイスを操作するスキルはスマートホームスキルに該当します。

スマートホームスキルと通常のカスタムスキルとの違いは以下になります。

  • ビルトインの発話解析が利用できる(「アレクサ、〇〇つけて」のような発話に対する処理の紐付け(インテント)が不要)
  • 発話だけでなく、アプリでデバイス操作ができる

今回はスマートホームスキルの開発を行いました。

使ってみよう

とりあえず難しい話はおいといて実際に作ったものを使ってみましょう

alexaアプリ

アカウントリンク

最初にAlexaとAkerunのアカウントリンクを行います。

開発中のスキルはアプリ上で開発者のみに表示されます。 公開すると全Alexaユーザが利用できますが、現状はまだその予定はありません。 βテストとして指定ユーザのみに公開することができるので、今はその運用をするつもりです。

f:id:photosynth-inc:20191208125554j:plain

スキルを選択すると有効にするか選べます。

f:id:photosynth-inc:20191208125828j:plain

有効にすると、akerunのログイン画面に遷移します。

f:id:photosynth-inc:20191208125953j:plain

認証が完了すると、AlexaからAkerunの操作を許可するか選択します。

f:id:photosynth-inc:20191208130104j:plain

許可を押すと、アカウントリンク完了の画面が表示されます。

f:id:photosynth-inc:20191208130220j:plain

バイスの検出

アカウントリンク後、デバイス検出画面が表示されます。

f:id:photosynth-inc:20191208130251j:plain

ただ、ここでデバイスを検出しても、見つかりません。。

f:id:photosynth-inc:20191208130439j:plain

f:id:photosynth-inc:20191208130452j:plain

Akerun Managerで発行された認証トークンのスコープ設定を行う必要があります (少し面倒で申し訳ない。。)

アカウント画面の連携アプリタブで発行されたトークンが確認できます。 f:id:photosynth-inc:20191208130603j:plain

そこから以下のスコープを有効にして下さい。

  • アカウント
    • account:organization:read
  • 組織
    • organization:akerun:read
    • organization:akerun:lock
    • organization:akerun:state

組織に複数所属している場合は、検出したいデバイスのある組織のスコープだけ有効にしてください

f:id:photosynth-inc:20191208130629j:plain

f:id:photosynth-inc:20191208130652j:plain

その後、もう一度検出するのですが、その前にAkerun名を「玄関」のような名前に変更しておくことをお勧めします。 f:id:photosynth-inc:20191208131336j:plain

もう一度検出をすすめると、デバイスが検出されるはずです。

もし、画面を閉じてしまった場合は、Alexaに「アレクサ、デバイスを検出して」と話しかけてください。 f:id:photosynth-inc:20191208131313j:plain

Akerun操作

見つかったスイッチデバイスを選ぶと以下のような画面が表示されます。

f:id:photosynth-inc:20191208132007j:plain

各ボタンは以下のような意味を表しています。

  • オフ: 施錠
  • オン: 解錠

ここで疑問に思う人もいると思うのですが、他のスマートロック系のスキルではロックデバイスが検出され、ロック・アンロックと選べます。

なぜ、スイッチデバイスとして検出しているかというと、ロックデバイス定型アクションでアンロックできないからなんです。

(※公式確認済み)

自分の要望はあくまで定型アクションでアンロックすることだったので仕方なくSwitchデバイスで検出をしました。

もし公開するとなった場合にはこの仕様は変わるかもしれません。

そして、あとは定型アクションをつくります。

f:id:photosynth-inc:20191208132618j:plain

こんな感じでアクションを設定すれば、アプリから1ボタンで全アクションが実行できます。

やったぜ。

このスキルでできること

自分はあくまで定型アクションのために実装しましたが、他にもこのスキルによって以下のようなことができます。

  • インターホンで呼び出しがあった時に、「アレクサ、玄関をオンにして」で鍵を開けられるので玄関まで行かなくて良い
  • (オートロック機能を使ってない人は)寝る前に定型アクションに施錠の操作を組み込めば、鍵の閉め忘れ対策ができる

他にも使い道はあるかもしれません。

学び

  • AlexaのアーキテクチャとAlexa SKillの開発方法
  • Lambdaの開発環境構築、Serverless Frameworkを用いたデプロイ方法
  • github actionsを用いた自動デプロイ
  • IoTサービスのアーキテクチャはどうあるべきか
  • VUIのあるべき姿、ユーザにどういうものが受けるか

実益メインで、業務に直接関係はない作業のつもりでしたが、 手を動かしてみると色々課題が出てくるし、最先端の企業が提供するサービスに触れることでベストプラクティス的な部分も学べたのはよかったです。

いつか、ここらへんも余力があればまとめてみたいですね

余談

作ってる途中でAmazon Echo Flexなるものがでていたことを知り、 モーションセンサを定型アクションに組み込めるようになり、 一体自分は何をやっていたのかと感じながら、 心を殺してポチりましたとさ...

今回はこの辺で

最後に、エンジニア募集してます!イケてるIoTサービス一緒に作り上げていきましょう!

recruit.jobcan.jp