DIY个人智能家庭网关—— python篇之获取手机WIFI连接(上线/下线)状态

如果需要根据自己的手机在连接或断开路由器WIFI时触发某个动作,可以通过iw命令定时查询手机的连接状态,执行如下命令可以列出所有连接到路由器WIFI的设备,


root@OpenWrt:~# iw dev wlan0 station dump
Station e0:ac:cb:b1:ca:ba (on wlan0)
        inactive time:  27010 ms
        rx bytes:       198087
        rx packets:     1417
        tx bytes:       843928
        tx packets:     969
        tx retries:     66
        tx failed:      4
        signal:         -70 dBm
        signal avg:     -70 dBm
        tx bitrate:     72.2 MBit/s MCS 7 short GI
        rx bitrate:     24.0 MBit/s
        expected throughput:    34.84Mbps
        authorized:     yes
        authenticated:  yes
        preamble:       short
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
Station 04:52:f3:87:cf:77 (on wlan0)
        inactive time:  620 ms
        rx bytes:       316840
        rx packets:     3260
        tx bytes:       419569
        tx packets:     1576
        tx retries:     91
        tx failed:      0
        signal:         -78 dBm
        signal avg:     -79 dBm
        tx bitrate:     144.4 MBit/s MCS 15 short GI
        rx bitrate:     24.0 MBit/s
        expected throughput:    43.20Mbps
        authorized:     yes
        authenticated:  yes
        preamble:       short
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
Station 94:94:26:9f:cc:fa (on wlan0)
        inactive time:  25760 ms
        rx bytes:       19497
        rx packets:     312
        tx bytes:       28507
        tx packets:     137
        tx retries:     1
        tx failed:      0
        signal:         -72 dBm
        signal avg:     -71 dBm
        tx bitrate:     57.8 MBit/s MCS 5 short GI
        rx bitrate:     24.0 MBit/s
        expected throughput:    30.29Mbps
        authorized:     yes
        authenticated:  yes
        preamble:       short
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
Station b0:d5:9d:61:3a:1a (on wlan0)
        inactive time:  280 ms
        rx bytes:       92157
        rx packets:     919
        tx bytes:       73302
        tx packets:     615
        tx retries:     457
        tx failed:      78
        signal:         -84 dBm
        signal avg:     -87 dBm
        tx bitrate:     39.0 MBit/s MCS 4
        rx bitrate:     58.5 MBit/s MCS 6
        expected throughput:    23.180Mbps
        authorized:     yes
        authenticated:  yes
        preamble:       short
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no
Station a8:1b:5a:b7:e0:03 (on wlan0)
        inactive time:  10750 ms
        rx bytes:       106382
        rx packets:     679
        tx bytes:       97932
        tx packets:     300
        tx retries:     20
        tx failed:      2
        signal:         -54 dBm
        signal avg:     -57 dBm
        tx bitrate:     65.0 MBit/s MCS 7
        rx bitrate:     6.0 MBit/s
        expected throughput:    32.125Mbps
        authorized:     yes
        authenticated:  yes
        preamble:       short
        WMM/WME:        yes
        MFP:            no
        TDLS peer:      no

如果只要MAC地址,可以过滤一下


root@OpenWrt:~# iw dev wlan0 station dump | grep Station
Station e0:ac:cb:b1:ca:ba (on wlan0)
Station 04:52:f3:87:cf:77 (on wlan0)
Station 94:94:26:9f:cc:fa (on wlan0)
Station b0:d5:9d:61:3a:1a (on wlan0)
Station a8:1b:5a:b7:e0:03 (on wlan0)

和路由器页面上的一样

DIY个人智能家庭网关—— python篇之获取手机WIFI连接(上线/下线)状态_第1张图片


确定自己是哪一个MAC地址后则可以进一步进行过滤,如下

DIY个人智能家庭网关—— python篇之获取手机WIFI连接(上线/下线)状态_第2张图片

如果过滤后还有输出结果说明手机已经连上了路由器,没有输出结果说明手机没有连上路由器

如下是python代码

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
import time
import subprocess
from time import sleep

mac = "a8:1b:5a:b7:e0:03"

cmd = 'iw dev wlan0 station dump | grep Station'
while True:
  obj = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
  obj.wait()
  state = 'offline'
  lines = obj.stdout.readlines()
  for str in lines:										
  	if str.find(mac) > 0:
  		state = 'online'
  		break
  print "phone %s %s"%(mac,state)
  time.sleep(2)
运行输出结果:



你可能感兴趣的:(DIY个人智能家庭网关)