RaspberryPi
AmazonDashButton

AmazonDashボタンを押したらGoogleHomeが定型文を話す仕組み


背景

前回インターホンセンサーを作った際、GoogleHomeにお話ししてもらうことができたので、以前買って部屋に大量に積まれている「Amazonダッシュボタン」を活用してみようと思いたった

具体的には、ボタンを押したらあらかじめ設定しておいたセリフをGoogleHomeに喋ってもらう

想定する使い方としては


  • 台所にいるお母さんがご飯ができたときに家族を招集する

    「ご飯できたよー早くおいでー」

  • 介護が必要な時に家族を呼ぶ

    「部屋に来てください」

  • 朝起きられない息子を目覚まし以外で起こす

    「起きてー遅刻するよー」

など

セリフ毎にAmazonダッシュボタンが必要になる点に注意


構成



  • AmazonDashボタン(銘柄はなんでもいい)

  • RaspberryPi(LANにつながる状態)

  • GoogleHome(設定が終わってる状態)


作り方

偉大な先人たちが既に多くの記事を公開しているため、それらを参考にする


1.AmazonDashボタン

ボタンの設定については以下の記事

Amazon Dash ButtonをPythonでハックする(「Amazon Dash Button設定」の箇所)

数分で終わるはず


2.RaspberryPi


GoogleHomeをおしゃべりさせるやつ

これは前回の記事に記載したsay.jsをそのまま使用した

おしゃべりさせる内容を引数で渡すものとなっているので、呼び出し元で変更する


AmazonDashボタンを検知するやつ

これについては、AmazonDashボタンが日本でリリースされた当初、多くの偉大な先人たちが記事を書かれており、中でも以下の記事がわかりやすかった

Amazon Dash Buttonを(正しくない方向で)使ってみた

nodeとnpmの導入が必要だが、手順は特段記載しない(一般的なので)

また、先日上記手順を再実行したところエラーが発生した

エラーログを確認しつつ、以下をインストールしたところ正常動作することが確認できた

sudo apt-get install libffi-dev

環境と実施時期によって異なるようなので、エラーが出たら都度ログを見て対応することになりそう

ソースは以下のようになった


gohan

#!/usr/local/bin/node


const DashButton = require("dash-button");

const PHY_ADDR = "xx:xx:xx:xx:xx:xx";
let button = new DashButton(PHY_ADDR);
console.log("Stand by...");

button.addListener(() => {
const execSync = require('child_process').execSync;
execSync('node /home/pi/googlehome/say.js ご飯できたよー');
});


なお、PHY_ADDRは、上の参考リンク内に記載があるDashボタンのMACアドレス取得の箇所を参考に、事前に取得した自身のDashボタンのMACアドレスを入れる

package.jsonにscanを追記するのを忘れがちなので注意が必要

また、複数のDashボタンを使用する場合は、ここのソースをうまいことして使い分けることができるはず

加えて、常時実行するためにforeverを導入、RaspberryPiを再起動した際に自動で起動するためのshellを作成してcrontabで自動起動するようにした


foreverインストール

npm install -g forever



run

#! /bin/sh

export PATH=$PATH:/usr/local/bin/node:node_modules/.bin

cd /home/pi/dash
sudo forever start ./gohan



crontab

@reboot sudo /home/pi/dash/run > /home/pi/dash/cronlog.log 2>&1



所感

AmazonDashボタンが日本に登場して結構経つので今更感があるが、GoogleHomeをRaspberryPiからおしゃべりさせることができることを最近知ったのでどうしても作って見たかった

我が家では使い方が限定的であまり活用できていないが、自分がニートの引きこもりだったり、体が不自由だったり、また職種によっては活用できるシーンがありそうな気がする

一点注意しなければならないのは、ボタンを押してからおしゃべりするまでのタイムラグが数秒(最大10秒程度)あるため、リアルタイムでおしゃべりさせたい用途には向かない

そういった用途には有線のやつ(RaspberryPiを使ってチャイム(呼び鈴)を作る)を活用するべきであろうと思います!