Skip to content

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

text
{

  "<温度标识符>": 40

}

把<温度标识符>替换成设备真实JSON键,例如设备说明中的temperature;不要把中文名称当作协议字段。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。

1. 打开新建产品向导 ​

**操作位置:*产品管理→*新建产品向导 操作步骤:在产品管理点击新建产品。

打开新建产品向导

向导显示新建产品入口。

截图重点说明 ​

字段 / 控件说明
新建产品打开新产品向导,开始定义独立温度产品。
必填 · 填写:新建产品

2. 填写产品名称 ​

操作位置:产品管理→新建产品向导 操作步骤:在产品名称填写注册温度。

填写产品名称

表单保留新产品名称。

截图重点说明 ​

字段 / 控件说明
产品名称用便于识别的名称区分温度产品。
必填 · 填写:注册温度

3. 选择JSON业务协议 ​

操作位置:产品管理→新建产品向导 操作步骤:在业务协议选择JSON。

选择JSON业务协议

业务协议显示JSON;7E仅作为后续注册信封。

截图重点说明 ​

字段 / 控件说明
业务协议决定如何将业务报文解析为属性。
必填 · 填写:JSON

4. 选择TCP传输 ​

操作位置:产品管理→新建产品向导 操作步骤:在传输方式选择TCP。

选择TCP传输

传输方式显示TCP。

截图重点说明 ​

字段 / 控件说明
传输方式决定设备连接使用的传输通道。
必填 · 填写:TCP

5. 填写真实JSON样本 ​

**操作位置:*产品管理→*新建产品向导 操作步骤:把替换好温度标识符的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

text
7E80<身份HEX>7E

<身份HEX>从设备厂商获取并替换;演示FABC0003对应7E80FABC00037E,按Hex发送。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。

心跳原始字节text

text
7E817E

先完成注册,再按Hex发送;心跳不携带温度值。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。

27. 进入TCP注册手动配置 ​

**操作位置:*产品详情→TCP注册→*手动配置 操作步骤:在产品TCP注册页面点击手动配置。

进入TCP注册手动配置

打开TCP注册草稿编辑。

截图重点说明 ​

字段 / 控件说明
手动配置进入产品TCP注册草稿配置。
必填 · 填写:手动配置

28. 选择内置7E原始HEX ​

操作位置:产品详情→TCP注册→手动配置 操作步骤:在注册模式与身份格式选择7E 原始 HEX 注册。

选择内置7E原始HEX

身份以原始HEX字节解析。

截图重点说明 ​

字段 / 控件说明
注册模式与身份格式按内置7E信封识别首包,设备编号以原始HEX字节读取。
必填 · 填写:7E原始HEX注册 / HEX

29. 绑定设备级HEX身份 ​

操作位置:产品详情→TCP注册→手动配置 操作步骤:将当前设备的设备编号原始十六进制字节设为演示值FABC0003。

绑定设备级HEX身份

当前设备级覆盖与注册帧身份相同。

截图重点说明 ​

字段 / 控件说明
设备编号原始十六进制字节将当前设备记录覆盖映射到注册帧中的原始身份字节。
必填 · 填写:FABC0003

30. 填写注册校验向量 ​

**操作位置:*产品详情→TCP注册→*手动配置 操作步骤:在注册校验向量填写原始注册帧及预期身份。

原始注册帧、7字节、身份FABC0003及下拉选项FRAME_READY均可读。

原始注册帧、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

text
{

  "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

text
"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

text
{

  "clientId": "<设备编号>",

  "<温度标识符>": 31

}

替换占位符后按Text发送JSON;后续只把数字改为32至40。不要给温度数字追加℃字符,也不要在JSON外加7E信封。 此处使用可替换的客户模板名;导入或发送前按本节替换清单核对。

49. 准备温度JSON上报 ​

**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:把真实设备编号和温度标识符填入温度JSON上报。

准备温度JSON上报

发送区使用JSON业务格式,温度31是首条样本。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}

50. 发送温度样本31 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为31后点击发送,核对实际发送消息。

发送温度样本31

此独立步骤的真实发送消息包含温度31;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

51. 发送温度样本32 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为32后点击发送,核对实际发送消息。

发送温度样本32

此独立步骤的真实发送消息包含温度32;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

52. 发送温度样本33 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为33后点击发送,核对实际发送消息。

发送温度样本33

此独立步骤的真实发送消息包含温度33;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

53. 发送温度样本34 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为34后点击发送,核对实际发送消息。

发送温度样本34

此独立步骤的真实发送消息包含温度34;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

54. 发送温度样本35 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为35后点击发送,核对实际发送消息。

发送温度样本35

此独立步骤的真实发送消息包含温度35;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

55. 发送温度样本36 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为36后点击发送,核对实际发送消息。

发送温度样本36

此独立步骤的真实发送消息包含温度36;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

56. 发送温度样本37 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为37后点击发送,核对实际发送消息。

发送温度样本37

此独立步骤的真实发送消息包含温度37;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

57. 发送温度样本38 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为38后点击发送,核对实际发送消息。

发送温度样本38

此独立步骤的真实发送消息包含温度38;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

58. 发送温度样本39 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为39后点击发送,核对实际发送消息。

发送温度样本39

此独立步骤的真实发送消息包含温度39;按对应窗口核对历史。

截图重点说明 ​

字段 / 控件说明
温度JSON上报携带平台设备编号和温度键值更新业务状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":31}
发送将当前发送区报文真实发到所选会话。
必填 · 填写:发送

59. 发送温度样本40 ​

操作位置:FMQX网页版→发送与会话消息 操作步骤:把当前温度设为40后点击发送,核对实际发送消息。

发送温度样本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,点击开始定时发送。

截图重点说明 ​

字段 / 控件说明
开始定时发送启动前先核对当前会话和心跳内容。
必填 · 填写:开始前0次;运行后1次

62. 核对平台最新温度40 ​

**操作位置:*设备详情→*运行状态 操作步骤:在运行状态读取当前温度。

核对平台最新温度40

所选十样本窗口完成后当前值为40℃。

截图重点说明 ​

字段 / 控件说明
当前温度展示设备最近上报的温度及更新时间。
必填 · 填写:40

63. 核对在线状态 ​

**操作位置:*设备详情→*运行状态 操作步骤:读取设备在线状态。

核对在线状态

连接和心跳运行时平台显示本设备在线。

截图重点说明 ​

字段 / 控件说明
在线状态显示平台所观察到的连接状态。
必填 · 填写:在线;停止后离线

64. 查询十样本时间窗 ​

操作位置:历史数据→温度查询 操作步骤:选择当前产品、设备和温度属性,按自己发送时间选择查询窗口,再点击查询。

展开时间 · 范围:2026-10-14 18:26:00至18:29:00,用于31~40十样本历史。

展开时间 · 范围: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

text
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属性设置命令。

截图重点说明 ​

字段 / 控件说明
待下发温度指定本次属性设置的目标值。
必填 · 填写:53
指令发送把目标温度作为新属性设置请求发送给设备。
必填 · 填写:指令发送

70. 核对53设备执行应答 ​

**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:在正式会话发送区读取原17:57轮次的执行应答消息卡片。

核对53设备执行应答

原53应答code=200、温度53、执行7次,对齐该轮命令ID和请求摘要;本步只读核对旧消息。

截图重点说明 ​

字段 / 控件说明
执行应答显示网页状态机处理命令后返回的应答。
必填 · 填写:code=200;温度=53

71. 核对53独立状态回报 ​

**操作位置:*FMQX网页版→自动化测试→*流程、节点属性与运行控制台 操作步骤:在运行控制台读取本轮执行与回报结果。

核对53独立状态回报

独立状态回报步骤通过;本轮网页状态由52变为53。

截图重点说明 ​

字段 / 控件说明
执行与回报结果显示新命令执行事件、独立状态上报与读取步骤的结果。
必填 · 填写:本轮passed

72. 读取平台温度53 ​

**操作位置:*设备详情→*运行状态 操作步骤:读取设备运行状态的当前温度。

读取平台温度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,仅等待启动后的新指令。

本次新运行配置:futureOnly=true,仅等待启动后的新指令。

FMQX网页版 → 自动化测试 → 流程、节点属性与运行控制台 ​

字段 / 控件填写说明
节点属性选中捕获新命令流程节点后,在右侧读取其动作、会话别名、超时与参数。
futureOnly只捕获启动后新命令,避免把历史下行当作本次新下行。
必填 · 填写:true
运行启动所选温控场景并等待本轮新命令。
执行与回报结果显示新命令执行事件、独立状态上报与读取步骤的结果。
运行运行只含device.state.get的状态核对用例,读取当前状态而不连接或发送业务消息。
当前状态实值读取运行控制台的温度和执行次数实值断言。
捕获节点运行状态读取本次捕获新命令节点的运行行。

77. 等待本次新52指令 ​

操作位置:FMQX网页版→自动化测试→流程、节点属性与运行控制台 操作步骤:启动本次温控场景,确认捕获节点运行状态为running后再从平台发送新命令。

10月15日独立新运行:捕获新命令节点正在running。

10月15日独立新运行:捕获新命令节点正在running。

截图重点说明 ​

字段 / 控件说明
捕获节点运行状态此图直接展示捕获节点正在等待新指令。
必填 · 填写:running

78. 从平台下发温度52 ​

操作位置:设备详情→温度控制→指令发送 操作步骤:将待下发温度设为52后点击指令发送。

待下发tooltip清楚显示52℃;发送前平台当前值也为52。

待下发tooltip清楚显示52℃;发送前平台当前值也为52。

截图重点说明 ​

字段 / 控件说明
待下发温度指定本次属性设置的目标值。
必填 · 填写:52
指令发送把目标温度作为新属性设置请求发送给设备。
必填 · 填写:指令发送

79. 读取52实际接收帧 ​

**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:在会话接收消息中读取下行实收帧。

21:18:43.852实际接收新52指令,消息编号与本次执行记录对应。

21:18:43.852实际接收新52指令,消息编号与本次执行记录对应。

截图重点说明 ​

字段 / 控件说明
下行实收帧显示设备会话实际收到的属性设置请求。
必填 · 填写:method=thing.service.property.set;温度=52

80. 读取52执行应答 ​

**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:读取与接收帧同ID的执行应答。

同一新52指令的执行应答:code200、温度52、执行次数1。

同一新52指令的执行应答:code200、温度52、执行次数1。

截图重点说明 ​

字段 / 控件说明
执行应答显示网页状态机处理命令后返回的应答。
必填 · 填写:code=200;温度=52

81. 读取52独立状态回报 ​

**操作位置:*FMQX网页版→*发送与会话消息 操作步骤:读取执行后单独发送的独立状态回报。

21:18:43.919独立属性报告52,与同编号执行应答分开。

21:18:43.919独立属性报告52,与同编号执行应答分开。

截图重点说明 ​

字段 / 控件说明
独立状态回报在应答之外单独上报读取到的设备温度状态。
必填 · 填写:{"clientId":"<设备编号>","<温度标识符>":52}

82. 核对平台当前温度52 ​

**操作位置:*设备详情→*运行状态 操作步骤:在运行状态读取当前温度,并与本次设备独立报告核对。

新命令执行并独立上报后,平台运行状态当前温度为52℃。

新命令执行并独立上报后,平台运行状态当前温度为52℃。

截图重点说明 ​

字段 / 控件说明
当前温度读取本次报告后的平台当前值。
必填 · 填写:52℃

83. 查询本次新52时间窗 ​

**操作位置:*历史数据→*温度查询 操作步骤:进入历史数据,选择当前产品、设备和温度,设置本轮起止时间后点击查询。

查询本次52:2026-10-15 21:18:00至21:19:00,日期框在图中缩略。

查询本次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条。

保留同一设备与温度筛选,点击刷新结果;当前窗口共1条。

截图重点说明 ​

字段 / 控件说明
刷新结果重新获取已选条件下的最新历史。
必填 · 填写:刷新结果

85. 核对刷新后的一条52历史 ​

**操作位置:*历史数据→*温度查询 操作步骤:读取刷新后的温度历史明细。

本次窗口仅1条:2026-10-15 21:18:43,温度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次,点击停止结束计划。

定时发送运行中、已发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。每轮都核对实收、执行应答、独立状态、平台最新值和刷新后的历史。

最后停止定时、禁用计划并断开连接,保留产品、设备和历史数据。下次验证重新连接、注册,并查询新的时间范围。

蜂信物联 | fastbee.cn