もじゃぶろぐ

記事を書いたり書かなかったりします。

amazon dash buttonで家の鍵を閉めたかどうかわかるボタンをつくった

ご無沙汰しております。

応用情報技術者試験まであと6日となりました。違うことが捗る毎日です。

家の鍵閉めたっけ

ほぼ毎朝、自宅の鍵を閉めて出てきたか思い出せずに一度家まで帰るという認知症っぽいことをしています。
今まで一度も実際に鍵を閉め忘れてたことはないのですが、どうにもルーチンでやっていることは意識に残りません。

流石に家まで帰ってくるのもタイムロスが馬鹿馬鹿しいのでなにか可視化できる方法はないものかと考えました。

amazon dash button

サービスが開始したときに何も考えずに注文したものが余っています。
dashb buttonを介さなくても無条件に次回の注文から500円割引が入ったのでマジでタダでした。(今は修正されたっぽい?)

GARP

amazon dash buttonは、注文を送信する前にDHCPから自身に振られたIPアドレスが重複していないかの確認でGARPパケットを送出します。
また、どの商品を登録しておくかの設定を最後まで行わずに中断することでこのGARPだけで終了させることができます。

これに気づいた わるいえんじにあ の皆様がGARPに反応して発火する"ただのIoTボタン"として使えるように色々開発しているようです。

鍵閉めたbuttonの作成

単純にGARPのパケットが取れればいいので適当に簡易パケットキャプチャを作っても良いのですが、流石に試験前にガッツリ遊んでるわけにはいかないので既存のライブラリを利用しました。

dash-button

特に理由はありませんが今回はnodejsで実装しています。
ボタンの押下に反応してDiscordへwebhookでメッセージを送信することで鍵を閉めたかのログを取ります。
postする部分にはrequestを使っています。

request

パケットを取りこぼす

今回の実装に当たって躓いた点です。
しばらく感覚を開ければ反応してくれるのですが、どうしても頻繁にパケットを取りこぼします...
他の言語やライブラリで実装してみたり、PacketFuを使ってみたりもしたのですが解決しませんでした。

どうやら、バッファロー製のルーターが持っている”snooping機能”が悪かったようです。

f:id:s10akir:20180409010625p:plain

説明が書いてありました。

f:id:s10akir:20180409010648p:plain

こいつを無効にしたことで無事、取りこぼすことがなく反応するようになりました。めでたし。

あとはこのボタンを玄関のドアに貼り付けるだけです。

感想

amazon dash buttonをIoTボタンとして使おうと思うと、

  • 特定のLAN内でのみ有効(Wi-Fi必須)
  • ブロードキャストを監視するサーバー機が必要

という課題がありますが、この点さえハマれば手軽で安いIoTボタンが手に入ってとてもおもしろいです。
やや出遅れたおかげでライブラリは豊富ですし、そもそも対して難しいことはしていないので敷居も低いですし。 今時の家庭ではWi-Fi環境はあるしRaspberryPiやPINE64の登場で自宅サーバの難易度も下がっているしで、あとはシチュエーションさえ合えばいい感じですね。

朝起きたらTwitterに「ぽきた!」ってつぶやく用のボタン発注しなければ。