mqttwarn + Server酱:把 MQTT 主题消息转成微信通知

效果:MQTT 主题收到消息后,mqttwarn 自动通过 Server酱 把内容推送到你的微信。

前置条件

  • Server酱 SendKey:登录 sct.ftqq.com,在「SendKey」页面复制(30 秒获取教程)。schan:// 协议支持 SCT 开头的 SendKey。
  • mqttwarn 已安装并正常运行,能连接到你的 MQTT broker。
  • Apprise 已安装(pip install apprise),mqttwarn 通过 apprise 服务插件对接 Server酱。

配置步骤

1. 在 mqttwarn.ini 中添加 apprise target

[config:apprise]
targets = {
    'serverchan': {
        'baseuri': 'schan://你的SENDKEY'
    }
  }

你的SENDKEY 替换为实际 SendKey(SCT 开头)。schan:// 是 Apprise 中 Server酱的专用协议,底层调用 https://sctapi.ftqq.com/你的SENDKEY.send

2. 将 MQTT 主题映射到该 target

[home/sensor/alert]
targets = apprise:serverchan

当 MQTT 主题 home/sensor/alert 收到消息时,mqttwarn 会通过 Server酱 推送到微信。把段名换成你实际要监听的 MQTT 主题即可。

3. 命令行自测

在配置 mqttwarn 之前,先用 apprise 命令行工具验证 SendKey 是否可用:

pip install apprise && apprise -t "测试" -b "正文" "schan://你的SENDKEY"

命令行能收到微信通知,说明 SendKey 和 schan:// 协议工作正常。

4. 重启 mqttwarn

重启 mqttwarn 服务使配置生效,向对应 MQTT 主题发送一条测试消息,检查微信是否收到通知。

完整示例

在 mqttwarn.ini 中添加以下配置(确保已正确配置 MQTT broker 连接):

[config:apprise]
targets = {
    'serverchan': {
        'baseuri': 'schan://你的SENDKEY'
    }
  }

[home/sensor/alert]
targets = apprise:serverchan

如需同时推送到企业微信、钉钉或飞书群,参阅通道配置说明。通用 Apprise 接法详见 Apprise 接入 Server酱

常见问题

每天能发多少条消息?

免费额度为每天 5 条,每分钟上限 50 条。订阅会员目前特价最低 3 元/月,一天最多可发 1000 条(价格详情)。

配置后没有收到微信通知怎么办?

先用 apprise -t "测试" -b "正文" "schan://你的SENDKEY" 排查 SendKey 是否正确。命令行能收到但 mqttwarn 不能,则检查 mqttwarn.ini 缩进和 target 名称是否匹配。更多排查方法见常见问题与排查

MQTT 消息频率很高会触发限制吗?

Server酱 每分钟上限 50 条,请合理控制发送频率,避免触发限制。传感器上报频率高时,建议在 mqttwarn 中做过滤(如只在数值越界时触发),避免频繁推送。

sctp 开头的 SendKey 能用 schan:// 吗?

schan:// 协议对接 Server酱Turbo,SCT 开头的 SendKey 直接可用。sctp 开头的 SendKey 请参考 Apprise 文档确认支持情况。

相关集成

懒人方案:把这段话复制给你的 AI 助手

把下面这段文字原样粘贴给 Claude Code、Cursor 或任何 AI 编程助手,它就会替你完成 Server酱 的接入:

请帮我把 Server酱 微信通知接入到我当前的项目/工具中:
1. API:POST https://sctapi.ftqq.com/{SendKey}.send,参数 title(必填,不能含换行)、desp(正文,支持 Markdown,可选);成功时返回 JSON 的 code 为 0。
2. 如果我的 SendKey 以 sctp 开头,则改用 https://{uid}.push.ft07.com/send/{SendKey}.send,uid 是 SendKey 中 sctp 与 t 之间的数字。
3. SendKey 从环境变量 SERVERCHAN_SENDKEY 读取;如果没有,提醒我到 https://sct.ftqq.com 免费获取(每天 5 条额度)。
4. 安全要求:不要把 SendKey 硬编码进代码、不要打印到日志、不要提交到 git。
5. 频率约定:任务结束发 1 条结果摘要即可,批量任务合并成一条,不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。