2
0

More than 1 year has passed since last update.

UnitV2 WiFi IP Slack通知

Posted at

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

Slack通知を確認することができました!
image.png

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0