1.はじめに
UnitV2はWiFiが使えるので、WiFi経由でUnitV2にSSH接続することができます
※通常通りUnitV2をPCにUSB接続するとネットワークとして認識されPCのWiFi接続を邪魔することがあるので、WiFi接続を実施しています
ただ、ウチの環境ではWiFiが不調なことがあり、WiFi接続できていないのか、前回と別IPで接続できているのかイマイチ判断できないことがあります(9割方WiFi不調なのですが)
そこで、UnitV2起動時にSlackへIPを通知する仕組みを作りました。
これにより、以下のメリットがあります。
・UnitV2が起動したことを判別できる
・久しぶりの利用でIPを忘れてしまった時に役立つ
・他の環境に持って行った際にIPが分かる
固定IP化だけで十分な方は以下のサイトを参考にして下さい
【中級者向け】M5Stack UnitV2をハックするためのTips
2.Slack準備
Slack incomming Webhookを設定し、投稿用URLを取得します
こちらの手順は今回は省略しますので、以下のサイトなどを参考にして下さい。
Slack での Incoming Webhook の利用
3.Pythonライブラリインストール
WiFi IP取得、Slack送信処理として今回はPythonで組みました
IPを取得するのにipgetを使用するのでインストールします。
※当初netifacesを使おうとしましたが、pip installでエラーがでたのでipgetに変えました
unitv2% sudo pip install ipget
※m5stackユーザではエラーがでたのでsudoで実行
このままだとrootユーザでインストールされるので、実行権限を付与する為にインストールフォルダを確認
unitv2% sudo pip show ipget
Name: ipget
Version: 0.0.3
Summary: This package is for those that know the local ip in linux.
Home-page: http://kitagami.org
Author: Yuta Kitagami
Author-email: hokusin02@gmail.com
License: LGPL
Location: /usr/lib/python3.8/site-packages
Requires:
Required-by:
実行権限を付与
unitv2% cd /usr/lib/python3.8/site-packages
unitv2% sudo chmod 755 ipget*
unitv2% ls -la ipget*
-rwxr-xr-x 1 root root 881 Dec 20 2012 ipget.py
-rwxr-xr-x 1 root root 1266 Nov 22 14:23 ipget.pyc
4.IP取得処理実装
i_am_here.py
import requests
import json
import socket
import ipget
import time
WEB_HOOK_URL = "https://hooks.slack.com/services/xxxx" # WebHookURLをセット
host = socket.gethostname()
print(host)
ip = ""
cnt = 0
while(ip == "" and cnt <= 60):
cnt+=1
try:
ip = ipget.ipget().ipaddr("wlan0")
if ip == "10.254.239.1/24":
ip = ""
print(ip)
time.sleep(5)
except:
time.sleep(5)
print("Waiting network connection...")
if ip != "":
cnt = 0
while(cnt <= 10):
try:
cnt+=1
text = "I'm here!\n" + "[host]" + host + "\n[ip]" + ip
requests.post(WEB_HOOK_URL, data=json.dumps({
"text" : text,
}))
break
except:
time.sleep(5)
print("Slack send error...retry")
print(text)
print("Send to Slack done.")
else:
print("network connection search timeout.")
IPを取得する処理とSlackに送信する処理で1回で処理が成功しないことがあり、適度にリトライループをいれています
5.UnitV2起動時処理実装
/etc/init.d配下に起動スクリプトを配置することで起動時実行ができます
また、pythonを起動するためのshellスクリプトも間に入れています
i_am_here.sh(i_am_here.pyと同ディレクトリに配置)
#!/bin/sh
cd $(cd $(dirname $0);pwd)
date >> i_am_here.log
python i_am_here.py >> i_am_here.log 2>&1
実行権限付与
unitv2% chmod +x i_am_here.sh
/etc/init.d/S99local
#!/bin/sh
case "$1" in
start)
sudo -u m5stack /home/m5stack/work/i_am_here.sh
;;
stop)
;;
restart|reload)
;;
*)
exit 1
esac
exit 0
引数でstart/stop/restart/reloadに対応するように実装しています
パスは配置したパスに合わせて下さい
実行権限付与
unitv2% sudo chmod +x S99local
6.動作確認
再起動で起動時にIP Slack通知してくれるか確認します
unitv2% sudo reboot