最近找个了开源项目来自动录制B站的直播,现在我有些忙,总会错过不少直播,干脆录下来慢慢观看吧。

正好手边有个香橙派可以24小时挂着录制直播,便把服务搭建在这上面了。

简单搭建了一个雪糕棍机架,外挂2块机械硬盘,用mdadm组Raid零。顺手加了块12864上去,可以显示一下IP地址,CPU温度,WIFI信号和硬盘空间等信息。

total

screen

因为我屋里网线接口只有一个,要给电脑用,所以香橙派就只能连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下面)

保存之后使用这些命令:

  1. sudo systemctl daemon-reload:重新读取一下刚添加的keep-wifi.service文件
  2. sudo systemctl enable keep-wifi:将keep-wifi服务设置为开机自启
  3. sudo systemctl start keep-wifi:手动启动keep-wifi服务(不嫌麻烦的话重启一次系统也是OK的)

如果要看日志的话可以使用sudo systemctl status keep-wifi ,然后就可以在屏幕下方看到脚本输出的日志了,可以看到什么时候啊wifi触发了重连之类的。

如果要删掉keep-wifi服务,可以执行下面的命令

  1. sudo systemctl disable keep-wifi:关闭开机自启
  2. sudo systemctl stop keep-wifi:停止服务
  3. 最后手动删掉/etc/systemd/system/keep-wifi.service文件就好了

虽然这个脚本是给香橙派写的,理论上也能用在其它板子或者系统上,只要系统上有nmcli这个命令就是能用的。