7E 注册与心跳接入
本文依据已有操作手册整理为线上操作参考。原文标为预期或未执行的操作,仍须按实际环境验证。
配置注册身份并完成十样本上报、两轮温度控制、断开恢复和停止保留。
**开始前准备:**具备产品、模型、设备、发布、控制和历史查询权限;已获取TCP监听地址、平台设备编号、原始HEX身份及真实温度属性键;FMQX网页版可访问;实体设备需实现执行与状态回读
7E注册、心跳和温度业务有什么关系
本教程适用于通过TCP连接、首包使用7E注册信封、业务数据使用JSON的设备。先建立产品和可写温度模型,再让设备注册、上报温度、接收控制,并把执行后的状态独立回报给平台。
7E不是本篇业务协议名称:7E80加设备原始身份字节加7E用于注册;7E817E用于心跳。温度仍由JSON中的真实属性键传送,注册与心跳不会自动产生温度历史。
FMQX网页版提供温控演示状态机,方便观察命令实收、执行事件、应答和执行后独立温度回报。网页演示中状态改变不等于实体硬件已经执行;实物设备必须实现自己的执行与回读逻辑。
一次完整温控闭环
注册建立身份;业务温度和执行后状态都通过JSON传送。
复制模板前先替换这些参数
本篇代码使用普通模板名;截图保留实际历史资源。请先完成以下核对,再保存为UTF-8文件或发送报文。
- YAML中的device是本流程会话别名;demo-session-id须通过会话绑定替换为本篇目标会话的真实ID,动作节点的session仍保持device。
- 先完整粘贴定义,验证并保存版本;保存只证明配置已保存,运行和设备结果另按步骤核对。
- runTag和reportTag由使用者在YAML变量或GUI变量栏填写:两者都须以FastBee加下划线开头,后接英文字母、数字、下划线或短横线;reportTag每次独立回报使用全新值。示例占位词不能直接运行。
- 带Unicode转义的参数键是保存文件的标准字符串语法,请完整照抄;替换变量不表示修改7E注册帧、心跳帧或属性标识。注册身份与属性名仍按本篇对应设备正式配置核对。
- 连接文件中的host、port及监听方向须改为当前环境实际地址;127.0.0.1表示运行FMQX的本机。涉及MQTT时同步核对产品号、用户名、订阅主题和responseRoute,密码仅在连接页面安全填写。
- 分组、会话及订阅id是导入文件内部引用;如需改名,groupId必须与对应分组id一致。先核对再导入,不要在保留会话上重复创建同名连接。
- 代码块是按既有无密码资产或原代码改写的客户模板,尚未证明本版模板已成功导入。历史截图、发送时间和业务通过范围仍以各步骤记录为准;不要将模板名当作旧证据中的实际资源名。
开始前准备账号与连接资料
账号需要产品创建与编辑、模型编辑、设备添加与查看、发布、设备控制和历史查询权限。看不到入口时由管理员补齐对应权限,再继续原步骤。
向管理员获取平台地址、TCP运行节点地址和端口、设备平台编号、设备注册原始HEX身份,以及温度属性键。设备侧地址必须从设备所在网络可达;同机演示才能使用127.0.0.1。
准备可访问的FMQX网页版和温控演示连接资料。复验时复用已保留的正式连接;查询历史时填写本次操作的时间范围。
FMQX网页版 → 连接管理
| 字段 / 控件 | 填写说明 |
|---|---|
| 导入配置 | 将温控演示连接资料导入FMQX网页版。 |
| 温控演示连接 | 在同一正式会话内完成上报、控制与恢复。 必填 · 填写: 温控演示连接 |
| 导入资料中的温控初始定义 | 说明首次导入资料定义的演示温度起点。 |
FMQX网页版 → 正式温控连接配置
| 字段 / 控件 | 填写说明 |
|---|---|
| TCP连接地址与端口 | 把设备会话连接到提供TCP监听的运行节点。 必填 · 填写: <TCP主机>:<TCP端口>平台管理员提供的可达TCP监听地址和端口。 修改后须重连。 |
| 接收模式 | 按TCP原始字节流读取无换行的下行命令。 必填 · 填写: 按字节流修改后须重连。按字节流:下行字节到达即可参与解析,无须等待换行;下行字节到达即可参与解析,无须等待换行。按行:等到行结束符后才输出消息;此场景不采用;等到行结束符后才输出消息;此场景不采用。 |
| 自动重连 | 决定断线后是否自行重连。 必填 · 填写: 关闭修改后须重连。 |
| 连接 | 建立所选正式会话的TCP连接。 |
创建JSON/TCP温度产品
产品先定义业务解析。本场景先保存产品草稿;设备记录随后在设备管理手动添加。TCP向导中创建并接入失败的提示仅用于排障,不作为设备创建成功路径。
可替换的温度样本json
{
"<温度标识符>": 40
}把<温度标识符>替换成设备真实JSON键,例如设备说明中的temperature;不要把中文名称当作协议字段。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。
1. 打开新建产品向导
**操作位置:*产品管理→*新建产品向导 操作步骤:在产品管理点击新建产品。

向导显示新建产品入口。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 新建产品 | 打开新产品向导,开始定义独立温度产品。 必填 · 填写: 新建产品 |
2. 填写产品名称
操作位置:产品管理→新建产品向导 操作步骤:在产品名称填写注册温度。

表单保留新产品名称。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 产品名称 | 用便于识别的名称区分温度产品。 必填 · 填写: 注册温度 |
3. 选择JSON业务协议
操作位置:产品管理→新建产品向导 操作步骤:在业务协议选择JSON。

业务协议显示JSON;7E仅作为后续注册信封。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 业务协议 | 决定如何将业务报文解析为属性。 必填 · 填写: JSON |
4. 选择TCP传输
操作位置:产品管理→新建产品向导 操作步骤:在传输方式选择TCP。

传输方式显示TCP。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 传输方式 | 决定设备连接使用的传输通道。 必填 · 填写: TCP |
5. 填写真实JSON样本
**操作位置:*产品管理→*新建产品向导 操作步骤:把替换好温度标识符的JSON样本填入设备JSON样本。

样本含一个数字温度字段。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 设备JSON样本 | 解析真实业务样本以生成温度字段草稿。 必填 · 填写: {"<温度标识符>":40} |
6. 解析样本
**操作位置:*产品管理→*新建产品向导 操作步骤:点击解析并预览。

采集点表生成一个温度字段。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 解析并预览 | 把样本键和值转换成可检查的采集点表。 必填 · 填写: 解析并预览 |
7. 核对温度采集点
**操作位置:*产品管理→*新建产品向导 操作步骤:在温度采集点核对标识符、整数类型、摄氏单位与JSON路径。

字段与设备实际温度键对应。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度采集点 | 对应属性标识符、整数类型、摄氏单位及JSON路径。 必填 · 填写: 温度 / integer / ℃ / $.<温度标识符> |
8. 检查产品配置
**操作位置:*产品管理→*新建产品向导 操作步骤:进入确认页核对配置预检。

产品名称、JSON/TCP和一个温度字段预检通过。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 配置预检 | 在提交前显示产品、协议、传输和字段是否完整。 必填 · 填写: 配置预检通过 |
9. 保存产品草稿
**操作位置:*产品管理→*新建产品向导 操作步骤:点击保存产品草稿。

本次提交只保存产品,设备随后手动添加。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 保存产品草稿 | 先保存产品供后续模型配置和手动添加设备使用。 必填 · 填写: 保存产品草稿 |
10. 确认产品已保存
**操作位置:*产品管理→*新建产品向导 操作步骤:读取产品草稿结果。

出现产品草稿已保存、待添加设备的反馈。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 产品草稿结果 | 表示产品已创建,尚需添加设备并验证。 必填 · 填写: 产品草稿已保存 |
11. 打开已保存产品
**操作位置:*产品管理→*新建产品向导 **操作步骤:**在产品列表打开刚保存的注册温度产品。

列表和详情指向本篇独立产品。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 产品草稿结果 | 表示产品已创建,尚需添加设备并验证。 必填 · 填写: 产品草稿已保存 |
产品管理 → 新建产品向导
| 字段 / 控件 | 填写说明 |
|---|---|
| 新建产品 | 打开新产品向导,开始定义独立温度产品。 |
| 产品名称 | 用便于识别的名称区分温度产品。 必填 · 填写: 注册温度 |
| 业务协议 | 决定如何将业务报文解析为属性。 必填 · 填写: JSONJSON:把JSON对象中的温度键映射为属性;把JSON对象中的温度键映射为属性。 |
| 传输方式 | 决定设备连接使用的传输通道。 必填 · 填写: TCPTCP:通过持续TCP连接传送注册、心跳和JSON业务消息;通过持续TCP连接传送注册、心跳和JSON业务消息。 |
| 设备JSON样本 | 解析真实业务样本以生成温度字段草稿。 必填 · 填写: {"<温度标识符>":40} |
| 解析并预览 | 把样本键和值转换成可检查的采集点表。 |
| 温度采集点 | 对应属性标识符、整数类型、摄氏单位及JSON路径。 必填 · 填写: 温度 / integer / ℃ / $.<温度标识符> |
| 配置预检 | 在提交前显示产品、协议、传输和字段是否完整。 |
| 保存产品草稿 | 先保存产品供后续模型配置和手动添加设备使用。 |
| 产品草稿结果 | 表示产品已创建,尚需添加设备并验证。 |
确认温度可写并保留历史
演示模型实际保存为整数、最小0、最大100、单位℃、历史开启、只读关闭。实物范围和单位应按设备规格填写;只读关闭前应确认设备支持属性设置。
此演示取消只读时,页面同时关闭图表展示与实时监测。下行与本轮52当前值通过设备运行状态核对;属性报告时间和实际历史单独关联。单位和取值范围以保存后的模型详情为准。
12. 打开温度模型
**操作位置:*产品详情→功能定义→*温度属性 操作步骤:在功能定义中打开修改温度属性。

编辑窗口显示已生成的温度属性。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 修改温度属性 | 打开已生成的温度物模型编辑窗口。 必填 · 填写: 温度属性 |
13. 取消只读并保留历史
操作位置:产品详情→功能定义→温度属性 操作步骤:取消勾选只读数据,保持历史存储****开启。

温度可下发并保留业务历史;本次同时关闭图表与实时监测,结果从运行状态核对。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 只读数据 | 决定平台是否可以向设备下发温度属性设置。 必填 · 填写: 关闭只读 |
| 历史存储 | 保留温度事件供历史查询和复验。 必填 · 填写: 开启 |
14. 设置整数取值范围
操作位置:产品详情→功能定义→温度属性 操作步骤:将整数取值范围设为最小0、最大100。

真实配置图显示最小0与最大100;实物范围按设备规格填写。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 整数最小值 | 限制温度属性允许的最小值。 必填 · 填写: 0 |
| 整数最大值 | 限制温度属性允许的最大值。 必填 · 填写: 100 |
15. 保存模型设置
**操作位置:*产品详情→功能定义→*温度属性 操作步骤:点击修改保存模型。
提交历史、可写及整数范围设置。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 修改 | 保存温度模型的历史、写入、范围与单位设置。 必填 · 填写: 修改 |
16. 读回保存后的模型
**操作位置:*产品详情→功能定义→*温度属性 操作步骤:回到功能定义核对模型保存值。

历史开启、可写、整数0至100、单位℃均以读回值为准。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 历史存储 | 保留温度事件供历史查询和复验。 必填 · 填写: 开启 |
| 只读数据 | 决定平台是否可以向设备下发温度属性设置。 必填 · 填写: 关闭只读 |
| 整数最小值 | 限制温度属性允许的最小值。 必填 · 填写: 0 |
| 整数最大值 | 限制温度属性允许的最大值。 必填 · 填写: 100 |
| 温度单位 | 给温度显示和历史值附上摄氏度单位。 必填 · 填写: ℃ |
| 模型保存值 | 核对历史开启、可写、整数0至100与单位℃已经实际保存。 必填 · 填写: 历史开启;可写;0至100;℃ |
产品详情 → 功能定义 → 温度属性
| 字段 / 控件 | 填写说明 |
|---|---|
| 修改温度属性 | 打开已生成的温度物模型编辑窗口。 |
| 历史存储 | 保留温度事件供历史查询和复验。 必填 · 填写: 开启修改后须发布。 |
| 只读数据 | 决定平台是否可以向设备下发温度属性设置。 必填 · 填写: 关闭只读修改后须发布。 |
| 整数最小值 | 限制温度属性允许的最小值。 必填 · 填写: 0修改后须发布。 |
| 整数最大值 | 限制温度属性允许的最大值。 必填 · 填写: 100修改后须发布。 |
| 温度单位 | 给温度显示和历史值附上摄氏度单位。 必填 · 填写: ℃修改后须发布。 |
| 修改 | 保存温度模型的历史、写入、范围与单位设置。 修改后须发布。 |
| 模型保存值 | 核对历史开启、可写、整数0至100与单位℃已经实际保存。 |
从设备管理手动添加设备
在设备列表把鼠标移到接入设备的下拉箭头区域,展开菜单后选择手动添加;直接点击主按钮会进入设备向导。
平台设备编号与JSON clientId相同;注册帧中FABC0003是设备原始HEX身份,它通过设备级覆盖映射到平台记录。两者应由设备资料与管理员共同核定。
17. 展开设备手动添加菜单
**操作位置:*设备管理→接入设备→*手动添加 操作步骤:在设备管理将鼠标移到接入设备的下拉箭头区域,展开菜单。
悬停后出现手动添加菜单;点击主按钮会进入向导。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 接入设备 | 悬停下拉箭头区域展开设备创建方式菜单。 必填 · 填写: 接入设备的下拉箭头 |
18. 选择手动添加
**操作位置:*设备管理→接入设备→*手动添加 操作步骤:在接入菜单选择手动添加。
选择已有产品的设备手动添加路径。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 手动添加 | 为已有JSON/TCP产品创建设备记录。 必填 · 填写: 手动添加 |
19. 查看手动添加窗口
**操作位置:*设备管理→接入设备→*手动添加 操作步骤:在手动添加窗口定位设备名称。

窗口显示名称、编号和产品字段。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 设备名称 | 给设备一个可识别的业务名称。 必填 · 填写: 注册温控器 |
20. 填写设备名称
操作位置:设备管理→接入设备→手动添加 操作步骤:在设备名称填写可识别的注册温控器名称。

设备名称已填写,仍未提交。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 设备名称 | 给设备一个可识别的业务名称。 必填 · 填写: 注册温控器 |
21. 填写平台设备编号
**操作位置:*设备管理→接入设备→*手动添加 操作步骤:在平台设备编号填写当前设备的唯一编号。

编号符合9至64位要求,并与JSON clientId保持一致。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 平台设备编号 | 作为平台设备记录与JSON clientId的共同身份。 必填 · 填写: <设备编号> |
22. 查找所属产品
操作位置:设备管理→接入设备→手动添加 操作步骤:在所属产品查找刚保存的注册温度产品。

候选列表出现本篇温度产品。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 所属产品 | 将设备绑定到正确的JSON/TCP温度产品。 必填 · 填写: 刚保存的注册温度产品 |
23. 选择所属产品
**操作位置:*设备管理→接入设备→*手动添加 操作步骤:在产品候选中选中刚保存的注册温度产品。

所属产品选中正确的JSON/TCP产品。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 所属产品 | 将设备绑定到正确的JSON/TCP温度产品。 必填 · 填写: 刚保存的注册温度产品 |
24. 核对设备与产品关系
操作位置:设备管理→接入设备→手动添加 操作步骤:提交前核对平台设备编号与所属产品,同时查看编号下的校验提示。

编号和所属产品已填入;图中仍保留“设备编号不能为空”的红字提示。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 平台设备编号 | 作为平台设备记录与JSON clientId的共同身份。 必填 · 填写: <设备编号> |
| 所属产品 | 将设备绑定到正确的JSON/TCP温度产品。 必填 · 填写: 刚保存的注册温度产品 |
25. 保存设备
**操作位置:*设备管理→接入设备→*手动添加 操作步骤:点击确定。
保存当前设备关系。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 确定 | 保存当前设备及所属产品关系。 必填 · 填写: 确定 |
26. 确认设备记录已保存
**操作位置:*设备管理→接入设备→*手动添加 操作步骤:在设备详情核对设备保存结果。

本篇设备记录可打开,编号和所属产品一致。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 设备保存结果 | 显示已保存设备编号、产品与设备记录。 必填 · 填写: 设备详情可打开 |
设备管理 → 接入设备 → 手动添加
| 字段 / 控件 | 填写说明 |
|---|---|
| 接入设备 | 悬停下拉箭头区域展开设备创建方式菜单。 |
| 手动添加 | 为已有JSON/TCP产品创建设备记录。 |
| 设备名称 | 给设备一个可识别的业务名称。 必填 · 填写: 注册温控器 |
| 平台设备编号 | 作为平台设备记录与JSON clientId的共同身份。 必填 · 填写: <设备编号>设备硬件资料或管理员分配的唯一编号。 |
| 所属产品 | 将设备绑定到正确的JSON/TCP温度产品。 必填 · 填写: 刚保存的注册温度产品 |
| 确定 | 保存当前设备及所属产品关系。 |
| 设备保存结果 | 显示已保存设备编号、产品与设备记录。 |
配置7E身份并发布到运行节点
演示设备的原始身份为FABC0003,注册包为7E80FABC00037E,共7字节。Hex发送的是7E、80、FA、BC、00、03、7E这些字节,不能把显示字符串按ASCII再编码。
本篇注册模式没有配置注册ACK。发送后没有单独注册回复不能直接判定失败,应继续核对会话身份、业务上报和节点状态。保存与发布提示均是中间结果,目标节点APPLIED才证明当前节点已应用。
注册信封模板text
7E80<身份HEX>7E<身份HEX>从设备厂商获取并替换;演示FABC0003对应7E80FABC00037E,按Hex发送。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。
心跳原始字节text
7E817E先完成注册,再按Hex发送;心跳不携带温度值。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。
27. 进入TCP注册手动配置
**操作位置:*产品详情→TCP注册→*手动配置 操作步骤:在产品TCP注册页面点击手动配置。
打开TCP注册草稿编辑。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 手动配置 | 进入产品TCP注册草稿配置。 必填 · 填写: 手动配置 |
28. 选择内置7E原始HEX
操作位置:产品详情→TCP注册→手动配置 操作步骤:在注册模式与身份格式选择7E 原始 HEX 注册。

身份以原始HEX字节解析。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 注册模式与身份格式 | 按内置7E信封识别首包,设备编号以原始HEX字节读取。 必填 · 填写: 7E原始HEX注册 / HEX |
29. 绑定设备级HEX身份
操作位置:产品详情→TCP注册→手动配置 操作步骤:将当前设备的设备编号原始十六进制字节设为演示值FABC0003。

当前设备级覆盖与注册帧身份相同。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 设备编号原始十六进制字节 | 将当前设备记录覆盖映射到注册帧中的原始身份字节。 必填 · 填写: FABC0003 |
30. 填写注册校验向量
**操作位置:*产品详情→TCP注册→*手动配置 操作步骤:在注册校验向量填写原始注册帧及预期身份。

原始注册帧、7字节、身份FABC0003及下拉选项FRAME_READY均可读。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 注册校验向量 | 用原始注册帧检查身份提取和完整帧长度。 必填 · 填写: 7E80FABC00037E → FABC0003 / 7字节 / FRAME_READY |
31. 保存注册草稿
**操作位置:*产品详情→TCP注册→*手动配置 操作步骤:点击保存草稿。

设备覆盖与校验向量写入草稿。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 保存草稿 | 保存注册模式、设备级覆盖与测试向量。 必填 · 填写: 保存草稿 |
32. 核对草稿版本
**操作位置:*产品详情→*发布与同步详情 操作步骤:读取当前草稿与发布版本中的草稿版本。

本篇已保存注册草稿版本6。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 草稿与发布版本 | 核对当前注册草稿和已发布版本相同。 必填 · 填写: 6 / 6 |
33. 执行真实注册校验
**操作位置:*产品详情→TCP注册→*手动配置 操作步骤:执行真实校验并读取节点返回结果。

真实校验通过且定义摘要与当前草稿一致。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 真实校验 | 由运行节点实际检查当前注册定义。 必填 · 填写: 校验通过 |
34. 确认发布产品
**操作位置:*产品详情→*发布与同步详情 操作步骤:在发布确认窗口点击确定。

发布确认窗口使用“确定”提交当前产品。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 确定 | 确认提交当前产品与注册配置的发布。 必填 · 填写: 确定 |
35. 读取发布反馈
**操作位置:*产品详情→*发布与同步详情 操作步骤:读取发布结果。

发布成功提示出现,下一步继续核对节点实际应用。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 发布结果 | 读取发布任务完成反馈,继续检查节点实际生效。 必填 · 填写: 发布成功 |
36. 查看产品发布与接入配置汇总
**操作位置:*产品详情→*发布与同步详情 操作步骤:在产品详情顶部查看产品发布与接入配置汇总。

产品顶部显示“已发布”和“接入配置已生效”;节点应用详情见第38步。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 产品发布与接入配置汇总 | 读取产品顶部的发布及接入配置汇总状态。 必填 · 填写: 已发布;接入配置已生效 |
37. 核对发布版本一致
操作位置:产品详情→发布与同步详情 操作步骤:核对草稿与发布版本均为6。

草稿6与发布6相同。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 草稿与发布版本 | 核对当前注册草稿和已发布版本相同。 必填 · 填写: 6 / 6 |
38. 核对运行节点可用
**操作位置:*产品详情→*发布与同步详情 操作步骤:查看目标节点节点应用状态和接收新连接能力。

当前本地单节点可用,已加载对应注册与JSON定义。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 节点应用状态 | 表明当前目标节点已应用本产品快照。 必填 · 填写: APPLIED |
产品详情 → TCP注册 → 手动配置
| 字段 / 控件 | 填写说明 |
|---|---|
| 手动配置 | 进入产品TCP注册草稿配置。 |
| 注册模式与身份格式 | 按内置7E信封识别首包,设备编号以原始HEX字节读取。 必填 · 填写: 7E原始HEX注册 / HEX修改后须发布。7E 原始 HEX 注册:原始十六进制字节身份;不把显示字符按ASCII重新编码;原始十六进制字节身份;不把显示字符按ASCII重新编码。 |
| 设备编号原始十六进制字节 | 将当前设备记录覆盖映射到注册帧中的原始身份字节。 必填 · 填写: FABC0003设备厂家给出的原始HEX身份和管理员核定的设备关系。 修改后须发布。 |
| 注册校验向量 | 用原始注册帧检查身份提取和完整帧长度。 必填 · 填写: 7E80FABC00037E → FABC0003 / 7字节 / FRAME_READY修改后须发布。 |
| 保存草稿 | 保存注册模式、设备级覆盖与测试向量。 修改后须发布。 |
| 真实校验 | 由运行节点实际检查当前注册定义。 |
| 注册帧边界与能力限制 | 注册信封为7E80加身份原始字节加7E,心跳为7E817E。 |
产品详情 → 发布与同步详情
| 字段 / 控件 | 填写说明 |
|---|---|
| 确定 | 把产品、模型与注册配置一起交给运行节点应用。 |
| 发布结果 | 读取发布任务完成反馈,继续检查节点实际生效。 |
| 节点应用状态 | 表明当前目标节点已应用本产品快照。 |
| 草稿与发布版本 | 核对当前注册草稿和已发布版本相同。 |
| 产品发布与接入配置汇总 | 读取产品顶部的发布及接入配置汇总状态。 |
建立正式温控演示连接
温控连接的首次初始定义写在导入资料中,连接配置页面没有初值输入框。前段保留10月14日只读状态52、执行8次的参考图;后文10月15日新运行的内部初值40、执行0次另由该轮独立状态记录核对。
接收模式选按字节流。按行接收会等待换行,本场景下行JSON没有换行时会造成等待超时。修改接收模式后先保存,再重新连接和注册。
下面是可移植连接资料:替换TCP主机、端口、设备编号和属性键后再导入;40仅为首次导入的温控起点。定时心跳默认禁用,待注册和核对内容后再启动。
可替换的温控连接资料json
{
"schemaVersion": 3,
"sessions": [
{
"name": "注册温控演示",
"protocol": "TCP",
"host": "<TCP主机>",
"port": 8888,
"clientId": "<设备编号>",
"timeoutMs": 5000,
"autoReconnect": false,
"tcpLineMode": false,
"jsonDevice": {
"format": "JSON",
"initialState": {
"<温度标识符>": 40
},
"responseRoute": ""
},
"scheduledSend": {
"enabled": false,
"intervalMs": 30000,
"repeatCount": 0,
"sendOnConnect": false,
"sendImmediately": true,
"payload": "7E817E",
"format": "Hex",
"retryCount": 0,
"continueOnError": false
}
}
]
}替换四类环境值:host、port、clientId和initialState的属性键。端口8888是演示值;按管理员实际资料修改。保留false,表示按字节流接收;initialState为首次导入定义,复验当前值另行读取。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。
39. 打开连接导入入口
**操作位置:*FMQX网页版→*连接管理 操作步骤:在FMQX连接管理菜单选择导入配置。

导入配置菜单真实可见。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 导入配置 | 将温控演示连接资料导入FMQX网页版。 必填 · 填写: 导入配置 |
40. 选择正式温控演示连接
**操作位置:*FMQX网页版→*连接管理 操作步骤:导入温控连接资料后,选择温控演示连接。

连接列表出现正式温控演示连接;接收模式在下步核对。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温控演示连接 | 在同一正式会话内完成上报、控制与恢复。 必填 · 填写: 温控演示连接 |
41. 核对正式连接地址
**操作位置:*FMQX网页版→*正式温控连接配置 操作步骤:在正式连接配置核对TCP连接地址与端口。

正式连接地址来自当前管理员,自动重连关闭。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| TCP连接地址与端口 | 把设备会话连接到提供TCP监听的运行节点。 必填 · 填写: <TCP主机>:<TCP端口> |
| 自动重连 | 决定断线后是否自行重连。 必填 · 填写: 关闭 |
42. 核对按字节流接收
操作位置:FMQX网页版→正式温控连接配置 操作步骤:确认接收模式为按字节流。

接收模式按字节流,可处理无换行下行JSON。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 接收模式 | 按TCP原始字节流读取无换行的下行命令。 必填 · 填写: 按字节流 |
准备只读状态核对流程:打开FMQX顶栏“自动化测试”→“YAML”,完整粘贴下方定义,点击“验证”后“保存版本”。再在会话绑定中将device指向本篇刚导入并核对的会话;核对运行节点及当前状态后,按后续步骤点击运行。此处不使用导入流程文件按钮。
仅device.state.get的完整只读YAML模板yaml
"schemaVersion": 2
"name": "状态核对"
"sessions":
"device":
"sessionId": "demo-session-id"
"isolation": "temporary"
"variables": {}
"steps":
-
"id": "current_state"
"kind": "action"
"enabled": true
"action": "device.state.get"
"session": "device"
"timeoutMs": 5000
"retries": 0
"parameters": {}
"assertions": []
"finally": []
"description": "只读取FMQX演示设备当前状态;不会重置初始值、连接设备或发送业务数据。"
"id": "state-check"只读取当前状态,不连接、不发送、不重置设备。旧证据52和执行8不作为新会话固定断言;本次读取实值为准。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。
43. 读取温控演示当前状态
**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 **操作步骤:**在自动化测试→YAML完整粘贴上方只读定义,验证并保存版本,device绑定本篇正式温控演示会话;点击 运行,读取当前状态及执行次数。

21:38只读补采温度实值52、执行次数实值8;初始40只在导入资料中说明。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 运行 | 运行只含device.state.get的状态核对用例,读取当前状态而不连接或发送业务消息。 必填 · 填写: 运行 |
| 当前状态实值 | 读取运行控制台的温度和执行次数实值断言。 必填 · 填写: 温度52;执行8次 |
44. 连接正式会话
操作位置:FMQX网页版→正式温控连接配置 操作步骤:选择正式温控连接后点击连接。

本次连接使用正式温控会话。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 连接 | 建立所选正式会话的TCP连接。 必填 · 填写: 连接 |
45. 确认正式会话已连接
**操作位置:*FMQX网页版→*连接管理 **操作步骤:**在连接标题核对已连接状态。

正式温控会话显示已连接与断开按钮。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温控演示连接 | 在同一正式会话内完成上报、控制与恢复。 必填 · 填写: 温控演示连接 |
46. 准备原始注册帧
操作位置:FMQX网页版→发送与会话消息 操作步骤:在注册发送区核对注册包为7E80FABC00037E。

原始身份FABC0003位于7E80与结束7E之间。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 注册包 | 将当前设备原始HEX身份送入7E首包注册信封。 必填 · 填写: 7E80FABC00037E |
| 注册帧边界与能力限制 | 注册信封为7E80加身份原始字节加7E,心跳为7E817E。 必填 · 填写: 7E80 + <身份HEX> + 7E;7E817E |
47. 实际发送注册帧
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:按Hex发送当前注册包。

正式会话发出7字节7E80FABC00037E原始注册帧。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 注册包 | 将当前设备原始HEX身份送入7E首包注册信封。 必填 · 填写: 7E80FABC00037E |
48. 实际发送心跳
*操作位置:FMQX网页版→发送与会话消息 **操作步骤:按Hex发送心跳包***7E817E。

正式会话发出3字节7E817E,不新增温度业务值。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 心跳包 | 保持已注册TCP连接的活跃状态。 必填 · 填写: 7E817E |
FMQX网页版 → 发送与会话消息
| 字段 / 控件 | 填写说明 |
|---|---|
| 注册包 | 将当前设备原始HEX身份送入7E首包注册信封。 必填 · 填写: 7E80FABC00037E |
| 心跳包 | 保持已注册TCP连接的活跃状态。 必填 · 填写: 7E817E |
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 |
| 下行实收帧 | 显示设备会话实际收到的属性设置请求。 |
| 执行应答 | 显示网页状态机处理命令后返回的应答。 |
| 独立状态回报 | 在应答之外单独上报读取到的设备温度状态。 |
逐条上报31至40十个温度样本
把两个占位符替换为自己的平台设备编号和温度标识符。每次只改变温度数字,按31、32、33、34、35、36、37、38、39、40顺序逐条发送;每条发送都需要独立可观察的消息。
首次十样本发送记录保留。若为补齐图片再发送,另建独立复验时间窗和记录,不把新图倒填为首次动作。历史核对也必须选择同一新窗口。
可替换的温度业务上报json
{
"clientId": "<设备编号>",
"<温度标识符>": 31
}替换占位符后按Text发送JSON;后续只把数字改为32至40。不要给温度数字追加℃字符,也不要在JSON外加7E信封。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。
49. 准备温度JSON上报
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:把真实设备编号和温度标识符填入温度JSON上报。

发送区使用JSON业务格式,温度31是首条样本。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
50. 发送温度样本31
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为31后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度31;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
51. 发送温度样本32
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为32后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度32;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
52. 发送温度样本33
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为33后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度33;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
53. 发送温度样本34
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为34后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度34;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
54. 发送温度样本35
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为35后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度35;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
55. 发送温度样本36
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为36后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度36;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
56. 发送温度样本37
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为37后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度37;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
57. 发送温度样本38
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为38后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度38;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
58. 发送温度样本39
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为39后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度39;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
59. 发送温度样本40
操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为40后点击发送,核对实际发送消息。

此独立步骤的真实发送消息包含温度40;按对应窗口核对历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度JSON上报 | 携带平台设备编号和温度键值更新业务状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":31} |
| 发送 | 将当前发送区报文真实发到所选会话。 必填 · 填写: 发送 |
运行定时心跳并核对实时与历史
定时发送只配置7E817E心跳。启动前再次读回Hex格式、30秒间隔和零重试,避免沿用默认文本报文。平台在线与当前温度分别判断,在线本身不能证明业务数据已更新。
开始按钮与0次计数采用10月15日的独立GUI补图,运行后1次计数另有记录;平台温度40和31~40十样本历史仍属于10月14日原窗口。它们是不同时间的操作与查看示例,不能合并成一次连续运行。
60. 读回正确的定时心跳
**操作位置:*FMQX网页版→*定时发送 操作步骤:核对定时心跳内容为Hex、7E817E和30000毫秒。

只运行心跳,零重试,保留正确内容。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 定时心跳内容 | 只重复发送原始HEX心跳而不是温度样本。 必填 · 填写: Hex / 7E817E / 30000毫秒 |
61. 开始定时心跳
**操作位置:*FMQX网页版→*定时发送 操作步骤:确认当前会话连接正常,点击开始定时发送,随后观察状态和计数。

开始前状态已就绪、发送计数0,点击开始定时发送。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 开始定时发送 | 启动前先核对当前会话和心跳内容。 必填 · 填写: 开始前0次;运行后1次 |
62. 核对平台最新温度40
**操作位置:*设备详情→*运行状态 操作步骤:在运行状态读取当前温度。

所选十样本窗口完成后当前值为40℃。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 当前温度 | 展示设备最近上报的温度及更新时间。 必填 · 填写: 40 |
63. 核对在线状态
**操作位置:*设备详情→*运行状态 操作步骤:读取设备在线状态。

连接和心跳运行时平台显示本设备在线。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 在线状态 | 显示平台所观察到的连接状态。 必填 · 填写: 在线;停止后离线 |
64. 查询十样本时间窗
操作位置:历史数据→温度查询 操作步骤:选择当前产品、设备和温度属性,按自己发送时间选择查询窗口,再点击查询。

展开时间 · 范围:2026-10-14 18:26:00至18:29:00,用于31~40十样本历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 历史产品设备与属性 | 限定查询当前设备的温度记录。 必填 · 填写: 当前产品 / 当前设备 / 温度 |
| 历史时间范围 | 区分十样本、历史恢复和本次新52的独立窗口。 必填 · 填写: 本次操作前后的小时间窗 |
| 查询 | 按当前对象与时间窗读取历史数据。 必填 · 填写: 查询 |
65. 逐条核对十个样本
**操作位置:*历史数据→*温度查询 操作步骤:读取温度历史明细并逐条核对31至40。

对应窗口含31至40十个可区分业务样本;注册与心跳不是温度历史。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度历史明细 | 逐条核对原十样本窗口的温度值和事件时间。 必填 · 填写: 2026-10-14 18:26~18:29;31至40共十条 |
FMQX网页版 → 定时发送
| 字段 / 控件 | 填写说明 |
|---|---|
| 定时心跳内容 | 只重复发送原始HEX心跳而不是温度样本。 必填 · 填写: Hex / 7E817E / 30000毫秒 |
| 开始定时发送 | 在已注册连接上运行心跳定时发送。 |
| 定时运行状态 | 读取当前计划运行状态、界面累计发送计数和最近执行时间。 |
设备详情 → 运行状态
| 字段 / 控件 | 填写说明 |
|---|---|
| 当前温度 | 展示设备最近上报的温度及更新时间。 |
| 在线状态 | 显示平台所观察到的连接状态。 |
| 设备保留详情 | 读取保留设备详情顶部的设备编号、离线状态和所属产品。 |
历史数据 → 温度查询
| 字段 / 控件 | 填写说明 |
|---|---|
| 历史产品设备与属性 | 限定查询当前设备的温度记录。 必填 · 填写: 当前产品 / 当前设备 / 温度 |
| 历史时间范围 | 区分十样本、历史恢复和本次新52的独立窗口。 必填 · 填写: 本次操作前后的小时间窗本次发送记录和历史存储时区。 |
| 查询 | 按当前对象与时间窗读取历史数据。 |
| 刷新结果 | 重新获取已选条件下的最新历史。 |
| 温度历史明细 | 展示所选时间窗内每条温度值及事件时间。 |
下发53并核对执行后的状态
先启动温控场景,看到只等待新命令的步骤运行中,再在30秒内从平台发送53。一次闭环应串起新命令ID、设备实际接收、执行事件、执行应答、独立状态回报及平台最新值。
参数入口是自动化测试的流程页:选中捕获新命令节点,再在右侧节点属性核对futureOnly为true。完整匹配对象以保留用例定义核对;页面显示[object Object]不能证明完整对象内容。
独立状态回报必须读取执行后的设备状态。把平台目标值直接照抄成回报只能证明发送了一条JSON,不能证明设备执行。网页演示状态机执行后由52变53;实体设备需由自己的驱动完成执行与回读。
准备温控执行与独立回报流程:打开FMQX顶栏“自动化测试”→“YAML”,完整粘贴下方定义,点击“验证”后“保存版本”。再在会话绑定中将device指向本篇刚导入并核对的会话;核对运行节点及当前状态后,按后续步骤点击运行。此处不使用导入流程文件按钮。
温控执行与独立状态回报完整YAML模板yaml
schemaVersion: 2
id: temperature-control
name: 注册补图
description: ''
tags: []
variables:
runTag: "replace-with-your-run-tag"
reportTag: "replace-with-unique-report-tag"
requiredEnvironment: []
sessions:
device:
sessionId: demo-session-id
isolation: temporary
steps:
- id: disconnect
kind: action
enabled: true
action: session.disconnect
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Text
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters: {}
assertions: []
steps: []
else: []
parallel: []
- id: connect
kind: action
enabled: true
action: session.connect
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Text
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters: {}
assertions: []
steps: []
else: []
parallel: []
- id: register
kind: action
enabled: true
action: message.send
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Hex
payload: 7E80FABC00037E
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters: {}
assertions: []
steps: []
else: []
parallel: []
- id: initial_state
kind: action
enabled: true
action: device.state.get
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Text
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters: {}
assertions: []
steps: []
else: []
parallel: []
- id: keepalive
kind: action
enabled: true
action: message.send
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Hex
payload: 7E817E
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters: {}
assertions: []
steps: []
else: []
parallel: []
- id: capture_command
kind: action
enabled: true
action: message.capture
session: device
timeoutMs: 30000
retries: 0
continueOnFailure: false
repeat: 1
format: Text
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters:
direction: in
futureOnly: true
match:
message.source: DeviceFrame
payload.json:$.method: thing.service.property.set
path: $.id
source: json
storeAs: commandId
assertions: []
steps: []
else: []
parallel: []
- id: wait_execution
kind: action
enabled: true
action: message.wait
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Text
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters:
direction: event
match:
message.source: DeviceState
payload.json:$.requestId: ${commandId}
assertions: []
steps: []
else: []
parallel: []
- id: report
kind: action
enabled: true
action: device.state.report
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Text
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters:
"batch\u0049d": "${runTag}"
commandId: ${commandId}
reportId: "${reportTag}"
assertions: []
steps: []
else: []
parallel: []
- id: readback
kind: action
enabled: true
action: device.state.get
session: device
timeoutMs: 5000
retries: 0
continueOnFailure: false
repeat: 1
format: Text
qos: 0
retain: false
durationMs: 0
maxConcurrency: 4
parameters: {}
assertions: []
steps: []
else: []
parallel: []
finally: []完整照抄带转义的参数键;只替换runTag、reportTag及会话绑定。启动后等捕获节点running,再在30秒内从平台下发新目标。该定义沿用独立新52补验的保存结构,旧53和当前52各自按对应时间窗核对,不拼接成一次运行。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。
66. 检查捕获新命令节点
**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 **操作步骤:**在自动化测试→YAML粘贴上方完整温控定义,填写本轮runTag和全新reportTag,验证并保存版本,device绑定本篇温控会话;转到流程页,选中捕获新命令节点,核对 futureOnly 为 true。

节点futureOnly为true;完整对象匹配条件和独立回报由保留用例定义核对,GUI的[object Object]不代替全文。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| futureOnly | 只捕获启动后新命令,避免把历史下行当作本次新下行。 必填 · 填写: true |
| 节点属性 | 选中捕获新命令流程节点后,在右侧读取其动作、会话别名、超时与参数。 必填 · 填写: message.capture;device;30000毫秒 |
67. 打开本轮温控场景
**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 **操作步骤:**选择刚验证并保存的温控流程,核对device绑定及两个变量已填写;定位 运行 按钮,下一步启动。

已打开新53复验场景的真实运行入口。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 运行 | 启动所选温控场景并等待本轮新命令。 必填 · 填写: 运行 |
68. 启动并等待新命令
**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 操作步骤:点击运行并等待捕获步骤显示running。

本轮等待上限30秒,只接受启动后新命令。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| futureOnly | 只捕获启动后新命令,避免把历史下行当作本次新下行。 必填 · 填写: true |
| 运行 | 启动所选温控场景并等待本轮新命令。 必填 · 填写: 运行 |
69. 从平台下发温度53
操作位置:设备详情→温度控制→指令发送 操作步骤:将待下发温度设为53后点击指令发送。

当前轮次发送一个新的53属性设置命令。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 待下发温度 | 指定本次属性设置的目标值。 必填 · 填写: 53 |
| 指令发送 | 把目标温度作为新属性设置请求发送给设备。 必填 · 填写: 指令发送 |
70. 核对53设备执行应答
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:在正式会话发送区读取原17:57轮次的执行应答消息卡片。

原53应答code=200、温度53、执行7次,对齐该轮命令ID和请求摘要;本步只读核对旧消息。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 执行应答 | 显示网页状态机处理命令后返回的应答。 必填 · 填写: code=200;温度=53 |
71. 核对53独立状态回报
**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 操作步骤:在运行控制台读取本轮执行与回报结果。

独立状态回报步骤通过;本轮网页状态由52变为53。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 执行与回报结果 | 显示新命令执行事件、独立状态上报与读取步骤的结果。 必填 · 填写: 本轮passed |
72. 读取平台温度53
**操作位置:*设备详情→*运行状态 操作步骤:读取设备运行状态的当前温度。

平台实际最新温度为53,时间对应本轮独立回报。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 当前温度 | 展示设备最近上报的温度及更新时间。 必填 · 填写: 53 |
FMQX网页版 → 自动化测试 → 流程、节点属性与运行控制台
| 字段 / 控件 | 填写说明 |
|---|---|
| 节点属性 | 选中捕获新命令流程节点后,在右侧读取其动作、会话别名、超时与参数。 |
| futureOnly | 只捕获启动后新命令,避免把历史下行当作本次新下行。 必填 · 填写: true |
| 运行 | 启动所选温控场景并等待本轮新命令。 |
| 执行与回报结果 | 显示新命令执行事件、独立状态上报与读取步骤的结果。 |
| 运行 | 运行只含device.state.get的状态核对用例,读取当前状态而不连接或发送业务消息。 |
| 当前状态实值 | 读取运行控制台的温度和执行次数实值断言。 |
| 捕获节点运行状态 | 读取本次捕获新命令节点的运行行。 |
设备详情 → 温度控制 → 指令发送
| 字段 / 控件 | 填写说明 |
|---|---|
| 待下发温度 | 指定本次属性设置的目标值。 必填 · 填写: 53;恢复后52 |
| 指令发送 | 把目标温度作为新属性设置请求发送给设备。 |
连接恢复参考:断开后重新注册
连接恢复时复用同一正式会话,重新连接、按Hex发送原始注册帧,再发送心跳。
以下四步是2026-10-14 22:33的历史恢复参考:前两图只读复看原轮断开与连接节点,后两图读取原轮注册和心跳消息。本次没有重演这些步骤。原轮随后温度保持52、执行次数11→12的完整记录与终态单独保留。
后面的40→52为10月15日独立新运行,两段拥有不同命令编号和运行时间,不能拼成同一轮。
73. 核对复验前停态
**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 操作步骤:在执行与回报结果中只读复看本轮恢复场景第一行的节点状态。
第一行显示passed;图像只证明节点通过。当时正式会话已断开、定时器停止由同轮原始输出独立确认,该节点没有产生新的离线事件。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 执行与回报结果 | 显示新命令执行事件、独立状态上报与读取步骤的结果。 必填 · 填写: 本轮passed |
74. 核对复验场景重新连接
**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 操作步骤:在同一执行与回报结果中只读复看本轮恢复场景第二行的节点状态。
第二行显示passed;图像只证明节点通过。22:33:53重新连接成功由本轮原始输出独立确认,截图未显示连接代次。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 执行与回报结果 | 显示新命令执行事件、独立状态上报与读取步骤的结果。 必填 · 填写: 本轮passed |
75. 重新发送注册帧
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:在重连后按Hex发送注册包。

本轮22:33:53实际发送7字节7E80FABC00037E。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 注册包 | 将当前设备原始HEX身份送入7E首包注册信封。 必填 · 填写: 7E80FABC00037E |
76. 重连后发送心跳
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:重连注册后按Hex发送心跳包。

本轮新连接实际发出3字节7E817E。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 心跳包 | 保持已注册TCP连接的活跃状态。 必填 · 填写: 7E817E |
历史参考:设备详情 → 数据采集
| 字段 / 控件 | 填写说明 |
|---|---|
| 数据采集温度与时间 | 在设备详情的数据采集页筛选温度,核对当前值及数据更新时间。 |
独立复验:设备温度40调到52
本节是2026-10-15 21:18的独立新运行。设备内部初始温度40、执行次数0;先等待新命令,再从平台发送52,设备内部读回52、执行次数1。平台发送前已经显示当前值52,因此内部40来自同轮设备初值记录,不能用平台截图代替。
分别核对设备实收、同编号执行应答、独立属性报告和历史记录。平台的发送成功或收到回复不单独证明设备执行;本例使用网页状态机执行事件和独立状态回报交叉核对。
新历史记录属于10月15日21:18:43.920;旧十样本、53和10月14日恢复52保留各自窗口。所示结果限于本地单节点与FMQX网页版状态机。
本次新运行配置:futureOnly=true,仅等待启动后的新指令。
FMQX网页版 → 自动化测试 → 流程、节点属性与运行控制台
| 字段 / 控件 | 填写说明 |
|---|---|
| 节点属性 | 选中捕获新命令流程节点后,在右侧读取其动作、会话别名、超时与参数。 |
| futureOnly | 只捕获启动后新命令,避免把历史下行当作本次新下行。 必填 · 填写: true |
| 运行 | 启动所选温控场景并等待本轮新命令。 |
| 执行与回报结果 | 显示新命令执行事件、独立状态上报与读取步骤的结果。 |
| 运行 | 运行只含device.state.get的状态核对用例,读取当前状态而不连接或发送业务消息。 |
| 当前状态实值 | 读取运行控制台的温度和执行次数实值断言。 |
| 捕获节点运行状态 | 读取本次捕获新命令节点的运行行。 |
77. 等待本次新52指令
操作位置:FMQX网页版→自动化测试→流程、节点属性与运行控制台 操作步骤:启动本次温控场景,确认捕获节点运行状态为running后再从平台发送新命令。
10月15日独立新运行:捕获新命令节点正在running。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 捕获节点运行状态 | 此图直接展示捕获节点正在等待新指令。 必填 · 填写: running |
78. 从平台下发温度52
操作位置:设备详情→温度控制→指令发送 操作步骤:将待下发温度设为52后点击指令发送。

待下发tooltip清楚显示52℃;发送前平台当前值也为52。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 待下发温度 | 指定本次属性设置的目标值。 必填 · 填写: 52 |
| 指令发送 | 把目标温度作为新属性设置请求发送给设备。 必填 · 填写: 指令发送 |
79. 读取52实际接收帧
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:在会话接收消息中读取下行实收帧。

21:18:43.852实际接收新52指令,消息编号与本次执行记录对应。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 下行实收帧 | 显示设备会话实际收到的属性设置请求。 必填 · 填写: method=thing.service.property.set;温度=52 |
80. 读取52执行应答
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:读取与接收帧同ID的执行应答。

同一新52指令的执行应答:code200、温度52、执行次数1。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 执行应答 | 显示网页状态机处理命令后返回的应答。 必填 · 填写: code=200;温度=52 |
81. 读取52独立状态回报
**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:读取执行后单独发送的独立状态回报。

21:18:43.919独立属性报告52,与同编号执行应答分开。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 独立状态回报 | 在应答之外单独上报读取到的设备温度状态。 必填 · 填写: {"clientId":"<设备编号>","<温度标识符>":52} |
82. 核对平台当前温度52
**操作位置:*设备详情→*运行状态 操作步骤:在运行状态读取当前温度,并与本次设备独立报告核对。

新命令执行并独立上报后,平台运行状态当前温度为52℃。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 当前温度 | 读取本次报告后的平台当前值。 必填 · 填写: 52℃ |
83. 查询本次新52时间窗
**操作位置:*历史数据→*温度查询 操作步骤:进入历史数据,选择当前产品、设备和温度,设置本轮起止时间后点击查询。

查询本次52:2026-10-15 21:18:00至21:19:00,日期框在图中缩略。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 历史产品设备与属性 | 限定查询当前设备的温度记录。 必填 · 填写: FastBee_注册温控器 / FastBee_演示温度 |
| 历史时间范围 | 区分十样本、历史恢复和本次新52的独立窗口。 必填 · 填写: 2026-10-15 21:18:00至21:19:00(Asia/Shanghai) |
| 查询 | 按当前设备、属性和时间窗查询。 必填 · 填写: 查询 |
84. 刷新当前窗口历史
**操作位置:*历史数据→*温度查询 操作步骤:保持当前设备、温度和时间窗,点击刷新结果。

保留同一设备与温度筛选,点击刷新结果;当前窗口共1条。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 刷新结果 | 重新获取已选条件下的最新历史。 必填 · 填写: 刷新结果 |
85. 核对刷新后的一条52历史
**操作位置:*历史数据→*温度查询 操作步骤:读取刷新后的温度历史明细。

本次窗口仅1条:2026-10-15 21:18:43,温度52。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 温度历史明细 | 展示本次窄窗口的唯一温度记录。 必填 · 填写: 2026-10-15 21:18:43;52;共1条 |
停止发送与连接,保留资源供复验
结束时先停止定时发送,再保存禁用计划并断开正式会话。产品、设备、模型、注册配置、连接定义和历史保留供复验。
本次21:18新52运行的初次脚本收尾曾因按钮被覆盖而失败,原记录完整保留。随后单独从真实网页启动、停止并禁用定时发送,最终记录正式会话已断开,timerRunning、autoReconnect和autoReply均为false。界面运行计数1只是GUI观测,不单独证明新心跳已被平台接收。
86. 停止定时发送
**操作位置:*FMQX网页版→*停止与保留 操作步骤:定时发送运行时点击停止定时发送;已停止时核对未重新启动。

定时发送运行中、已发1次,点击停止结束计划。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 停止定时发送 | 停止发送心跳并保留计划内容。 必填 · 填写: 定时器停止 |
87. 保留禁用的心跳配置
**操作位置:FMQX网页版→停止与保留 操作步骤:**保存禁用的心跳计划;已禁用时读回保存禁用的心跳计划。

保存后状态未启用,计划保留且不再自动定时发送。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 保存禁用的心跳计划 | 保留7E817E与30秒间隔,同时禁用自动定时发送。 必填 · 填写: enabled=false |
88. 核对正式会话已断开
**操作位置:*FMQX网页版→*停止与保留 操作步骤:读取正式会话保留停态,确认名称正确、已断开并出现连接按钮。

正式会话已断开,标题与连接按钮清楚且无保存提示遮挡。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 保留停态 | 读取正式会话最终状态。 必填 · 填写: FastBee_注册温控演示;已断开;连接 |
89. 核对配置保存与收尾
**操作位置:*FMQX网页版→*停止与保留 操作步骤:查看保留停态中的保存成功提示与会话已断开状态。

保留的收尾记录:定时发送配置已保存,正式会话已断开。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 保留停态 | 保留21:23收尾图中的真实保存提示和会话状态。 必填 · 填写: 定时发送配置已保存;已断开 |
90. 查看保留设备详情
**操作位置:*FMQX网页版→*停止与保留 操作步骤:查看设备保留详情,核对设备编号、离线状态与所属产品。

设备详情顶部显示设备编号、离线状态和所属产品;本图仅展示顶部内容。
截图重点说明
| 字段 / 控件 | 说明 |
|---|---|
| 设备保留详情 | 读取保留设备详情顶部的设备编号、离线状态和所属产品。 必填 · 填写: 设备编号可读;离线;所属产品可读 |
FMQX网页版 → 停止与保留
| 字段 / 控件 | 填写说明 |
|---|---|
| 断开 | 停止正式TCP连接,恢复时需要重新注册。 |
| 停止定时发送 | 停止发送心跳并保留计划内容。 |
| 保存禁用的心跳计划 | 保留7E817E与30秒间隔,同时禁用自动定时发送。 必填 · 填写: enabled=false |
| 保留停态 | 保留产品、设备、温度模型、连接定义、场景与历史供再次核验。 |
常见错误与恢复方法
| 看到什么现象 | 可能原因 | 先检查哪里 | 如何恢复 |
|---|---|---|---|
| 设备向导提示不支持JSON/TCP创建 | 该向导的创建入口不支持此组合。 | 产品草稿是否已保存;设备管理是否有手动添加权限。 | 保留产品草稿,从设备管理接入设备菜单手动添加。 |
| TCP已连接但业务无身份或无温度 | 注册身份覆盖、平台设备编号或JSON属性键不一致。 | 原始HEX身份与注册包;clientId与平台设备编号;业务温度键与模型。 | 修正身份映射并发布APPLIED,重新连接注册后发送一条新温度JSON。 |
| 发送HEX字符后无法注册 | 把HEX显示文本按ASCII发送或注册信封错误。 | 实际发送格式必须为Hex;原始帧是否7E80加身份HEX加7E。 | 选择Hex发送;替换真实身份后先校验向量,再重新发送注册。 |
| 下行等待超时且设备状态不变 | 接收模式按行、等待已超时或平台发送发生在等待开始之前。 | 按字节流;futureOnly=true;当前运行仍在等待。 | 保存按字节流配置并重连注册;新启动一轮等待后再发新命令。 |
| 定时发送出现默认文本而非心跳 | 计划读回值不符或旧默认配置仍启用。 | 内容7E817E、格式Hex、30秒与零重试。 | 先停止,修正并保存计划,再读回后启动;错误发送保留为失败记录。 |
| 应答成功但平台最新温度没变化 | 只有执行应答,未产生独立业务状态回报。 | 执行后的状态读取和独立JSON回报是否属于同一新命令。 | 设备读取执行后状态并独立上报;再查询当前值与该窗口历史。 |
| 历史无本次结果或夹杂旧值 | 设备、属性或时间范围错误,或者未刷新。 | 当前设备编号、温度属性与本次操作时间窗。 | 重新选窄窗口查询并刷新,逐条对照实际业务时间和值。 |
再次验收时怎样确认结果
先确认保留正式连接按字节流、心跳计划禁用、平台模型范围正确;在实时运行控制台读取设备当前状态。导入定义中的初始40只作配置参考,每次复验的实际初值以同轮读取结果为准。再检查已发布版本及目标节点APPLIED,使用新命令和新时间窗核对。原样本和原控制轮次继续保留。
重新连接注册后逐条发送31至40,查询同窗口的十条业务历史。启动只等新命令场景,下发53;断开重连注册后下发52。每轮都核对实收、执行应答、独立状态、平台最新值和刷新后的历史。
最后停止定时、禁用计划并断开连接,保留产品、设备和历史数据。下次验证重新连接、注册,并查询新的时间范围。

