Amazon Pollyによる音声メッセージを時間帯ごとに制御してみた

以前に[こちらの記事](https://qiita.com/mikawan/items/80e539eafb5dd7289b46)で、[**Gravio**](https://www.gravio.com/jp/gpromo/1901-casual-iot)のAmazon Pollyコンポーネントを使って温度をアナウンスさせました。

今回は、Amazon Pollyの音声メッセージを時間帯ごとに制御してみました。
BranchTimeCaseコンポーネントを使用して、6:00～10:00までは「おはようございます」、17:00～21:00は「お疲れ様でした」と、あらかじめ決めた時間帯に適した音声が流れる動作を作成しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/08d4b3cf-f193-7011-21c9-4876ecb52be8.png)

#使用したもの
###ハードウェア
・Windows 10 PC（バージョン1809）

###ソフトウェア
・[**Gravio**](https://www.gravio.com/jp/gpromo/1901-casual-iot)
　-Gravio Studio Ver.2.1.2098.0
　-Gravio Server Ver.2.1.2301.0

#動作（アクション）の作成
アクションカードを作成し、動作（アクション）を設定していきます。
アクションは、以下の流れで設定します。

1. CreateRecordコンポーネントで、条件分岐に使用するレコードデータを作成
2. BranchTimeCaseコンポーネントに分岐条件を指定
3. BranchTimeCaseコンポーネント内にAmazonPollySpeechコンポーネントを追加し、出力する音声を設定

まずは、条件分岐に使用するレコードデータを作成します。

##CreateRecordコンポーネントの設定
ステップを追加し、CreateRecordコンポーネントを選択します。
追加したCreateRecordコンポーネントをクリックし、ステップ出力を選択します。
右下のウィンドウの右上に表示される、'+'をクリックし、フィルターに使用するステップ出力変数を追加します。
ステップ出力変数は、実行された結果を次のコンポーネントへ送信、またはファイルやデータ送信先へ出力する変数です。
今回は次に設定するBranchTimeCaseコンポーネントで条件分岐に使用する現在時刻データを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/989cb169-053f-0cba-e238-1e995f22107a.png)
追加された変数をダブルクリックし、それぞれに下記内容を設定します。

|出力フィールド名|タイプ|式|
|:---|:---|:---|
|datetime（任意）|DateTime|Now（）|

現在の時刻はNow関数を使用します。式には、`Now()`を入力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/76543b0a-2dd1-52d0-b2f5-a8f810d03220.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/17ae7336-3a88-46bb-fe98-0ef760f8a5da.png)

以上で、条件分岐に使用するレコードデータを作成する設定が完了しました。

##Branchコンポーネントの設定
次にBranchコンポーネントを追加します。ステップを追加し、Branchコンポーネントを選択します。
追加後、コンポーネントをダブルクリックし、Branch内容の設定画面を表示します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/7f483e9d-583c-b7ff-1d5f-c4f2ed74ad7f.png)

Branch内容の設定で使用できるコンポーネントは以下の2つです。

|コンポーネント種類|機能|
|:---|:---|
|BranchCase|条件式による分岐|
|BranchTimeCase|StartとEndの時間を設定することで分岐|

Branch内容の設定画面では、デフォルトでBranchCaseコンポーネントが追加されています。
今回はBranchTimeCaseコンポーネントを使用するため、BranchCaseコンポーネントを削除します。
BranchCaseコンポーネントをクリックし、コンポーネントの右下に表示されるゴミ箱アイコンをクリックすることで削除されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/3d8a236d-0dbb-8605-ef13-2ff7c0cac63a.png)

削除したあと、"ステップの追加"をクリックし、BranchTimeCaseコンポーネントを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/adb937f0-b8cb-facb-4bec-bd6015f52093.png)

BranchTimeCaseコンポーネントが追加されました。
##BranchTimeCaseコンポーネントの設定
追加したBranchTimeCaseコンポーネントの分岐条件を設定します。
BranchTimeCaseコンポーネント＞プロパティの順でクリックし、下記内容を設定します。

|項目|設定内容|
|:---|:---|
|target|datetime|
|Start time|6:00|
|End time|10:00|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/6ba58c47-5bb6-0947-a84e-955b5e9a5bff.png)

以上で、分岐条件の設定が完了しました。次に設定した条件に一致した場合のアクションを設定します。

##AmazonPollySpeechコンポーネントの設定
BranchTimeCaseコンポーネントをダブルクリックし、条件一致時のアクション設定画面を表示します。
"ステップの追加"にて、AmazonPollySpeechコンポーネントを選択します。
AmazonPollySpeechコンポーネントをクリックし、プロパティに下記項目を設定します。

|項目|設定内容|
|:---|:---|
|基本プロパティ設定|□（チェックなし）|
|AWS Access Key|AWSで取得したアクセスキー|
|Aws Secret Key|AWSで取得したシークレットキー|
|AWS Region|任意のRegion|
|Voice|Mizuki、もしくはTakumi（日本語対応がこの2つです）|
|Text to speech|おはようございます。|

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/a7a0fced-6c72-3a0e-c49b-4378285a4db5.png)

なお、アクセスキーの取得方法については、こちらの記事を参考にしています。
[Amazon Pollyで投稿記事に音声を付けてみた](https://qiita.com/TakSus/items/caa05542e6f6e6ca1ecd)

##BranchTimeCaseコンポーネントの追加
Branch内容設定画面に戻り、BranchTimeCaseコンポーネントを追加し、17:00～21:00の場合に動作するアクションを設定します。

設定方法は、7:00～10:00の場合と同じように実施します。
先程の設定と異なる点は、以下の3点です。

|相違点|設定内容|
|:---|:---|
|BranchTimeCaseコンポーネントのStart time設定|17:00|
|BranchTimeCaseコンポーネントのEnd time設定|21:00|
|AmazonPollySpeechコンポーネントのText to speech設定|お疲れ様でした。|

以上ですべての設定が完了しました。

#動作確認
時間による分岐が動作しているか確認するために、右上の”▷”をクリックし確認します。
実行すると、コンソール画面が表示され実行結果を確認できます。

17:00～21:00の条件に一致する17:18に実施した場合は、「お疲れ様でした。」という音声が再生されます。
コンソール画面では、Branchコンポーネントが実行された後、AmazonPollySpeechコンポーネントが実行されています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/73be3b10-a7bb-c0d5-a3f7-187001800a38.png)

設定した条件に一致しない12:05に実行した場合は、音声は流れません。
コンソール画面でも、Branchコンポーネントが実行された後、AmazonPollySpeechが実行されていません。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/247209/621f47f0-436c-056b-c25e-56409e27abad.png)

#あとがき
今回作成したアクションと、Gravioレンタルデバイスの人感センサーを利用することで、設定した時間に合わせた人感検知による音声案内が可能になります。

人感センサーとアクションの設定については、こちらの記事をご参照ください。
[【Qiita記事】**人感センサーライトを作ってみた（台所用）**](https://qiita.com/mikawan/items/0d6b0811c4cf9b86c843)

メッセージ内容や、時間帯を自由に設定できるので、様々な応用例を今後考えていきます。