如何创建仅在信号 ≥ 30 % 时连接到 WiFi 的配置?

如何创建仅在信号 ≥ 30 % 时连接到 WiFi 的配置?

是否有机会创建执行以下工作的配置?


仅当信号强于 30 % 时才连接到可用的 WiFi


在很多地方,我都生活在 wifi 信号几乎不可用的边缘地区。因此,那些不可避免的信号中断就很烦人,所以我总是不得不自己手动在移动数据和 WiFi 之间切换。

有没有机会设置一些配置,只允许在信号强度足够强的情况下连接到WiFi以避免终止(并由此保证稳定的连接)?


简化方法:

如果信号强度 < 30 % ⇒ 连接不是允许

如果信号强度 ≥ 30 % ⇒ 允许连接


当然,30% 的值只是一个示例...也许 20% 更有意义,我们拭目以待!

答案1

我尝试用 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

您必须以 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

因此,您希望从“质量”列中提取正确的值。该文件为您提供有关该系统和网络之间连接的信息。在这里你有更多信息关于它,并解释每个质量子列的含义,让我引用这另一篇文章:

分贝是一个对数单位(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"

你可以将它集成到 bash 脚本中而不是 python 中:)

相关内容