通过订阅巴法云主题并接收控制消息,在本地网络广播 WOL 魔术包以唤醒指定设备,并支持ssh实现Windows远程关机。项目提供 systemd 与 SysV init 两种安装方式,支持自动重连、心跳与日志轮转,适合守护进程部署。
- 连接
bemfa.com并订阅指定主题,收到on指令后发送 WOL 魔术包 - 自动重连与心跳维持(30 秒
ping),健壮性更好 - 日志写入
wol.log并进行 5MB 大小轮转 - 支持 systemd 与 SysV init 安装,安装脚本自动判断环境
config.ini管理用户参数,无需改动代码- 基于Windows OpenSSH Server的远程关机
main.py:守护进程入口,网络连接与 WOL 逻辑config.ini:用户参数配置(服务器、UID、主题、MAC)install.sh:安装脚本,自动选择 systemd 或 init,并提示输入main.py路径
-
准备环境
- 具有
python3的 Linux 主机 - Linux 主机可访问外网网络(连接
bemfa.com:8344) - 目标控制的电脑设备网卡支持 WOL
- 具有
-
在巴法云平台创建主题
-
配置参数
-
编辑
config.ini:[server] ip=bemfa.com port=8344 [auth] uid=<巴法云分配给你的私钥> [topic] name=<在巴法云中添加的主题> [device] mac=<你的设备MAC,如 CC:28:AA:04:00:53> ip=<你的设备IP,如 192.168.1.100> user=<你的设备ssh登录用户名> password=<你的设备ssh登录密码>
-
其中uid为巴法云分配给你的私钥
-
name是巴法云创建的TCP设备云的主题名称(以三位数字006结尾,006代表开关类型)
-
mac是你的目标远程开机设备MAC地址,用于发送WOL魔术包远程开机。
-
目标主机需要开启bios的wol相关唤醒功能,在设备管理器中右键打开网卡属性,在高级选项卡打开“魔术封包唤醒”,在电源管理选项卡中将“允许此设备唤醒计算机”勾选上。
-
ip,user,password是你的设备ssh登录的ip,用户名,密码,如不需要远程关机可以不设置
-
在powershell中用
whoami可以查看自己的用户名 -
如果是微软账户登录的,ssh的登录密码为微软账户密码,否则为Windows本地密码
-
-
远程关机配置(如不需要设置关机可以跳过)
- 在 Windows 启用 OpenSSH Server,使 Linux 主机可通过 SSH 执行关机命令。
- 进入 “设置 → 系统 → 可选功能 → 添加功能”,安装 OpenSSH Server。
- 管理员 PowerShell 启动并设置自启:
Start-Service sshd Set-Service sshd -StartupType Automatic
- 放行防火墙端口:
New-NetFirewallRule -Name sshd -Protocol TCP -LocalPort 22 -Action Allow
-
在Linux主机安装本服务
- 执行:
sudo bash install.sh或者./install.sh - 按提示输入
main.py的绝对路径,例如:/root/bemfa/wol/main.py - 脚本将自动:
- 若支持 systemd:生成并安装
wom.service,启用并启动 - 若不支持 systemd:生成
/etc/init.d/wom,注册并启动
- 若支持 systemd:生成并安装
- 若需要远程关机服务,请确保系统有以下环境:
- ssh连接远端主机的环境,如openssh-client
- sshpass:用于在脚本中自动输入ssh密码,安装命令如
apt install sshpass,opkg install sshpass
- 执行:
-
验证运行
- systemd:
- 查看状态:
sudo systemctl status wom - 查看日志:
journalctl -u wom -f
- 查看状态:
- init:
- 查看状态:
/etc/init.d/wom status - 日志:
/var/log/wom.log
- 查看状态:
- systemd:
-
在第三方平台添加
- 米家app:
- 在米家app中绑定巴法云平台
- 如果有小爱音箱可以创建小爱音箱的"自定义指令",从而添加到米家“自动化”任务触发
- 如果没有小爱音箱,直接使用小爱同学命令控制,区别是不能添加到米家“自动化”
- home assistant
- 其他支持连接巴法云的平台
- 米家app:
server.ip/server.port:巴法云服务器地址与端口auth.uid:你的 UID,请替换为自己的值topic.name:订阅主题名,控制消息形如topic=<name>&msg=ondevice.mac:被唤醒设备的 MAC 地址,支持AA:BB:CC:DD:EE:FF
- systemd
- 启动:
sudo systemctl start wom - 重启:
sudo systemctl restart wom - 开机自启:
sudo systemctl enable wom - 停止:
sudo systemctl stop wom - 日志:
journalctl -u wom -f
- 启动:
- init
- 启动:
/etc/init.d/wom start - 重启:
/etc/init.d/wom restart - 停止:
/etc/init.d/wom stop - 开机自启:
/etc/init.d/bemfa_wol enable
- 启动:
- 业务日志:
wol.log(与main.py同目录),超过 5MB 轮转到wol.log.bak - systemd:使用
journal,查看journalctl -u wom -f - init:标准输出/错误重定向至
/var/log/wom.log - 常见问题:
- 无法连接服务器:检查防火墙与 DNS,确认
bemfa.com:8344可达 - 收到指令但未唤醒:
- 检查目标主机 BIOS/操作系统是否启用 WOL
- 局域网是否允许广播,端口
9是否被阻断 - MAC 地址是否正确,交换机/AP 是否隔离广播
- 网络未就绪导致启动失败:systemd 单元使用
network-online.target,确保网络服务可用
- 无法连接服务器:检查防火墙与 DNS,确认
- 手动运行(调试):
cd <main.py所在目录>python3 main.py
- 修改配置无需改代码,直接编辑
config.ini
- systemd:
sudo systemctl stop wom && sudo systemctl disable wom- 删除单元文件:
sudo rm /etc/systemd/system/wom.service && sudo systemctl daemon-reload
- init:
- 停止并删除脚本:
/etc/init.d/wom stop && sudo rm /etc/init.d/wom
- 停止并删除脚本:
- 不要在公共仓库中提交真实 UID
- 如需非
root运行,请为运行用户配置访问日志/工作目录权限