kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

「ON AIR」ライトをAlexaでコントロールして、家族に「リモート会議中」を知らせてみた

f:id:kun432:20210622000821j:plain

リモートワークでオンライン会議とかする時に、家族がそれに気づいてなくて、声が入ったりしたことってありませんか?うちはリビングで仕事をしているので、ごくごく稀にそういうことがあります。そこで「会議中」であることが家族にもわかりやすいように、「ON AIR」ライトを購入して、音声でコントロールできるようにしてみました。

目次

必要なもの

Alfoto ON AIR オンエアー サインランプ

たまたま見ていた「MONOQLO 2021年08月号」で紹介されていて、1500円とそんなに高くもないので購入。Amazonのレビュー見てるとみんな似たような目的で買ってるみたいですね

いざ届いてみると結構大きい・・・サイズちゃんと確認せずに買ったのが悪いんですが。もうちょっとコンパクトなものを想像してました。HHKBより一回り小さいぐらい。

f:id:kun432:20210622003736j:plain

厚みが結構あります。

f:id:kun432:20210622003812j:plain

電源スイッチは物理です。その下に見えているのはUSB-Cです。

f:id:kun432:20210622004304j:plain

電源は上記のUSB-C経由か、もしくは単3電池です。

f:id:kun432:20210622004159j:plain

音声でコントロールするには、スマートプラグを使ってUSB-Cで給電、というのが一番良さそうです。

SwitchBot スマートプラグ

スマートプラグは、SwitchBotのスマートプラグにしました。ただし、SwitchBot製品をAlexaでコントロールするにはSwitchBot Hubが別途必要です。

Hubの分だけ余計な出費が発生しますが、

  • Hubは赤外線リモコンも兼ねていて、もともと導入済(追加出費がなかった)
  • SwitchBotはAPI経由での操作も可能

というところでチョイスしてます。

もちろんAmazon純正のスマートプラグでもいけると思います。こちらだとハブが不要なぶん安く済みますし、純正というのも安心感ありますね。普通に音声でコントロールしたいだけならこちらでいいと思います。

こんな感じで(汚くてすいません)スマートプラグをコンセントにつないで、そこからUSB-CでON AIRライトにつなぎます。ON AIRライト側の電源スイッチはONのままにしておきます。

f:id:kun432:20210622011613j:plain

f:id:kun432:20210622011929j:plain

SwitchBotプラグの設定

マニュアルに従って設定すればよいので、詳細は割愛しますが、少しだけ補足。

プラグにつける名前が、Alexaから呼び出す時の名前になります。私の場合、プラグの名前ではなくそこにつながっている機器の名前のほうがわかりやすいので「会議ライト」としてます。ただし、定形アクションを使えば別の呼び出し方ができるので、ぶっちゃけ何でもよいです。

f:id:kun432:20210622020045p:plain

あと、Alexaから呼び出す場合は「クラウドサービス」からAlexaとの連携を有効にしておく必要があります。

f:id:kun432:20210622013026p:plain

f:id:kun432:20210622013058p:plain

f:id:kun432:20210622013119p:plain

Alexaアプリのデバイス一覧に表示されればOKです。

f:id:kun432:20210622013201p:plain

定形アクションの設定

上記の状態で「アレクサ、会議ライトをつけて」「アレクサ、会議ライトを消して」がすでに動作するはずですが、デバイス名を指定するのではなく、もうちょっと直感的にやりたいです。

ということで、定形アクションの「エイリアス」を使いましょう。エイリアスは、定形アクションのトリガーとなるフレーズを、別のフレーズに置き換えてアレクサに実行させる機能だと思えばよいです。

今回の場合、まずON AIRライトをオンにする場合、

  • 実行条件:「音声」を選択して、開始フレーズを「アレクサ、ミーティング開始」と設定
  • アクション:「カスタム」を選択して、Alexaに対して言うフレーズを「会議ライトをつけて」と設定

というふうに設定しました。

f:id:kun432:20210622014022p:plain

同様にして、ミーティング終了時は逆に消すアクションを作成すればよいです。

これで、「アレクサ、ミーティング開始」「アレクサ、ミーティング終了」でON AIRライトが付いたり消えたりするようになります。以下がデモです。

おまけ:SwitchBot API経由でON・OFFする

上の方でお伝えしたとおり、SwitchBotはAPI経由でも操作が可能です。以下の記事がかんたんにまとまっていますね。

curlで試しにやってみました。取得したトークンが見えるとあれなので、以下の例では環境変数(SBTOKEN)で事前に指定してます。

$ SB_TOKEN="XXXXXX......XXXXXXX"

機器の一覧を取得します。登録されているSwitchBotデバイスが全部表示されます。対象となる機器のdeviceIdを探します。

$ curl -H "Authorization: $SBTOKEN" -H 'Content-Type: application/json; charset=utf8' 'https://api.switch-bot.com/v1.0/devices' | jq .
{
  "statusCode": 100,
  "body": {
    "deviceList": [
      {
        "deviceId": "XXXXXXXXXXXX",
        "deviceName": "会議ライト",
        "deviceType": "Plug",
        "enableCloudService": true,
        "hubDeviceId": "000000000000"
      },
(snip)
    ],
  },
  "message": "success"
}

次にこれを制御します。デバイスごとにコマンドが異なります。スマートプラグの場合は、turnOnturnOffで制御できます。

ONの場合。

{
 "command": "turnOff",
  "parameter": "default",
  "commandType": "command"
}'

OFFの場合。

{
 "command": "turnOff",
  "parameter": "default",
  "commandType": "command"
}'

デバイスID(XXXXXXXXの箇所)を指定して、上記のJSONをPOSTしてやれば、ON・OFFが切り替わります。

$ curl -X POST -H "Authorization: $SBTOKEN" -H 'Content-Type: application/json; charset=utf8' 'https://api.switch-bot.com/v1.0/devices/XXXXXXXX/commands' -d '{ "command": "turnOn", "parameter": "default", "commandType": "command" }' | jq .
{
  "statusCode":100,
  "body":{},
  "message":"success"
}

これをうまく使って、リモート会議の参加時・退出時をフックできれば、もっとシームレスにできるかもしれませんね。

APIの詳細はドキュメントをご覧ください。

まとめ

めちゃめちゃしょうもないネタでしたが、声でいろんなものを動かすのは楽しいですよ、是非トライしてみてください。