RaspberryPiの起動時にslackにIPアドレスを投稿する

RaspberryPiを複数台使用していると、ssh接続したいRasPiのIPアドレスがわからないことがたまにあります。
研究所では数十台(は言い過ぎだけど、それなりの)のRasPiが運用されているので、本体とIPと関連付けが少し面倒くさいです。

なので、RasPiの電源をいれた時に、slackへ対応するIPアドレスを通知するプログラムを組んでみました。

準備

python3のモジュールnetifacesslackwebを使います。これらをまだ導入してない場合は、ターミナルからそれぞれ

$ python3 pip -m install netifaces
$ python3 pip -m install slackweb

でインストールします。slackwebを使ってslackにpython3から投稿する方法はこちらを参照

tmegane.hatenablog.com

手順

ほとんどモジュールを使うだけですが、ネットワーク関係で少しはまりました。 といっても、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へ通知がきます。

f:id:Tmegane:20181019010938p:plain

これでRaspberryPiを起動したら自分からIPを吐いてくれるのようになりました。