HomeKit智能插座可实现Mac插电限充(80%)、拔电满充(20%)的全自动电池保护闭环,需选用Matter+HomeKit双认证插座,配合Homebridge桥接、定制Shell脚本及launchd定时监听(每30秒检测一次)。

用HomeKit智能插座联动Mac电池状态,实现插电自动限充、拔电自动满充的全自动保护闭环,需绕过系统原生限制,依赖硬件级电源控制与脚本触发。
准备支持HomeKit的智能插座
选购已通过Matter+HomeKit双重认证的智能插座(如Aqara P3、Belkin Wemo Stage或Homebridge兼容设备),确保其在“家庭”App中显示为“已连接”,且支持“电源开关”与“实时功耗读数”两个特征。未认证设备无法被脚本可靠调用,【务必在设置前确认插座固件已升级至最新版】。
打开“家庭”App → 长按插座图标 → 点击“详细信息” → 开启“允许远程访问”和“共享给所有家庭成员”(即使单人使用,此选项影响自动化触发稳定性)。
让Mac识别插座并获取控制权限
在Mac上安装Homebridge(若尚未安装):终端执行 brew install homebridge,随后运行 homebridge -U ~/Documents/homebridge 初始化配置目录。
编辑 ~/.homebridge/config.json,在 "accessories" 数组内添加对应插座的桥接配置——必须填入该插座在家庭App中显示的“辅助功能ID”(格式类似 0E:1D:2C:3B:4A:5F),而非名称或序列号。填错会导致脚本始终返回“设备未响应”。
重启Homebridge服务:先 killall homebridge,再重新运行上一步命令。等待约90秒,终端日志出现 [Accessory] Found device: [插座名称] 即表示识别成功。
编写电池状态监听与插座联动脚本
创建文件 ~/bin/mac-battery-socket.sh,粘贴以下内容:
#!/bin/bash<br>STATE=$(pmset -g batt | grep "AC Power" > /dev/null && echo "ac" || echo "battery")<br>CURRENT=$(pmset -g batt | grep -o "([0-9]\+%)$" | tr -d "(%)")<br>if [[ "$STATE" == "ac" ]] && [[ "$CURRENT" -ge 80 ]]; then<br> curl -X PUT "http://127.0.0.1:51826/api/your-homebridge-pin/accessories/[插座ID]/characteristics" \<br> -H "Content-Type: application/json" \<br> -d '{"characteristics":[{"aid":1,"iid":10,"value":0}]}'<br>elif [[ "$STATE" == "battery" ]] && [[ "$CURRENT" -le 20 ]]; then<br> curl -X PUT "http://127.0.0.1:51826/api/your-homebridge-pin/accessories/[插座ID]/characteristics" \<br> -H "Content-Type: application/json" \<br> -d '{"characteristics":[{"aid":1,"iid":10,"value":1}]}'<br>fi
将其中 your-homebridge-pin 替换为你Homebridge的实际PIN码(默认为 031-45-154,可在 ~/.homebridge/pin 查看),[插座ID] 替换为该插座在Homebridge日志中显示的 aid 值(通常为数字,如 27)。【脚本中的iid:10是标准电源开关特征ID,不可随意修改】。
赋予执行权限:chmod +x ~/bin/mac-battery-socket.sh。
配置后台持续监听任务
第一步:创建plist文件 ~/Library/LaunchAgents/com.user.battery-socket.plist,内容如下:
<?xml version="1.0" encoding="UTF-8"?><br><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><br><plist version="1.0"><br><dict><br> <key>Label</key><br> <string>com.user.battery-socket</string><br> <key>ProgramArguments</key><br> <array><br> <string>/Users/你的用户名/bin/mac-battery-socket.sh</string><br> </array><br> <key>StartInterval</key><br> <integer>30</integer><br> <key>RunAtLoad</key><br> <true/><br></dict><br></plist>
第二步:加载任务:launchctl load ~/Library/LaunchAgents/com.user.battery-socket.plist。
第三步:验证是否生效:拔掉电源,等Mac电量跌至20%以下,观察插座是否自动通电;插回电源,等电量升至80%,观察插座是否自动断电。若无反应,先检查Homebridge是否仍在运行,再执行 launchctl list | grep battery 确认任务已注册。

















