跳到主要内容

AI 驱动文档

您想了解什么?

MQTT

OV Spark 内置 MQTT 客户端。它连接到您的 broker(位于您的网络或云端),并:

  • 发布每个检测结果(JSON 格式),完全无需编写脚本
  • 发布心跳和在线状态
  • 接收值(例如当前批次号)到变量中

它支持 MQTT 3.1.1 和 5,支持普通 TCP、TLS 或双向 TLS(客户端证书)。

打开 Integration > Data Connectors,选择 MQTT。

MQTT 概览:发送结果、接收值、编写自定义消息脚本以及 broker 类型

设置方法​

设置分为三步。

1. 连接到 broker​

选择 broker 类型以填充典型设置,这些设置可修改:

Broker 类型典型配置
工厂 broker(Mosquitto、HiveMQ、EMQX)端口 1883,或使用 TLS 的 8883
Ignition / SCADA(Ignition MQTT Distributor 及类似产品)端口 1883
云 broker(AWS IoT、Azure、HiveMQ Cloud 及类似产品)端口 8883,使用 TLS
其他任何 MQTT 3.1.1 或 5 broker;所有字段均需手动设置

连接到您的 broker:地址、端口、MQTT 版本、安全设置以及连接检查

设置说明
地址和端口Broker 的主机名或 IP 地址。默认端口 1883
MQTT 版本5(默认)或 3.1.1
安全性无、TLS 或双向 TLS(客户端证书)。不带 CA 证书的 TLS 使用相机内置的信任库;双向 TLS 需要 CA、客户端证书和客户端密钥
用户名和密码如果 broker 允许匿名连接,则留空
高级客户端 ID(默认为相机序列号)、保活时间(30 秒)和清除会话(开启)

连接检查在您停止输入一秒后运行:它会逐步查找主机名、连接端口、检查 TLS 并登录。每一步按下保存并继续时,设置会被保存,MQTT 在第 3 步之前保持关闭。

跨工厂网络时请使用 TLS

无会以未加密方式发送所有内容,包括密码。这在隔离的设备网络中可以接受。如果流量跨越工厂或办公网络,请使用 TLS;对于需要客户端证书的云 broker,请使用双向 TLS。

2. 选择要发送的内容​

消息默认主题说明
检测结果overview/<serial>/results每次生产检测发送一条消息,使用您选择的 QoS(默认为 1)。摘要不包含每个工具的 detail;完整则包含
心跳overview/<serial>/heartbeat每 N 秒一次(5 秒及以上,或关闭),QoS 0
在线状态overview/<serial>/status保留消息 {"status":"online"},以及遗嘱消息 {"status":"offline"},当相机掉线时由 broker 发送

您可以修改每个主题,例如改为 plant/line3/results。

3. 开启 MQTT​

打开 MQTT,然后在 Monitor > Topics and messages 下查看每条消息的发出情况。

结果消息不保留

结果消息发布时 retain 为关闭,因此后连接的订阅者不会将旧结果当作新结果接收。若要保持最新结果可用,请从相机脚本中使用 retain: true 自行发布,或通过 HTTP API 读取。

结果消息的结构​

MQTT、HTTP API 和相机脚本的 onResult 使用同一份文档。一个完整结果(已精简):

{
"schema_version": 1,
"serial": "5F9FE801",
"id": "01a17216-f035-7ec5-adae-b90b6a0868a8",
"recipe": { "id": 3, "name": "Kit tray" },
"trigger": { "id": 420596, "source": "plc" },
"image": { "width": 2592, "height": 1944, "url": "/api/integration/v1/results/01a17216-f035-7ec5-adae-b90b6a0868a8/image" },
"captured_at": "2026-10-25T08:04:28.341Z",
"processing_ms": 82,
"judgment": "fail",
"pass": false,
"not_inspected": false,
"reason": "serial differs",
"judgment_source": "script",
"rules": { "judgment": "pass", "pass": true, "not_inspected": false },
"vars": { "serial": "SN-24-118734" },
"tools": [
{
"id": "01a15f8b-da07-7e42-8b3e-d3edaff79428",
"type": "classical.barcode",
"name": "Label",
"plc_slot": 1,
"judgment": "pass",
"score": 1,
"execute_ms": 4,
"detail": { "decoded": true, "data": "0104012345678901", "symbology": "data_matrix" }
}
],
"metadata": {},
"tags": [],
"plc_inspection_id": 1234,
"phase": "production"
}
  • judgment_source 指明由谁判定结果:规则、程序脚本,或脚本失败时的 script_error
  • rules 为规则的判定结果,即使最终由脚本决定也会包含
  • vars 保存本次检测保存的变量
  • image.url 通过 HTTP API 获取图像

心跳消息很小:

{"schema_version":1,"serial":"5F9FE801","hostname":"line3-cam","recipe":"Kit tray","phase":"production","uptime_s":3600,"mqtt":"connected","ts":"2026-10-25T08:04:28.341Z"}

接收数值​

要引入一个值,请声明一个以 MQTT 为来源的变量:指定主题,对于 JSON 还需指定字段路径。之后每次检测都会保存最新的值。如需更复杂的处理,例如从厂商消息中提取某个字段或响应请求,请使用相机脚本。

导入时默认关闭

MQTT 设置会随程序导出一同迁移,但密码和证书永远不会被导出。如果源相机使用了目标相机没有的凭据,MQTT 导入后将处于关闭状态。否则将保留源相机的开关设置,因此导入到可访问匿名代理的相机时可立即开始发布。每次导入后请检查 Data Connectors。

后续步骤​