読者です 読者をやめる 読者になる 読者になる

おかゆ日和

情報系学生の日常的なこと

Amazon Dash ButtonをIFTTT連携するために私がやったこと

www.okayu.blog

注文しておいたAmazon Dash Button(以下ボタン)が届きました。

ネスカフェ Dash Button

ネスカフェ Dash Button

本来の用途で活用するのもいいですが、今回はIoT的なサムシングとしてIFTTT連携を行いました。

必要なもの(私が使ったもの)

スマートフォン

ボタンのWi-Fi設定はスマートフォンからAmazonアプリを使用して行います。 そのため、Amazonアプリがインストールされたスマートフォンが必要です。

Amazon.co.jp ヘルプ: Amazonショッピングアプリをダウンロードする

Raspberry Pi

ボタンが押されたことを検知する装置として今回はRaspberry Piを使用しました。 ボタンからのパケットを受け取るために、ボタンと同じネットワークに属している必要があります。 今回はWi-FiルータとRaspberry Pi間はEthernetで接続しています。

ボタン

当然ながらボタンが必要です。

https://www.amazon.co.jp/b/?ie=UTF8&node=4752863051www.amazon.co.jp

ボタンの設定

めっちゃ簡単なのでスクリーンショットを並べておきます。
設定を途中で中断するところに注意です。

f:id:okayu_k:20161211020401p:plain:h400

f:id:okayu_k:20161211020415p:plain:h400

f:id:okayu_k:20161211020427p:plain:h400

f:id:okayu_k:20161211020437p:plain:h400

f:id:okayu_k:20161211020447p:plain:h400

f:id:okayu_k:20161211020500p:plain:h400

f:id:okayu_k:20161211020509p:plain:h400

↑ここで商品を選択せずにキャンセルする。

f:id:okayu_k:20161211020519p:plain:h400

↑セットアップを終了

f:id:okayu_k:20161211020529p:plain:h400

f:id:okayu_k:20161211020539p:plain:h400

f:id:okayu_k:20161211020553p:plain:h400

f:id:okayu_k:20161211020603p:plain:h400

↑これをしないと、押すたびにスマホに通知が行きます。

IFTTTの設定

この記事を見ている人でIFTTTを知らない人はいないはずなので(ということにします)、 これまた同じくスクリーンショットを並べておきます。

f:id:okayu_k:20161211021251p:plain:w350

f:id:okayu_k:20161211021258p:plain:w350

f:id:okayu_k:20161211021304p:plain:w350

f:id:okayu_k:20161211021309p:plain:w350

↑ここでevent nameを設定します。どんな名前でもいいですが、あとで設定するのでメモっておきます。

f:id:okayu_k:20161211021314p:plain:w350

f:id:okayu_k:20161211021319p:plain:w350

↑that の部分は自分で適当に設定してください。

f:id:okayu_k:20161211021324p:plain:w350

f:id:okayu_k:20161211021329p:plain:w350

↑赤下線部はkeyです。後で使用するのでメモっておきます。

Raspberry Piの設定

今回使用するRaspberry Piは、Raspbianインストール直後のRaspberry Pi 2です。 ですが、きっとOSや世代、そもそもRaspberry Piでなくても、いい感じに読み替えればきっと動きます。

今回はGithubに公開されているDasherを使用しました。

GitHub - maddox/dasher: A simple way to bridge your Amazon Dash buttons to HTTP services

sudo apt-get install libpcap-dev # パケット解析のためにlibpcapをインストール
sudo apt-get install npm # Dasher実行のためのnpmをインストール
sudo npm install -g n # Node.jsのバージョンを管理するためのnをインストール
sudo n latest # Node.jsを最新版にする
sudo npm update -g # npmパッケージのアップデート
git clone https://github.com/maddox/dasher.git # Dasherをクローン
cd dasher # dasherに移動
sudo npm install # Dasherの動作に必要なnpmパッケージのインストール

ボタンのMACアドレスを確認

ボタン押下の検出はボタン押下時に送出されるARPパケットによって行われますが、そのためにはボタンのMACアドレスをあらかじめ知っておく必要があります。 find_buttonというスクリプトを実行することで確認することができます。当然ながら、確認の際は、ボタンを押す必要があります。

./script/find_button # ボタンのMACアドレスを確認

以下が私の環境での実行結果の一部です。(MACアドレスの一部をxxで伏字にしています。)

pi@raspberrypi:~/dasher $ ./script/find_button
Watching for arp & udp requests on your local network, please try to press your dash now
Dash buttons should appear as manufactured by 'Amazon Technologies Inc.'
Possible dash hardware address detected: 34:d2:70:xx:xx:xx Manufacturer: unknown Protocol: udp
Possible dash hardware address detected: 88:57:ee:xx:xx:xx Manufacturer: BUFFALO .INC Protocol: udp
Possible dash hardware address detected: 34:d2:70:xx:xx:xx Manufacturer: unknown Protocol: udp
Possible dash hardware address detected: 88:57:ee:xx:xx:xx Manufacturer: BUFFALO .INC Protocol: udp
Possible dash hardware address detected: 34:d2:70:xx:xx:xx Manufacturer: unknown Protocol: udp
Possible dash hardware address detected: 88:57:ee:xx:xx:xx Manufacturer: BUFFALO .INC Protocol: udp

このスクリプトは、流れてくるARPパケットまたはUDPパケットのMACアドレスを垂れ流すだけのものです。 実行結果は環境によって異なりますが、上の例ですと、88:57:ee:xx:xx:xxはBUFFALOとあるように、おそらくルータです。 ではそれ以外の34:d2:70:xx:xx:xxというMACアドレスが怪しそうなので、下記サイト等で確認してみましょう。 mac.uic.jp

以下が上のMACアドレスの検索結果です。

f:id:okayu_k:20161211022832p:plain:w350

Amazonとあるので、他にAmazon製品をWi-Fiに接続していない限りはこれで間違いないですね。 ボタンのMACアドレスが見つかったので、これもメモしておきましょう。

設定ファイルの作成

どのMACアドレスのボタンが押されたときにどのような動作をするかを設定ファイルに記述します。 エディタは何でもいいので、とりあえず設定ファイルを作ります。

vi config/config.json # 設定ファイルを編集

ここで設定ファイルの書き方を説明するのも面倒なので、私の設定ファイルを晒します。ただ、MACアドレスとkey部分は修正する必要があります。 以下の設定ファイルはevent nameが"adb_pressed"、keyが"hogefugapiyo1024"、MACアドレスが"34:d2:70:de:ca:de"の場合のものです。

{"buttons":[
  {
    "name": "adb_pressed",
    "address": "34:d2:70:de:ca:de",
    "url": "https://maker.ifttt.com/trigger/adb_pressed/with/key/hogefugapiyo1024",
    "method": "POST"
  }
]}

色々細かい設定がしたい人は以下のexampleを参考にすればいいと思います。

dasher/config.example.json at master · maddox/dasher · GitHub

起動

では実際に起動させます。

sudo npm run start # Dasherを実行

以下が私の環境での出力結果です。

> dasher@1.1.1 start /home/pi/dasher
> node app.js

[2016-12-10T17:48:49.189Z] adb_pressed added.
[2016-12-10T17:48:53.110Z] adb_pressed pressed.

ボタンを押すたびに1行ずつ増えていれば成功です。IFTTTで設定した動作が行われているかも確認してください。

f:id:okayu_k:20161211025107p:plain

おわりに

少々大変だったかもしれませんが、なんとかIFTTT連携できました。
IFTTTの連携範囲はめっちゃ広いので、正直持て余してる感があります。
アイデア次第ですごい便利な使い方ができる商品でしょう。

ただ現状ですと、ボタンの通知をオフにしてしまっているので、本来の用途でも使用する場合に不便になります。 また、ボタンを押すたびにAmazonのサーバにデータが送られているので、かなり申し訳ない感じです。 そのため、何らかの方法でAmazonサーバへのデータ送信を行わないようにした方がいい気がします。

Raspberry PiにSSH接続できなくなった話

SDカードにRaspbianをインストールしなおした時、SSH接続が出来なくなった話です。

私の場合、こんな感じでした。

  1. Raspbianを書き込んだSDカードを差し込む
  2. Raspberry Piを起動する
  3. LANコネクタ部分がチカチカ光りだす
  4. " ping raspberrypi.local "するとちゃんと応答がある
  5. SSHしようとするも拒否されてできない

そこでRaspbianのリリースノートを読むとこんな記述がありました。

2016-11-25:
* SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition
* Prompt for password change at boot when SSH enabled with default password unchanged

思いっきり「SSH disabled by default」とありました。つまり、デフォルトだとSSHは無効ってことです。
で、どうすればいいかというと、「can be enabled by creating a file with name "ssh" in boot partition」とあるとおり、bootパーティションに"ssh"という名前のファイルを作るとSSHが有効になるようです。

f:id:okayu_k:20161208123113p:plain

これでめでたしです。