この記事はLivesense AdvendCalendar 19日目の記事です。
昨日は @otakumesi さんの「『migemo』という便利なツールをオススメしたい」でした。
はじめまして、Livesenseでインフラエンジニアをしている @p1na9uattr0 です。
Qiitaデビューがいきなりアドベントカレンダーになってしまいましたが、書いてみます。
はじめに
さてみなさん、お酒好きですか?
私は大好きです
ついつい飲みすぎ、且つ締めに豚骨ラーメン
食べてしまって体重が気になってしまう事もしばしばですね。
年中そんなことを言っていますが、平日の夜や土日で自転車に乗ったりジョギングしたりして体を動かして帳尻を合わせています。
毎日、MyFitnessPal
にカロリーを記録して「ああ、今日は焼酎1杯しか飲めないなー」なんて日も多いわけですが、運動した日にどのぐらいお酒を飲んでいいかAlexaに喋らせてみようと思います。
用意するもの
- Echo Dots
- AWSアカウント(Lambda/Amazon Developer用)
やったこと
Alexa Skills KitでAlexaスキルを作る
以下の流れでAlexa Skills Kit
でAlexaスキルを作ります。
-
Amazon DeveloperにAWSアカウントでログインして
Alexa Skills Kitl (ASK)
からスキルを作成する -
呼び出し名
に適宜名前をつけてモデルを保存
する -
インテント
に呼び出し名
を言った後のワードを追加し、モデルを保存
する(多分要らない)
こちらを見ながらサクサク進めます。
本当に使いこなすには用語の意味とかもっとちゃんと理解したほうが良いかもしれません。
Lambda関数を作る
以下の流れでLambda
関数を用意していきます。
-
Lambda
でPython3.7
ランタイムの関数を作る -
Alexaスキル
のエンドポイント
ページからスキルID
をコピペする -
Alexaスキル
のエンドポイント
ページのデフォルトの地域
にLambdaのARNをコピペする -
Alexa Skills Kit
をイベントとして設定する
この時点でスキルを開発できるようになりました。
Lambda関数の中身
こちらのコードをベースに、以下の様に実行するインテントを複数指定します。
<snip>
# 焼酎を何杯飲んでいいか回答する
def shochu():
return OneSpeech('今日は焼酎を' + shochu_count + '杯飲んでいいですよ').build()
# 缶ビール(350ml)を何本飲んでいいか回答する
def beer():
return OneSpeech('今日は缶ビールを' + beer_count + '本飲んでいいですよ').build()
# 日本酒を何合飲んでいいか回答する
def sake():
return OneSpeech('今日は日本酒を' + sake_count + '合飲んでいいですよ').build()
def welcome():
return QuestionSpeech('こんばんは、今日も1日お疲れ様でした。何を飲みたいですか?').reprompt('よく聞こえませんでした').build()
def bye():
return OneSpeech('おやすみなさい。飲み過ぎに気をつけて下さいね。').simple_card('遊んでくれてありがとう!').build()
def lambda_handler(event, context):
request = event['request']
request_type = request['type']
if request_type == 'LaunchRequest':
return welcome()
elif request_type == 'IntentRequest':
intent_name = request['intent']['name']
# 焼酎が何杯飲めるか確認するためのインテントを指定する
if intent_name == 'ShochuIntent':
return shochu()
# 缶ビール(350ml)が何杯飲めるか確認するためのインテントを指定する
elif intent_name == 'BeerIntent':
return beer()
# 日本酒が何合飲めるか確認するためのインテントを指定する
elif intent_name == 'SakeIntent':
return sake()
<snip>
shochu_count
,beer_count
,sake_count
には、Strava
からAPIで消費カロリーの情報を引っ張って来て、下表の参考値から杯・合数を計算しています。
お酒の種類 | 量 | カロリー |
---|---|---|
焼酎 | 100ml | 139kcal |
ビール | 350ml | 140kcal |
日本酒 | 1合 | 196kcal |
・・・と書きたかったんですが、 Strava API
周りの処理を書いているところでタイムアップとなってしまいました。
また、正確な1日の消費カロリーを元に計算するために、MyFitnessPal API
を使用したかったのですが、API使用に関するリクエストの承諾が間に合いませんでした(トホホ
alexa developer console
からの動作テストと、Echo Dots
でAlexaが応答するところまでは確認したので、軽く紹介しておきます。
文字ベースでの動作テスト
以下の様に、alexa developer console
のテスト
タブからチャット形式で動作テストが行なえます。
スキルI/Oも入力するたびに更新されるので、データのやり取りがどの様になっているのかが追えて良いですね。
実機で動かすための準備
alexa developer console
の公開
タブからベータテストの設定を行います。
日本語(日本)
プライバシーとコンプライアンス
公開範囲
設定情報が問題なく、alexa developer console
の検証
タブで以下の通り「エラーは見つかりませんでした」と表示されていればベータテストが行えるようになるため、ベータテストを登録します。
公開範囲メニューから、Echo Dots
に登録されているアカウントのメールアドレスを登録し、招待します。
Echo Dots
のメニューから、ベータテスト中のスキルを選択すればEcho Dots
でAlexaスキル
が使えるようになります。
Echo Dotsでの動作
Alexaに話しかけてみましょう。
今日1日の頑張りをAlexaが労いつつ、飲んで良いお酒の量を教えてくれます。
飲みすぎないように、程よく飲みましょう
おわりに
データ取得周りの実装が間に合いませんでしたが、Alexaとは仲良くなれたと思います。
今回試してみて、Strava API
でも色々やれそうなことがわかったので、後日また色々いじってみるかもしれません。
トホホ記事になってしまいましたが、最後まで読んでいただきありがとうございました
明日のアドベントカレンダー21日目は @shusuke_otani さんです。