RaspberryPiの起動時にslackにIPアドレスを投稿する
RaspberryPiを複数台使用していると、ssh接続したいRasPiのIPアドレスがわからないことがたまにあります。
研究所では数十台(は言い過ぎだけど、それなりの)のRasPiが運用されているので、本体とIPと関連付けが少し面倒くさいです。
なので、RasPiの電源をいれた時に、slackへ対応するIPアドレスを通知するプログラムを組んでみました。
準備
python3のモジュールnetifaces
とslackweb
を使います。これらをまだ導入してない場合は、ターミナルからそれぞれ
$ python3 pip -m install netifaces $ python3 pip -m install slackweb
でインストールします。slackwebを使ってslackにpython3から投稿する方法はこちらを参照
手順
ほとんどモジュールを使うだけですが、ネットワーク関係で少しはまりました。 といっても、RaspberryPiのDNSserverとrouterのIPアドレスはきちんと設定しないとダメだったってだけでしたが。
ソースコードはこんな感じ
import slackweb import netifaces PiAd = netifaces.ifaddresses('wlan0')[netifaces.AF_INET][0]['addr'] IPslack=slackweb.Slack(url=" slackで投稿する先のURL ") IPslack.notify(text=PiAd)
これを実行すると、使用しているRaspberryPiのIPアドレスが指定したslackへと通知されます。
あとはこのプログラムを、RaspberryPiを起動したときに自動で実行されるように設定をします。
先程作ったプログラムにIPslack.py
という名前で\home\pi\IPslack.py
に保存しておきます。
RaspberryPiのターミナルから、$ sudo vim /etc/rc.local
を入力し、
最終行のexit 0
のすぐ上の行にsudo -u pi \usr\bin\python3 \home\pi\IPslack.py
を書き込んで保存します。
ついでにさらに1つ上の行にsleep 10
と書き込んでおきます。
ここでも少し引っかかりました。ちゃんとsudo -u pi
とユーザーを指定しないと動かなかったです。
ユーザーを指定しないとroot
ユーザーでpythonを実行するのですが、モジュールがグローバルじゃなくて
ユーザー(ここではpi
)に関連つけられているとroot
では動かないようです。
あとはRaspberryPiを$ sudo shutdown -r now
とかで再起動して、slackにIPアドレスが送られてくるかを確認してください。
無事に成功すると、こんな感じでslackへ通知がきます。
これでRaspberryPiを起動したら自分からIPを吐いてくれるのようになりました。