Raspberry Pi + Amazon Dash Button + Lineで呼び出しボタンを作る
Amazon Dash Buttonで通知ボタンをつくりたい
先日、Amazon Dash Buttonが1個 100円という破格の値段で売られていたので、5個購入しました。
2つは既に使用中。
作ろうと思った経緯
いつかはIoT入門の意味も含めて、Amazon Dash Buttonをハックしたいと考えていました。
また、私には祖母がいるのですが、なにかあったときの呼び出し用のボタンを作成したいと思いました。
しかし、携帯電話も持たないITと無縁な祖母に気軽に使ってもらえるようなガジェットが今までなかった(探してない)ので諦めていました。
Amazon Dash Buttonの登場とエンジニア界隈でのハックが盛り上がっているのを知り、作ろうと決意しました。
前置きは以上として今回はRaspberry Pi + Node.js + Line + Amazon Dash Buttonを使って、通知ボタンを作ります。
こちらの記事を参考にさせていただきました。
【Raspberry Pi】Amazon Dash Buttonを押すとLineにメッセージ投稿する方法 - CGメソッド
ボタンをハックしていく
Amazon Dash Buttonの設定
Amazon Dash Buttonの初期設定を行います。 Amazonのスマホアプリをダウンロードします。
- メニュー -> アカウントサービス -> Dash端末 新しい端末をセットアップ
- セットアップのガイドに沿って設定する
- 商品選択画面で商品を選択せずに終了する
Raspberry Piの設定
必要なパッケージのインストール
とりあえず、アップデートをしましょう
sudo apt-get update sudo apt-get upgrade
必要なパッケージをインストールします
sudo apt-get install libpcap-dev //npmとgit、nodeのインストール sudo apt-get install npm git sudo apt-get install node // arm用のnodeにアップデートする wget http://node-arm.herokuapp.com/node_latest_armhf.deb sudo dpkg -i node_latest_armhf.deb
Dasherのインストール
DasherというAmazon Dash Buttonを制御することができるNodejs用モジュールを使用します。
git clone https://github.com/maddox/dasher.git cd dasher npm install // うまくいかない場合はsudoをつけてnpm installを行ってみてください
Dash ButtonのMACアドレスを検索する
dasherディレクトリの中にscript/find_buttonというスクリプトがあるのでそちらを使ってLan内からDash Buttonを見つけます。
//dasherディレクトリにいることを確認 pwd /home/pi/dasher //スクリプトの実行 ./script/find_button ~ ~ ~
スクリプトを実行し、Amazon Dash Buttonを押すと 「Amazon Technologies Inc.」か「Unknown Protocol: udp または arp」という文字が出てきます。そのMACアドレスを控えておきましょう。
IFTTTの設定
IFTTTでレシピを作成する
My Applets > New Appletで新しいレシピを作りましょう
トリガー(引き金)となるThisの部分には「Webhooks」を選択します。 Event Nameは任意で適当に名前をつけましょう。
Thatの部分には、Lineを選択します。
「Send message」を選択後、メッセージを送信するグループや文言を決めていきます。
今回はRecipitantは「1:1でLine Notifyから通知を受け取る」
Messageは「ばあちゃんが呼んでいます」としました。
入力が終わったら、「Create action」で作成します。
API Keyを確認する
イベントを発火させるにはAPI Keyが必要なので確認しましょう。
Do more with Webhooks - IFTTT > SettingsからAccount InfoのURLを確認します。
https://maker.ifttt.com/use/[API Key]
なのでメモを控えておきましょう そして、イベント発火に使うURLは以下になります
https://maker.ifttt.com/trigger/[IFTTTで作成したイベント名]/with/key/[API キー]
ラズパイの設定を書き換える
ラズパイの設定をLine用に書き換えましょう。 dasher/config/config.jsonを無い場合は新たに作成しましょう。 addressには、先程調べたDashButtonのaddress urlには、トリガーのURLを使用します。
{"buttons":[ { "name" : "send_line_message", "address": "XX:XX:XX:XX:XX:XXB", "url": https://maker.ifttt.com/trigger/[IFTTTで作成したイベント名]/with/key/[API キー]", "method": "POST", "json": true, } ]}
上記を入力したら、保存しましょう。
実際に動かす
実際に動かして確認してみましょう。 dasherディレクトリ内で実行します。
cd dasher npm run start
これで動けば成功です。
OS起動時に起動させる
こちらは一番最初に書いた参考サイトにかかれているコードを拝借いたします。
// 起動スクリプトを書きます // debian系のOSは/etc/init.dディレクトリの中に記述するようです。 sudo nano /etc/init.d/dasher
中身はこちら
#!/bin/sh ### BEGIN INIT INFO # Provides: # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO dir="/home/pi/dasher" cmd="DEBUG=* node app.js" user="root" name=`basename $0` pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" get_pid() { cat "$pid_file" } is_running() { [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1 } case "$1" in start) if is_running; then echo "Already started" else echo "Starting $name" cd "$dir" if [ -z "$user" ]; then sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & else sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & fi echo $! > "$pid_file" if ! is_running; then echo "Unable to start, see $stdout_log and $stderr_log" exit 1 fi fi ;; stop) if is_running; then echo -n "Stopping $name.." kill `get_pid` for i in {1..10} do if ! is_running; then break fi echo -n "." sleep 1 done echo if is_running; then echo "Not stopped; may still be shutting down or shutdown may have failed" exit 1 else echo "Stopped" if [ -f "$pid_file" ]; then rm "$pid_file" fi fi else echo "Not running" fi ;; restart) $0 stop if is_running; then echo "Unable to stop, will not attempt to start" exit 1 fi $0 start ;; status) if is_running; then echo "Running" else echo "Stopped" exit 1 fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0
スクリプトの権限を変えてあげます
sudo chmod 755 /etc/init.d/dasher
自動起動のコマンドを入力
sudo update-rc.d dasher defaults
以上でOS起動時にプログラムが起動するそうです。
まとめ
長きに渡って、Raspberry PiにOSインストールからAmazon Dash Buttonを使ったIoTハックをしました。 これからもライフハック✕ITでいろいろやっていきたいと思います。