Skip to content

Instantly share code, notes, and snippets.

@jrc
Created May 18, 2021 08:14
Show Gist options
  • Save jrc/4e6db34c053be49a48fe41c9e7c2a9e8 to your computer and use it in GitHub Desktop.
Save jrc/4e6db34c053be49a48fe41c9e7c2a9e8 to your computer and use it in GitHub Desktop.
# Monitor Wi-Fi signal on Linux (Debian)
import subprocess
import time
IS_TESTING_ON_MACOS = False
SLEEP_SECS = 60
def check_wlan():
d = {}
p = subprocess.run(
["curl", "-s", "http://google.com"], capture_output=True, encoding="UTF-8"
)
google_com = p.returncode == 0
d["google_reachable"] = "1" if google_com else "0"
if IS_TESTING_ON_MACOS:
p = subprocess.run(["cat", "nmcli-g"], capture_output=True, encoding="UTF-8")
else:
p = subprocess.run(["nmcli", "-t", "g"], capture_output=True, encoding="UTF-8")
line = p.stdout
nmcli_global_components = line.split(":")
d["state"] = nmcli_global_components.pop(0)
d["connectivity"] = nmcli_global_components.pop(0)
if IS_TESTING_ON_MACOS:
path = "wireless"
else:
path = "/proc/net/wireless"
with open(path) as f:
lines = f.readlines()
line = lines[2]
proc_net_wireless_components = line.split()
d["ifname"] = proc_net_wireless_components.pop(0).strip(":")
d["status"] = proc_net_wireless_components.pop(0)
d["quality"] = proc_net_wireless_components.pop(0).strip(".")
d["signal"] = proc_net_wireless_components.pop(0).strip(".")
d["noise"] = proc_net_wireless_components.pop(0)
d["discarded_nwid"] = proc_net_wireless_components.pop(0)
d["discarded_crypt"] = proc_net_wireless_components.pop(0)
d["discarded_frag"] = proc_net_wireless_components.pop(0)
d["discarded_misc"] = proc_net_wireless_components.pop(0)
print(", ".join([f"{k}={v}" for k, v in d.items()]))
while True:
check_wlan()
time.sleep(SLEEP_SECS)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment