最近找个了开源项目来自动录制B站的直播,现在我有些忙,总会错过不少直播,干脆录下来慢慢观看吧。
正好手边有个香橙派可以24小时挂着录制直播,便把服务搭建在这上面了。
简单搭建了一个雪糕棍机架,外挂2块机械硬盘,用mdadm组Raid零。顺手加了块12864上去,可以显示一下IP地址,CPU温度,WIFI信号和硬盘空间等信息。
因为我屋里网线接口只有一个,要给电脑用,所以香橙派就只能连WiFi了。但是有个问题,配置好后开机WiFi确实会自动连接上去,但一旦掉线之后就怎么都连不回去了,我猜应该是系统的问题,因为图形界面版的系统都可以自动回连。
我便写了一个Python脚本来实现自动回连,具体原理是隔一段时间检测一下WiFi有没有连接,如果没有的话就调用命令行手动连接一下。
代码如下,30行不到,不需要安装任何三方Python包就能直接用。但是需要注意系统上要有nmcli这个指令,香橙派是自带的。
import subprocess
import time
def cli(command) -> str:
return subprocess.run(command, shell=True, encoding='utf-8', check=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.strip()
def get_connected_ap(ifname='wlan0'):
for line in cli('nmcli -t -f device,connection d').split('\n'):
sp = line.split(':')
name = sp[0]
access_point = sp[1]
if name == ifname:
return access_point
return None
if __name__ == "__main__":
ssid = 'wifi-ssid' # 这里填你的wifi名字
password = 'wifi-password' # 这里填你的wifi密码
interval = 60 # 每隔60秒检测一次连接状态
while True:
if get_connected_ap() == '':
print('connecting', flush=True)
print(cli(f'nmcli device wifi connect {ssid} password {password}'), flush=True)
time.sleep(interval)
运行方式很简单,将上面的代码保存成一个py文件之后,只需要python3 main.py
就可以启动起来了。
如果需要开机启动的话,我这里还有一份systemd文件,可以设置开机自启动。
[Unit]
Description=a program that keep the connection of wifi for OrangePiZero2
[Service]
ExecStart=/usr/bin/python3 /home/orangepi/keep-wifi/main.py
[Install]
WantedBy=multi-user.target
只需要把这个文件保存到/etc/systemd/system/keep-wifi.service
就好了。(后面的keep-wifi你可以任意取一个名字)
需要注意的是第5行的/home/orangepi/keep-wifi/main.py
这个需要改成你脚本的实际存放路径(我是直接存放在了家目录的keep-wifi下面)
保存之后使用这些命令:
sudo systemctl daemon-reload
:重新读取一下刚添加的keep-wifi.service文件sudo systemctl enable keep-wifi
:将keep-wifi服务设置为开机自启sudo systemctl start keep-wifi
:手动启动keep-wifi服务(不嫌麻烦的话重启一次系统也是OK的)
如果要看日志的话可以使用sudo systemctl status keep-wifi
,然后就可以在屏幕下方看到脚本输出的日志了,可以看到什么时候啊wifi触发了重连之类的。
如果要删掉keep-wifi服务,可以执行下面的命令
sudo systemctl disable keep-wifi
:关闭开机自启sudo systemctl stop keep-wifi
:停止服务- 最后手动删掉
/etc/systemd/system/keep-wifi.service
文件就好了
虽然这个脚本是给香橙派写的,理论上也能用在其它板子或者系统上,只要系统上有nmcli这个命令就是能用的。