4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazon Dash ButtonからGoogle Assistantにリクエストを送ってみた (ぴよログ連携)

Last updated at Posted at 2020-06-19

はじめに

3周遅れの位のネタですが、Amazon Dash Buttonを押すと、Google Assistantにリクエストが送れるサービスをラズパイに作りました。モチベーションは、

です。うんこボタンの再発明に近いですが、育児記録でなくてもGoogle Assistantのリクエストであれば何にでも使えます。TVの電源ON/OFF、とかでも。

デモ システム概要
demo_jp.gif dash-assistant.png

作ったサービスはeholic/dash-assistantにあります。

用意したもの

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
IMG_20200618_080612.jpg

また、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で育児記録することができるようになりました!

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?