この記事は NTTテクノクロス Advent Calendar 2021の2日目の記事です。
こんにちは。安田と申します!
NTTテクノクロスでAI関連の新製品創出を担当しています。
(例えば、こういうの → BizFront/SmartUI Decision Manager)
さて、本記事では、pythonで「今どこにいるの?」をロギングする方法を見ていきたいと思います。コロナ禍以降になって、会社オフィスだけでなく、自宅も働く場所になってきました。出社と在宅が混在するようになると、「そういえば先週の火曜日って、どこで働いていたっけ?」って、良く分からなくなります。そこで、私なりの工夫として、肌身離さず持ち歩いているノートPCがその日はどこにあったのかをログに残すことにしています。
原理(どうして居場所がわかるの?)
ノートPCがそのときに掴んでいるWifiのSSIDとBSSIDの情報を取得できれば、どこにいるのかは分かると思います。
- SSID = Wifiのネットワークの名前
- BSSID = アクセスポイントの識別子(たいていはMacアドレス)
SSIDが同じだとしても、アクセスポイントが異なればBSSIDは異なるはずです。
そして、掴んでいるWifiのSSIDやBSSIDはnetshコマンドで調べることができます。
netsh wlan show interfaces
ソースコード
pythonで書きました。実際にはこれをpyinstallerでexe化してWindowsPCのスタートアップに入れて常に動かしてログを残しています。
import os
from subprocess import PIPE
import subprocess
import datetime
# Const
LOC_LOG_PATH = '../logs/log/'
LOC_LOG_FILENAME = 'loc.csv'
DIFF_JST_FROM_UTC = 9
# Opening Message
print('WIFIのSSID及びBSSIDの検出を開始します。')
loginName = os.getlogin()
prevSsidBssid = ''
nowSsidBssid = ''
while True:
# SSID 及び BSSIDの取得
proc = subprocess.run("netsh wlan show interfaces", shell=True, stdout=PIPE, stderr=PIPE, text=True)
datalist = proc.stdout.split('\n')
ssid = ''
bssid = ''
for data in datalist :
if data.find(' SSID') == 0:
ssid = data[data.find(':')+2:len(data)]
elif data.find(' BSSID') == 0:
bssid = data[data.find(':')+2:len(data)]
if (ssid == '') or (bssid == ''):
ssid_bssid = 'no wifi'
else:
ssid_bssid = ssid + '/'+bssid
now = datetime.datetime.utcnow() + datetime.timedelta(hours=DIFF_JST_FROM_UTC)
nowDate = now.strftime('%Y%m%d')
nowTimestamp = now.strftime('%Y/%m/%d %H:%M:%S')
nowSsidBssid = ssid_bssid
if (nowSsidBssid != prevSsidBssid):
line = loginName\
+ ', ' + nowTimestamp + ', ' + nowSsidBssid
fileObject = open(LOC_LOG_PATH+str(nowDate)+LOC_LOG_FILENAME, 'a', encoding = 'shift_jis') # そのままエクセルで分析できるようにsjis
fileObject.write(line + '\n')
fileObject.close()
print(line)
prevSsidBssid = nowSsidBssid
おわりに
pythonって、色々できて面白いですよね。
さて、NTTテクノクロス Advent Calendar 2021 の明日(3日目)の記事は、【AWS】利用料金の詳細通知&自動化のお話です。AWSを使っているエンジニアにとっては、利用料金って、かなり気になるテーマだと思います。こちらも引き続きお楽しみください!