智能家居设备 WIFI 掉线求助
家里 2.4g 频段的 WIFI 智能家居设备 15 个以内,问了客服说 2.4g 带机量为 20
偶发所有 2.4g 设备掉线,故障频率大概为每月 1-2 次,5g 频段设备不受影响
有两个问题:
1. 这种情况正常吗?即 ax88upro 的 2.4g 性能是不是就是这样
2. 如果是因为路由器 2.4g 性能不足,可以考虑在入一个 WIFI 路由器,但是选择哪款路由器带智能家居设备合适呢?
这个假期,我做的最有趣的一件事就是将路由器改造成了一台稳定的 NAS,其中由 Aria2 实现的离线下载服务器是作为 NAS 的一个核心功能。用着非常方便,然而却有以下几个问题:
重要补充说明
我的代码依赖于 Aria2 编译时的 XML 库依赖,而在某些版本中是不带这个依赖的。所以本篇文章不一定适用于所有情况。
为了解决这 2 个问题,我编写了一个 Python 脚本,完美地解决了困扰。
脚本在 Python3 下运行正常,未对 Python2 测试。不依赖第三方模块。
为了实现 “让暂停的任务继续下载”,需要按照 Aria2 文档来调用 RPC,所以 需要在代码内修改相关的连接地址、密码等信息。
脚本同时会自动读取任务列表,并在下载目录找到所有不属于任务列表中的文件,删除之。
你也可以在 fileWhiteList
变量中设置不想要删除的文件的白名单。
#!/usr/bin/python # -*- coding: UTF-8 -*- # 1. start all paused tasks # 2. delete other files on disk # API: https://aria2.github.io/manual/en/html/aria2c.html#rpc-interface from xmlrpc import client as xmlc import os rpcUrl = 'http://127.0.0.1:6800/rpc' rpcToken = 'token:PASSWORD' downloadPath = '/root/usb/nas/download/' # same to aria2 config fileWhiteList = ['/bypy', '/PROTECTED'] # while list for delete s = xmlc.ServerProxy(rpcUrl) api = s.aria2 # start all tasks api.unpauseAll(rpcToken) tasks = api.tellActive(rpcToken) tasks += api.tellStopped(rpcToken, 0, 99) tasks += api.tellWaiting(rpcToken, 0, 99) for task in tasks: # started BT tasks if ('bittorrent' in task) and ('info' in task['bittorrent']): filename = task['bittorrent']['info']['name'] fileWhiteList.append(filename) # other tasks else: for file in task['files']: path = file['path'] if path.startswith('[METADATA]'): path = path.replace('[METADATA]', '') else: path = os.path.basename(path) fileWhiteList.append(path) # del same items fileWhiteList = set(fileWhiteList) print('fileWhiteList', fileWhiteList) def isStrContainItemInList(str, list): for item in list: if item in str: return True return False for parent, dirnames, filenames in os.walk(downloadPath, topdown=False): for filename in filenames: path = os.path.join(parent, filename) if not isStrContainItemInList(path, fileWhiteList): os.remove(path) print('del file: ', filename) for dirname in dirnames: path = os.path.join(parent, dirname) if not isStrContainItemInList(path, fileWhiteList): try: os.rmdir(path) print('del dir: ', dirname) finally: pass
一般来说,我们需要这段脚本在开机后自动运行,加入至 /etc/rc.local
即可:
sleep 1m && python /root/aria2/afterRun.py > /var/log/aria2.afterRun.log &
Aria2 bt-tracker 跟踪服务器列表自动更新:https://www.feng.ee/aria2-trackers-auto-update.html
我这基于 OpenWrt 的路由器可以说是超级强大,不仅仅是一个无线路由器,插上 U 盘可以变身为 NAS+下载机,可以运行 Python 小程序,甚至还有人在上面搭建 LNMP 运行 Owncloud。可以说是一台 VPS 可以干的事情我都可以在宿舍的路由器上实现,十分强大。
然而最近才了解到,这颗 580MHz 的 MTK7260A 仅仅是一颗智能路由器当中处于中低端的 CPU,说实话我是不信的,于是打算用 UnixBench 来客观测试一下这个小家伙的真实水平。
UnixBench 是基于 Perl 并拥有 30 年历史的基准测试软件,也就是跑分软件。通过运行一系列科学计算函数测试 CPU 性能,以及 OS 的任务执行效率、硬盘性能等。最终得到一个分数。
路由器:Newifi Mini
OS:LEDE 17.01.2(一个 OpenWrt 的著名分支)
Linux Kernel:4.4.71
架构:MIPS
RAM:128M
ROM:16M
系统基本为纯净的 LEDE,除了正在运行着路由器的基本网络服务外,跑分时运行了一个 PPTP VPN Client 服务。
OpenWrt 的 libgcc 套件体积 22M 的样子,但正如上面所写,我的路由器 ROM 总共只有 16M,挂载分区什么的不是很有必要,于是我使用交叉编译 UnixBench。
简单介绍一下交叉编译的步骤吧:
1、找一台 x64 的 Linux 机器,按照 <https://wiki.openwrt.org/doc/devel/crosscompile> 步骤开始接下来的操作。必须得要 x64 的主机。
2、下载你的路由器当前系统当前机型对应的 DevPack,比如我的 LEDE 在这里下载的:<http://downloads.lede-project.org/releases/17.01.2/targets/ramips/mt7620/lede-sdk-17.01.2-ramips-mt7620_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz>,OpenWrt 请在 <https://downloads.openwrt.org/> 下寻找。
3、按照官方 Wiki 的步骤将编译器添加到环境变量。
4、下载 UnixBench 的源代码并解压:<https://github.com/kdlucas/byte-unixbench>
5、开始编译。这里注意官方 Wiki 有误,请使用 make CC=mipsel-openwrt-linux-musl-gcc LD=mipsel-openwrt-linux-musl-ld
命令使用指定编译器进行编译。
6、编译失败?根据提示删除 Makefile 中编译器无法识别的两个参数,即可完成编译。
7、将除了 /src 外的文件 scp 到路由器。
8、安装相关依赖:opkg install perlbase-posix perl perlbase-time perlbase-io perlbase-findbin coreutils-od
,跑分完后即可删除。
9、尝试运行 ./Run,你会发现弹出错误,根据错误内容做出以下修改。
10、修改 ./Run,注释掉 use strict
和两处尝试执行 make all
的语句。
11、这时再运行 ./Run,就已经自动开始跑分了。虽然会有几个 Wrong 弹出,但是不要紧。
======================================================================== BYTE UNIX Benchmarks (Version 5.1.3) System: : GNU/Linux OS: GNU/Linux -- 4.4.71 -- #0 Wed Jun 7 19:24:41 2017 Machine: mips (unknown) Language: (charmap=, collate=) 17:01:34 up 13:01, load average: 0.25, 0.49, 0.34; runlevel ------------------------------------------------------------------------ Benchmark Run: Sun Sep 24 2017 17:01:34 - 17:37:25 0 CPUs in system; running 1 parallel copy of tests Dhrystone 2 using register variables 1261494.8 lps (10.0 s, 7 samples) Double-Precision Whetstone 24.3 MWIPS (9.9 s, 7 samples) Execl Throughput 452.5 lps (29.9 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 41.0 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 18.5 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 115.4 KBps (30.0 s, 2 samples) Pipe Throughput 154847.5 lps (10.0 s, 7 samples) Pipe-based Context Switching 51157.7 lps (10.0 s, 7 samples) Process Creation 1260.9 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 43.2 lpm (61.1 s, 2 samples) Shell Scripts (8 concurrent) 6.5 lpm (64.3 s, 2 samples) System Call Overhead 308931.8 lps (10.0 s, 7 samples) System Benchmarks Index Values BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 1261494.8 108.1 Double-Precision Whetstone 55.0 24.3 4.4 Execl Throughput 43.0 452.5 105.2 File Copy 1024 bufsize 2000 maxblocks 3960.0 41.0 0.1 File Copy 256 bufsize 500 maxblocks 1655.0 18.5 0.1 File Copy 4096 bufsize 8000 maxblocks 5800.0 115.4 0.2 Pipe Throughput 12440.0 154847.5 124.5 Pipe-based Context Switching 4000.0 51157.7 127.9 Process Creation 126.0 1260.9 100.1 Shell Scripts (1 concurrent) 42.4 43.2 10.2 Shell Scripts (8 concurrent) 6.0 6.5 10.9 System Call Overhead 15000.0 308931.8 206.0 ======== System Benchmarks Index Score 11.3
总分 11.3 是什么水平呢,我用我的洛杉矶服务器也跑了一下,3.5GHz 的 E3 处理器,不过是共享主机,并且只有单核的使用权。得到的分数为 1245.
这说明,这个功率为 10W 不到的路由器综合能力果然很弱,哈哈哈。。。
不过就算再弱,竟然可以跑完整的 Linux 4.4,能够运行起 Python、Nginx、MySQL、PHP-FPM、SSHD、Samba、DNS 等等一系列服务,还非常的稳定,不得不让人对 Linux 竖起大拇指呀~
后来我又换了 K3 路由器,ARM 双核 1.4GHz,可以代表着当前家用路由的最高水平,我用它跑了一遍 UnixBench,结果见下一页。