恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2000|回复: 26

【脚本】中继自动切换信道 红米 AC2100 OpenWrt 闭源无线 2020/10/12

[复制链接]
发表于 2020-10-11 17:26 | 显示全部楼层 |阅读模式
本帖最后由 jinglei207 于 2020-10-12 23:11 编辑

中继自动切换信道脚本



README:
LEAN的OpenWrt无线闭源驱动 中继的时候不能自动切换信道,花了几个小时写了以下脚本。
也解决的重启后不自动启动中继的问题。



测试固件:
红米AC2100


使用方法:
点击“启动中继”→“中继设置”→“扫描网络”→写上对应的密码→“保存设置”→“连接中继”

注意事项:
如果开启中继,而找不到对应的SSID的话,中继会一直找,这可能导致连接不上WiFi。
比如:开启了5g中继,只有5g会扫描SSID,2g不会扫描和连接不上的情况等问题。
2g和5g是分开的。
有可能在设置WIFI的时候出现以下画面,大概是和脚本有冲突,从新设置一次就可以。



复制脚本 粘贴到命令行即可(SSH, TELNET)。


  1. cat <<'EOF' > /etc/wireless/switch_channel.sh
  2. #!/bin/sh
  3. # Switch Channel Scprit
  4. # 2.4ghz client check

  5. apcli="$1"
  6. #echo "Debug:$apcli begin"
  7. if [ "$apcli" = "apcli0" ]; then
  8.     #echo "Debug:if ra0"
  9.     ra="ra0"
  10.     path='/etc/wireless/mt7615/mt7615.1.dat'
  11. else
  12.     #echo "Debug:if rai0"
  13.     ra="rai0"
  14.     path='/etc/wireless/mt7615/mt7615.2.dat'
  15. fi
  16. state="$(cat /etc/wireless/$apcli)"
  17. #echo "Debug:state $state"
  18. if [ "$state" != "" ]; then
  19.     #echo "Debug:inside state $state"
  20.     ifconfig $apcli up
  21. fi
  22. sleep 60
  23. #echo "Debug:begin while function"
  24. while true; do
  25.     #echo "Debug:in the while function"
  26.     ifconfig | grep -m 1 "$apcli" > /etc/wireless/$apcli
  27.     up_down="$(ifconfig | grep -m 1 "$apcli")"
  28.     #echo "Debug:begin if function, up_down $up_down"
  29.     if [ "$up_down" != "" ]; then
  30.         sta_enable="$(cat "$path" | grep -m 1 "ApCliEnable" | awk -F '=' '{print $2}')"
  31.         #echo "Debug:begin if function, sta_enable $sta_enable"
  32.         if [ "$sta_enable" = "1" ]; then   
  33.             connect="$(iwconfig $apcli | awk -F'"' '/ESSID/ {print $2}')"
  34.             #echo "Debug:begin if function, connect $connect"
  35.             if [ "$connect" = "" ] ; then
  36.                 ssid="$(cat "$path" | grep -m 1 "ApCliSsid" | awk -F '=' '{print $2}')"
  37.                 #echo "Debug:begin if function, ssid $ssid"
  38.                 if [ "$ssid" != "" ] ; then
  39.                     bssid="$(cat "$path" | grep -m 1 "ApCliBssid" | awk -F '=' '{print $2}' | tr 'A-Z' 'a-z')"
  40.                     iwpriv $ra set SiteSurvey=1
  41.                     sleep 1
  42.                     channel=""
  43.                     #echo "Debug:begin if function, bssid $bssid"
  44.                     if [ "$bssid" = "" ] ; then
  45.                         #echo "Debug:begin if function, bssid $bssid, then"
  46.                         if [ "$apcli" = "apcli0" ]; then
  47.                             #echo "Debug:begin if channel 1"
  48.                             channel="$(iwpriv $ra get_site_survey | grep -m 1 "$ssid " | awk '{print $1}')"
  49.                         else
  50.                             #echo "Debug:begin if channel 2"
  51.                             channel="$(iwpriv $ra get_site_survey | grep -m 1 "$ssid " | awk '{print $2}')"
  52.                         fi
  53.                         
  54.                     else
  55.                         #echo "Debug:begin if function, bssid $bssid, else"
  56.                         if [ "$apcli" = "apcli0" ]; then
  57.                             #echo "Debug:begin if channel 3"
  58.                             channel="$(iwpriv $ra get_site_survey | grep -m 1 "$bssid" | awk '{print $1}')"
  59.                         else
  60.                             #echo "Debug:begin if channel 4"
  61.                             channel="$(iwpriv $ra get_site_survey | grep -m 1 "$bssid" | awk '{print $2}')"
  62.                         fi
  63.                     fi
  64.                     #echo "Debug:begin check if channel is empty; $channel"
  65.                     if [ "$channel" != "" ] ; then
  66.                         #echo "Debug:inside check channel; set channel"
  67.                         sed -i "s/^Channel=.*/Channel="$channel"/" $path
  68.                         iwpriv $apcli set ApCliEnable=0
  69.                         iwpriv $ra set Channel="$channel"
  70.                         iwpriv $apcli set ApCliEnable=1
  71.                         sleep 40
  72.                     fi
  73.                 fi
  74.             fi
  75.         fi
  76.     fi
  77.     sleep 20
  78. done
  79. EOF
  80. chmod +x /etc/wireless/switch_channel.sh
  81. touch /etc/wireless/apcli0 /etc/wireless/apclii0
  82. /etc/wireless/switch_channel.sh "apcli0" &
  83. /etc/wireless/switch_channel.sh "apclii0" &

复制代码
运行以下代码,开机自动运行代码:
  1. cat <<'EOF' > /etc/rc.local
  2. /etc/wireless/switch_channel.sh "apcli0" &
  3. /etc/wireless/switch_channel.sh "apclii0" &
  4. EOF

复制代码




我自己编译的固件集成脚本,开机自动运行(精简版,软件都没有):
https://github.com/jinglei207/RM2100/suites/1325622112/artifacts/21192146


云编译:
我的repository: https://github.com/jinglei207/RM2100
教程看这里: https://p3terx.com/archives/buil ... github-actions.html

当到了“Use this template”,改成fork我的repository

记得要fork我的repository,而不是教程里面的repository,不然不集成脚本!




QQ截图20201011105449.png
发表于 2020-10-12 19:53 | 显示全部楼层
面对疾风吧!
来自苹果客户端来自苹果客户端
发表于 2020-10-29 10:24 | 显示全部楼层
收下看看   
发表于 2020-11-1 00:23 | 显示全部楼层
支持一下!!!
发表于 2020-11-1 01:17 | 显示全部楼层
面对疾风吧!
发表于 2020-11-9 13:47 来自手机 | 显示全部楼层
感谢分享!!!
发表于 2020-12-5 04:14 来自手机 | 显示全部楼层
感谢分享!!!
发表于 2020-12-10 11:37 | 显示全部楼层
看看标记下
来自安卓客户端来自安卓客户端
发表于 2020-12-12 11:16 | 显示全部楼层
.。。。。。。。。。。。。。
发表于 2020-12-14 21:37 | 显示全部楼层
看看,标记下
来自安卓客户端来自安卓客户端
发表于 2020-12-14 21:39 | 显示全部楼层
感谢加膜拜!!!
发表于 2020-12-15 17:14 | 显示全部楼层
看看怎么弄
发表于 2020-12-23 09:01 | 显示全部楼层
这可是人才啊。
发表于 2020-12-26 23:55 | 显示全部楼层
中继脚本,看下有没有用
发表于 2021-1-3 16:19 | 显示全部楼层
看看脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2021-5-16 10:55

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表