44import typing as T
55import subprocess
66import logging
7- import shutil
87import io
9- from math import log10
8+ import shutil
109
1110CLI = shutil .which ("netsh" )
1211if not CLI :
@@ -29,14 +28,24 @@ def cli_config_check() -> bool:
2928 return False
3029
3130
32- def get_signal () -> list [dict [str , T .Any ]]:
33- """ get signal strength using CLI """
31+ def get_signal () -> str :
32+ """
33+ get signal strength using CLI
34+
35+ returns dict of data parsed from CLI
36+ """
3437 ret = subprocess .run (CMD , timeout = 1.0 , stdout = subprocess .PIPE , text = True )
3538 if ret .returncode != 0 :
3639 logging .error ("consider slowing scan cadence." )
3740
41+ return ret .stdout
42+
43+
44+ def parse_signal (raw : str ) -> list [dict [str , T .Any ]]:
45+
3846 dat : list [dict [str , str ]] = []
39- out = io .StringIO (ret .stdout )
47+ out = io .StringIO (raw )
48+
4049 for line in out :
4150 d : dict [str , str ] = {}
4251 if not line .startswith ("SSID" ):
@@ -45,6 +54,7 @@ def get_signal() -> list[dict[str, T.Any]]:
4554 # optout
4655 if ssid .endswith ("_nomap" ):
4756 continue
57+
4858 # find BSSID MAC address
4959 for line in out :
5060 if not line [4 :9 ] == "BSSID" :
@@ -62,14 +72,20 @@ def get_signal() -> list[dict[str, T.Any]]:
6272 d ["ssid" ] = ssid
6373 dat .append (d )
6474 d = {}
75+ # need break at each for level
6576 break
77+ break
6678
6779 return dat
6880
6981
7082def signal_percent_to_dbm (percent : int ) -> int :
71- """arbitrary conversion factor from Windows WiFi signal % to dBm
72- assumes 100% is -30 dBm
83+ """
84+ arbitrary conversion factor from Windows WiFi signal % to dBm
85+ assumes signal percents map to dBm like:
86+
87+ * 100% is -30 dBm
88+ * 0% is -100 dBm
7389
7490 Parameters
7591 ----------
@@ -81,9 +97,8 @@ def signal_percent_to_dbm(percent: int) -> int:
8197 meas_dBm: int
8298 truncate to nearest integer because of uncertainties
8399 """
84- REF = - 30 # dBm
85- ref_mW = 10 ** (REF / 10 ) / 1000
86- meas_mW = max (ref_mW * percent / 100 , 1e-7 )
87- meas_dBm = 10 * log10 (meas_mW ) + 30
88100
89- return int (meas_dBm )
101+ REF = - 100 # dBm
102+ assert 0 <= percent <= 100 , "percent must be 0...100"
103+
104+ return int (REF + percent * 7 / 10 )
0 commit comments