地味に便利!Raspberry Piが起動したらIPアドレスを通知するチャットボットを作る
という記事があって、かなり便利なんだけどNodeを使うのはめんどうなのとHipChatじゃないところへ送りたいのでちょっと改造してみました。
作るものはRaspberry Pi起動時に実行するシェルスクリプトとIPアドレス受け取るサーバー用のPHP
今回はPHPにしたけど、たぶんSlackとかのwebhookに適当に変えてもできるはず
IP送信シェルスクリプト
sendip.sh
res=`ifconfig`
url="http://example.com/raspberrypi.php"
curl -X POST -d "text=${res}" ${url}
ifconfigの内容をcurlでphpのサーバーへpostしているだけ。
受け取るPHP
raspberrypi.php
<?php
$filename = "rsip.txt";
if (isset($_POST["text"])) {
$res = $_POST["text"];
echo file_put_contents($filename, date(DATE_ATOM).'<br>'.$res);
} else {
echo '<pre>';
echo file_get_contents($filename);
echo '</pre>';
}
こっちも単純で、postで受け取った内容をip.txt
というファイル名に保存して、
ブラウザで表示するときは、このファイルの中身を表示させるかたち
起動時に実行するように仕組む
そして起動させる毎にこのshellを実行させるように/etc/rc.local
に書き加える
/etc/rc.local
sh sendip.sh
できあがり
これでRaspberry PiのIPアドレスを起動時送ってくれる。ディスプレイとかキーボードとか繋ぐ必要なし!
2017-07-22T19:11:17+09:00
eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx
inet addr:192.168.11.8 Bcast:192.168.11.8 Mask:255.255.255.0
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1818525245 errors:0 dropped:0 overruns:0 frame:0
TX packets:30853428 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:126241847614 (117.5 GiB) TX bytes:11555247080 (10.7 GiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:11135533 errors:0 dropped:0 overruns:0 frame:0
TX packets:11135533 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7879172002 (7.3 GiB) TX bytes:7879172002 (7.3 GiB)
できたものはこんな感じ
ちょっと見にくいが、192.168.
とかページ内検索で引っ掛ければすぐ出てくるのでとりあえずは問題ない。
まあPHP側で抽出するように書き加えれば良い気がする、面倒だからやらないけど。。。