はじめに
3周遅れの位のネタですが、Amazon Dash Buttonを押すと、Google Assistantにリクエストが送れるサービスをラズパイに作りました。モチベーションは、
- 育児記録アプリ-ぴよログの記録をもっと簡単に
- お蔵入りしていたガジェットの活用したい
です。うんこボタンの再発明に近いですが、育児記録でなくてもGoogle Assistantのリクエストであれば何にでも使えます。TVの電源ON/OFF、とかでも。
デモ | システム概要 |
---|---|
作ったサービスはeholic/dash-assistantにあります。
用意したもの
- (お蔵入りしていた) Amazon Dash Button
- (お蔵入りしていた) Raspberry Pi 3 Model B (Buster)
- Googleアシスタント連携済みぴよログ
Amazon Dash Buttonはすでにサービス終了していますが、AWS IoT Buttonで代替できるとは思います。
事前準備
Pythonの仮想環境
python3 -m venv env
env/bin/python -m pip install --upgrade pip setuptools wheel
source env/bin/activate
Google Assistantのセットアップ
Configure a Developer Project and Account SettingsにしたがってDevice Credentialsをラズパイに作成します。作業手順は以下の通りですが、ほぼドキュメント通りです。
1. Actions Consoleにプロジェクトを作成
2. Device registrationでCredentialsをダウンロード
3. Google APIsでGoogle Assistant APIを有効化
4. ラズパイに認証用ライブラリをインストール (参考)
(env) pip install --upgrade google-auth-oauthlib[tool]
5. 2でダウンロードしたCredentialsファイルからDevice Credentialsを作成
(env) google-oauthlib-tool --client-secrets path/to/client_secret_<client-id>.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
# 指定されたURLを開くと表示されるauthorization codeを入力
以上の手順で~/.config/google-oauthlib-tool/credentials.json
が作成されます。
テスト
Google Assistantのセットアップが問題なく出来ているかテストします。(しなくてもいいです。)
# サンプルコードをダウンロード
(env) pip install --upgrade google-assistant-sdk[samples]
(env) cd env/lib/python3.7/site-packages/googlesamples/assistant/grpc
# Google Assistant実行
(env) python -m textinput --device-id "'$(uuid)'" --device-model-id 'Actions Consoleで作成したプロジェクトのModel Id'
INFO:root:Connecting to embeddedassistant.googleapis.com
: hello
<you> hello
<@assistant> Hi
What can I do for you? 😀
: ぴよログに寝たことの記録を頼みたい
<you> ぴよログに寝たことの記録を頼みたい
<@assistant> 19:40に「寝る」を記録しました
:
# 成功!
ここまでで、ラズパイからGoogle Assistantにリクエストを送信し、ぴよログに記録するところまでが実現できました。次はAmazon Dash Buttonのクリックイベントを掴みます。
Amazon Dash Buttonのセットアップ
Nekmo/amazon-dashを使います。
(env) sudo apt install tcpdump
(env) pip install amazon-dash
Dash ButtonのWiFiが未設定の場合
Dash Buttonは最初にWiFi設定をする必要がありますが、すでにAmazonのサービスが終了しているため、AmazonアプリでのWiFi設定ができません。ただ、Nekmo/amazon-dashという延命プロジェクトがあり、Hack your deviceでWiFiに接続できます。
ラズパイにイヤホンつけるのが手間だったので、macOSで実行しましたが、以下ライブラリが必要でした。
brew install portaudio iproute2mac
(env) pip install pyaudio
(env) sudo env/bin/amazon-dash hack
また、amazon-dash configureがうまくいかずこちらのスクリプトを使いましたが、この記述にある通り、以下の修正が必要でした。
- r.content
+ r.content.decode('utf-8')
Amazonサーバとの通信をブロック
必須かどうか分かりませんが、Dash ButtonがAmazonのサーバと通信しないようにルータのブロックリストにAmazonのサーバを追加しておきます。
こちらを参照
Dash ButtonのMACアドレスを取得
# 通信を取得するためにはsudo権限が必要
(env) sudo env/bin/amazon-dash discovery
Welcome to Amazon-dash v1.4.0 using Python 3.7.3
December 31 is the last day to block requests from your Amazon-dash buttons to Amazon servers. In 2020 your buttons can be bricked in an update from Amazon servers.
The discovery command lists the devices that are connected in your network. Each device will only be listed once. After executing this command wait approximately 10 seconds before pressing the Amazon Dash button. After pressing the button, the Mac address of the button will immediately appear on the screen. Remember the address to be able to create the configuration file.
# ここでDash ButtonをクリックするとMACアドレスが取得できる
12:34:56:78:9a:bc (Amazon Device)
ここまででDash ButtonのMACアドレスを取得することができました。
Dash ButtonとGoogle Assistantの連携
eholic/dash-assistantを作りました。cloneして実行してみてください。
(env) git clone https://github.com/eholic/dash-assistant.git
(env) cd dash-assistant
(env) pip install -r requirements.txt
(env) vi dashes.yml # DashのMACとGoogle Assistantの対応付けをする
(env) export DEVICE_MODEL_ID='Actions Consoleで作成したプロジェクトのModel Id'
(env) sudo -E path/to/env/bin/python main.py
Ready to press Amazon Dash Button
2020-06-17 21:32:02,384 - root - INFO - 11:11:11:11:11:11 is pressed.
2020-06-17 21:32:02,391 - root - INFO - ぴよログにおしっこの記録を頼みたい
2020-06-17 21:32:05,806 - root - INFO - 21:30に「おしっこ」を記録しました
2020-06-17 21:32:12,209 - root - INFO - 22:22:22:22:22:22 is pressed.
2020-06-17 21:32:12,210 - root - INFO - ぴよログに寝たことの記録を頼みたい
2020-06-17 21:32:15,686 - root - INFO - 21:30に「寝る」を記録しました
2020-06-17 21:32:15,686 - root - INFO - 33:33:33:33:33:33 is pressed.
2020-06-17 21:32:15,687 - root - INFO - ぴよログにうんちの記録を頼みたい
2020-06-17 21:32:18,218 - root - INFO - 21:30に「うんち」を記録しました
以上で、Dash Buttonで育児記録することができるようになりました!