(あ)です。「Google Homeでできるラズパイ不要でおしゃべり」の番外編です。
前回の翌朝。インターネットから自宅サーバにつなごうとしたのですが、つながりません…
こんどは、なに?
と、思いながら、調べてみたところ…
ブロードバンドルーターの外側向きのIPアドレスが、変わっていました。
これでは、つながるはずがありません。
ルータの電源を切ったり、再起動など、割り当てが変わるきっかけは無い認識なのですが。
とはいえ、変わってしまうのなら仕方ありませんので、なんとか策を考えることにします。
(あ)が、自宅にいるときは、なんとでもなるので問題にはなりません。
外にいるときに、自宅ブロードバンドルーターの外部アドレスを補足する必要があります。
ここは、IFTTTを使って、スマホにラインで通知してもらう、ということにしました。
自宅ブロードバンドルーターよ外側のアドレスを知るには、
– 管理ページで確認
– 「確認くん」サイトの情報
を、思いつきました。
管理ページにアクセスして、というのは、できないことはないのでしょうが、かなり面倒になりそうです。認証を突破し、特定のURLの結果を解析して、といった手順かと思いますが、面倒です。
確認くんサイトですが、PCでアクセスして、送り返される情報を見ると、これも複雑で、(あ)の今のスキルでは、時間ばかりかかりそう。
もう少ししらべると、curlでurl叩くと、IPアドレスが帰ってくるglobalip.me
というサイトを見つけました。
こんな感じです。
# curl globalip.me
aaa.bbb.ccc.ddd
ありがたや。(あ)のスキルにふさわしい戻り値です。
bashスクリプト化して、IFTTTに送るようにします。
#!/bin/bash
VAR1=$(curl globalip.me)
printf "curl -X POST -H \"Content-Type: application/json\" -d \'{\"value1\":\"" > curlcmd.sh
printf $VAR1 >> curlcmd.sh
printf "\",\"value2\":\"port1\",\"value3\":\"port2\"}'" >> curlcmd.sh
printf ' https://maker.ifttt.com/trigger/gip/with/key/YOUR_KEY' >> curlcmd.sh
echo '' >> curlcmd.sh
printf "\"$VAR1\"\n"
# ifttt by curl
bash ./curlcmd.sh
echo ''
echo 'done'
date >> log/done.log
# eof
このコードはあまりにださいと思っていますが、まあ、動けばいいねってことにしています。
パラメータのvalue2とvalue3は、実際はポート番号を入れています。
送ってみます。
LNE Notifyチャンネルに通知されました。
このスクリプトは一発屋さんですので、定期的に動いてもらおう、ということで次は、定期実行を実現させようと目論みます。
Unix系OSで定期実行といったらcron
Unix系OSで定期実行といったらcronと、なりますので、設定してみます。
朝の7時くらいに通知がくれば、と思いますが、まずは、5分後を設定してみます。
…
通知きません。コンソールにも動作した形跡無しです。
毎5分に再設定。
…
通知きません。
どうやら、cronは動かないのか?と思われます。
方針変更して、bashスクリプトを常駐させ、何時間かおきに通知されるようにしてみます。
単純に、whileとsleepを使って、無限ループです。
sleepを3分に設定して試験したところ。
…
ようやく成功しました。
8時間のsleepにして、スクリプトを走らせて、寝ることにします。
Zzz
果たして8時間後!
通知きました。
その後の、数日間の動きを見ていると、午前0時を境に、外向けのIPアドレスが変わっている感じがします。
これで、不意な外部向けIPアドレスの変化にも、対応できたことになりました。
ただ、別の困ったことに、気付きました。
不意な、アンドロイドスマホの、再起動です。
コメント