アレクサとLametricTimeでいい雰囲気にしたかった

## はじめに
こんにちは！エンジニアのまるさんかくです。
LaMetricTimeというデジタル時計を買ったので、何かできないかと考えていました。
LaMetricTimeはwebAPIを通して任意のテキストやアイコンを表示・通知することができ、同時に音楽も流すことができます。
良い感じの音楽を流して良い感じのテキストを表示したら部屋内を良い感じの雰囲気にできるんじゃないかと思ったのがきっかけです。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/8f8e557f-7f10-2679-7dd4-f4ebba545734.png">

## やりたいこと
LaMetricTimeを使っていい雰囲気を演出したい!

## 実施内容
アレクサから指示を出すと下記３つを行う
・部屋を暗くする
・いい感じな音楽を流す
・口説き文句を表示する

## 機器構成
- アレクサ対応デバイス(役割：指示送信)
- ラズパイ(役割：アレクサから指示を受信＆LametricTimeのwebAPI実行)
- LametricTime(役割：いい感じな音楽を流す&口説き文句を表示する)
- SwtitchBots(役割：電気を消す)
- FireTVStick(付いているTVを消す)

## 全体構成
アレクサの定型アクションを使用して、RaspberryPi、SwitchBots、FireStickに指示
![全体構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/1e345975-f8f3-8f38-32b2-22ccf8ea830b.png)


## 準備
### apacheのインストール
LaMetricTimeはhttp経由で音声ファイルを取得しないと音楽を流すことができない。
そこで、apacheをラズパイにインストールし、任意の音声ファイルをurlで参照できるようにする。

- apacheのインストール
```bash
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install apache2
```

- apacheの動作確認
ウェブ上で書きリンクにアクセスし、apacheのページが表示されることを確認する
http://<ラズパイのIPアドレス>

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/578eba46-36ac-aee1-5ed6-d48c15c3962d.png">


- apacheルートフォルダにファイルを保存
ラズパイの下記フォルダに音声ファイルを保存
    /var/www/html

今回は下記サイトのフリー音源を使用

https://pixabay.com/ja/music/background-epic-piano-music-for-short-video-vlog-advertising-23-sec-189905/

- 音声ファイルへのアクセス確認
ウェブ上で下記リンクにアクセスし、音声ファイルが再生されることを確認する。
http://<ラズパイのIPアドレス>/<音声ファイルのファイル名>

![apache_音声ファイル再生確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/8ad51b51-90ea-6865-17a3-c8c814d3d12e.png)


## プロジェクト作成
- アレクサからRaspberryPiに指示を飛ばすためのNode-REDプロジェクト
- RaspberryPiからLaMetricTimeのWebAPIを実行するためのシェルスクリプト
- アレクサの定型アクション

### NodeREDプロジェクト作成
アレクサから指示を受けて、シェルスクリプトを実行するNodeREDプロジェクトを作成する
![Node-RED_プロジェクト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/d5f750aa-4aa9-d213-45c2-d1fc7c5e9977.png)

アレクサ経由でラズパイのシェルスクリプトを実行する方法については下記参照

https://qiita.com/Marusankaku_E/items/ab7df24d92fc7466996d

### シェルスクリプト作成
NodeREDから実行するシェルスクリプトを作成する
- 内容
    LaMetricTimeのWebAPIを実行し、音楽再生とテキスト表示をLaMetricTimeに指示する
- メインスクリプト

```shell:first.sh
#!/bin/bash

# SwtchBotsが電気を消すまで待つ
sleep 5

# JSONファイルのパス
json_file="/home/shun/my_project/GoodMoodMaker/data/sound_template.json"

# APIエンドポイント
api_endpoint="http://<LaMetricTimeのIPアドレス>:8080/api/v2/device/notifications"

# 認証情報
username="dev"
password="71174526036821fa22658ff0cbbc586d910e262a56ea24c2400058a35f901835"

# curlコマンドを実行
curl -X POST -u "$username:$password" -H "Content-Type: application/json" -d "@$json_file" $api_endpoint

```
- メインスクリプトで読み込むデータファイル
:::note info
準備した音声ファイルのURLを"sound""url"に記載
:::
```json:sound_template.json
{
    "priority": "warning",
    "icon_type": "info",
    "model": {
        "cycles": 1,
        "frames": [
            {
                "icon": "i30960",
                "text": "I LOVE YOU!"
            }
        ],
        "sound": {
            "url":"http://<ラズパイのIPアドレス>/background-epic-piano-music-for-short-video-vlog-advertising-23-sec-189905.mp3",
            "fallback": {
                "category": "notifications",
                "id": "cat"
            }
        }
    }
}
```

LaMetricTimeに通知を送信する方法についての詳細は下記参照

https://qiita.com/Marusankaku_E/items/2c7c55e473eb9800e04c

### アレクサ定型アクション作成



アレクサから各機器に指示を送信するための定型アクションを作成する
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3692990/2dc32ab4-8a6a-4065-798e-0bb02ef0b38c.png">


## 作成物

https://twitter.com/Marusankaku_E/status/1768949430856900679


## 最後に
LaMetricTimeとラズパイを使用して、部屋をいい雰囲気にするシステムを作ってみました。
いい雰囲気というより若干引かれそうな感じですが、面白いものが作れたんじゃないかと思います。
LaMetricTimeは他にも色々な使い方ができると思うので、皆さんも作成してみてはいかがでしょうか。

## リンク
- apacheによるhtml経由の音声ファイル参照

https://note.com/ukshampoo/n/n8c2733779090