Blend day's Note

思い立ったことをメモする

Amazon Dash Button でBotを動かす話&損した話

この記事は Kogakuin Univ Advent Calendar 2018 の12日目の記事です。
遅刻したとか言わないの…

はじめに

最近は、ブログがAdventCalendarの時期しか動いてない気がしますが、私は元気です。
本当はもっと書きたかったなぁ…(詳細は最後でちびっと)

さて今回は、Amazon Dash Buttonを(実費で)買い込み、会社で使うまでのお話をします。
情報が案外古かったりしてハマったり嵌らなかったりしたのでまとめておきます。

ことの始まり

これは、ある秋口のお話。休日に組み上げた業務効率化のためにGoogle Apps Script で作ったツールを使っていた時のことです。
基本的には定期的に実行するためのものでしたが、再実行することがしばしばあったので、
簡易実行用の仮想ボタンを用意していました。 *1

しかし、ある日こんな声が。
「わざわざスプレッドシート開いてボタン押すのがめんどくさい。物理ボタンがほしい。」*2

・・・。

物理ボタンといえば、Amazon の IoTボタンが真っ先に思い浮かびました。

http://amzn.asia/d/3jHPPDW

しかしながら高い
そしてボタンを押したときのアクションが割と絞られれている印象を受けました。

AWS IoT ボタン (プログラミング可能な Dash Button) | AWS

今回実行させたいのはGAS。そしてセキュリティは安全のために硬い。
誤爆しても安心!自分は嫌いじゃないです…)

いろいろと調べている*3うちに、
どうやら Amazon Dash Button と ラズパイがあればなんとかなりそうだ。ということに気づきました。

果たして、物理ボタンは扱えるのでしょうか?

まあ、完成品をみたほうが面白いと思うので、
早速どうやって実装したのかをご紹介。

f:id:kayo_tozaki:20181216142506j:plain
完成品。テプラ貼っています。
↑完成品です。テプラを貼って何が動くのかを判別しています。
ラベルを作る元気は残っていなかったです… *4

必要なもの

Amazon Dash Button (お好きな柄) www.amazon.co.jp

Amazon アプリ(スマホ)
これがないとDash Buttonがセットアップできない

・ RaspberryPi とそのほか必要なもの (b+ 以上で動作することを確認。なんでもいいと思います。)
 ・ OS : Raspberrian (扱いやすいものでおk)
 ・ ネットワーク接続 :: 同じLAN内においてあげてください

単純にラズパイを用意すればOKです。

・IFTTTのアカウント

ifttt.com

今回、スプレッドシートへのアクセスにIFTTTを利用します。
セキュリティの部分を飛び越え、かつ楽にアクセスができるのが採用の理由です。 むしろ、こいつがいなかったらこの計画はお流れでした…

その他、お時間などご用意いただけると。。。。

構成

よくあるありふれた感じですが、下の図のように流れます。
それ以上でもそれ以下でもないので、この図で理解できる方はがんばりましょうw

f:id:kayo_tozaki:20181216105829p:plain
構成図

よくあるシンプル構造です。
Dash Button が通信するためにMACアドレスを送信(サーブ)しており、
それをラズパイに仕込んだ amazon-dash がレシーブ
仕込んであったスクリプトがIFTTTへトスを流し、
最後はIFTTTがスプレッドシートに対してアタック

という(バレーみたいな)形式になっています。

それぞれの組み方と軽い解説を以下紹介。

Amazon Dash Buttonの設定

次のラズパイと絡みがありますが、下記サイトのとおりに設定しています。

qiita.com

ポイントは、「セットアップを途中でキャンセル」です。
この途中中断をすると、購入アカウントに対して糞メールが毎回届くので、
それはよしなにさばいてください。

f:id:kayo_tozaki:20181216110218p:plain
押すたび届く。誰も買いません。(断固たる意思

Raspberry Pi 設定

上記のQiita記事を参考にセットアップできます。非常に楽ちん。

qiita.com

なにか引っかかるポイントがあった気がしましたが、そこはGoogle先生に聞けば解決できました。

注意!

平成最後の注意ポイント!

同じくラズパイでDash Buttonを使うときに、 dasher というツールを使うように記載のあるサイトが多くあります。

github.com

これ、現在はサポートしていないとのこと。
自分はインストールすらできませんでした*5
ちゃんとGithubのREADMEは読んでからインストールしましょうね(自戒)

複数のDash Button を登録したい

amazon-dashの設定ファイルは yaml 形式なので、インデントさえ気をつければ追加し放題です。 コメントアウトにも追加の方法がありますが、下記のように追記が可能です。

# amazon-dash.yml
# ---------------
settings:
  delay: 10
devices:
  [[button①のMACアドレス]]:
    name: <button1-action>
    user: pi
    cmd: </home/pi/button1-action.sh>
    cwd: /home/pi

settings:
  delay: 10
devices:
  [[button②のMACアドレス]]:
    name: <button2-action>
    user: pi
    cmd: </home/pi/button2-action.sh>
    cwd: /home/pi

それぞれのボタンで別々のスクリプトが実行可能ですので、
夢が広がりんぐです。

自分の場合は3つのDash Buttonに対して、
それぞれ別のスクリプトを実行するように仕込んでいます。

スクリプト 設定

自分は下記IFTTTのWebHookURLに対して、
時刻を送付するスクリプトを仕込みました。

curl -X POST -d "value1=`date +\"%Y%m%d%H%M%S\"` " https://maker.ifttt.com/trigger/{event}/with/key/<鍵>

確かこんな感じ…

IFTTT 設定

大体このサイトのとおりです。ただし、今回のThenはLINEでなくスプレッドシートですが

amg-solution.jp

webhook 設定

自分はここで迷子になりました。

下記サイトにアクセスすると、IFTTT で利用する WebHook のページに飛びます。

ifttt.com

で、ここの Document をクリックすると、
必要な鍵情報などが表示されます。欲しい情報はここにあります。

Google sheet (スプレッドシート) 設定

Webhook × スプレッドシート連携はこちらがわかりやすかったです。 (IFTTTの使い方は上の方がわかりやすかった印象…)

titirobo-develop.hatenablog.jp

更新するセルの値はよしなに変更します。

スプレッドシート トリガー設定

最近、GASのトリガー画面が変更されて非常にわかりにくいです…

「編集」→「現在のプロジェクトのトリガー」で
トリガー画面を表示させます。

f:id:kayo_tozaki:20181216133422p:plain
トリガー画面表示

トリガー設定は、右下から始められます。
右下の「+トリガーを追加」を押すと、下の画像のような設定画面が出てきます。

重要なのは、「イベントの種類を選択」で、今回は”変更時”に変更します。
"編集時"でも問題は無いと思いますが、変なタイミングでトリガーが発動する可能性があります。

f:id:kayo_tozaki:20181216134527p:plain
画像は編集時設定。

トリガーに関しての詳細はこちらが詳しいです。

madachugakusei.hatenablog.com

その他の設定値は適宜変更してください。(特に関数名。)

スクリプト実行

今回は予め用意してあったスクリプトを実行するように仕込みました。
中身に関しては今回は省略。機会があればご紹介します。
(そう言って訪れた機会はない模様。)

まとめ

今回ハマったポイントは3つ。

  • セキュリティ的にスプレッドシートへ直接語りかけられない
    • → IFTTTを経由して語りかけると楽。
  • RaspberryPiで利用する dasher が利用できない
    • amazon-dash が推奨されているので利用しましょう。(pip でインストール可能)
  • IFTTT の WebHookで利用するURLとか鍵の情報が行方不明
    • Document に記載あり。Configure では無いことに注意。

それ以外は組み合わせです。最近は組み合わせでいろいろとできるので非常に良い世の中だと…
しかも凡人が考える組み合わせは基本先人がいらっしゃるという…ありがたやー。

そんなわけで、Dash Button を使ってBotを動かす環境を準備しました。
今回はここまで。

後日談。

で、終わらせられないのです…

実は大損していたことを、これらを作ったあとに気づきました。
しかも3個分…

【実質無料】

Amazonの商品紹介ページにすごい文言が。

f:id:kayo_tozaki:20181216135622p:plain
実質無料

そうです。ボタン経由で注文すれば初回に500円引かれ、 Dash Buttonが実質無料になるのです。

知らずに非正規な使い方しか考えていなかった私は、損をしております。しかも3つ分。
皆様は最初にポチってから、改造を考えることをおすすめします。
(未検証ですが。。。。)

オチがついたところで、今回はここまで。
それではまた。


おまけ。関係ない話(for Advent Calendar)

以下、Advent Calendar と私に関しての話を少し。

まずは、Advent Calendar。

今年で4年連続の参加となりまして。古参連中の1人になってしまいまいした。
しかも前後が古参共というオプション付き。しゅごい。

知らない方々も増えてきて、なんとか文化として根付いてきたのかなと。
やってきた側からすると嬉しい限りです。
また来年以降も機会があれば参加させていただきます。またネタ作らないと…!

次は近況。

ブログが完全にアドカレ向けになってしまい、申し訳ない気持ちでいっぱいです。。。
ブログのネタとなることとしては、いろいろとやってきましたが、ブログにするまででもなかったりできなかったりと…
以下、今年やってきてブログにできたなぁ…というお話です。

  • growi with docker に codimd 仕込むのにハマった話
  • ラズパイを喋れるようにしたら放送禁止用語が飛び交ってしまった話
  • ラズパイで大切なことを喋らせたら全社展開する展開になった話と顛末のお話
  • alexaのリマインダーAPIが公開される前から能動的にリマインドしてもらった話
  • MBA 2013mid を現役で使い続ける話
  • paypay を使ってきた話
  • PC組み替えた話
  • 自宅サーバからクラウド化をしていった話
  • 録画サーバからエラー。その時の私達の行動をまとめた話
  • etcetc...

来年はもう少し書ければと思います。

まあ、早くも人生の転換点チャンスが到来しそうな予感がしており、
今年も然ることながら、来年も(別の意味で)激動の一年になりそうだなと。
少なからず、今年ほど伸び伸びとはやらせてはいただけなさそうなので、
ひっそりと、息を殺して日々過ごしていければと思う年末でございます。

久々に書くと沢山出てきますがこれぐらいにしておきます。
それではまたの機会に。

*1:コード自体がGoogle Apps Scriptにあるため、ボタンはスプレッドシートに用意。仮想Dash Button。

*2: しかも発言一発目は不在時に言われる始末。改善要望は直接お願いします。。。。(その後直接お話してくれました)

*3:途中経過は省略。興味ある人は言ってください

*4:近々停止予定ありのため、そこまで手が回らなくなりましたw

*5:できなかったのは、ただの無知ですが…