鯖防人は忘れる。

機械音痴の鯖防人が忘れないように…

OpenWrtとAmazon Dash Buttonでインターホン

こんにちは。機械音痴の鯖防人です。

8か月ぶりの更新です。ごめんなさい。
明日は雲仙に友達と遊びに行く予定です。たのしみ。



それでは本題。
Amazon Dash Buttonでインターホンを作ったので、今日はそのことについて書こうと思います。

はじめに

Amazon Dash Buttonをハックする記事などは結構インターネットの海を漂流しているので、紹介する必要は無いかと思います。
インターホン化する例としては
aokakes.hatenablog.com
こんなウェブページがあります。(孫引きよくない)

研究室にインターホンを「安価」に設置するため、Dash Buttonをインターホン化することにしました。

Dash ButtonをIoTボタンとして使うときに、多くの場合Raspberry Piなどを併用しますが
Raspberry Piを使うとなると1万円弱かかってしまうのではないかと思います。

また、今回Dash Buttonインターホンを研究室ネットワークとは別のネットワークにしたいと考えたため
ルータも必要となります。(Raspberry Piをルータにすることもできなくはないですが)

「ルータ」+「ラズパイの代わり(Dash Button監視機能)」+「無線LANアクセスポイント」
を1つの機器で実現しようといろいろ考えたところ
OpenWrtを使用するというアイデアに到達しました!

OpenWrtの説明ですが

The OpenWrt Project is a Linux operating system targeting embedded devices. Instead of trying to create a single, static firmware, OpenWrt provides a fully writable filesystem with package management. This frees you from the application selection and configuration provided by the vendor and allows you to customize the device through the use of packages to suit any application. For developers, OpenWrt is the framework to build an application without having to build a complete firmware around it; for users this means the ability for full customization, to use the device in ways never envisioned.

ということらしいです。
要は組み込み機器でLinuxが使えるよ!というやつです。
"OpenWrt"と書きます。"OpenWRT"ではないですね。
(業界には私みたいな()表記にうるさい人がいるので注意)

このOpenWrtはBuffalo等のルータにもインストールすることができ、Linuxが走る(!)より高機能なルータへと昇華させることができる素晴らしいものなのです。

ただ、ひとつ注意点なのが
日本では無線機器のファームウェアを書き換えると、機器の技適が無効となり電波法に抵触するので
アクセスポイントとして使う場合は、技適マークのついた無線LANモジュールを使う必要があります。

実装

今回、バッキャローBuffaloのWZR-HP-AG300Hを使いました。

AG300HにOpenWrtを流し込むやり方はインターネットでたくさん紹介されています。
zunnda00.blogspot.com

成功例が多く、情報も多いですし、中古は安いのでAG300Hを使うことをおすすめします。

OpenWrtの設定

OpenWrtはGUI(Web UI)とCUI(SSH)が使えます。

Web UIでできることはWeb UIでやって、できないことはCUIで。っていうのが私のスタンスです。

IPアドレスDHCPサーバ、無線LANの設定などはWeb UIでポチポチできます。

無線などの設定が終わったら今度はOpenWrtでDash Buttonのパケットを監視するための設定をしていきます。

まず必要なソフトをいれます。

リポジトリを参照させる必要があるので、/etc/opkg.confに

src/gz packages https://archive.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages

を追記します。(src/gzってのがよくわからない…)
URLは環境に合わせて変えてください。
d.hatena.ne.jp
[追記]
src/gzを追加後、

# opkg update

を実行してください。

OpenWrtはopkgというツールでパッケージを管理しているらしく、インストールはこれを使ってやっていきます。

# opkg install wget
# opkg install tcpdump

(たしかwgettcpdumpだけでよかったはず…)

今回、Dash ButtonのARP RequestパケットをOpenWrtのtcpdumpで監視します。

プログラム書くのが好きな人はプログラム書いてもいいと思いますが、
私はあまりプログラム得意ではないし、シェルで楽したい派なので今回はtcpdumpで。

tcpdumpを使う場合はこちらが参考になります。
moguno.hatenablog.jp

で、インターホンが押されたときに、今回はSlackに投稿することにしたので
SlackのIncoming WebHooksを使います。

Incoming WebHooksの導入は以下。
qiita.com

シェルスクリプト

いよいよ
シェルスクリプトを書きます。今回書いたのはこんな感じです。

#!/bin/ash

while true ; do
  tcpdump arp and ether src XX:XX:XX:XX:XX:XX -c 1 > /dev/null 2>&1  # XX:XX:XX:XX:XX:XXはDash ButtonのMACアドレス
  wget --post-data '{"text" : "来客のようですよ!"}' -O /dev/null WebHookのEndpoint
done

あとは実行権限付与して実行するだけです。

# chmod +x ./intercom.sh
# ./intercom.sh

・・・・・・・・・。

SSHから実行すると、SSH切断時にプロセスが落ちるのでnohup使わないとダメです…

…nohupを入れます。(オイ!💢 wgettcpdumpだけじゃないやんけ!💢💢)

# opkg install nohup

そして実行。

# nohup ./intercom.sh &

これでSSH切断しても実行されたままになります。

この状態でDash Buttonポチー!www
Slackに謎のincoming-webhookさんが叫んでくれます。
(名前やアイコンは変更可能です)

以上です。

おわりに

数時間の手抜き実装でしたが、いかがだったでしょうか。

研究室での設置がまだなので、はやく設置したいなーといったところです。


設置したものの、だれも押してくれない…ということがなければいいな………



読んでいただきありがとうございました。
では。