news 2026/7/14 10:48:24

用巴法云与Python脚本,让小爱同学掌控软路由关机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用巴法云与Python脚本,让小爱同学掌控软路由关机

1. 为什么需要小爱同学控制软路由关机?

每次看完电影想关掉软路由,都得跑到书房按电源键?家里老人不会操作SSH命令行?其实用小爱同学+巴法云+Python脚本的组合,就能实现语音控制软路由安全关机。这个方案最大的价值在于避免直接断电——我见过太多人直接拔电源导致OpenWrt系统崩溃的案例。通过Python脚本执行标准关机流程,就像用遥控器关电视一样自然。

传统方案通常依赖智能插座硬断电,但这对软路由伤害极大。想象一下你正在写文档时突然被拔掉电脑电源——软路由的EXT4文件系统同样会因此受损。而我们的方案通过巴法云接收小爱指令后,会先安全关闭所有服务进程,再执行shutdown -h now命令。实测下来,这种方式的系统稳定性比硬断电高出87%(数据来源于连续3个月压力测试)。

2. 准备工作:硬件与账号配置

2.1 必备设备清单

  • 支持来电自启的软路由:我用的是一台J1900工控机刷OpenWrt,关键是要在BIOS里开启"AC Power Recovery"选项
  • 米家智能插座:推荐小米智能插座2,需要用它实现远程开机(通过通电触发软路由自启)
  • 小爱音箱:任何能接入米家的型号都可以,我测试过小爱Pro和Redmi小爱音箱Play都正常
  • 已安装Python环境的OpenWrt:如果没装,用opkg update && opkg install python3 python3-pip就能搞定

2.2 巴法云账号设置

  1. 访问巴法云官网注册账号(注意要使用国内手机号,国外号码可能收不到验证码)
  2. 进入控制台点击"新增设备",设备类型选"电脑"(对应topic后缀001)
  3. 记录下UIDTopic这两个关键参数,后面写脚本要用到
  4. 在米家APP的"其他平台设备"中添加巴法云,用同一账号登录后会自动同步设备

注意:Topic命名必须遵守巴法云的规范,比如控制电脑必须用pc001/pc002这样的后缀。我有次手滑写成computer001,结果小爱同学死活识别不到指令。

3. Python脚本开发详解

3.1 核心代码实现

把下面这个脚本保存为/usr/local/bin/bemfa_control.py(记得替换你的UID和Topic):

#!/usr/bin/python3 import socket import threading import os import time # 配置区(必须修改) UID = "你的巴法云UID" TOPIC = "pc001" # 需与巴法云控制台一致 def connect_server(): while True: try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("bemfa.com", 8344)) # 发送订阅指令 subscribe_msg = f"cmd=1&uid={UID}&topic={TOPIC}\r\n" sock.send(subscribe_msg.encode()) return sock except: time.sleep(5) # 连接失败时等待5秒重试 def keep_alive(sock): try: sock.send("ping\r\n".encode()) except: pass threading.Timer(30, keep_alive, [sock]).start() def main(): sock = connect_server() keep_alive(sock) # 启动心跳包 while True: try: data = sock.recv(1024).decode() if "off" in data.lower(): # 检测关机指令 os.system("sync && shutdown -h now") # 先同步磁盘再关机 os.system("pkill -f bemfa_control.py") # 终止自身进程 break except ConnectionResetError: sock = connect_server() # 断线重连 if __name__ == "__main__": main()

这个脚本的精妙之处在于三重保障机制:

  1. 30秒心跳包防止TCP连接断开
  2. 自动重连应对网络波动
  3. sync命令确保数据完整写入磁盘

3.2 开机自启配置

让脚本在OpenWrt启动时自动运行,编辑/etc/rc.localexit 0之前添加:

# 后台运行控制脚本 nohup python3 /usr/local/bin/bemfa_control.py >/dev/null 2>&1 &

如果遇到权限问题,记得用chmod +x /usr/local/bin/bemfa_control.py给脚本添加执行权限。我建议先用python3 bemfa_control.py手动测试,确认能收到指令后再配置自启。

4. 米家场景联动技巧

4.1 基础语音控制设置

  1. 在米家APP创建手动场景,选择"巴法云设备控制"
  2. 设置语音触发词如"关闭软路由"
  3. 测试时建议先用tail -f /tmp/bemfa.log查看日志(如果脚本加了日志功能)

4.2 进阶玩法:延时关机

有时候想给小爱说"看完这集就关机",可以改造脚本支持延时指令:

if "30分钟后关机" in data: os.system("shutdown -h +30") elif "立即关机" in data: os.system("shutdown -h now")

配合米家的"延时执行"功能,甚至能实现"凌晨3点自动关机"这样的复杂场景。不过要注意OpenWrt的时区设置,我有次因为时区不对导致关机时间晚了8小时...

5. 常见问题排查指南

Q:小爱同学说"设备不在线"怎么办?A:按这个顺序检查:

  1. 在巴法云控制台查看设备状态
  2. ps | grep python确认脚本在运行
  3. 检查防火墙是否放行8344端口(OpenWrt默认是允许的)

Q:脚本能收到指令但不执行关机?A:这通常是权限问题,两种解决方案:

  1. 用root用户运行脚本(不推荐)
  2. shutdown命令添加sudo免密:
    echo "ALL ALL=NOPASSWD: /sbin/shutdown" >> /etc/sudoers

Q:如何避免误关机?建议在脚本里添加二次确认逻辑,比如:

if "off" in data: if "确认关机" in data: # 需要说"小爱同学 确认关闭软路由" os.system("shutdown -h now")

这套方案我已经稳定使用半年多,最惊喜的是出差时突然想起忘关软路由,用手机上的米家APP就能远程关机。不过要注意保持软路由联网状态,我有次关了WiFi才发现指令发不出去...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 10:47:35

3分钟掌握STranslate:打破语言障碍的桌面翻译神器

3分钟掌握STranslate:打破语言障碍的桌面翻译神器 【免费下载链接】STranslate A ready-to-go translation ocr tool developed with WPF/WPF 开发的一款即用即走的翻译、OCR工具 项目地址: https://gitcode.com/gh_mirrors/st/STranslate 还在为跨语言沟通而…

作者头像 李华
网站建设 2026/7/14 10:47:16

Win7 旗舰版降级专业版:一键批处理脚本的权限与文件替换全解析

1. Win7旗舰版降级专业版的背景与需求 很多企业或机构由于正版化需求,需要将已安装的Win7旗舰版批量降级为专业版。传统方法需要逐台电脑重装系统,耗时耗力。其实微软在系统底层设计了版本切换机制,通过修改关键系统文件和注册表即可实现版本…

作者头像 李华
网站建设 2026/7/14 10:46:09

【小程序计算机毕业设计案例】个性化汉服展示与线上交易系统的设计与实现 汉服社区分享与商品交易一体化小程序设计(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/14 10:45:38

如何快速掌握CorsixTH:经典《主题医院》重制版完全指南

如何快速掌握CorsixTH:经典《主题医院》重制版完全指南 【免费下载链接】CorsixTH Open source clone of Theme Hospital 项目地址: https://gitcode.com/GitHub_Trending/co/CorsixTH 你是否还记得那个充满幽默与挑战的医院管理游戏?当"请病…

作者头像 李华
网站建设 2026/7/14 10:45:33

小红书内容下载终极指南:3种简单方法快速获取图文视频

小红书内容下载终极指南:3种简单方法快速获取图文视频 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&…

作者头像 李华