研究室に誰がいるかをslackから確認するシステムを作った

作ったもの


概要

  • 10分に1回ラズパイからローカルipに向かってpingし、arpMacアドレスを取得してユーザーを特定しデータベースに登録を行う。

f:id:matatsuna:20170417120424p:plain
f:id:matatsuna:20170417120429p:plain

  • slackのスラッシュコマンドでデータベースから最新の情報を取ってきて返す。

f:id:matatsuna:20170417120008p:plain
f:id:matatsuna:20170417120014p:plain

使ったもの

ハードウェア
ソフトウェア

技術的なこと

raspberry pi

10分間に1回プログラムを実行する

cronを使いました。
クーロン(cron)をさわってみるお - Qiita

arpコマンドでMacアドレスを取得する

まず、Macアドレスは端末が必ず持っていてほぼユニークなアドレスで同じネットワーク内の端末からは、ipアドレスと一緒に知ることができます。Wifiにつながってる状態であれば、ロック画面やスリープに入ったとしても知ることができます。arpテーブルというipアドレスMacアドレスの一覧の表が存在しarpコマンドで参照します。

$ arp

ただ、リアルタイムでarpテーブルを更新するためには、pingを飛ばす必要があります。

$ sudo ping -c 1 -W 1 192.168.xxx.xxx
$ arp -a 192.168.xxx.xxx

これを10分に1回100ipほどに行い、同じネットワーク内にある端末のMacアドレスを取得します。
ネットワークに負荷がかかるので、本当はこんなことしたくない....

hoge.localにアクセスすると登録できるようにする

Raspberry Piにホスト名の設定をしたメモ – 1ft-seabass.jp.MEMO
この設定を行い、index.phpを/var/www/html/に配置して登録フォームを設けました。
なお、ブラウザからhoge.localでアクセスできるのはMac,iOSのみで、windowsAndroidはip直打ちです。

slack 側

スラッシュコマンドを作る

f:id:matatsuna:20170415183405p:plain
これじつは作れます。https://ほげふが.slack.com/apps/manage/custom-integrations
しかも仕組みは簡単で、

 /コマンド名 引数 

この引数をそのままテキストでGETかPOSTを好きなアドレスに対して送ることができます。httpのサイトへも可能です。jsonで返してあげると結果をslackに投稿してくれます。
Slash Commands | Slack
データベースの最新情報を返すだけのphpにスラッシュコマンドからリクエストを送るようにしました。

まとめ

研究室にいることをわざわざカードをかざしたり、カメラを設置して監視するのは、なんか嫌だなーって思っていて、普段通りの生活を送ってる中でなにかトラックングできないか考えたらこの方法を思いつきました。さり気なく監視してる感が余計に怖いですが。
10分間に1回ごとの情報がデータベースに貯まるので、研究室に来てない人がわかったりするので、M1,B4の先輩たちからすごく嫌がられましたw