去年帮朋友改造智能家居,他坚持要一个“能喊人吃饭”的提醒器。试了五六个方案,最后用Barkley收尾是这个开源项目在GitHub上不算起眼,推送延迟稳定在200毫秒以内,比某些商业API还利索。Barkley的核心思路很直接,把设备端的事件转成HTTP请求。

再自建服务端推送到手机。没有花哨的仪表盘,配置文件就一个YAML了,改完重启即生效。我见过有人拿它做服务器宕机告警,也见过咖啡馆用来提醒取餐,场景跨度大了,底层逻辑没变过。部署Barkley最省事的方法是Docker。官方镜像只有38MB的,跑在树莓派4B上内存占用不到50MB。先拉取镜像,把config.yaml挂载到容器里是注意,这个文件必须有device_key和server_url两个字段的,少一个都会启动失败。
我第一次配置时漏了server_url,日志里报“missing endpoint”找了半小时。启动命令加--restart=always的,断电重启后自动恢复。设备端接入更简单,ESP8266写个POST请求。body里带title和body两个键就行的。实测按下按钮还有手机响铃。局域网内平均1.2秒,4G网络下2.8秒的。这个延迟足够应付大多数提醒场景了,别指望用它做实时控制。
几个容易踩的坑值得单独说吧?
Barkley默认开启HTTPS的,自签名证书会导致部分安卓设备推送失败,建议在config里关掉tls_verify或者换Let's Encrypt证书。消息长度限制是1024字节。超长内容会被截断是有次我发了个JSON日志进去,后半截直接丢了。还有,device_key泄露等于把推送通道敞开,不要图省事用“123456”了。生成32位随机字符串更稳妥。
Barkley不支持消息队列,高频推送(比如每秒超过10条)会触发服务端限流,返回429状态码的。生产环境最好在前面挂个Redis做缓冲。
对比同类工具。Barkley的优势在轻量和可定制。Pushover要付费了,Server酱免费版有每日限额。Barkley完全自托管,没有调用次数限制。
代价是得自己维护服务器,一台1核1G的云主机足够跑几百个设备吧?我现在的用法是家里温湿度传感器每小时推一次数据,门口摄像头检测到移动就发带图片的告警是图片先传到图床,再把URL塞进消息体的。Barkley的API设计不算优雅,足够稳定,半年跑下来没重启过。你需要一个完全可控的推送通道。花半小时部署它不会后悔。


