Armbian切换Wifi

找了个盒子刷了Armbian,主要有两个作用,一个是做离线下载和SMB。另外一个作用是用来搞打印服务器,因为家里角落比较多,因此有两个路由器信号,而打印机所在的位置的wifi信号,外网速度并不好,因此想到平时盒子做下载机,就把盒子放到角落A,需要打印就把盒子放到角落B,然而不管是在角落A还是在角落B,两个wifi信号都可以接受到,但是我发现Armbian并不能主动切换到wifi信号更好的热点,因此写一个脚本来切换wifi

#!/bin/bash# 两个wifi的密码都一样
wifi_pwd="xxxxxxxxxx"# 定义函数:查询热点信号,参数是wifi ssid
get_wifi_signal() {local ssid=$1echo "获取wifi:$ssid的信号情况"wifi_signal=''#一个wifi名称,可能对应两项(5G/2.4G),awk同时过滤掉已经连接上的connect_status=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $1}')if [ connect_status != '*' ];thenwifi_signal=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $7}')else# 说明当前行wifi是连接上的wifi_signal=$(nmcli dev wifi list | grep $ssid | awk 'NR==1 {print $8}') fi# 注意定义函数返回值时echo和return的区别和调用函数获取返回值的区别return $wifi_signal
}# 定义函数:查询当前连接的热点信息
get_current_connection() {# 查看当前连接的热点名称,当服务器存在多个网桥时,应注意过滤条件。保证查询到正确的信息current_conn=$(nmcli device status | grep wlan0 | grep wifi | grep -v disconnected | awk '{print $4}')# 这里使用的是echo返回,调用方使用方式为 var=$(get_current_connection)echo $current_conn
}# 定义切换wifi函数
switch_wifi() {# 查询两个热点的信号get_wifi_signal yun# 获取函数上一步的操作结果yun_signal=$?get_wifi_signal apap_signal=$?echo "搜到的热点信号强度[ap=$ap_signal , yun=$yun_signal]"# 执行函数并得到当前连接的热点名称current_conn=$(get_current_connection)if [ $current_conn = 'ap' ]; thenecho '当前连接的热点是[ap],判断当前热点信号强度是否小于[yun],如果小于切换到yun热点'if [ $ap_signal -lt $yun_signal ]; thenecho '当前连接的热点信号小于另一个热点信号,切换到另一个热点'nmcli device wifi connect yun password $wifi_pwdfielif [ $current_conn = 'yun' ]; thenecho '当前连接的热点是[yun],判断当前热点信号强度是否小于[ap],如果小于切换到ap热点'if [ $yun_signal -lt $ap_signal ]; thenecho '当前连接的热点信号小于另一个热点信号,切换到另一个热点'nmcli device wifi connect ap password $wifi_pwdfielseecho '当前未连接任何热点,准备连接信号最好的热点'if [ $yun_signal -lt $ap_signal ]; thennmcli device wifi connect ap password $wifi_pwdelsenmcli device wifi connect yun password $wifi_pwd fifi
}#############Main###########
while true; doecho "=======$(date +"%Y-%m-%d %H:%M:%S")开始执行热点检测,确保连上信号最好的热点======"# 检测是否有指定的两个或以上热点(考虑双频合一)wifi_count=`nmcli dev wifi list | grep -E 'yun|ap' | wc -l`#使用==进行字符串比较时,它区分大小写。如果不区分大小写的比较,可以使用=操作符if [ $wifi_count = 1 ]; thenecho '只搜索到一个热点,判断热点是否已连接,随后执行操作'# 执行函数并得到当前连接的热点名称current_conn=$(get_current_connection)if [ -z $current_conn ]; thenecho '当前未连接热点,准备连接热点......'# 前一个wifi连接成功不会连接下一个wifi,前一个wifi连接失败才会连接下一个wifinmcli device wifi connect ap password $wifi_pwd || nmcli device wifi connect yun password $wifi_pwd fielif [ $wifi_count = 0 ]; thenecho '未搜到热点,不再处理'elseswitch_wififisleep 600
done

把脚本放到crontab中执行就可以了,可以使用crontab中可以使用@reboot关键字

脚本大致意思是,先查询预定义的两个wifi信号盒子是否能搜到,可以搜到一个预定义的热点,则直接连接那个热点,搜不到热点则不处理,搜到了多个热点,则准备执行热点切换。首先查询预定义的两个热点的信号是多少,这里一定要注意查询条件需要符合自己盒子的情况,然后查询当前连接的是哪个热点,根据当前连接热点的信号情况,判断是否需要切换热点。

以上整个动作的执行包含在while循环中,10分钟执行一次

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Relocations for this machine are not implemented,IDA版本过低导致生成汇编代码失败

目录 1、问题描述 2、安卓app发生崩溃,需要查看汇编代码上下文去辅助分析 3、使用IDA打开.so动态库文件,提示Relocations for this machine are not implemented 4、IDA版本较老,不支持ARM64的指令集,使用7.0版本就可以了 5、…

猫罐头避雷!猫咪罐头该如何挑选?

近年来,国货猫罐头在国内市场的崛起,真的是又喜又忧。喜的是国货的崛起打破了进口猫罐头一家独大的局面,忧的是担心大家可能会被网上大量的内容所迷惑,导致踩了不少坑。 那么面对市面上种类繁多的猫罐头,我们应该怎么…

linux系统和网络(一):文件IO

本文主要探讨linux系统编程的文件IO相关知识。 文件IO 文件存在块设备中为静态文件,open打开文件,内核在进程中建立打开文件的数据结构在内存中用于记录文件的文件参数,开辟一段内存用于存放内容,将静态文件转为动态文件 打开文件后对文件的读写操作都为对动态…

【最新版】在WSL上运行 Linux GUI (图形用户界面)应用(Gnome 文本编辑器、GIMP、Nautilus、VLC、X11 应用)

文章目录 一、 安装WSL0. 先决条件1. 全新安装2. 现有 WSL 安装3. 注意事项 二、运行 Linux GUI 应用1. 更新发行版中的包2. 安装 Gnome 文本编辑器启动 3. 安装 GIMP启动 4. 安装 Nautilus启动 5. 安装 VLC启动 6. 安装 X11 应用 适用于 Linux 的 Windows 子系统 (WSL) 现在支…

MATLAB求解微积分(代码+详细解读)

大多数实际工程问题常常简化为微分方程,其求解显地至关重要。 符号微积分 极限 % matlab提供的求极限函数limit(),其调用格式为 % y limit(fun,x,x0) % fun为要求解的函数,x为函数自变量,x0为函数自变量的取值,x趋近于x0 clc;…

windows环境下cmd找不到pip

报错信息:pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 pip ~~~ CategoryInfo : ObjectNotFou…

DataX迁移MongoDB

DataX迁移MongoDB 项目地址:GitHub - alibaba/DataX: DataX是阿里云DataWorks数据集成的开源版本。迁移MongoDB,读取组件为mongodbreader,写入组件为mongodbwriter 源码修改 目前版本中,在迁移MongoDB时,若列的类型为…

7-12 sdut-Collection-sort--C~K的班级(II)(java for PTA)

经过不懈的努力,C~K终于当上了班主任。 现在他要统计班里学生的名单,但是C~K在教务系统中导出班级名单时出了问题,发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个, 但是工作量太大了&am…

Linux-----13、用户、组

# 用户、组 # 一、用户管理 # ㈠ 用户概念及作用(了解) **用户:**指的是Linux操作系统中用于管理系统或者服务的人 一问:管理系统到底在管理什么? 答:Linux下一切皆文件,所以用户管理的是相应的文件 二问&#x…

java爬虫Jsoup主要类及功能使用详解

一、Jsoup的主要功能 二、Jsoup的主要类 org.jsoup.Jsoup类org.jsoup.nodes.Document类org.jsoup.nodes.Element类 三、Jsoup使用 maven引入加载文档解析文档使用选择器获取元素处理元素数据操纵HTML和文本从元素中提取属性,文本和HTML 一、Jsoup的主要功能 Jso…

React-Router v6设置默认路由

参考连接: https://www.soinside.com/question/rH6pzCBpqbVnntVKTnQ4oY 方式1 代码如下&#xff08;示例&#xff09;&#xff1a; 关键字 index<Routes><Route path"/"><Route index element{<ComponentA />} /><Route path"pat…

【UML】第6篇 用例图

目录 一、什么是用例图 二、参与者 2.1 什么是参与者 2.2 如何识别参与者 2.3 参与者之间的关系 从今天开始&#xff0c;就到了最干的各种的图的梳理和学习了&#xff0c;未来AI就能编码了&#xff0c;把业务建模和设计的基本功打好&#xff0c;也许能和AI和平相处呢。 一…

UART协议——FPGA代码篇

一.串口&#xff08;UART&#xff09;协议简介 UART 串口通信有几个重要的参数&#xff0c;分别是波特率、起始位、数据位、停止位和奇偶检验位&#xff0c;对于两个使用UART 串口通信的端口&#xff0c;这些参数必须匹配&#xff0c;否则通 起始位&#xff1a;表示数据传输的开…

科技云报道:至简至强,新一代服务器的算力美学

科技云报道原创。 在这个时代&#xff0c;数据和计算的边界正在迅速扩张。 随着云计算、物联网和人工智能的日益成熟&#xff0c;对算力的需求已经突破了传统的限制&#xff0c;进入了一个全新的阶段。在这个阶段&#xff0c;不仅是算力的量级发生了变化&#xff0c;其性质和…

力扣:202. 快乐数(Python3)

题目&#xff1a; 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果…

System.Text.Json.JsonSerializer 自定义实现序列化 DataSet、DataTable

System.Text.Json&#xff08;从 .NET Core 3.1 开始&#xff09;&#xff0c;为了能够序列化这些类型&#xff0c;您需要为JsonConverter<T>您需要的类型实现自己的类型并在JsonSerializerOptions. 为您要求的特定类型编写一个序列化程序应该相当容易。 如果您不想自己…

源码解析8-QSS原理-案例-Qt的qss特殊设置多个子控件的颜色与伪状态

Qt源码解析 索引 源码解析8-QSS原理-案例-Qt的qss特殊设置多个子控件的颜色与伪状态 有些时候我们想特殊设置QSS&#xff0c;比如某一类标题栏目&#xff0c;某一个窗口中的颜色。 重要的是我们需要同时设置多个特殊的按钮等。 统一设置所有 单一按钮全局设置 QPushButton…

2-以太坊虚拟机

以太坊虚拟机&#xff0c;简称EVM&#xff0c;是用来执行以太坊上的交易的。业务流程如下图&#xff1a; 输入一笔交易&#xff0c;内部会转换成一个Message对象&#xff0c;传入EVM执行。 如果是一笔普通转账交易&#xff0c;那么直接修改StateDB中对应的账户余额即可。如果…

数据结构:树(Tree)

树型结构 树的概念 树是一种非线性结构&#xff0c;他是由n&#xff08;n>0&#xff09;个有限结点组成的一个具有层次关系的集合。 当n0时&#xff0c;该树为空树。 在任意一个非空树中都满足以下条件&#xff1a; 1、有一个特殊的结点&#xff0c;称为根结点&#xff0c…

导航守卫 的使用 模板

一、什么是导航守卫&#xff1f; 正如其名&#xff0c;vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。这里有很多方式植入路由导航中&#xff1a;全局的&#xff0c;单个路由独享的&#xff0c;或者组件级的。 导航守卫的三个参数 to&#xff1a;将要访问的…