#1. はじめに
研究で、受信信号強度を取得するプログラムを作る必要があったため、取得プログラムを作成しました。色々方法はあるだろけど、今回はiwlistコマンドで指定のESSIDを探し、そのSignal levelを取得するプログラムを作りました。
#2. 使用機器・環境
Raspberry Pi 2 model B+
OS : Raspbian
Wifi usbアンテナ : I-O Data製WN-G300UA
開発言語 : Python3.5.3
#3. コード
import sys
import subprocess
def PrintSignalLevel():
essid = '検索したいESSID名'
cmd = 'sudo iwlist NIC名 scan | grep -e ESSID -e Signal'
process = (subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True).communicate()[0]).decode('utf-8')
iwlist = process.split('\n')
for idx,line in enumerate(iwlist):
if essid in line:
print(line)
sigline_idx = idx+1
sigline = iwlist[sigline_idx]
print(sigline)
tmp = sigline.rfind('=')
tmp1 = signline.rfind('/')
rssi_per = sigline[tmp+1:tmp1]
rssi_dBm = (0.6*int(rssi_per))-95
print('RSSI[%] = {rssi_per} -> RSSI_dBm} = {rssi_dbm}'.format(rssi_per=rssi_per,rssi_dBm))
break
if __name__ == "__main__":
PrintSignalLevel()
#4. まとめ
今回使用した無線LANドライバーがAtheros社製であったため、パーセンテージとして表示されているのをdBm変換して最後表示しています。例外処理してないけど、基本的な処理は作れたので、今後そこらへんは追加する予定です。
#5. 参考資料
Converting Signal Strength Percentage to dBm Values