Raspberry Pi を使って Global IP を LINE に通知してみる

公開日:
Raspberry Pi を使って Global IP を LINE に通知してみる

家の Global IP を固定するほどでもないけど、外出先でも知れたらいいなぁと思って、LINE に通知してみることにしました。
家に常設している Raspberry Pi で家の Global IP を取得して、LINE Notify を使って LINE に通知を流すと言う感じです。
実装のイメージはこんな感じです↓

実装のイメージ
実装のイメージ

1. Global IP を取得する

Global IP を取得するためには curlinet-ip.info にアクセスするだけです。
s オプションは余計な出力をしないためにつけています。
curl のその他のオプションは以下の記事などを参考にしてみてください。

$ curl -s inet-ip.info
123.45.67.89 # コマンドを実行したデバイスの Global IP アドレス

2. LINE Notify を使う

2.1. LINE Notify のトークンを発行する

LINE Notify は GitHub や IFTTT などと連携して、LINE のチャットルームにメッセージを送ることができる API です。
LINE Notify を使うためには、まずトークンを発行しないといけないので、トークンを発行していきます。
以下の LINE Notify のページにアクセスして、右上の ログイン から普段使っている LINE アカウントでログインしてください。

LINE Notify のページ
LINE Notify のページ

ログインができたら マイページ に移動して、一番下にある アクセストークンの発行(開発者向け) のところで トークンを発行する を押してください。

LINE Notify のマイページの画面
LINE Notify のマイページの画面

トークンを発行する画面が出てきたらトークン名と通知を送信するトークルームを選択してください。
トークン名について分かりにくければ、次の 2.2 章に出てくるメッセージの画像を参考にしてみてください。
右下の画像にも書かれていますが、発行したトークンは一度閉じると二度と開けなくなるので、しっかり保存しておいてください

トークン発行画面
トークン発行画面
発行されたトークン
発行されたトークン

これで、無事 LINE Notify のトークンを取得できました。
次はこのトークンを使ってメッセージを送っていきましょう。

トークン発行については以下の記事も参考にしてみてください。

2.2. LINE に通知を送信してみる

通知の送信はコマンド一つでできるので楽ちんです。
Authorization: Bearer 9F…9F... の部分には先ほど取得したトークンを入れてください。
{"status":200,"message":"ok"} が返ってくれば OK です!

$ curl -s -X POST -H 'Authorization: Bearer 9F...' -F 'message=123.45.67.89' https://notify-api.line.me/api/notify
{"status":200,"message":"ok"}

詳しい意味としては、「https://notify-api.line.me/api/notify に対して、ヘッダが Authorization: Bearer 9F… (-H)、内容が message=123.45.67.89 (-F) の POST メソッド (-X) を実行してください。」という感じになります。

このコマンドの打ち方は以下の記事を参考にしました。

実際に届いたメッセージは以下のようになりました。
[aaa] の部分が先ほど設定したトークン名になります。

LINE Notify に届いたメッセージ
LINE Notify に届いたメッセージ

3. ラズパイで 30 分おきに自動で実行されるようにする

ここまでで、Global IP を取得して、それを LINE Notify を使って LINE に通知ができるようになりました。
せっかくなので、これを自動化して、常時チェックしてくれるようにしましょう。
一回前に Global IP を調べた時から変化している時だけ通知するようにしています。

初めにコードを公開して、少しずつ解説していきたいと思います。

#!/bin/bash
newip=`curl -s inet-ip.info`
for i in `seq 5`
do
	if [ "$newip" = '' ]; then
		newip=`curl -s inet-ip.info`
	fi
done
if [ "$newip" = '' ]; then
	exit 1
fi
oldip=`cat /path/to/current_ip`
if [ $oldip != $newip ]; then
  echo "$newip" > /path/to/current_ip
  curl -s -X POST -H 'Authorization: Bearer 9F...' -F 'message='"$newip"'' https://notify-api.line.me/api/notify
fi
echo $newip

まず、各自で変更しないといけないのは、色をつけた 12, 14, 15 行目です。

12 行目では一回前に調べた時の Global IP を取得しているので、その IP を保存するためのファイルを (空でいいので) 作って、そのパスを /path/to/current_ip と置き換えてください。
14 行目は新しい Global IP をファイルに書き込む部分なので、先ほどと同じようにパスを変更しておいてください。

15 行目の 9F... の部分は先ほど取得した各自のトークンを入れておいてください。

11 行目までの前半部分は inet-ip.info を使って Global IP を取得する部分ですが、失敗した場合のために何度か試して、それでもうまくいかない場合は途中でプログラムを終了しています。

これで、Global IP を取得して、LINE に通知するスクリプトが書けました 👏

最後に 30 分おきにこのスクリプトが実行されるように設定していきます。

まずはこのスクリプトに実行権限を与えておきましょう。

$ chmod +x ipcheck

次に cron に登録しておきます。

$ crontab -e
# 以下の行をどこかに追記
*/30 * * * * /path/to/ipcheck 1>/dev/null

これで、毎時 30 分にこのスクリプトが実行されるようになりました。
うまくいっていない場合は ipcheck の実行権限を疑ってみましょう。

4. まとめ

今回は Raspberry Pi を使って Global IP を LINE に通知する方法について解説しました。
外出先でも家の Global IP が知れるのであれば、わざわざ IP を固定する必要もなくて楽ですね〜

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA