Dav*_*ave 6 networking wifi configuration optimization connectivity
有没有机会创建一个配置来完成以下工作?
仅当信号强于 30% 时才连接到可用的 WiFi
在很多地方,我都住在几乎没有wifi信号的边境地区。于是那些不可避免的信号中断就很烦人,所以我总是不得不自己手动在移动数据和wifi之间切换。
是否有机会设置一些仅允许连接到 WiFi 的配置,以便在信号强度足以避免终止的情况下(并由此保证稳定的连接)?
简化方法:
如果信号强度 < 30 % ? 连接不容许
如果信号强度是 ? 30%?允许连接
30% 的值当然只是一个例子......也许 20% 会更有意义,我们会看到!
我尝试在 python(python3,但也适用于 2)中编写一个脚本,您可以使用它。我已经试过了,直到连接和断开连接部分,以便您可以使用您喜欢的方法:
with open("/proc/net/wireless", "r") as f:
data = f.read()
link = int(data[177:179])
level = int(data[182:185])
noise = int(data[187:192])
# print("{}{}{}".format(link, level, noise))
lmtqlty = -80
if(link < lmtqlty):
os.system(nmcli c down id NAME`) # Will disconnect the network NAME
else:
os.system(nmcli c down id NAME`) # Will connect the network NAME
Run Code Online (Sandbox Code Playgroud)
您必须以 sudo 的身份运行它,但这没问题,因为您现在会将其放入 cron 服务中。我还没有使用过 cron 服务,但如果你不能管理自己,我会尝试一下。
编辑解释:当您阅读“/proc/net/wireless”的内容时,您会得到以下长字符串:
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
wlan0: 0000 31. -79. -256 0 0 0 7 0 0
Run Code Online (Sandbox Code Playgroud)
所以您想从 Quality 列中提取正确的值。此文件为您提供有关此系统与网络之间的连接的信息。在这里你有更多关于它的信息,为了解释每个质量子栏的含义,让我引用另一篇文章:
分贝是描述信号之间相对关系的对数单位(1 dB = 1/10 Bel,1 Bel = 功率比 1.259 = 幅度比 1.122)。有关详细信息和表格,请参阅维基百科。负分贝意味着接收到的信号比发送的信号弱(这当然是自然发生的)。
电平表示接收时信号的强度与发送时的强度/假设强度相比。这是物理测量,原则上对于每个 Wifi 硬件都是相同的。但是,通常它没有正确校准等。
链接是对信号质量的计算测量(即硬件/软件从中恢复数据的难易程度)。这受到回声、多径传播、使用的编码类型等的影响;每个人都使用自己的方法来计算它。通常(但不总是)它被计算为与“级别”值处于同一比例的某个值。
根据经验,对于我见过的大多数硬件,周围
-50的东西意味着信号还可以,周围的东西-80意味着它很弱,但可以使用。如果它低得多,则连接变得不可靠。这些值应被视为粗略的指示,而不是您可以依赖的科学数据,并且您不应期望它们在不同的硬件上相似甚至可比,甚至不是“级别”。学习解释它的最好方法是带上你的硬件,随身携带一点,观察信号如何变化以及对速度、错误率等的影响。
所以我认为你对链接感兴趣(只是在那里改变了它)。
只是为了给你更多我搜索的想法,你有这个单行脚本,它动态显示链接值:
watch -n 1 "awk 'NR==3 {print \"WiFi Signal Strength = \" \$3 \"00 %\"}''' /proc/net/wireless"
Run Code Online (Sandbox Code Playgroud)
您可以将它集成到 bash 脚本而不是 python 中:)