Skip to content

MQTT 设备监控

后台常驻订阅你的 MQTT 设备,消息落进本地库。给 topic 起个人话名字,AI 就能听懂「客厅温度现在多少」。

它要解决的问题

MQTT 是个实时协议:你不订阅的时候,消息就流过去了。所以要问「设备昨天报过错吗」,得先有人一直在听。

Sigil 的做法是在后台常驻订阅并落库,AI 提问时读本地缓存、不碰网络——回答快,也不会因为一次提问就去连一遍设备。

同时把 topic 路径翻译成人话:配了别名之后,你说「客厅温度」,AI 自己找得到 home/living/temp

添加 Broker

MQTT 页点「添加 Broker」,连接信息会作为 mqtt_broker 凭据加密存进金库——和 GitHub Token、邮箱授权码放在一起,共享文件夹、标签、过期提醒、备份导出。

字段说明
主机 / 端口端口不填按 TLS 取默认(8883 / 1883)
TLS
Client ID不填则每次随机生成,避免多客户端撞 ID 互相踢下线
用户名 / 密码
发布白名单允许发布的 topic,支持 + # 通配符;留空 = 不限制

只支持原生 MQTT over TCP

不支持 WebSocket(ws:// / wss://)。QoS 支持 0 和 1。

凭据页的「测试连接」只建连、收到确认就断开,不订阅也不发布,对设备零副作用。

连接失败的提示都翻译成人话且不含账号密码,例如「TLS 握手失败(证书不受信任,或该端口其实不是 TLS 端口)」「broker 返回了非 CONNACK 报文(该端口可能不是 MQTT 服务)」。

设备总览

顶部一条统计:在线 topic 数、消息速率、历史条数、历史占用、已丢弃。

  • 消息速率是最近 10 秒的平均值,所以一波集中上报后会持续显示约 10 秒
  • 已丢弃不为 0 说明写入队列满了——订阅面超出磁盘吞吐,建议收窄订阅或关掉部分 topic 的「留历史」

最新值表每 topic 一行,覆盖写入、不随时间增长。新鲜度三态:

状态判据
正常10 分钟内有上报
陈旧超过 10 分钟
离线超过 30 分钟

实时消息流滚动显示最近 300 条,覆盖所有订阅(含没开「留历史」的),不落库。「暂停接收」只冻结滚动,后台连接与落库照常,不会丢数据

页面底部有「试着问问 AI」示例问题,点一下把问题预填进 AI 对话页——但不自动发送,你可以先改。

配置:订阅、设备、存储

一个设置弹窗,三个页签,对应「收哪些 → 叫什么 → 留多久」。改动即时生效,不用保存。

订阅(面级)

填 topic 过滤器(支持 home/+/tempcmd/# 这样的通配符),选 QoS,决定要不要「留历史」。

留历史存什么
只维护最新值,每 topic 恒定一行,跑多久都只占一行
每条消息追加进历史表,默认保留 5000 条(0 = 不限)

订阅上的设置是「这一片 topic 的默认值」,个别 topic 想单独决定就去「设备」页签覆盖。

改了订阅集合(过滤器 / QoS / 是否留历史)会重启该 broker 的连接,10 秒内对齐。改别名不会——改个设备名字不该让它短暂离线

设备(点级)

给 topic 配别名、单位、分组,以及留历史的单独覆盖。

devices/+/temp        → 「设备温度」     ← 一条通配覆盖所有
devices/gw-01/temp    → 「网关温度」     ← 个别设备单独命名,精确优先

多条通配都命中时,取最具体(pattern 最长)的那条。

分组(如「客厅」「一号产线」)会参与 AI 的模糊匹配:配了分组「客厅」+ 别名「温度」,你问「客厅温度」也能命中。

单位(如 °C%RH)展示时拼成「客厅温度(°C)」。

模糊匹配相当宽容——「客厅温度」「客厅的温度」「客厅 温度」都能找到同一个设备,但「湿度」不会误命中「客厅温度」。

留历史覆盖是三态:跟随(用订阅的默认值)/ 留 / 不留。用来实现「温度留、心跳不留」。

面板还会列出还没命名的 topic,点一下直接填进新增行。

存储(全局)

历史消息保留天数,默认 7 天(0 = 永不按时间清理)。这里的设置对所有 Broker 生效。

「立即清理」按钮跑一次条数裁剪 + 过期删除,不必等后台任务(后台是启动 3 分钟后首次、之后每小时一次)。

两条约束都只作用于历史

最新值每 topic 恒定一行,不清理——清了就答不上来「设备现在什么状态」。

单条消息超过 8KB 时只记字节数不存正文,防止某个 topic 推固件包把库撑爆。

删除 broker 凭据时,它的四张缓存表一起清空。

AI 能做什么

五个能力,四个只读、一个需审批:

能力走网络说明
mqtt_device_status查单个设备最新值。可以直接传「客厅温度」这样的设备名
mqtt_latest_list列各 topic 最新值。默认只返回超过 10 分钟没上报的(疑似掉线)
mqtt_history查历史。只有开了「留历史」的订阅才有数据
mqtt_subscribe_once订阅收一小段就断开(最多等 30 秒 / 50 条)。只能看订阅期间新到的消息
mqtt_publish发布消息,每次都要审批

发布是硬审批

topic 那头可能是继电器、网关、门锁——一条消息就是一次物理动作,retain 还会覆盖 broker 上的既有保留值。发错不可撤回,所以每次调用都要你在桌面端确认 topic 与内容。

除此之外还有两道闸:topic 不能含通配符;凭据上可以配发布白名单,不在名单里直接拒绝。

锁屏时会怎样

应用锁锁屏期间,MQTT 照常连接、照常收信落库。

这是刻意的:应用锁只锁界面,MCP 仍在正常服务 AI 客户端。锁屏的攻击者本来就够不到这条连接,断开换不来安全收益;代价却是实打实的——锁一晚等于一整夜的数据空洞,而 AI 此时仍能读到几小时前的值、把它当成现状。

断线重连

指数退避:1 → 2 → 4 秒…封顶 60 秒,连上后立刻归零。界面上显示「重连中 N s」倒计时。

某个 broker 的凭据不可用(解密失败、已删除)时只是跳过它并记日志,不影响其他 broker。

相关章节

  • 邮件 —— 同样是「后台同步 + AI 读本地缓存」的模式
  • 凭据金库 —— broker 连接信息怎么存的
  • AI 使用边界 —— 什么动作需要审批

若依科技工作室 · 承接后台管理 / 桌面软件 / 全栈 / 小程序定制开发 · 技术服务咨询