Basic functionaly for dealingn with signal strength

This commit is contained in:
nepoz 2021-07-05 10:29:37 -05:00
parent 1232c4d960
commit f141b95d8f

View file

@ -3,8 +3,9 @@ A module to show currently active network connection (ethernet or wifi)
and connection strength.
"""
import subprocess
import os
import util.cli
import util.format
import core.module
import core.widget
@ -18,31 +19,55 @@ class Module(core.module.Module):
self._message = None
def network(self, widgets):
# start subprocess to get networked data
std_out = os.popen("ip route get 8.8.8.8")
route_str = " ".join(std_out.read().split())
# run ip route command, tokenize output
cmd = "ip route get 8.8.8.8"
std_out = util.cli.execute(cmd)
route_str = " ".join(std_out.split())
route_tokens = route_str.split(" ")
# Attempt to extract a valid network interface device
try:
self._interface = route_tokens[route_tokens.index("dev") + 1] + ":"
self._interface = route_tokens[route_tokens.index("dev") + 1]
except ValueError:
self._interface = None
with open("/proc/net/wireless", "r") as f:
if self._interface:
# Check to see if the interface (if it exists) is wireless
if self._interface:
with open("/proc/net/wireless", "r") as f:
self._is_wireless = self._interface in f.read()
f.close()
# setup message to send to bar
# setup message to send to the user
if self._interface is None:
self._message = "Not connected to a network"
elif self._is_wireless:
self._message = "Connected to WiFi"
else:
# self._message = "Connected to Ethernet"
self._message = self._message
cmd = "iwgetid"
iw_dat = util.cli.execute(cmd)
has_ssid = "ESSID" in iw_dat
ssid = iw_dat[iw_dat.index(":") + 2: -2] if has_ssid else "Unknown"
# Get connection strength
cmd = "iwconfig {}".format(self._interface)
config_dat = " ".join(util.cli.execute(cmd).split())
config_tokens = config_dat.replace("=", " ").split()
strength = config_tokens[config_tokens.index("level") + 1]
strength = util.format.asint(strength, minimum=-110, maximum=-30)
self._message = self.__generate_wireless_message(ssid, strength)
else:
self._message = self._message
return self._message
def __generate_wireless_message(self, ssid, strength):
computed_strength = 100 * (strength + 110) / 70.0
if computed_strength < 25:
return ssid + " poor"
if computed_strength < 50:
return ssid + " fair"
if computed_strength < 75:
return ssid + " good"
return ssid + " excellent"