跳到主要内容

Aqara 赋能通信协议规范

第一章 介绍​

本文档定义 Aqara Empowerment Communication Protocol(中文名:Aqara 赋能通信协议,以下简称"本协议"或"AECP"),规范无线通信赋能模组(可搭载多种 IoT 无线协议栈,以下简称"Client")与宿主 MCU(以下简称"Server")之间通过 UART 串口进行数据交换的完整协议栈。

Client 负责实现 IoT 无线协议的接入与赋能,承担网络管理、云端通信与 IoT 协议适配职责;Server 负责执行产品自身的业务逻辑,不感知无线网络。两者之间所有的状态同步、命令传递与事件通知均通过本协议完成。

提示

本协议持续演进。版本迭代遵循向前兼容原则,但不保证与极低版本固件或长期未维护固件之间的完全兼容。以下建议适用于所有集成方:

  • 以实际使用的具体模块文档为准。
  • 咨询绿米 Aqara 官方,或使用官方推荐的最新公版固件。

范围​

本规范涵盖:

  • Client 与 Server 之间的 UART 硬件接口要求(参见 第二章)
  • 数据类型、数据帧编码与应用交互格式(参见 第三章)
  • 上电初始化流程,包括 Link Establishment、Profile Discovery、Server 数据同步与 Wake Signaling(参见 第四章)
  • Profile 体系、应答与重传等实现规则(参见 第五章)
  • Foundation Profile 与产品 Profile 的属性、命令定义(参见 第六章、第七章、第八章、第九章)
  • 固件在线升级(OTA)子协议(参见 第六章)
  • 串口消息编解码示例(参见 附录 A)

本规范面向嵌入式固件开发人员,提供实现互操作性所需的完整技术细节。

协议架构与设计理念​

本节给出 AECP 的整体架构、设计理念与核心概念,帮助读者在阅读后续技术细节前建立统一的理解框架。

系统架构​

AECP 面向 "无线赋能模组 + 宿主 MCU" 的双芯片协作场景。无线赋能模组承担 IoT 无线协议接入、配网、联网与云端通信,对宿主 MCU 屏蔽无线网络的复杂性;宿主 MCU 专注于产品自身的业务逻辑与外设控制。两者通过一条 UART 串口连接,本协议即定义这条链路上的全部数据交换规则。

AECP 系统架构

在本协议中,无线赋能模组担任 Client,宿主 MCU 担任 Server。该角色命名以 "数据与能力的归属" 为依据:设备的业务状态与能力由 MCU(Server)持有并对外提供,模组(Client)作为这些能力的访问方与赋能方。这一约定贯穿全文,是理解后续属性归属与交互方向的基础。

UART 缓冲区约束​

Client 模组的 UART 接收缓冲区和发送缓冲区大小 SHALL 均不小于 1024 字节。双方 SHALL 在链路建立阶段交换 UART 缓冲区能力(参见 Link Establishment),并取双方声明值中的较小者作为 协商 UART 缓冲区大小,用于约束后续 AECP 单帧长度。双方各自声明的值 SHALL NOT 小于 1024 字节,因此协商结果 SHALL NOT 小于 1024 字节。完整 AECP 帧长度从 SOF 开始计算,到 Overall Checksum 结束,包含帧头、Data Segment 和校验字段。

接收缓冲区大小发送缓冲区大小备注
最小 1024 字节最小 1024 字节若固件版本支持文件传输类功能,则缓冲区大小最大值参考文件传输时单包文件数据的最大长度。

若完整 AECP 帧长度超出协商 UART 缓冲区大小,可能导致接收溢出、丢包或解析失败。实现方在设计属性上报、命令参数和 IAP OTA 分片长度时 SHALL 以协商 UART 缓冲区大小作为 AECP 单帧长度上限。该约束仅适用于本协议定义的 AECP 通信帧,不适用于 BootLoader OTA 中由 XMODEM 承载的固件传输过程。

设计理念​

本协议的设计遵循以下原则:

  • 职责解耦:Server 不感知无线网络,Client 不介入产品业务逻辑。任意一侧的实现演进或更换(如更换无线制式)不应影响另一侧。
  • 以属性为中心的数据模型:设备的状态与能力统一抽象为 属性(Attribute),状态同步退化为对属性的读、写、上报,使数据模型清晰、可枚举、可校验。
  • 核心 + 产品分层的 Profile 体系:所有设备共享一个强制的 Foundation Profile 提供通用能力,再由唯一的产品 Profile 描述具体品类,兼顾一致性与可扩展性。
  • 对称的交互模型:属性访问按 "谁持有、谁发起、拉取还是推送" 形成一组对称且封闭的操作码,避免特例,降低实现复杂度。
  • 可演进与向前兼容:通过协议版本号、Profile 与属性的可选性声明,支持能力的渐进式扩展,并保持对旧实现的向前兼容。

分层模型​

AECP 在逻辑上可分为四层,自底向上各层职责独立、依次封装:

层次职责本规范对应
物理层UART 电气与时序、Wake Pin 与 Wake Signaling第二章、第四章
帧层帧结构、字段编码、字节序、HCS 与 CRC 校验第三章
事务层操作码语义、请求与应答配对、Seq 关联、超时与重传第三章、第五章
应用层属性、命令、Profile 与 OTA 子协议第五章、第六章、第七章、第八章、第九章

核心概念与交互模型​

理解本协议需把握以下核心概念:

  • 角色(Client / Server):Client 为无线赋能模组,Server 为宿主 MCU;二者的职责与归属见 系统架构。
  • Profile:一组相关属性与命令构成的功能域,由 Profile ID 标识。Server 默认支持 Foundation Profile(0x0000),并通过 ProductProfileID 声明唯一的产品 Profile。
  • 属性(Attribute):设备状态或能力的数据单元,按归属端区分为 Server 属性(Side = S)与 Client 属性(Side = C),其合法操作由访问权限声明。
  • 命令(Command):触发性动作,合法发起方与应答方式由所属 Profile 命令表声明。
  • 帧与事务:每次交互以数据帧承载,由操作码(OPC)界定消息类型与方向,并通过 Seq 关联请求与应答构成一次事务。

属性交互遵循一组对称、封闭的操作:以属性归属端为中心,区分"访问方拉取"与"持有方推送"两个维度,构成下表所示的完整操作集合(详细编码与时序见 第三章):

交互发起方操作对象发起操作码应答
读取 Server 属性ClientServer 属性READREAD_RESPONSE
写入 Server 属性ClientServer 属性WRITEWRITE_RESPONSE
Server 主动上报ServerServer 属性REPORTACKNOWLEDGE
查询 Client 属性ServerClient 属性QUERYQUERY_RESPONSE
Client 主动上报ClientClient 属性NOTIFYACKNOWLEDGE
触发命令由命令定义命令COMMANDACKNOWLEDGE / 配对 COMMAND / 无

术语与定义​

术语定义
Client无线通信赋能模组(Module)。搭载 IoT 无线协议栈,负责 IoT 协议接入与赋能业务。在 AECP 中发起对 Server 属性的 READ/WRITE 与命令(COMMAND),响应 Server 对 Client 属性的查询(QUERY_RESPONSE),并可主动上报 Client 属性(NOTIFY)。
Server宿主微控制器(MCU),执行产品业务逻辑。在 AECP 中持有设备侧状态,响应 Client 对 Server 属性的读写与命令,主动上报属性(REPORT),并可向 Client 发起属性查询(QUERY)。Server 不感知无线网络。
Profile功能域。由一组相关的属性和命令组成,用 Profile ID(uint16)标识。Server 默认支持 Foundation Profile(0x0000),并通过 ProductProfileID 声明唯一产品 Profile。
属性 (Attribute)设备状态或能力的持久化数据单元,由 Attribute ID(uint16)在所属 Profile 内唯一标识。完整属性地址由 Profile ID + Attribute ID 确定。每个属性有确定的数据类型、归属方(Side:C 或 S)、访问权限(Access)和实现要求(Conformance)。READ/WRITE/QUERY/QUERY_RESPONSE/REPORT/NOTIFY 均针对属性操作。
命令 (Command)触发性动作,由 Command ID(uint16)标识,携带类型化参数。每条命令的合法发起方由所属 Profile 命令表中的 Direction 明确声明;接收方以 ACKNOWLEDGE 或配对 COMMAND 应答。
操作码 (OPC)数据帧中标识消息类型与方向的 1 字节字段,共定义 10 种操作码,对应属性读写、属性上报、属性查询、属性上报(NOTIFY)和命令等交互模式。
Side属性归属方标注。C(Client)= 该属性由 Client 持有和维护;S(Server)= 该属性由 Server 持有和维护。每个属性 SHALL 在属性表中明确标注 C 或 S。
Conformance实现要求标注。M(Mandatory,必选)= 该条目 SHALL 实现;O(Optional,可选)= 该条目 MAY 实现。FeatureName(无括号)= 对应 FeatureMap 位置位时 SHALL 实现;[FeatureName](方括号)= 对应 FeatureMap 位置位时 MAY 实现。详见 字段记号约定。
Profile ID数据帧头部的 2 字节字段(原 Device Type),标识本帧通信所属的功能域,而非仅区分产品类型。
OTAOver-The-Air,固件在线升级。本协议定义 IAP OTA 与 BootLoader OTA 两种升级方式。
Wake Pin(唤醒引脚)硬件引脚,低电平有效;Client 与 Server 各提供一个,供对端拉低以配合 Wake Signaling。参见第 2 章。
Wake Signaling(唤醒信令)发送方在 UART 通信前,通过对端 Wake Pin 执行低电平断言、T0 等待、UART 传输与引脚释放的完整过程。参见 Wake Signaling(唤醒信令)。
Link Establishment(链路建立)上电后首个 AECP 交互过程;Client 发送 LinkEstablishmentRequest(ClientUartBufferSize),Server 返回 LinkEstablishmentResponse(LowPowerFeature, ServerUartBufferSize)。参见 Link Establishment。
Profile Discovery(Profile 发现)Client READ Server Profile 与属性初始值的过程;完成后 Client 发送 ProfileDiscoveryComplete。参见 Profile Discovery。
LowPowerFeature(低功耗特性)LinkEstablishmentResponse 携带的参数,用于协商 Wake Signaling 是否使能;双方协商完成前默认使能;Normal 表示协商关闭。参见 LowPowerFeature。

缩写​

缩写全称
ACKAcknowledgement(应答)
ASCIIAmerican Standard Code for Information Interchange(美国信息交换标准代码)
CRCCyclic Redundancy Check(循环冗余校验)
GPIOGeneral-Purpose Input/Output(通用输入/输出引脚)
IAPIn Application Programming(应用内编程)
ISPIn System Programming(系统内编程)
LSBLeast Significant Byte / Bit(最低有效字节/位)
MCUMicro Controller Unit(微控制器)
MSBMost Significant Byte / Bit(最高有效字节/位)
OTAOver-The-Air(空中升级/在线升级)
SOFStart Of Frame(帧起始码)
UARTUniversal Asynchronous Receiver-Transmitter(通用异步收发传输器)
UTCCoordinated Universal Time(协调世界时)
XMODEMXMODEM 文件传输协议

文档约定​

关键字约定​

本文档中的关键字按照 RFC 2119 的定义解释:

  • SHALL — 绝对要求。
  • SHALL NOT — 绝对禁止。
  • SHOULD — 推荐行为;忽略前须充分理解并权衡影响。
  • SHOULD NOT — 不推荐行为;采用前须充分理解并权衡影响。
  • MAY — 可选项。

字节序约定​

AECP 中的所有多字节字段均采用 大端序(Big-Endian) 传输,即高位字节在前。该规则适用于帧头、Data Segment、属性值、命令参数以及 Overall Checksum。

以下字段明确采用大端序:Profile ID、Data Length、Overall Checksum。

唯一例外是 OTA 固件文件内部的 OTA Header。OTA Header 不属于 AECP 通信帧字段,其内部字段采用小端序(Little-Endian),在固件升级章节中另行说明。

数值表示约定​

  • 十六进制值使用 0x 前缀表示,例如 0x55。
  • 二进制值使用 0b 前缀表示,例如 0b00000001。
  • 字节长度使用 N bytes 表示,例如 2 bytes。

字段记号约定​

本规范中的属性表、命令表和参数表 SHALL 统一使用以下列含义。后续章节不再重复定义这些列名。

列名含义
ID / Attribute ID / Command ID条目标识符。属性表中表示 Attribute ID;命令表中表示 Command ID。
Name / 名称条目名称,使用英文标识符。
Type / 类型数据类型,取值 SHALL 来自数据类型章节或本 Profile 定义的数据类型。
Constraint / 约束数值范围、长度、固定值或取值约束;"无额外约束"表示仅受基础数据类型限制。
Default / 默认值缺省值或复位后的初始值;— 表示不规定统一默认值。
Access / 访问权限合法访问方式。R = READ;W = WRITE;RP = REPORT;Q = QUERY;NF = NOTIFY。
Side / 归属方属性归属方。C = Client 持有和维护;S = Server 持有和维护。
Conformance / 必选性实现要求。M = Mandatory,必选,SHALL 实现;O = Optional,可选,MAY 实现。FeatureName(无括号)= 同一 Profile 内已定义 FeatureMap 位 FeatureName 置位时 SHALL 实现(该 Feature 下必选);[FeatureName](方括号)= 该位置位时 MAY 实现(该 Feature 下可选)。两种 Feature 写法在对应位未置位时均 SHALL NOT 实现。FeatureName SHALL 为同一 Profile 内已定义 FeatureMap 位的名称。
Direction / 方向命令合法发起方,由命令表定义。
Response / 应答命令应答方式。可为 ACKNOWLEDGE、配对 COMMAND 名称,或 N(无应答)。
Description / 简述 / 说明条目的简要说明。
Order / 参数顺序参数在 Data Segment 中紧跟 Cmd ID 之后的排列序号,从 1 开始;序号较小者先编码。该序号仅用于定义顺序,不是线上字段。
Parameter Details / 参数某条 COMMAND 的参数定义表:列出参数顺序、名称、类型、约束与默认值;参数 Raw Data 长度由类型决定(参见 数据类型总览);编码规则见 COMMAND(OPC = 0x9)。

第二章 硬件接口​

本章定义 Client 与 Server 之间的 UART 串口硬件接口要求。

UART 通信参数​

Client 与 Server 之间的串口通信须按以下参数配置:

参数值
波特率 (Baud Rate)115200 bps
数据位 (Data Bits)8 位
奇偶校验 (Parity)无 (None)
停止位 (Stop Bits)1 位
数据流控 (Flow Control)无 (None)
供电电压DC 3.3 V(Client 与 Server 均采用)

引脚连接​

Client 与 Server 之间至少需要以下连接:

  • TXD / RXD:串口数据线,Client TXD 接 Server RXD,Client RXD 接 Server TXD,交叉连接。
  • 唤醒引脚(Wake Pin):用于低功耗设备的双向唤醒信号(Wake Signaling 使用该引脚,参见 Wake Signaling(唤醒信令))。Client 和 Server 各自提供一个唤醒引脚,分别用于被对方唤醒。
  • BootLoader 进入引脚(BootLoader Entry GPIO):若设备声明支持 BootLoader OTA,SHALL 提供由 Client 控制的硬件进入路径,使 Server 可通过 GPIO、复位脚或 Boot 选择脚进入 BootLoader。
  • 电源(VCC / GND):Client 和 Server 均采用 DC 3.3 V 供电,共地。
提示

具体引脚编号因 Client 产品型号而异。请参考对应 Client 的硬件规格书或咨询绿米 Aqara 官方获取准确的引脚定义。

电气特性​

  • 所有数字 I/O 引脚(TXD、RXD、唤醒引脚、BootLoader 进入引脚)的逻辑电平均为 3.3 V CMOS。
  • 设计时应避免直接与 5 V 电平系统相连;若 Server 为 5 V 系统,须加电平转换电路。

第三章 数据类型与交互格式​

本章先定义 AECP 的应用交互模式和帧结构,再定义 Data Segment 与校验编码规则,最后定义 Data Type 与 Status。具体属性、命令、枚举和值域由各 Profile 定义。

交互模式​

本节定义 AECP 的数据帧线路格式、操作码语义、事务匹配规则以及应用层交互模型。具体属性、命令、枚举和值域由各 Profile 定义。

帧结构总览​

AECP 完整帧由固定帧头(8 字节)、可变长 Data Segment 和固定尾部校验 CRC(2 字节)组成。除 Data Segment 外,固定开销共 10 字节。

+-------+------------+-------+-------+---------+-------+------------------+-------+
| SOF | Profile ID | Seq | OPC | D-Len | HCS | Data Segment | CRC |
| (1 B) | (2 B) | (1 B) | (1 B) | (2 B) | (1 B) | (N bytes) | (2 B) |
+-------+------------+-------+-------+---------+-------+------------------+-------+
缩写长度说明
SOF1 byteStart Of Frame,帧起始标志,固定为 0x55。
Profile ID2 bytes功能域标识,大端序。接收方通过 Profile ID 与 Attribute ID / Command ID 共同解析语义。
Seq1 byteSequence,事务序列号,用于应答匹配、重传去重和事务关联。
OPC1 byteOperation Code,操作码,定义消息类型、方向和 Data Segment 格式。
D-Len2 bytesData Length,Data Segment 字节长度,大端序。
HCS1 byteHeader Checksum,帧头末字节;对 SOF 至 D-Len 共 7 字节求校验和。
—N bytesData Segment,数据段,格式由 OPC 决定;N = D-Len。
CRC2 bytesOverall Checksum,CRC16-Modbus,覆盖 Data Segment,大端序。
提示

Profile ID、D-Len、CRC 均采用 大端序(Big-Endian) 编码,即高位字节在前。

帧头字段说明​

SOF — 帧起始码​

SOF 固定为 0x55,用于标识一帧数据的起始。接收方 SHALL 以 0x55 作为帧同步标志。

Profile ID — 功能域标识​

Profile ID 为 2 字节大端序无符号整数,标识本帧通信所属的 功能域(Functional Profile)。接收方须结合 Profile ID 与 Attribute ID / Command ID 才能完整解析本帧语义。

Profile ID说明
0x0000Foundation Profile。所有设备必须支持。包含基础属性、基础命令和固件升级相关能力。
0x1000Thermostat Profile。恒温器设备专有属性与命令。

Server SHALL 默认支持 Foundation Profile(0x0000),并通过 Foundation Profile 中的 ProductProfileID 声明唯一产品 Profile。Client 可根据当前交互对象,在 Foundation Profile 与该产品 Profile 之间切换 Profile ID。

Seq — 事务序列号​

Seq 为 1 字节无符号整数,用于关联请求与应答帧,并支持重传识别:

  • Client 与 Server 各自独立维护序列号计数器,互不同步。
  • 发送方 SHALL 对每条新事务递增序列号(回绕时从 0x00 重新开始)。
  • 应答帧的 Seq SHALL 与所响应的请求帧保持一致。
  • 接收方收到相同 Seq 且载荷相同的重传帧时,SHOULD 保持幂等处理并返回相同语义的应答。
OPC — 操作码​

OPC 为 1 字节,定义本帧的消息类型、方向与操作对象:

值名称方向对象语义
0x1READClient → Server属性Client 读取 Server 端属性。
0x2READ_RESPONSEServer → Client属性Server 回应 READ,携带属性级 Status 和属性值。
0x3WRITEClient → Server属性Client 写入 Server 属性。
0x4WRITE_RESPONSEServer → Client属性Server 回应 WRITE,携带属性级 Status。
0x5REPORTServer → Client属性Server 主动上报属性变化或周期性属性值。
0x6ACKNOWLEDGE接收方 → 原发起方帧对 REPORT、NOTIFY 或无需返回数据的 COMMAND 进行帧级确认。
0x7QUERYServer → Client属性Server 查询读取 Client 端属性。
0x8QUERY_RESPONSEClient → Server属性Client 回应 QUERY,携带属性级 Status 和属性值。
0x9COMMAND由命令定义决定命令发起触发性命令,携带 Command ID 与类型化参数。
0xANOTIFYClient → Server属性Client 主动上报自身属性变化或同步属性值。

除 0x9(COMMAND)外,其余 OPC 均为属性操作,Data Segment 中包含 Attribute ID;0x9 为命令操作,Data Segment 中包含 Command ID。

D-Len — 数据长度​

D-Len 为 2 字节大端序无符号整数,表示 Data Segment 的字节长度。Data Segment 为空时,D-Len = 0。

发送方构造任意 AECP 帧时,完整帧长度 SHALL NOT 超过链路建立阶段协商得到的 UART 缓冲区大小。完整帧长度计算如下:

Complete Frame Length = 10 + D-Len

其中 10 bytes 固定开销 = 帧头 8 字节(SOF ~ HCS)+ Overall Checksum 2 字节。协商 UART 缓冲区大小 SHALL 取 min(ClientUartBufferSize, ServerUartBufferSize),双方各自声明的值 SHALL NOT 小于 1024 字节,协商结果 SHALL NOT 小于 1024 字节;协商规则见 Link Establishment。UART 缓冲区要求见 UART 缓冲区约束。

HCS — 帧头校验​

HCS 为 1 字节,是帧头末字节;其校验范围为从 SOF 到 D-Len(含)共 7 字节,用于验证帧头完整性。

计算方法(二补数求和):

Sum = SOF + Profile_ID[MSB] + Profile_ID[LSB]
+ Seq + OPC + D-Len[MSB] + D-Len[LSB]

HCS = (~Sum + 1) & 0xFF
提示

CRC(Overall Checksum)使用不同的校验算法,参见 Overall Checksum。

应用交互模型​

AECP 将应用交互分为四类:Server 属性读写、Server 属性上报、Client 属性查询与上报、命令交互。Profile 属性表中的 Side 与 Access 决定某个属性是否支持对应操作,Conformance 决定该属性是否必须实现;Profile 命令表中的 Direction 决定某个命令的合法发起方。

角色、寻址与属性归属​

完整应用寻址由帧头 Profile ID 与 Data Segment 中的 Attribute ID 或 Command ID 共同组成:

  • Profile ID + Attribute ID 唯一标识一个属性。
  • Profile ID + Command ID 唯一标识一个命令。
  • Side = S 的属性由 Server 持有,Client 可按 Access 执行 READ / WRITE,Server 可按 Access 执行 REPORT。
  • Side = C 的属性由 Client 持有,Server 可按 Access 执行 QUERY 拉取(Client 通过 QUERY_RESPONSE 返回属性值),Client 可按 Access 主动 NOTIFY 同步属性值。
属性读写​

属性读写用于 Client 访问 Server 持有的属性。

事务应答说明
READREAD_RESPONSEClient 读取 Side = S 且 Access 包含 R 的属性。
WRITEWRITE_RESPONSEClient 写入 Side = S 且 Access 包含 W 的属性。

READ_RESPONSE 与 WRITE_RESPONSE 中的 Status 为属性级结果。单帧包含多个 Attribute Block 时,每个属性独立成功或失败;某个属性失败不影响同帧其他属性的处理。

AECP 应用交互模型

属性上报与确认​

REPORT 用于 Server 主动上报属性变化或周期性属性值。仅 Side = S 且 Access 包含 RP 的属性可通过 REPORT 上报。

ACKNOWLEDGE 的 Status 为帧级结果,表示接收方是否成功接收并受理该 REPORT 帧。若 REPORT 帧携带多个 Attribute Block,ACKNOWLEDGE 不逐项返回属性级结果。

上报行为由 Profile 属性表声明:

  • RP 表示 Server 具备主动上报该属性的能力。
  • 凡 Side = S 且 Access 包含 R 的可读属性,Access SHALL 同时包含 RP。
  • 变化上报、周期上报、关联上报等策略由具体 Profile 属性说明定义。
  • 本协议不定义独立的上报配置命令;运行时配置应通过对应的 Server 属性完成。
Client 属性查询、响应与上报​

QUERY / QUERY_RESPONSE 用于 Server 按需读取 Client 持有的属性。

仅 Side = C 且 Access 包含 Q 的属性可被 QUERY。QUERY_RESPONSE 中的 Status 为属性级结果,截断规则与 READ_RESPONSE 相同。

NOTIFY 用于 Client 主动向 Server 同步自身属性,尤其在属性值发生变化时。仅 Side = C 且 Access 包含 NF 的属性可通过 NOTIFY 上报。Server 收到 NOTIFY 后 SHALL 返回 ACKNOWLEDGE,其 Status 为帧级结果,表示是否成功接收并受理该 NOTIFY 帧;若 NOTIFY 帧携带多个 Attribute Block,ACKNOWLEDGE 不逐项返回属性级结果。

上报行为由 Profile 属性表声明:

  • NF 表示 Client 具备主动 NOTIFY 该属性的能力。
  • 变化上报、周期上报等策略由具体 Profile 属性说明定义。
  • 本协议不定义独立的 NOTIFY 配置命令;运行时配置应通过对应属性完成。
命令交互与应答模式​

COMMAND 用于触发动作。命令语义由 Profile ID + Command ID 决定,合法发起方由该命令在所属 Profile 命令表中的 Direction 决定,应答方式由命令表中的 Response 决定。

以下时序图中的 Initiator 表示该命令 Direction 允许的 COMMAND 发起方;Receiver 表示接收该 COMMAND 的另一端。

接收方收到 COMMAND 后,SHALL 按命令表中的 Response 选择以下任一应答路径:

  • 若 Response = ACKNOWLEDGE,接收方 SHALL 直接返回 ACKNOWLEDGE。
  • 若 Response = <CommandName>,接收方 SHALL 返回该名称对应的配对 COMMAND。
  • 若 Response = N,接收方 SHALL 不再返回应答。N SHOULD 仅用于配对返回命令,避免无限应答链。

无返回数据的命令使用 ACKNOWLEDGE 直接确认:

需要返回数据的命令使用配对 COMMAND 返回数据;配对 COMMAND 是否继续应答由其自身 Response 声明决定:

若配对返回命令声明 Response = ACKNOWLEDGE,原发起方收到该配对 COMMAND 后 SHALL 返回 ACKNOWLEDGE;若声明 Response = N,原发起方 SHALL 不再返回应答。

若接收方无法执行命令,SHOULD 直接返回 ACKNOWLEDGE 且 Status 为非零错误码,不再发送配对 COMMAND。

事务、方向与序列号​

事务应答的 Seq SHALL 与原事务 Seq 一致:

请求 / 主动帧应答帧Seq 规则
READREAD_RESPONSE应答沿用 READ 的 Seq。
WRITEWRITE_RESPONSE应答沿用 WRITE 的 Seq。
REPORTACKNOWLEDGEACKNOWLEDGE 沿用 REPORT 的 Seq。
QUERYQUERY_RESPONSEQUERY_RESPONSE 沿用 QUERY 的 Seq。
NOTIFYACKNOWLEDGEACKNOWLEDGE 沿用 NOTIFY 的 Seq。
COMMANDACKNOWLEDGE、配对 COMMAND 或无应答ACKNOWLEDGE 或配对 COMMAND 沿用 COMMAND 的 Seq;Response = N 时无应答帧。

REPORT 与 Server 发起的 COMMAND 属于 Server 自发事务,Server 使用本端新 Seq。Client 发起的 READ、WRITE、COMMAND、NOTIFY 属于 Client 自发事务,Client 使用本端新 Seq。

Status 用法​

Status 编码见 Status — 返回状态。不同 OPC 中 Status 的作用域不同:

帧类型Status 粒度说明
READ_RESPONSE / QUERY_RESPONSE属性级每个 Attribute Block 独立携带 Status。
WRITE_RESPONSE属性级每个 Attribute Block 独立携带 Status。
ACKNOWLEDGE帧级对整帧 REPORT、NOTIFY 或 COMMAND 的接收 / 执行结果确认。

当属性级 Status 不为 0x00 时,对应 Attribute Block SHALL 仅包含 Attribute ID 与 Status,不再携带 Data Type 与 Data。

编码规则​

Data Segment 编码规则​

本节定义每种 OPC 对应的 Data Segment 布局。多 Attribute 时,各 Attribute Block 依次紧接排列。

本节以下每一种 Data Segment 布局均 SHALL 遵循 UART 缓冲区约束:发送方在填充 Attribute Block、Command 参数或可变长 Raw Data 时,必须确保 10 + D-Len 不超过链路建立阶段协商得到的 UART 缓冲区大小(取双方声明值中的较小者,且 SHALL NOT 小于 1024 字节)。若待发送内容无法放入单帧,发送方 SHALL 使用对应 Profile 定义的分片、分页或多次交互机制,不得直接发送超出缓冲区能力的帧。

READ(OPC = 0x1)​

READ 请求读取一个或多个 Server 属性。Data Segment 仅含 Attribute ID 列表,不携带值。

Data Segment(一个或多个 AttrID):
+-----------+-----------+-----+-----------+
| AttrID 1 | AttrID 2 | ... | AttrID N |
| (2 B) | (2 B) | | (2 B) |
+-----------+-----------+-----+-----------+
READ_RESPONSE(OPC = 0x2)​

READ_RESPONSE 回应 READ。Data Segment SHALL 为 READ 请求中的每个 Attribute ID 返回一个 Attribute Block,且 Attribute Block 顺序 SHOULD 与 READ 请求中的 Attribute ID 顺序一致。

每个 Attribute Block 独立携带属性级 Status:

  • 若 Status = 0x00,表示该属性读取成功,Attribute Block SHALL 同时携带 Data Type 与 Data。
  • 若 Status != 0x00,表示该属性读取失败,Attribute Block SHALL 仅携带 AttrID 与 Status,SHALL NOT 携带 Data Type 与 Data。
  • 多属性 READ 中,允许部分属性成功、部分属性失败;某个属性失败 SHALL NOT 影响同帧其他属性的返回。
Data Segment(单个属性,Status = 0x00):
+--------+--------+-----------+------+
| AttrID | Status | Data Type | Data |
| (2 B) | (1 B) | (1 B) |(N B) |
+--------+--------+-----------+------+
Data Segment(单个属性,Status != 0x00):
+--------+--------+
| AttrID | Status |
| (2 B) | (1 B) |
+--------+--------+

多属性全部成功示例:

+---------+--------+-----------+-------+---------+--------+-----------+-------+
| AttrID1 | Status | Data Type | Data1 | AttrID2 | Status | Data Type | Data2 |
| (2 B) | (1 B) | (1 B) | (N B) | (2 B) | (1 B) | (1 B) | (N B) |
+---------+--------+-----------+-------+---------+--------+-----------+-------+

多属性部分成功示例:

+---------+--------+-----------+-------+---------+--------+
| AttrID1 | Status | Data Type | Data1 | AttrID2 | Status |
| (2 B) | (1 B) | (1 B) | (N B) | (2 B) | (1 B) |
+---------+--------+-----------+-------+---------+--------+

上述示例中,AttrID1 读取成功;AttrID2 读取失败,因此 AttrID2 后不再携带 Data Type 与 Data。

多属性全部失败示例:

+---------+--------+---------+--------+
| AttrID1 | Status | AttrID2 | Status |
| (2 B) | (1 B) | (2 B) | (1 B) |
+---------+--------+---------+--------+
WRITE(OPC = 0x3)​

WRITE 写入 Server 属性。Data Segment 由一个或多个 Attribute Block 组成,每个 Attribute Block 携带 Attribute ID、Data Type 与 Data。

Data Segment(单个属性):
+--------+-----------+------+
| AttrID | Data Type | Data |
| (2 B) | (1 B) |(N B) |
+--------+-----------+------+
WRITE_RESPONSE(OPC = 0x4)​

WRITE_RESPONSE 回应 WRITE。Data Segment 由一个或多个 Attribute Block 组成,每个 Attribute Block 携带属性级 Status。

Data Segment(单个属性):
+--------+--------+
| AttrID | Status |
| (2 B) | (1 B) |
+--------+--------+
REPORT(OPC = 0x5)​

REPORT 主动上报一个或多个 Server 属性。Data Segment 格式与 WRITE 相同,由一个或多个 Attribute Block 组成。

Data Segment(单个属性,同 WRITE):
+--------+-----------+------+
| AttrID | Data Type | Data |
| (2 B) | (1 B) |(N B) |
+--------+-----------+------+
ACKNOWLEDGE(OPC = 0x6)​

ACKNOWLEDGE 对 REPORT、NOTIFY 或 COMMAND 进行帧级确认。Data Segment 仅含 Status。

Data Segment:
+--------+
| Status |
| (1 B) |
+--------+
QUERY(OPC = 0x7)​

QUERY 查询读取一个或多个 Client 属性。Data Segment 格式与 READ 相同。

Data Segment(一个或多个 AttrID):
+-----------+-----------+-----+-----------+
| AttrID 1 | AttrID 2 | ... | AttrID N |
| (2 B) | (2 B) | | (2 B) |
+-----------+-----------+-----+-----------+
QUERY_RESPONSE(OPC = 0x8)​

QUERY_RESPONSE 回应 QUERY。Data Segment 格式与 READ_RESPONSE 相同,也 SHALL 为 QUERY 中的每个 Attribute ID 返回一个 Attribute Block。

QUERY_RESPONSE 同样支持多属性全部成功、部分成功和全部失败。Status = 0x00 的 Attribute Block 携带 Data Type 与 Data;Status != 0x00 的 Attribute Block 仅携带 AttrID 与 Status。

NOTIFY(OPC = 0xA)​

NOTIFY 由 Client 主动上报一个或多个 Client 属性。Data Segment 格式与 REPORT 相同,由一个或多个 Attribute Block 组成。

Data Segment(单个属性,同 REPORT):
+--------+-----------+------+
| AttrID | Data Type | Data |
| (2 B) | (1 B) |(N B) |
+--------+-----------+------+
COMMAND(OPC = 0x9)​

COMMAND 发起一条命令。每帧 SHALL 仅承载一条命令,不聚合多条 Command ID。

Data Segment(无参数):
+------------+
| Cmd ID |
| (2 B) |
+------------+
Data Segment(带参数,以 OtaPrepare 为例):
+------------+-----------+--------------+-----------+--------+
| Cmd ID | Data Type | FirmwareSize | Data Type | Crc16 |
| (2 B) | (1 B) | (4 B) | (1 B) | (4 B) |
+------------+-----------+--------------+-----------+--------+

每个参数 SHALL 按 Data Type (1 B) + Raw Data (N B) 编码,Raw Data 格式与 WRITE 属性块中的 Data 字段一致(不含 Attribute ID)。参数 SHALL 按对应 Profile 中该命令 参数 表的 参数顺序 从小到大依次排列;不携带参数数量字段。

  • 无参数命令:D-Len = 2,Data Segment 仅含 Cmd ID。
  • 有参数命令:D-Len = 2 + Σ(1 + sizeof(raw_i))。
  • 参数名称、顺序、类型和约束由 Profile 命令定义中的 Parameter Details(参数)表决定;参数 Raw Data 长度由 数据类型纵览 中的类型定义决定。

Overall Checksum — 整体校验​

CRC 为 2 字节大端序无符号整数,采用 CRC16-Modbus 算法,覆盖 Data Segment 的全部字节。

  • 初始值:0xFFFF
  • 多项式:Modbus CRC16(标准 0x8005 反转多项式)

参考实现:

static const uint16_t sCrcTableAbs[] = {
0x0000, 0xCC01, 0xD801, 0x1400, 0xF001, 0x3C00, 0x2800, 0xE401,
0xA001, 0x6C00, 0x7800, 0xB401, 0x5000, 0x9C01, 0x8801, 0x4400
};

uint16_t crc16Modbus(uint16_t crc, const uint8_t *ptr, uint16_t len)
{
for (uint16_t i = 0; i < len; i++) {
uint8_t ch = *ptr++;
crc = sCrcTableAbs[(ch ^ crc) & 15] ^ (crc >> 4);
crc = sCrcTableAbs[((ch >> 4) ^ crc) & 15] ^ (crc >> 4);
}
return crc;
}

调用方式:

/* 计算 Data Segment 的 CRC,初始值传入 0xFFFF */
uint16_t checksum = crc16Modbus(0xFFFF, data_segment, data_length);
注意

CRC16-Modbus 的初始值为 0xFFFF,与 CRC16/XMODEM(OTA 固件校验,初始值 0x0000)不同,请勿混用。

数据类型​

本节定义 Data Segment 中使用的所有数据类型及其字节编码规则,包括每种类型的语义、取值范围、线路格式,以及操作返回状态码。

数据类型总览​

Data Type 为 1 字节,标识 Raw Data 的类型与长度计算方式。本文统一使用 Data Type 表示该字段。

本表中的 Raw Data 长度 指单个属性值或命令参数值在 Data Segment 中的值域长度,不包含 AttrID、Status、Data Type、Command ID 等外层字段。固定长度类型直接给出字节数;变长或复合类型给出最小长度,实际长度由该类型自身编码中的长度字段、成员数量或元素数量决定。

ClassData TypeShort NameIDRaw Data 长度说明
DiscreteBooleanbool0x101布尔值,0x00 = false,0x01 = true。
Discrete8-bit bitmapmap80x1818 位位图,每个 bit 表示一个独立布尔状态。
Discrete16-bit bitmapmap160x19216 位位图,每个 bit 表示一个独立布尔状态。
Discrete24-bit bitmapmap240x1A324 位位图,每个 bit 表示一个独立布尔状态。
Discrete32-bit bitmapmap320x1B432 位位图,每个 bit 表示一个独立布尔状态。
Discrete64-bit bitmapmap640x1F864 位位图,每个 bit 表示一个独立布尔状态。
AnalogUnsigned 8-bit integeruint80x201无符号 8 位整数。
AnalogUnsigned 16-bit integeruint160x212无符号 16 位整数。
AnalogUnsigned 24-bit integeruint240x223无符号 24 位整数。
AnalogUnsigned 32-bit integeruint320x234无符号 32 位整数。
AnalogUnsigned 64-bit integeruint640x278无符号 64 位整数。
AnalogSigned 8-bit integerint80x281有符号 8 位整数。
AnalogSigned 16-bit integerint160x292有符号 16 位整数。
AnalogSigned 24-bit integerint240x2A3有符号 24 位整数。
AnalogSigned 32-bit integerint320x2B4有符号 32 位整数。
AnalogSigned 64-bit integerint640x2F8有符号 64 位整数。
Discrete8-bit enumerationenum80x3018 位枚举值,命名常量集合,有效值由各属性定义。
Discrete16-bit enumerationenum160x31216 位枚举值,命名常量集合,有效值由各属性定义。
Discrete32-bit enumerationenum320x32432 位枚举值,命名常量集合,有效值由各属性定义。
Discrete64-bit enumerationenum640x33864 位枚举值,命名常量集合,有效值由各属性定义。
AnalogSingle precisionsingle0x394单精度浮点。
AnalogDouble precisiondouble0x3A8双精度浮点。
DiscreteOctet stringoctstr0x411 + Length变长字节串。Raw Data 第 1 字节为 Length,表示后续字节内容长度;Length 不允许为 0,因此最小 Raw Data 长度为 2。
DiscreteCharacter stringstring0x421 + Length变长 UTF-8 字符串。Raw Data 第 1 字节为 Length,表示后续 UTF-8 字节长度;Length 不允许为 0,因此最小 Raw Data 长度为 2。
Compositelistlist0x483 + ElementCount × ElementLen,最小 3同类型元素列表,含 1 字节 Element Data Type 和 2 字节 Element Count;允许空列表。
CompositeStructurestruct0x4C2 + Σ(1 + DataLen),最小 4多成员复合结构体,含 2 字节 Element Count;成员数不允许为 0。
提示

AECP 内所有多字节 Raw Data 均采用大端序(Big-Endian),高位字节先发送。单字节类型(bool、uint8、int8、enum8、map8)无字节序之分。OTA 固件文件内部的 OTA Header 是唯一小端序例外,不属于本节定义的通信帧 Raw Data。

bool(Data Type = 0x10)​

bool 表示布尔量,占 1 字节。

取值​
  • 0x00 = false
  • 0x01 = true
  • 其他值 SHALL NOT 使用。
编码​
+------+
| 0xVV | VV = 0x00 (false) 或 0x01 (true)
+------+

enum8(Data Type = 0x30)​

enum8 为 8 位枚举类型,占 1 字节,与 uint8 编码相同,但其语义为命名常量集合:每个有效值对应一个具名状态或选项。

取值​

enum8 的原始取值范围为 0x00 ~ 0xFF,但具体合法值 SHALL 由使用该类型的属性、命令参数或 Profile 数据类型枚举表定义。

  • 枚举表未列出的值 SHALL NOT 使用。
  • 发送方 SHALL 只发送枚举表中定义的合法值。
  • 接收方收到未知枚举值时,SHOULD 将其视为参数范围错误,并回应非零 Status。
编码​
+------+
| 0xVV | VV = 枚举值(由各属性定义决定)
+------+
示例​

若某属性的类型为 OtaStatusEnum8,且该枚举定义 0x02 = VerifyFailed,则 Raw Data 编码为:

+------+
| 0x02 |
+------+

enum16(Data Type = 0x31)​

enum16 为 16 位枚举类型,占 2 字节,与 uint16 编码相同,但其语义为命名常量集合。当枚举值超过 0xFF,或 Profile 明确要求预留更大枚举空间时,SHALL 使用 enum16。

取值​

enum16 的原始取值范围为 0x0000 ~ 0xFFFF,但具体合法值 SHALL 由使用该类型的属性、命令参数或 Profile 数据类型枚举表定义。

  • 枚举表未列出的值 SHALL NOT 使用。
  • 发送方 SHALL 只发送枚举表中定义的合法值。
  • 接收方收到未知枚举值时,SHOULD 将其视为参数范围错误,并回应非零 Status。
编码​

enum16 采用 2 字节大端序编码:

+------+------+
| MSB | LSB |
+------+------+

enum32(Data Type = 0x32)​

enum32 为 32 位枚举类型,占 4 字节,与 uint32 编码相同,但其语义为命名常量集合。当枚举空间需要跨系统稳定分配,或枚举值超过 0xFFFF 时,SHALL 使用 enum32。

取值​

enum32 的原始取值范围为 0x00000000 ~ 0xFFFFFFFF,但具体合法值 SHALL 由使用该类型的属性、命令参数或 Profile 数据类型枚举表定义。

  • 枚举表未列出的值 SHALL NOT 使用。
  • 发送方 SHALL 只发送枚举表中定义的合法值。
  • 接收方收到未知枚举值时,SHOULD 将其视为参数范围错误,并回应非零 Status。
编码​

enum32 采用 4 字节大端序编码:

+--------+--------+--------+--------+
| MSB | | | LSB |
+--------+--------+--------+--------+

enum64(Data Type = 0x33)​

enum64 为 64 位枚举类型,占 8 字节,与 uint64 编码相同,但其语义为命名常量集合。当枚举空间需要跨系统稳定分配,或枚举值超过 0xFFFFFFFF 时,SHALL 使用 enum64。

取值​

enum64 的原始取值范围为 0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF,但具体合法值 SHALL 由使用该类型的属性、命令参数或 Profile 数据类型枚举表定义。

  • 枚举表未列出的值 SHALL NOT 使用。
  • 发送方 SHALL 只发送枚举表中定义的合法值。
  • 接收方收到未知枚举值时,SHOULD 将其视为参数范围错误,并回应非零 Status。
编码​

enum64 采用 8 字节大端序编码:

+--------+--------+--------+--------+--------+--------+--------+--------+
| MSB | | | | | | | LSB |
+--------+--------+--------+--------+--------+--------+--------+--------+

map8 / map16 / map32 / map64​

map 类型用于表达一组可同时成立的布尔状态,也称位图或 bitmask。与 enum 类型不同,enum 表示互斥选项,map 表示多个 bit 的组合状态。

map 类型按底层宽度分为:

类型Data Type 值Raw Data 字节长度说明
map80x181bit 0 ~ bit 7。
map160x192bit 0 ~ bit 15,采用大端序编码。
map320x1B4bit 0 ~ bit 31,采用大端序编码。
map640x1F8bit 0 ~ bit 63,采用大端序编码。
取值​

每个 bit SHALL 在对应 Profile 的 map 类型表中定义含义:

  • bit 值为 1 表示该状态处于激活、存在或使能状态。
  • bit 值为 0 表示该状态未激活、不存在或未使能。
  • 未在 map 类型表中定义的 bit SHALL 发送为 0;接收方收到未知 bit 为 1 时 SHOULD 忽略该 bit。
编码​

map8 占 1 字节,无字节序之分。map16、map32 与 map64 采用大端序编码。bit 编号按整数值的最低有效位开始计算,即 bit 0 表示数值 0x0001,bit 1 表示数值 0x0002。

整数类型​

整数类型分为有符号(Int)和无符号(Uint)两组,均采用二进制补码(Two's Complement)表示。

uint8(Data Type = 0x20)​

无符号 8 位整数,取值范围:0 ~ 255(0x00 ~ 0xFF)。

编码:1 字节,无字节序之分。

+--------+
| 0x00 | ← 示例:值 0
+--------+
| 0xFF | ← 示例:值 255
+--------+
int8(Data Type = 0x28)​

有符号 8 位整数,取值范围:-128 ~ 127(0x80 ~ 0x7F)。

编码:1 字节,二进制补码,无字节序之分。

+--------+
| 0x7F | ← 示例:值 +127
+--------+
| 0xFF | ← 示例:值 -1
+--------+
| 0x80 | ← 示例:值 -128
+--------+
uint16(Data Type = 0x21)​

无符号 16 位整数,取值范围:0 ~ 65,535。

编码:2 字节,大端序(高位字节先发送)。

+----------+----------+
| octet[0] | octet[1] |
| (MSB) | (LSB) |
+----------+----------+

示例:值 300(0x012C)编码为:

+------+------+
| 0x01 | 0x2C |
+------+------+
int16(Data Type = 0x29)​

有符号 16 位整数,取值范围:-32,768 ~ 32,767。

编码:2 字节,大端序,二进制补码。

示例:值 -1(0xFFFF)编码为 FF FF;值 2650(表示 26.50℃)编码为 0A 5A。

uint32(Data Type = 0x23)​

无符号 32 位整数,取值范围:0 ~ 4,294,967,295。

编码:4 字节,大端序。

+----------+----------+----------+----------+
| octet[0] | octet[1] | octet[2] | octet[3] |
| (MSB) | | | (LSB) |
+----------+----------+----------+----------+

示例:值 0x01020304 编码为:

+------+------+------+------+
| 0x01 | 0x02 | 0x03 | 0x04 |
+------+------+------+------+
int32(Data Type = 0x2B)​

有符号 32 位整数,取值范围:-2,147,483,648 ~ 2,147,483,647。

编码:4 字节,大端序,二进制补码。

示例:值 -1(0xFFFFFFFF)编码为 FF FF FF FF。

uint64(Data Type = 0x27)​

无符号 64 位整数,取值范围:0 ~ 2^64 − 1。

编码:8 字节,大端序。

+----------+----------+----------+----------+----------+----------+----------+----------+
| octet[0] | octet[1] | octet[2] | octet[3] | octet[4] | octet[5] | octet[6] | octet[7] |
| (MSB) | | | | | | | (LSB) |
+----------+----------+----------+----------+----------+----------+----------+----------+
int64(Data Type = 0x2F)​

有符号 64 位整数,取值范围:−2^63 ~ 2^63 − 1。

编码:8 字节,大端序,二进制补码。

浮点类型​

浮点类型遵循 IEEE 754 标准,大端序编码(符号位位于 octet[0] 最高位)。

single(Data Type = 0x39)​

单精度浮点,4 字节,IEEE 754 binary32:1 位符号 + 8 位指数 + 23 位尾数,有效精度约 7 位十进制数字。

编码:4 字节,大端序。

+--------------+----------------------+------------+------------+
| octet[0] | octet[1] | octet[2] | octet[3] |
| S + exp[7:1] | exp[0] + mant[22:16] | mant[15:8] | mant[7:0] |
+--------------+----------------------+------------+------------+

示例:

值十六进制编码(Hex 字节序列)
1.00x3F8000003F 80 00 00
0.50x3F0000003F 00 00 00
-1.00xBF800000BF 80 00 00
double(Data Type = 0x3A)​

双精度浮点,8 字节,IEEE 754 binary64:1 位符号 + 11 位指数 + 52 位尾数,有效精度约 15 ~ 17 位十进制数字。

编码:8 字节,大端序。

示例:

值十六进制编码(Hex 字节序列)
1.00x3FF00000000000003F F0 00 00 00 00 00 00
-1.00xBFF0000000000000BF F0 00 00 00 00 00 00
octstr(Data Type = 0x41)​

octstr 为变长字节串,可携带任意二进制内容(如设备 ID、版本字符串、固件数据分片等)。

编码格式​

Raw Data 由 1 字节长度前缀与实际字节内容组成:

+--------+----------+----------+----------+-----+
| Length | octet[0] | octet[1] | octet[2] | ... |
| (1 B) | (Length bytes) |
+--------+----------+----------+----------+-----+
  • Length(1 字节):后续字节内容的实际字节数,不含 Length 字段本身。Raw Data 总长度 = Length + 1。
  • Length SHALL NOT 为 0。
  • 字节内容按原始字节顺序传输,不做字节序转换;具体含义由各 Attribute 定义决定。
示例​
Raw Data(Hex)含义
05 48 45 4C 4C 4FLength = 5,后续 5 字节 ASCII 解码得字符串 HELLO
Structure(Data Type = 0x4C)​

Structure 用于在单个属性中同时传递多个类型不同的数据成员,避免多次交互。每个成员有独立的 Data Type 和数据体。

提示

Structure 的成员数范围为 1 ~ 15,且成员 SHALL NOT 嵌套另一个 Structure(最大嵌套深度为 1)。

编码格式​
+---------------+--------------+--------+--------------+--------+-----+
| Element Count | Field 1 Type | Data 1 | Field 2 Type | Data 2 | ... |
| (2 B) | (1 B) | (N1 B) | (1 B) | (N2 B) | |
+---------------+--------------+--------+--------------+--------+-----+
  • Element Count(2 字节):成员数量,取值范围 1 ~ 15。0 SHALL NOT 使用。
  • 每个成员由 Data Type(1 字节数据类型)和 Data(对应长度的字节)组成。
  • 成员的字节序遵循本章各类型规定。
示例​
Raw Data(Hex)含义
00 02 41 05 48 45 4C 4C 4F 20 FFElement Count = 2。成员 1:Data Type = 0x41(octstr),Length = 5,解码得字符串 HELLO。成员 2:Data Type = 0x20(uint8),值为 255(0xFF)。

string(Data Type = 0x42)​

string 为变长字符串,Raw Data 使用 UTF-8 编码。与 octstr 不同,string 的内容 SHALL 为合法 UTF-8 字节序列。

编码格式​

Raw Data 由 1 字节长度前缀与实际 UTF-8 字节内容组成:

+--------+----------+----------+----------+-----+
| Length | octet[0] | octet[1] | octet[2] | ... |
| (1 B) | (Length bytes) |
+--------+----------+----------+----------+-----+
  • Length(1 字节):后续 UTF-8 字节内容的实际字节数,不含 Length 字段本身。Raw Data 总长度 = Length + 1。
  • Length SHALL NOT 为 0。
  • 字符串长度按 UTF-8 字节数计算,不按字符数计算。
示例​
Raw Data(Hex)含义
05 48 45 4C 4C 4FLength = 5,后续 5 字节 UTF-8 解码得字符串 HELLO。

list(Data Type = 0x48)​

list 用于在单个属性或命令参数中传递同一数据类型的多个元素。list 与 Structure 的区别是:list 内所有元素类型相同;Structure 内每个成员可使用不同类型。

在 Profile 属性表或命令参数表中,list 类型 SHALL 写作 list[T],其中 T 为元素类型的 Short Name。例如 list[uint16] 表示元素类型为 uint16 的列表;在线路编码中 Element Data Type SHALL 填写 uint16 对应的 Data Type 值。

提示

list 的元素数量最多为 65535。为避免解析复杂度,list 的 Element Data Type SHALL NOT 为 Structure、string 或 list。

编码格式​
+-------------------+---------------+--------+--------+-----+--------+
| Element Data Type | Element Count | Data 0 | Data 1 | ... | Data N |
| (1 B) | (2 B) | (N B) | (N B) | | (N B) |
+-------------------+---------------+--------+--------+-----+--------+
  • Element Data Type(1 字节):列表元素的数据类型。列表内所有元素 SHALL 使用同一个 Element Data Type。
  • Element Count(2 字节):列表元素数量,取值范围 0 ~ 65535。0 表示空列表。
  • 后续 Data 按元素顺序连续排列,每个元素的编码规则遵循本章对应数据类型定义。
  • 当 Element Count = 0 时,Raw Data 仅包含 Element Data Type 与 Element Count,不携带元素数据。
示例​
Raw Data(Hex)含义
20 00 03 0A 14 1EElement Data Type = 0x20(uint8),Element Count = 3,元素值依次为 10、20、30。
21 00 02 00 64 01 2CElement Data Type = 0x21(uint16),Element Count = 2,元素值依次为 100、300。

Status — 返回状态​

Status 为 1 字节,携带于 ACKNOWLEDGE、READ_RESPONSE、WRITE_RESPONSE、QUERY_RESPONSE 帧中,表示属性级或帧级操作结果。

Status 的取值按适用交互划分。属性级 Status 用于 READ_RESPONSE、WRITE_RESPONSE、QUERY_RESPONSE 中的单个 Attribute Block;帧级 Status 用于 ACKNOWLEDGE,对 REPORT、NOTIFY 或 COMMAND 整帧进行确认。

值名称适用交互含义
0x00Success所有带 Status 的应答操作成功。
0x01UnsupportedProfileREAD / WRITE / QUERY / REPORT / NOTIFY / COMMANDProfile ID 不支持,或当前 Profile 不允许该交互。
0x02UnsupportedAttributeREAD / WRITE / QUERYAttribute ID 不存在,或该 Attribute 未在当前 Profile 中定义。
0x03AttributeAccessDeniedREAD / WRITE / QUERY / REPORT / NOTIFY属性存在,但访问权限、Side 或 Access 不允许当前操作。
0x04AttributeTypeMismatchWRITE / REPORT / NOTIFYData Segment 中携带的 Data Type 与属性定义不一致。
0x05AttributeValueOutOfRangeWRITE / REPORT / NOTIFY属性值超出 Profile 定义的取值范围或约束。
0x10UnsupportedCommandCOMMANDCommand ID 不存在,或该 Command 未在当前 Profile 中定义。
0x11CommandDirectionDeniedCOMMANDCommand 存在,但当前发起方不符合命令表中的 Direction 定义。
0x12CommandParameterErrorCOMMANDCommand 参数数量、长度、顺序或取值范围不符合命令定义。
0x13CommandRejectedCOMMAND接收方因当前状态、资源不足、忙碌或业务条件不满足而拒绝执行命令。
0x20InvalidOpcode帧级解析OPC 未定义,或当前状态下不允许接收该 OPC。
0x21InvalidDataLength帧级解析Data Length 与该 OPC 的 Data Segment 格式不匹配。
0x22HeaderChecksumError帧级解析Header Checksum 校验失败。
0x23OverallChecksumError帧级解析Overall Checksum 校验失败。
0x24MalformedDataSegment帧级解析Data Segment 格式非法,例如字段截断、Attribute Block 不完整或参数长度无法解析。
0x25ProfileDiscoveryInProgressQUERY / REPORT / COMMANDClient 尚未完成 Profile Discovery,暂不接受 Server 主动数据同步。Server SHOULD 等待 ProfileDiscoveryComplete ACK 后再重试。
0x30OtaVersionMismatchOTA COMMAND / OTA 属性交互固件版本不匹配,或升级目标版本不被允许。
0x31OtaImageSizeErrorOTA COMMAND / OTA 属性交互固件镜像长度错误。
0x32OtaImageCrcErrorOTA COMMAND / OTA 属性交互固件镜像 CRC 校验失败。
0x33OtaHeaderErrorOTA COMMAND / OTA 属性交互OTA Header 信息异常,例如 Identity ID、长度、CRC 或目标硬件信息不匹配。
0x34OtaOffsetErrorOTA COMMAND / OTA 属性交互固件分片偏移量错误。
0x35OtaStateErrorOTA COMMAND / OTA 属性交互OTA 状态机不允许当前操作,例如未准备、重复开始、已取消或已结束。
0x36OtaInternalErrorOTA COMMAND / OTA 属性交互OTA 过程中发生其他不可归类错误。
0x7FUnknownError所有带 Status 的应答未知错误。仅当无法归类到以上错误码时使用。
提示

除 0x00(Success)外,所有其他值均视为错误返回。实现方可以 status != 0x00 判断操作是否成功。

第四章 初始化​

本章定义 Client 与 Server 上电后的初始化流程,包括链路建立、Profile 发现、Server 数据同步,以及 Wake Signaling(唤醒信令)规则。

概述​

Client 与 Server 上电后,Client SHALL 按以下三个阶段顺序执行初始化:

  1. 链路建立:Client 发送 LinkEstablishmentRequest(ClientUartBufferSize),Server 返回 LinkEstablishmentResponse(LowPowerFeature, ServerUartBufferSize),协商 Wake Signaling 是否使能,并交换双方 UART 缓冲区能力;双方取较小值作为 AECP 单帧长度上限(>= 1024 字节)。双方协商完成前,Wake Signaling 特性默认使能;协商完成后,仅当 Server 返回 Normal 时不使能。
  2. Profile 发现:Client READ Server Profile 与属性初始值,并发送 ProfileDiscoveryComplete;Server ACK 后 Profile 发现完成。
  3. Server 数据同步:Server 按需 QUERY Client 属性或 REPORT Server 属性;初始化完成后进入正常工作。
提示

双方协商 LowPowerFeature 完成前,Wake Signaling 特性默认使能;协商交互期间,发送方 SHALL 执行 Wake Signaling。

核心概念​

Link Establishment 是上电后的首个 AECP 交互过程,用于协商 Wake Signaling 是否使能(LowPowerFeature),并交换双方 UART 缓冲区能力(ClientUartBufferSize、ServerUartBufferSize)。协商完成前,Wake Signaling 特性默认使能。

完成判据: Client 收到 LinkEstablishmentResponse 并缓存 LowPowerFeature、ServerUartBufferSize 与协商 UART 缓冲区大小;Server 缓存 ClientUartBufferSize 与协商 UART 缓冲区大小。

交互过程:

  • Client SHALL 发送 LinkEstablishmentRequest(ClientUartBufferSize) 作为上电首条 AECP 帧;ClientUartBufferSize 语义见 ClientUartBufferSize 属性,且 SHALL NOT 小于 1024 字节;发送前 SHALL 执行 Wake Signaling(协商前默认使能)。
  • Server SHALL 返回 LinkEstablishmentResponse(LowPowerFeature, ServerUartBufferSize);ServerUartBufferSize 语义见 ServerUartBufferSize 属性,且 SHALL NOT 小于 1024 字节;发送前 SHALL 执行 Wake Signaling。

链路建立完成后,双方 SHALL 计算并缓存 协商 UART 缓冲区大小:

.... 协商 UART 缓冲区大小 = min(ClientUartBufferSize, ServerUartBufferSize) ....

协商结果 SHALL NOT 小于 1024 字节。后续任意方向的 AECP 单帧,完整帧长度(见 交互模式)SHALL NOT 超过协商 UART 缓冲区大小。

Link Establishment 协商完成前: Wake Signaling 特性默认使能;协商交互期间,发送方 SHALL 执行 Wake Signaling。

Profile Discovery(Profile 发现)​

Profile Discovery 是 Client 读取 Server 能力视图的过程,包括 Profile 发现、属性列表读取和属性初始值读取。

完成判据: Client 发送 ProfileDiscoveryComplete,且 Server 返回 ACKNOWLEDGE(Status=0x00)。

Client SHALL 先完成 Server 产品 Profile 发现、属性列表及初始值读取,再发送 ProfileDiscoveryComplete。Server SHALL 默认支持 Foundation Profile(0x0000),且只支持一个产品 Profile。

READ 推荐顺序:

  1. 使用 Profile ID = 0x0000 READ ServerAttributeList(Attribute ID 0xFFFB)。
  2. 使用 Profile ID = 0x0000 READ ProductProfileID(Attribute ID 0x1007)。
  3. 使用 Profile ID = ProductProfileID READ 产品 Profile 的 ServerAttributeList(Attribute ID 0xFFFB)。
  4. 使用 Profile ID = 0x0000 READ Foundation Profile 中需要初始化的 Server 属性。
  5. 使用 Profile ID = ProductProfileID READ 产品 Profile 中需要初始化的 Server 属性。

Client SHALL 使用 Profile ID = 0x0000 读取以下 Foundation Server 属性:

Attribute ID名称说明
0xFFFBServerAttributeListFoundation Profile 下 Server 实际支持的 Attribute ID 列表。
0x1007ProductProfileIDServer 唯一产品 Profile。

Client SHALL NOT 在产品 Profile 初始化读取中访问 ServerAttributeList 未声明的属性。

当 LowPowerFeature=LowPower 时,Client SHALL 在每次 Client → Server READ 前执行 Wake Signaling。

LowPowerFeature(低功耗特性)​

LowPowerFeature 是 LinkEstablishmentResponse 携带的参数,类型为 LowPowerFeatureEnum8,用于协商 Wake Signaling 是否使能。双方协商完成前,Wake Signaling 特性默认使能;Server 返回 Normal 表示协商关闭 Wake Signaling。

双方协商完成前,Wake Signaling 特性默认使能;Server 返回 Normal 表示协商关闭 Wake Signaling。

值名称说明
0x00Normal协商关闭 Wake Signaling;链路建立完成后,双方直接 UART 通信。
0x01LowPower默认(协商前);保持 Wake Signaling 使能;链路建立完成后,每次 UART 通信前发送方 SHALL 执行 Wake Signaling。

Server 报告的 LowPowerFeature SHALL 与产品实际低功耗能力一致。未实现低功耗 sleep 与 Wake Pin 机制的产品 SHALL 返回 Normal。此类产品若将 Wake Pin 固定接高,链路建立协商期间的 Wake Signaling SHALL 要求视为已满足(无实际操作)。

Wake Signaling(唤醒信令)​

Wake Signaling 是发送方在 UART 通信前,通过对端 Wake Pin 执行 “低电平断言 → T0 等待 → UART 传输 → 引脚释放” 的完整过程。
本协议采用 低电平有效 的 Wake Pin 信号。在无数据传输期间,Wake Pin SHALL 维持高电平。

启用规则​
  • 协商前默认:双方协商 LowPowerFeature 完成前,Wake Signaling 特性默认使能。
  • 链路建立协商期间:因协商前默认使能,发送方 SHALL 执行 Wake Signaling。
  • 协商结果为 Normal:Wake Signaling 不使能,双方直接 UART 通信。
  • 协商结果为 LowPower(默认):Wake Signaling 保持使能;每次 UART 通信前,发送方 SHALL 执行 Wake Signaling(Client→Server、Server→Client 均适用)。

Wake Signaling 时序图

参数名称说明
T0等待时间Wake Pin 拉低后,发送方等待接收方完成 UART 接收准备的时间。T0 结束后才开始发送串口数据。
T1单次信令总时长从 Wake Pin 拉低到重新拉高的完整持续时间,即 T0 加上全部数据传输时间。

Client → Server:

  • T0 建议值:5 ms。
  • T1:无固定要求,由实际数据传输时长决定。

Server → Client:

  • T0 固定值:20 ms(当前版本固定,不支持通过命令动态配置)。
  • Client SHALL 在 T0 时间内完成串口接收准备。
超时处理​

发送方在等待对端响应时,超时时间 SHALL 设定为 100 ms。超时后的重传行为参见重试机制章节。

开发建议​
  • Wake Pin 的驱动能力应满足目标设备的输入阈值要求。
  • 数据传输完成后,应及时释放 Wake Pin(拉高),避免长时间持续拉低导致对端无法恢复低功耗状态。
  • 若系统不需要低功耗功能,可将 Wake Pin 固定接高,省略 Wake Signaling。

上电初始化流程​

流程总览​

Client 与 Server 上电后,按以下三个阶段顺序执行:

阶段名称说明
阶段 1链路建立协商 LowPowerFeature 并交换 UART 缓冲区能力,取双方较小值作为单帧上限(>= 1024 字节);协商前 Wake Signaling 默认使能;协商交互发送方 SHALL Wake Signaling;Normal 协商结果不使能
阶段 2Profile 发现Client READ Profile/属性;发送 ProfileDiscoveryComplete 且 Server ACK
阶段 3Server 数据同步Server 按需 QUERY Client 属性或 REPORT Server 属性;初始化完成

链路建立​

Client 上电后 SHALL 首先执行链路建立(参见 Link Establishment(链路建立)):

  1. Client 发送 LinkEstablishmentRequest(ClientUartBufferSize) 前 SHALL 执行 Wake Signaling(协商前默认使能)。
  2. Server 返回 LinkEstablishmentResponse(LowPowerFeature, ServerUartBufferSize) 前 SHOULD 执行 Wake Signaling。
  3. Client 缓存 LowPowerFeature、ServerUartBufferSize 与协商 UART 缓冲区大小;Server 缓存 ClientUartBufferSize 与协商 UART 缓冲区大小;链路建立协商完成。协商前 Wake Signaling 默认使能;仅当协商结果为 Normal 时不使能。

Profile 发现​

Client SHALL 在链路建立完成后执行 Profile 发现,按推荐 READ 顺序读取 Server 能力视图与属性初始值,随后发送 ProfileDiscoveryComplete。

  • ProfileDiscoveryRequest 触发时,Client SHALL 重新执行 Profile 发现(SHALL NOT 重做链路建立)。
  • Client SHALL 使用 Profile ID = 0x0000 发送 ProfileDiscoveryComplete。
  • Server 返回 ACKNOWLEDGE(Status=0x00) 后,Profile 发现完成。
提示

Server 在收到 ProfileDiscoveryComplete 并 ACK 之前,SHALL NOT 主动发起 QUERY、REPORT 或用于同步业务数据的 Server → Client COMMAND。

Server 数据同步​

Profile 发现完成后,Server MAY 通过 QUERY 拉取自身需要的 Client 属性(Side = C),也 MAY 通过 REPORT 主动同步 Server 属性(Side = S)。

  • Client 收到 QUERY 后 SHALL 通过 QUERY_RESPONSE 返回当前值。
  • Client 收到 REPORT 后 SHALL 通过 ACKNOWLEDGE 确认。
Attribute ID名称说明
0x0000ProtocolVersionServer 拉取 Client 支持的 AECP 版本
0x0001ModuleFirmwareVersionServer 拉取 Client 固件版本
0x0002ModuleUniqueIDServer 拉取设备唯一标识
0x0003PairingStatusServer 拉取当前配网状态
0x0004NetworkStatusServer 拉取当前网络连接状态
0x0005LocalTimeServer 拉取当前本地时间
0x0006ModuleSupportedProductProfileListServer 拉取 Client 支持的产品 Profile ID 列表
0x0007ClientUartBufferSizeServer 拉取 Client UART 缓冲区大小
0x0008ModuleWirelessProtocolServer 拉取 Client 模组当前无线协议

若 Client 尚未完成 Profile 发现,Client MAY 对过早到达的 QUERY、REPORT 或 Server → Client 数据同步 COMMAND 返回 ProfileDiscoveryInProgress。

Server 数据同步完成后,Client 与 Server 进入正常工作;后续 UART 通信是否执行 Wake Signaling 仍由阶段 1 确定的 LowPowerFeature 约束。

完整启动时序图​

初始化启动流程

第五章 Profile 体系与实现规则​

本章定义 AECP 的 Profile(功能域) 体系,以及通信双方实现时须遵守的应答机制、重传机制、属性 ID 命名空间和命令 ID 命名空间规则。

Profile 是协议的应用层组织单元,每个 Profile 由一组相关的**属性(Attribute)和命令(Command)**组成,用 Profile ID(uint16)唯一标识。

帧头中的 Profile ID 声明本帧操作所属的功能域。Server SHALL 默认支持 Foundation Profile(0x0000),并且 SHALL 只声明一个产品 Profile。Client 在 Profile Discovery 完成(ProfileDiscoveryComplete ACK)后,可在 Foundation Profile 与该产品 Profile 之间切换通信。

Profile ID 命名空间​

Profile ID 的数据类型为 uint16,取值范围 SHALL 遵循下表。未在本规范中定义的 Profile ID SHALL NOT 用于标准产品互通。

Profile ID 范围说明
0x0000Foundation Profile。所有设备 SHALL 支持。
0x0001 ~ 0x0FFF禁止使用。该范围 SHALL 保留,不得分配给产品 Profile。
0x1000 ~ 0x2000赋能业务 Profile,由本规范分配和定义。
0x2001 ~ 0xFFFF保留,供后续协议扩展使用。当前版本 SHALL NOT 分配或使用。

已定义 Profile ID​

Profile ID名称说明
0x0000Foundation Profile所有设备必须支持。属性:0x0000~0x0FFF(Client 属性)、0x1000~0x1FFF(Server 属性);命令由 Foundation Profile 命令表统一定义。
0x1000Thermostat Profile恒温器设备专有属性与命令。Server 属性 SHALL 使用 0x1000 ~ 0x1FFF 分段。一个 Server 若声明 Thermostat Profile,则其 ProductProfileID 为 0x1000。
0x1001Clothes Rack Profile晾衣机设备专有属性与命令。Server 属性 SHALL 使用 0x1000 ~ 0x1FFF 分段。一个 Server 若声明 Clothes Rack Profile,则其 ProductProfileID 为 0x1001。
0x1002Toilet Profile马桶设备专有属性与命令。Server 属性 SHALL 使用 0x1000 ~ 0x1FFF 分段。一个 Server 若声明 Toilet Profile,则其 ProductProfileID 为 0x1002。

属性与命令寻址规则​

  • Attribute ID 在所属 Profile 内唯一;不同 Profile 的同一 Attribute ID 数值可具有不同语义。完整地址 = Profile ID + Attribute ID,接收方须结合帧头 Profile ID 才能解析属性语义。
  • Command ID 同样在 Profile 内唯一。帧头 Profile ID + Command ID 共同确定命令语义。

Attribute Side 与 Conformance​

每个属性 SHALL 在属性表中通过 Side 列标注归属方,并通过 Conformance 列标注实现要求。列含义统一遵循 第一章字段记号约定。

标记归属端说明
CClient该属性由 Client 持有和维护。典型值为 Client 自身信息(固件版本、Unique ID)或网络能力(配网状态、网络状态、时间)。Server 需要读取时发起 QUERY,Client 回 QUERY_RESPONSE;Client 也可对 Access 含 NF 的属性主动发起 NOTIFY,Server 回 ACKNOWLEDGE。
SServer该属性由 Server 持有和维护。典型值为传感器数据、设定值、设备硬件状态。Client 通过 READ/WRITE 访问;Server 通过 REPORT 主动上报。

Conformance 列说明实现要求:M(Mandatory,必选,SHALL 实现);O(Optional,可选,MAY 实现);FeatureName(无括号,该 Feature 下必选);[FeatureName](方括号,该 Feature 下可选)。Feature 名称与未置位时的要求见 字段记号约定。

应答机制​

每种操作码均有确定的应答要求。除命令表明确声明 Response = N 的 COMMAND 外,接收方 SHALL 对每一条收到的消息在超时时间内作出响应:

发起方发送接收方应答说明
READ(0x1)READ_RESPONSE(0x2)Server 携带属性值与 Status 回应
WRITE(0x3)WRITE_RESPONSE(0x4)Server 携带 Status 回应
REPORT(0x5)ACKNOWLEDGE(0x6)Client 确认收到,携带 Status
QUERY(0x7)QUERY_RESPONSE(0x8)Client 携带 Client 属性值与 Status 回应
NOTIFY(0xA)ACKNOWLEDGE(0x6)Server 确认收到,携带 Status
COMMAND(0x9)ACKNOWLEDGE(0x6)接收方仅需确认执行结果时,回 ACKNOWLEDGE 携带 Status
COMMAND(0x9)配对 COMMAND(0x9)接收方需返回数据时,回配对 COMMAND;配对 COMMAND 是否继续应答由其自身 Response 声明决定
COMMAND(0x9)无应答仅当该命令在命令表中声明 Response = N 时使用

发送方在等待响应时,超时时间 SHALL 设定为 100 ms。

初始化规则​

上电初始化 SHALL 由 Client 主导,按 Link Establishment → Profile Discovery → Server 数据同步 顺序执行(详细流程参见 第四章)。

  • Client SHALL 发送 LinkEstablishmentRequest(ClientUartBufferSize) 作为上电首条 AECP 交互,协商 LowPowerFeature 并声明 Client UART 缓冲区能力;发送前 SHALL 执行 Wake Signaling(协商前默认使能)。
  • Server SHALL 返回 LinkEstablishmentResponse(LowPowerFeature, ServerUartBufferSize);发送前 SHALL 执行 Wake Signaling。
  • 链路建立完成后,双方 SHALL 计算协商 UART 缓冲区大小 min(ClientUartBufferSize, ServerUartBufferSize) 并用于约束后续单帧长度;双方声明值 SHALL NOT 小于 1024 字节。
  • 双方协商 LowPowerFeature 完成前,Wake Signaling 特性默认使能;协商交互期间,发送方 SHALL 执行 Wake Signaling。

Profile Discovery​

  • Client SHALL 在 Link Establishment 完成后 READ Server Profile 与属性初始值。
  • 当 LowPowerFeature=LowPower 时,Client SHALL 在每次 Client→Server READ 前执行 Wake Signaling。
  • Client 完成 Profile Discovery 后 SHALL 发送 ProfileDiscoveryComplete。

Server 数据同步​

  • Profile 发现完成后,Server MAY 通过 QUERY 拉取 Client 属性,MAY 通过 REPORT 同步 Server 属性。
  • Client 收到 QUERY 后 SHALL 返回 QUERY_RESPONSE;收到 REPORT 后 SHALL 返回 ACKNOWLEDGE。

Server 同步约束​

Server 收到 ProfileDiscoveryComplete 并返回 ACKNOWLEDGE(Status=0x00) 前,SHALL NOT 主动发起 QUERY Client 属性、REPORT Server 属性或用于同步业务数据的 Server → Client COMMAND。若 Client 尚未完成 Profile Discovery,Client MAY 对过早到达的 Server 主动同步请求返回 ProfileDiscoveryInProgress。ACK 完成后,Server MAY 按需 QUERY 或 REPORT。

ProfileDiscoveryRequest 触发时,Client SHALL 重新执行 Profile Discovery(SHALL NOT 重做 Link Establishment)。

Client 后续 READ、WRITE 或 COMMAND SHALL 以 ProductProfileID 对应的产品 Profile 定义为依据。若 Client 访问该 Profile 未定义的 Attribute 或 Command,Server SHOULD 返回非零 Status。

重发机制​

当发送方超时未收到应答时,SHALL 启动重传机制:

  • 每条消息最多重传 3 次(含初次发送共 4 次尝试)。
  • 重传时 SHALL 使用与原始消息相同的序列号(Seq),以便接收方识别重传包并去重。
  • 三次重传均超时后,发送方 MAY 记录错误并通知上层应用,具体处理策略由产品实现决定。

属性 ID 命名空间​

Attribute ID 的数据类型为 uint16,取值范围 0x0000 ~ 0xFFFF,在所属 Profile 内唯一;不同 Profile 的相同 Attribute ID 数值可具有不同语义。完整地址 = Profile ID(帧头)+ Attribute ID。

所有 Profile 的 Attribute ID SHALL 遵循下表分段。未定义的 Attribute ID SHALL 视为保留,接收方收到访问未定义 Attribute ID 的请求时 SHOULD 返回 UnsupportedAttribute。

Attribute ID 范围说明
0x0000 ~ 0x0FFFClient 属性。由 Client 持有;Server 通过 QUERY 拉取,Client 通过 QUERY_RESPONSE 返回。Client 也可对 Access 含 NF 的属性主动 NOTIFY。
0x1000 ~ 0x1FFFServer 属性。由 Server 持有;Client 可 READ/WRITE,Server 可 REPORT。每个产品 Profile 的 Server 本地状态、能力和控制属性 SHALL 定义在该范围。
0x2000 ~ 0xFFFA保留,供后续协议扩展使用。
0xFFFB ~ 0xFFFF全局属性范围。当前定义 0xFFFB ServerAttributeList,每个 Profile SHALL 定义该属性;其余 ID 保留,供后续全局属性使用。

命令 ID 命名空间​

Command ID 的数据类型为 uint16,取值范围 0x0001 ~ 0xFFFF,在所属 Profile 内唯一。完整命令标识 = Profile ID(帧头)+ Command ID。0x0000 SHALL 保留,不作为有效 Command ID 使用。

所有 Profile 的 Command ID SHALL 遵循下表分段。未定义的 Command ID SHALL 视为保留,接收方收到未定义 Command ID 时 SHOULD 返回 UnsupportedCommand。

Command ID 范围说明
0x0001 ~ 0x7FFF标准命令,由所属 Profile 定义。
0x8000 ~ 0xFFFF保留,供后续协议扩展使用。当前版本 SHALL NOT 分配或使用。

每条命令 SHALL 在所属 Profile 的命令表中声明方向(Direction):

  • Client → Server:仅允许 Client 作为发起方发送该 COMMAND,Server 作为接收方处理。
  • Server → Client:仅允许 Server 作为发起方发送该 COMMAND,Client 作为接收方处理。

每条命令 SHALL 在所属 Profile 的命令表中声明应答(Response):

  • ACKNOWLEDGE:该命令无配对响应命令;接收方 SHALL 直接返回 ACKNOWLEDGE。
  • <CommandName>:该命令有配对响应命令;接收方 SHALL 返回指定名称的 COMMAND。
  • N:该命令不需要任何应答。N SHOULD 仅用于配对返回命令,避免无限应答链。

接收方收到方向不匹配的 COMMAND 时,SHOULD 返回 ACKNOWLEDGE,且 Status SHOULD 为非零错误码。

具体 Profile 定义​

具体 Profile 的属性、命令、枚举、位图和参数表 SHALL 按独立的 Profile 定义文件维护:

第六章 Foundation Profile(Profile ID = 0x0000)​

Foundation Profile 是所有设备类型必须实现的基础功能域,包含基础属性、基础命令和固件升级能力。所有 Foundation Profile 帧的 Profile ID SHALL 为 0x0000。

表格约定​

本章所有属性表、命令表和参数表的列含义统一遵循 第 1 章字段记号约定。

数据类型​

PairingStatusEnum8 类型​

PairingStatusEnum8 定义 Client 侧配网窗口与入网状态。该枚举的底层类型为 enum8。

值名称说明
0x00NotPairingClient 未处于配网模式,配网窗口关闭;未入网或已退出配网流程时使用该状态。
0x01PairingClient 已打开配网窗口,正在等待或处理入网、认证、绑定流程。
0x02PairedClient 已完成入网或绑定流程,并确认当前网络身份有效。

NetworkStatusEnum8 类型​

NetworkStatusEnum8 定义 Client 网络连接状态。该枚举的底层类型为 enum8。

值名称说明
0x00OfflineClient 当前未接入可用网络,无法完成需要网络连接的上行或下行业务。
0x01OnlineClient 已接入可用网络,可进行正常的网络通信与业务同步。
0x02ConnectingClient 正在尝试接入网络、恢复连接或进行网络认证,当前网络能力尚不可用。

ModuleWirelessProtocolEnum8 类型​

ModuleWirelessProtocolEnum8 定义 Client 模组当前运行固件所属的无线协议。该枚举的底层类型为 enum8。

值名称说明
0x00Reserved预留。
0x01Matter模组当前运行 Matter 固件。
0x02Zigbee模组当前运行 Zigbee 固件。

OtaUpgradeMethodEnum8 类型​

OtaUpgradeMethodEnum8 定义 Server 支持的固件升级方式。该枚举的底层类型为 enum8。

值名称说明
0x00NotSupportedServer 不支持 OTA。
0x01IapOtaServer 支持 IAP OTA。
0x02BootLoaderOtaServer 支持 BootLoader OTA。

HardwareFaultMap32 类型​

HardwareFaultMap32 定义 Server 硬件故障位。该 map 的底层类型为 map32,对应 bit 置 1 表示该故障处于激活状态。

Bit名称说明
0GeneralFault通用硬件故障。
1RadioFault无线或通信子系统故障。
2SensorFault传感器子系统故障。
3RecoverableOverTemperature可恢复过温。
4NonRecoverableOverTemperature不可恢复过温。
5PowerSourceFault电源故障。
6DisplayFault显示子系统故障。
7AudioFault音频子系统故障。
8UserInterfaceFault用户界面故障。
9NonVolatileMemoryFault非易失存储器故障。
10PhysicalTamperDetected检测到物理篡改。

OtaStatusEnum8 类型​

OtaStatusEnum8 定义 Server OTA 进度状态。该枚举的底层类型为 enum8。

值名称说明
0x00Idle未进行 OTA。
0x01InProgressOTA 进行中。
0x02VerifyFailed固件校验失败。
0x03CompleteOTA 镜像已校验并应用。

OtaAbortReasonEnum8 类型​

OtaAbortReasonEnum8 定义 Server 主动终止 OTA 的原因。该枚举的底层类型为 enum8。

值名称说明
0x00Unspecified未指定原因。
0x01ClientCancelledClient 请求取消 OTA。
0x02TimeoutOTA 过程超时。
0x03InsufficientSpaceServer 存储空间不足。
0x04WriteFailed固件写入失败。
0x05VerifyFailed固件校验失败。
0x06UnsupportedImage固件镜像类型、版本或硬件条件不匹配。
0x07InvalidStateServer 当前状态不允许继续 OTA。

LowPowerFeatureEnum8 类型​

LowPowerFeatureEnum8 定义 Server 低功耗特性。该枚举的底层类型为 enum8。Client 通过 LinkEstablishmentResponse 获取该值(参见 第四章),用于协商 Wake Signaling 是否使能。双方协商完成前,Wake Signaling 特性默认使能。

值名称说明
0x00Normal协商关闭 Wake Signaling;链路建立完成后,双方直接 UART 通信。
0x01LowPower默认(协商前);保持 Wake Signaling 使能;链路建立完成后,双方 SHALL 在 UART 通信前执行 Wake Signaling。

Client 属性​

ID名称类型约束默认值访问权限必选性简述
0x0000ProtocolVersionuint16从 0 开始0x0000QMAECP 版本号
0x0001ModuleFirmwareVersionuint32无额外约束—QMClient 固件版本
0x0002ModuleUniqueIDoctstr最长 255—QMClient 唯一标识
0x0003PairingStatusPairingStatusEnum8见枚举—Q/NFM配网状态
0x0004NetworkStatusNetworkStatusEnum8见枚举—Q/NFMClient 网络状态
0x0005LocalTimeuint32无额外约束—Q/NFOClient 本地时间
0x0006ModuleSupportedProductProfileListlist[uint16]非保留 Profile ID—QM支持的产品 Profile 列表
0x0007ClientUartBufferSizeuint16>= 1024 字节1024QMClient UART 缓冲区大小
0x0008ModuleWirelessProtocolModuleWirelessProtocolEnum8见枚举—QM模组无线协议

ProtocolVersion 属性​

ProtocolVersion 由 Client 维护,用于声明 Client 支持的 AECP 版本。版本号 SHALL 从 0 开始递增;当前版本默认值为 0x0000。

Server 需要判断 Client 协议兼容性时,SHALL 通过 QUERY 拉取该属性,Client SHALL 通过 QUERY_RESPONSE 返回当前值。

ModuleFirmwareVersion 属性​

ModuleFirmwareVersion 由 Client 维护。Server 需要获取 Client 固件版本时,MAY 通过 QUERY 拉取该属性,Client SHALL 通过 QUERY_RESPONSE 返回当前值。

ModuleUniqueID 属性​

ModuleUniqueID 由 Client 维护。Server 需要获取 Client 唯一标识时,MAY 通过 QUERY 拉取该属性,Client SHALL 通过 QUERY_RESPONSE 返回当前值。

PairingStatus 属性​

PairingStatus 由 Client 维护。Server 需要获取当前配网状态时,SHALL 通过 QUERY 拉取该属性,Client SHALL 通过 QUERY_RESPONSE 返回当前值。

配网状态发生变化时,Client SHOULD 通过 NOTIFY 主动向 Server 同步该属性的最新值。

有效值见 PairingStatusEnum8。

NetworkStatus 属性​

NetworkStatus 由 Client 维护。Server 需要获取当前网络状态时,MAY 通过 QUERY 拉取该属性,Client SHALL 通过 QUERY_RESPONSE 返回当前值。

网络状态发生变化(如上线、离线)时,Client SHOULD 通过 NOTIFY 主动向 Server 同步该属性的最新值。

有效值见 NetworkStatusEnum8。

LocalTime 属性​

LocalTime 由 Client 维护。该值为 Unix Epoch 时间,单位秒,从 1970-01-01 00:00:00 UTC 起算。

Server 需要网络同步时间戳时 MAY 通过 QUERY 拉取该属性。Client SHALL 在 QUERY_RESPONSE 中返回当前可用的最新本地时间。

ModuleSupportedProductProfileList 属性​

ModuleSupportedProductProfileList 由 Client 维护,用于声明 Client 支持解析和交互的产品 Profile ID 列表。

该属性类型为 list[uint16]。列表元素 SHALL 按 Profile ID 从小到大排列。Foundation Profile(0x0000)为所有 Client 必选能力,不通过该属性声明,也 SHALL NOT 出现在该列表中。

ClientUartBufferSize 属性​

ClientUartBufferSize 由 Client 维护,用于声明 Client UART 接收和发送缓冲区大小,单位字节。

该属性类型为 uint16,默认值为 1024。Client UART 接收缓冲区和发送缓冲区 SHALL 均不小于该值;若接收和发送缓冲区大小不同,该属性 SHALL 使用较小值作为可用单帧长度能力。链路建立时,Client SHALL 在 LinkEstablishmentRequest 中携带与该属性一致的 ClientUartBufferSize 参数。

ModuleWirelessProtocol 属性​

ModuleWirelessProtocol 由 Client 维护,用于声明模组当前运行固件所属的无线协议。该属性无默认值。有效值见 ModuleWirelessProtocolEnum8 类型。

Server 需要识别 Client 无线协议时,SHALL 通过 QUERY 拉取该属性,Client SHALL 通过 QUERY_RESPONSE 返回当前值。

Server 属性​

ID名称类型约束默认值访问权限必选性简述
0x1000VendorIDuint161 ~ 0xFFFF0x0000RM厂商 ID
0x1001ProductIDuint161 ~ 0xFFFF0x0000RM产品 ID
0x1002ServerHardwareVersionuint161 ~ 0xFFFF0x0001RMServer 硬件版本
0x1003ServerSoftwareVersionuint161 ~ 0xFFFF0x0001R/RPMServer 固件版本
0x1004OtaUpgradeMethodOtaUpgradeMethodEnum8见枚举0x00RMOTA 升级方式
0x1005OtaStatusOtaStatusEnum8见枚举0x00RPOOTA 状态
0x1006HardwareFaultHardwareFaultMap32见 map—R/RPO硬件故障位图
0x1007ProductProfileIDuint16非保留 Profile ID—RM产品 Profile
0x1008ServerUartBufferSizeuint16>= 1024 字节1024RMServer UART 缓冲区大小
0xFFFBServerAttributeListlist[uint16]无额外约束—RMServer 属性列表

VendorID 属性​

VendorID 标识设备制造商 ID。Client SHALL 在 Profile Discovery 期间 READ 该属性。该属性为设备身份常量,不存在运行期变化上报场景,Server SHALL NOT REPORT。

ProductID 属性​

ProductID 标识设备产品 ID。Client SHALL 在 Profile Discovery 期间 READ 该属性。该属性为设备身份常量,不存在运行期变化上报场景,Server SHALL NOT REPORT。

ServerHardwareVersion 属性​

ServerHardwareVersion 标识 Server 硬件版本。Client SHALL 在 Profile Discovery 期间 READ 该属性。该属性为硬件身份常量,不存在运行期变化上报场景,Server SHALL NOT REPORT。

ServerSoftwareVersion 属性​

ServerSoftwareVersion 标识 Server 固件版本。Server SHALL 支持 Client READ 读取该属性。

OTA 完成且新固件启动成功后,Server SHALL 通过 REPORT 上报该属性的最新值。

OtaUpgradeMethod 属性​

OtaUpgradeMethod 声明 Server 支持的固件升级方式。有效值见 OtaUpgradeMethodEnum8。

Client 发起任何 OTA 流程前 SHALL 先 READ 该属性,并按 Server 返回的升级方式选择 IAP OTA、BootLoader OTA 或放弃 OTA。该属性为能力常量,不存在运行期变化上报场景,Server SHALL NOT REPORT。

HardwareFault 属性​

HardwareFault 由 Server 维护。Client MAY READ 该属性。任一故障 bit 变化时,Server SHOULD REPORT 该属性。

Bit 定义见 HardwareFaultMap32。

ProductProfileID 属性​

ProductProfileID 声明 Server 支持的唯一产品 Profile。Foundation Profile(0x0000)为所有设备默认必选,不通过该属性声明。

Server SHALL 仅声明一个非保留产品 Profile ID。Profile ID 取值范围见 Profile ID 命名空间。若设备实现 Thermostat Profile,则该值为 0x1000。

Client SHALL 在 Profile Discovery 期间 READ 该属性。该属性仅用于能力发现,不存在运行期变化上报场景,Server SHALL NOT REPORT。若产品 Profile 发生变化,Server SHALL 发送 ProfileDiscoveryRequest,由 Client 重新 READ。

ServerUartBufferSize 属性​

ServerUartBufferSize 由 Server 维护,用于声明 Server UART 接收和发送缓冲区大小,单位字节。

该属性类型为 uint16,默认值为 1024。Server UART 接收缓冲区和发送缓冲区 SHALL 均不小于该值;若接收和发送缓冲区大小不同,该属性 SHALL 使用较小值作为可用单帧长度能力。链路建立时,Server SHALL 在 LinkEstablishmentResponse 中携带与该属性一致的 ServerUartBufferSize 参数。该属性为链路能力常量,不存在运行期变化上报场景,Server SHALL NOT REPORT。

OtaStatus 属性​

OtaStatus 由 Server 维护。OTA 状态变化时,Server SHOULD REPORT 该属性。

有效值见 OtaStatusEnum8。

ServerAttributeList 属性​

ServerAttributeList 声明 Foundation Profile 下 Server 实际支持的 Attribute ID 列表。

该属性类型为 list[uint16]。列表元素 SHALL 按 Attribute ID 从小到大排列,并包含 ServerAttributeList 自身的 Attribute ID 0xFFFB。

Client SHALL 在 Profile Discovery 期间 READ 该属性。该属性仅用于能力发现,不存在运行期变化上报场景,Server SHALL NOT REPORT。若支持的属性集合发生变化,Server SHALL 发送 ProfileDiscoveryRequest,由 Client 重新 READ。

Foundation 命令​

以下命令挂载于 Foundation Profile,适用于所有设备类型。固件升级相关命令也是 Foundation Profile 能力的一部分,使用同一命令表定义。

ID名称方向应答必选性简述
0x0001ProfileDiscoveryCompleteClient → ServerACKNOWLEDGEM通知 Server Profile Discovery 已完成。
0x0002NetworkResetNotifyClient → ServerACKNOWLEDGEMClient 通知 Server 无线侧收到重置网络请求。
0x0003FactoryResetNotifyClient → ServerACKNOWLEDGEMClient 通知 Server 无线侧收到恢复出厂请求。
0x0004NetworkResetRequestServer → ClientACKNOWLEDGEMServer 请求 Client 重置网络。
0x0005FactoryResetRequestServer → ClientACKNOWLEDGEMServer 请求 Client 恢复出厂。
0x0006EnterPairingModeServer → ClientACKNOWLEDGEMServer 请求 Client 进入配网模式。
0x0007ExitPairingModeServer → ClientACKNOWLEDGEMServer 请求 Client 退出配网模式。
0x0008IdentifyClient → ServerACKNOWLEDGEM物理识别提示。
0x0009ConnectionControlRequestServer → ClientACKNOWLEDGEOServer 请求 Client 打开或关闭无线连接。
0x000AProfileDiscoveryRequestServer → ClientACKNOWLEDGEMServer 请求 Client 重新执行 Profile Discovery。
0x000BLinkEstablishmentRequestClient → ServerLinkEstablishmentResponseMClient 发起链路建立,携带 Client UART 缓冲区大小。
0x000CLinkEstablishmentResponseServer → ClientNMServer 返回低功耗特性与 Server UART 缓冲区大小。
0x0020OtaPrepareClient → ServerACKNOWLEDGEO声明固件镜像已准备好。
0x0021OtaCancelClient → ServerACKNOWLEDGEO取消升级。
0x0022OtaChunkRequestServer → ClientOtaChunkDataO请求固件分片。
0x0023OtaChunkDataClient → ServerNO返回固件分片。
0x0024OtaApplyRequestServer → ClientOtaApplyResponseO镜像校验通过,请求切换确认。
0x0025OtaApplyResponseClient → ServerNO确认 Server 可以切换镜像。
0x0026OtaAbortNotifyServer → ClientACKNOWLEDGEOServer 主动终止升级。

有参命令的参数定义见各命令 参数 表;Data Segment 编码规则见 COMMAND(OPC = 0x9)。

LinkEstablishmentRequest 命令​

该命令由 Client 在上电后作为首条 AECP 交互发送,用于发起 Link Establishment(参见 Link Establishment(链路建立))。Client SHALL 在链路建立阶段声明 Client UART 缓冲区能力;双方协商后取较小值作为 AECP 单帧长度上限。发送前 Client SHALL 执行 Wake Signaling(协商前默认使能)。

参数​

[width="100%", cols="^10,^20,^24,^20,^10", options="header"]

参数顺序名称类型约束默认值
1ClientUartBufferSizeuint16>= 1024 字节—
字段说明​

ClientUartBufferSize 声明 Client UART 接收与发送缓冲区能力,单位字节,语义与同名 Client 属性(参见 ClientUartBufferSize 属性 )一致。Client UART 接收缓冲区和发送缓冲区 SHALL 均不小于该值;若两者大小不同,该参数 SHALL 使用较小值。

LinkEstablishmentResponse 命令​

该命令由 Server 响应 LinkEstablishmentRequest 发送,用于返回 Server 低功耗特性与 Server UART 缓冲区能力;双方协商后取较小值作为 AECP 单帧长度上限。该命令为配对返回命令,Client 收到后不再返回 ACKNOWLEDGE。

参数​

[width="100%", cols="^10,^20,^24,^20,^10", options="header"]

参数顺序名称类型约束默认值
1LowPowerFeatureLowPowerFeatureEnum8见枚举—
2ServerUartBufferSizeuint16>= 1024 字节—
字段说明​
  • LowPowerFeature 声明 Server 低功耗特性,用于协商 Wake Signaling 是否使能。有效值见 LowPowerFeatureEnum8。双方协商完成前,Wake Signaling 特性默认使能;Server 返回 Normal 表示协商关闭 Wake Signaling(参见 LowPowerFeature 属性)。Server 报告的 LowPowerFeature SHALL 与产品实际低功耗能力一致。未实现低功耗 sleep 与 Wake Pin 机制的产品 SHALL 返回 Normal。
  • ServerUartBufferSize 声明 Server UART 接收与发送缓冲区能力,单位字节,语义与同名 Server 属性(参见 ServerUartBufferSize 属性)一致。Server UART 接收缓冲区和发送缓冲区 SHALL 均不小于该值;若两者大小不同,该参数 SHALL 使用较小值。

ProfileDiscoveryComplete 命令​

该命令由 Client 在完成 Profile Discovery(参见 Profile Discovery(Profile 发现))后发送,用于通知 Server:Client 侧 Profile Discovery 已经完成,Server 可以开始主动数据同步。

Server 收到该命令并返回 ACKNOWLEDGE(Status=0x00) 后,MAY 开始发起 QUERY 拉取 Client 属性,也 MAY 按属性上报策略 REPORT Server 属性。若 Server 在收到该命令前发起 QUERY、REPORT 或用于同步业务数据的 Server → Client COMMAND,Client MAY 返回 ProfileDiscoveryInProgress。

该命令无参数。

ProfileDiscoveryRequest 命令​

该命令由 Server 发送,用于请求 Client 重新执行 Profile Discovery(参见 Profile Discovery(Profile 发现))。典型场景包括 Server 能力变更、Profile 或 ServerAttributeList 更新后,需要 Client 重新读取 Server 属性并同步能力视图。

Client 接受该命令后 SHALL 通过 ACKNOWLEDGE 返回执行结果,并重新执行 Profile Discovery:读取 ProductProfileID、Foundation Profile 与产品 Profile 的 ServerAttributeList,以及需要初始化的 Server 属性初始值。Client 完成重新 Profile Discovery 后,SHALL 再次发送 ProfileDiscoveryComplete。

Client 重新发现期间,Client MAY 对 Server 主动发起的 QUERY、REPORT 或 Server → Client COMMAND 返回 ProfileDiscoveryInProgress。Server 在收到 ProfileDiscoveryRequest 的 ACKNOWLEDGE 后,SHALL 将 Client 视为尚未完成 Profile Discovery,并在收到新的 ProfileDiscoveryComplete 且返回 ACKNOWLEDGE(Status=0x00) 之前,SHALL NOT 主动 QUERY Client 属性或 REPORT Server 属性。

该命令无参数。

NetworkResetNotify 命令​

该命令由 Client 在无线侧收到重置网络请求后发送,用于通知 Server 同步执行本地网络状态清理、业务状态复位或用户提示等动作。

该命令无参数。

FactoryResetNotify 命令​

该命令由 Client 在无线侧收到恢复出厂请求后发送,用于通知 Server 擦除本地持久化用户参数与运行参数,并恢复到出厂状态。

该命令无参数。

NetworkResetRequest 命令​

该命令由 Server 在本地触发重置网络流程时发送,用于请求 Client 清除无线网络相关状态并退出当前网络。

该命令无参数。

FactoryResetRequest 命令​

该命令由 Server 在本地触发恢复出厂流程时发送,用于请求 Client 清除无线网络状态、用户绑定状态和其他与出厂恢复相关的无线侧持久化状态。

该命令无参数。

EnterPairingMode 命令​

该命令由 Server 发送,用于请求 Client 打开配网窗口并进入配网模式。Client 接受后 SHOULD 更新 PairingStatus 并在状态变化时通过 NOTIFY 同步。

该命令无参数。

ExitPairingMode 命令​

该命令由 Server 发送,用于请求 Client 关闭配网窗口并退出配网模式。Client 接受后 SHOULD 更新 PairingStatus 并在状态变化时通过 NOTIFY 同步。

该命令无参数。

ConnectionControlRequest 命令​

该命令由 Server 发送,用于请求 Client 打开或关闭无线连接。Client 接受后 SHALL 通过 ACKNOWLEDGE 返回执行结果。

参数​

[width="100%", cols="^10,^20,^24,^20,^10", options="header"]

参数顺序名称类型约束默认值
1Enabledbool0x00 = false,0x01 = true—
字段说明​
  • Enabled = true:Client SHALL 打开射频收发功能并尝试接入无线网络。接入过程中 Client SHOULD 更新 NetworkStatus 为 Connecting;接入成功后 SHOULD 更新为 Online,并在状态变化时通过 NOTIFY 同步。
  • Enabled = false:Client SHALL 关闭射频收发功能并断开无线网络连接。Client SHOULD 更新 NetworkStatus 为 Offline,并在状态变化时通过 NOTIFY 同步。

Identify 命令​

该命令请求 Server 执行物理识别动作,例如 LED 闪烁或蜂鸣提示。

参数​
参数顺序名称类型约束默认值
1Durationuint16无额外约束—
字段说明​

Duration 指定识别动作持续时间,单位秒。值为 0 表示停止当前识别动作。

固件升级(OTA)​

Foundation Profile 定义两种固件升级方式:

升级方式适用场景
IAP OTAServer 在应用运行期间接收固件分片,校验完成后切换镜像。
BootLoader OTAClient 通知 Server 进入 BootLoader,后续固件传输由 XMODEM 承载。

OTA 能力选择流程​

Client 发起任何 OTA 流程前,SHALL 使用 Profile ID = 0x0000 READ OtaUpgradeMethod(Attribute ID 0x1004):

返回值名称Client 行为
0x00NotSupportedServer 不支持 OTA,Client SHALL NOT 发起 OTA。
0x01IapOtaClient SHALL 使用 IAP OTA 命令流程。
0x02BootLoaderOtaClient SHALL 使用 BootLoader OTA 流程,并按硬件要求支持 GPIO 进入 BootLoader。

若 READ OtaUpgradeMethod 失败,Client SHALL NOT 发起 OTA。Client 不得在未知 Server OTA 能力的情况下直接发送 OtaPrepare 或触发 BootLoader 进入时序。

OTA 版本兼容要求​

为确保 Client 与 Server 两端固件能力兼容,Server 固件升级时,Client 固件 SHALL 在同一次 OTA 任务中升级。Client 在确认 Server OTA 成功前,SHALL NOT 启动 Client 自身 OTA;若无法确认 Server OTA 成功,Client SHALL 终止本次 OTA。

IAP OTA 流程​

IAP OTA 采用 Client 声明镜像、Server 主动拉取分片 的流程。Server OTA 阶段中,Client 负责提供 Server 固件数据;Server 负责分片请求、写入、校验和最终应用。完整镜像校验通过后,Server SHALL 通过 OtaApplyRequest 请求 Client 确认切换镜像,Client 确认后 Server 才开始切换镜像并重启。

Client 仅在 OtaUpgradeMethod = IapOta 时 SHALL 使用本节命令。

OtaPrepare 命令​

该命令通知 Server:Client 已准备好提供固件镜像。仅当 ACKNOWLEDGE 返回 Status = 0x00 后,Server 才进入分片拉取阶段。

参数​
参数顺序名称类型约束默认值
1FirmwareSizeuint32无额外约束—
2Crc16uint32无额外约束—
字段说明​
  • FirmwareSize:固件正文大小,单位字节,不含 OTA Header。
  • Crc16:固件正文 CRC16/XMODEM 校验值。
OtaCancel 命令​

该命令取消当前 OTA 流程。Server 接受该命令后 SHALL 重置 OTA 状态机。

该命令无参数。

OtaChunkRequest 命令​

该命令由 Server 发送,用于向 Client 请求指定固件分片。

参数​
参数顺序名称类型约束默认值
1Offsetuint32无额外约束—
2Lengthuint81 ~ 255—
字段说明​
  • Offset:请求数据偏移,单位字节。
  • Length:请求数据长度,取值范围 1 ~ 255。
OtaChunkData 命令​

该命令返回 OtaChunkRequest 请求的固件分片。该命令为配对返回命令,Server 收到后不再返回 ACKNOWLEDGE。

参数​
参数顺序名称类型约束默认值
1Offsetuint32无额外约束—
2DataoctstrLength 为分片长度,1 ~ 255—
字段说明​
  • Offset:固件数据偏移,单位字节。
  • Data:固件数据分片,使用 octstr 编码,后续字节内容长度最长 255。
OtaApplyRequest 命令​

该命令由 Server 在固件镜像接收完成且校验通过后发送,用于通知 Client 镜像已可应用,并请求 Client 确认是否允许 Server 切换镜像。Client SHALL 通过 OtaApplyResponse 响应。

该命令无参数。

OtaApplyResponse 命令​

该命令表示 Client 已确认 Server 可以切换镜像。该命令为配对返回命令,Server 收到后不再返回 ACKNOWLEDGE。Server 收到 OtaApplyResponse 后 SHALL 开始切换镜像并重启。

该命令无参数。

OtaAbortNotify 命令​

该命令由 Server 在 OTA 遇到不可恢复错误时发送。Client SHALL ACKNOWLEDGE 该命令并重置 OTA 状态机。

参数​
参数顺序名称类型约束默认值
1ReasonOtaAbortReasonEnum8见枚举—
字段说明:​
IAP OTA 正常流程​

IAP OTA 正常流程分为七个阶段:

  1. 准备阶段:Client 发送 OtaPrepare,声明固件大小和固件正文 CRC。Server 返回 ACKNOWLEDGE(Status=0x00) 后进入传输阶段。
  2. 传输阶段:Server 按需重复发送 OtaChunkRequest 拉取指定偏移与长度的固件分片。Client 使用 OtaChunkData 返回对应数据。OtaChunkData 的 Response = N,Server 收到后不再返回 ACKNOWLEDGE。
  3. 校验阶段:Server 接收完整镜像后校验固件正文 CRC。校验失败时,Server 通过 OtaStatus REPORT 上报失败状态,或发送 OtaAbortNotify 主动终止。
  4. 应用确认阶段:校验通过后,Server 发送 OtaApplyRequest。Client 返回 OtaApplyResponse 后,Server SHALL 开始切换镜像并重启。
  5. Server 版本确认阶段:Server 切换到新镜像并重新进入应用程序后,SHALL 通过 REPORT 上报 ServerSoftwareVersion 的最新值。Client SHALL 检查该版本是否为目标版本,并返回 ACKNOWLEDGE(Status=0x00) 确认。
  6. Client OTA 阶段:Client 确认 Server OTA 成功后,SHALL 再执行 Client 自身 OTA。Server OTA 和 Client OTA SHALL 成对升级,确保两端固件版本兼容。
  7. 重新初始化阶段:Client OTA 完成并重启后,SHALL 重新执行 Link Establishment 与 Profile Discovery(参见 第四章),读取 ProductProfileID、各 Profile 的 ServerAttributeList 以及已发现 Server 属性的当前值。Client 完成重新发现后,SHALL 再发送 ProfileDiscoveryComplete。Server 返回 ACKNOWLEDGE(Status=0x00) 前,SHALL NOT 主动 QUERY Client 属性或 REPORT Server 属性;ACK 完成后,Server MAY 重新开始主动数据同步,确保 Server 更新后的能力与 Client 更新后的协议栈能力重新同步。

IAP OTA 升级流程

IAP OTA 异常流程​

Client 取消:

Client MAY 发送 OtaCancel 取消当前 OTA,Server 接受后 SHALL 返回 ACKNOWLEDGE(Status=0x00) 并重置 OTA 状态机。

校验失败上报:

Server 校验失败时 SHALL 通过 OtaStatus = VerifyFailed 上报失败状态,Client SHALL 使用 ACKNOWLEDGE(Status=0x00) 确认该 REPORT。

Server OTA 成功确认失败:

Client 进入 Server OTA 流程后,SHALL 以 ServerSoftwareVersion REPORT 作为 Server OTA 成功依据。若 Client 在超时时间内未收到该 REPORT,或收到的版本不是目标版本,Client SHALL 重试 Server OTA 流程,最多重试 3 次。3 次重试后仍无法确认 Server OTA 成功时,Client SHALL 终止本次 OTA,且 SHALL NOT 启动 Client 自身 OTA。

Server 主动终止:

Server MAY 发送 OtaAbortNotify(reason) 主动终止当前 OTA,Client SHALL 使用 ACKNOWLEDGE(Status=0x00) 确认该 COMMAND。

IAP OTA 超时机制​

Client 发送 OtaPrepare 后 SHALL 启动 OTA 超时定时器,并在每次收到 OtaChunkRequest 时刷新。Server 接受 OtaPrepare 后 SHOULD 启动 OTA 超时定时器,并在每次收到 OtaChunkData 时刷新。

OTA Header 解析​

Server SHALL 从固件文件起始位置解析 128 字节 OTA Header。若首个 OtaChunkData 分片不足 128 字节,Server SHALL 合并后续分片,直到获得完整 OTA Header。

BootLoader OTA​

BootLoader OTA 用于在 AECP 下统一描述 Server 进入 BootLoader 后,通过标准 XMODEM 协议完成固件传输的流程。

与 IAP OTA 不同,BootLoader OTA 不通过 AECP 属性或命令传输固件分片。

Client 仅在 OtaUpgradeMethod = BootLoaderOta 时 SHALL 使用本节流程。

BootLoader OTA 进入方式​

BootLoader OTA SHALL 通过硬件方式进入 BootLoader。Client 通过专用 GPIO、复位脚或 Boot 选择脚控制 Server 进入 BootLoader。

BootLoader OTA 流程​

BootLoader OTA 升级流程

BootLoader OTA 正常流程分为七个阶段:

  1. 能力选择阶段:Client 发起 BootLoader OTA 前,SHALL 先 READ OtaUpgradeMethod,仅当 Server 返回 BootLoaderOta 时进入本流程。
  2. 进入 BootLoader 阶段:Client 通过 GPIO、复位脚或 Boot 选择脚控制 Server 进入 BootLoader。Server 进入 BootLoader 后启动 XMODEM 接收流程,并发送握手字符 'C'。
  3. XMODEM 固件传输阶段:Client 收到 'C' 后,按标准 XMODEM 协议传输固件包。AECP 不承载 BootLoader OTA 的固件分片、重传或结束确认。
  4. 校验与镜像切换阶段:Server 通过 XMODEM 接收完整固件并完成校验后,自行复位或跳转到新镜像。
  5. Server 版本确认阶段:Server 重新进入应用程序后,SHALL 通过 REPORT 上报 ServerSoftwareVersion 的最新值。Client SHALL 检查该版本是否为目标版本,并返回 ACKNOWLEDGE(Status=0x00) 确认。
  6. Client OTA 阶段:Client 确认 Server OTA 成功后,SHALL 再执行 Client 自身 OTA。Server OTA 和 Client OTA SHALL 成对升级,确保两端固件版本兼容。
  7. 重新初始化阶段:Client OTA 完成并重启后,SHALL 重新执行 Link Establishment 与 Profile Discovery(参见 第四章),读取 ProductProfileID、各 Profile 的 ServerAttributeList 以及已发现 Server 属性的当前值。Client 完成重新发现后,SHALL 再发送 ProfileDiscoveryComplete。Server 返回 ACKNOWLEDGE(Status=0x00) 前,SHALL NOT 主动 QUERY Client 属性或 REPORT Server 属性;ACK 完成后,Server MAY 重新开始主动数据同步,确保 Server 更新后的能力与 Client 更新后的协议栈能力重新同步。

BootLoader OTA 进入 Server 升级过程后,Client SHALL 以 ServerSoftwareVersion REPORT 作为 Server OTA 成功依据。若 Client 在超时时间内未收到该 REPORT,或收到的版本不是目标版本,Client SHALL 重试 Server OTA 流程,最多重试 3 次。3 次重试后仍无法确认 Server OTA 成功时,Client SHALL 终止本次 OTA,且 SHALL NOT 启动 Client 自身 OTA。

OTA Header 格式​

所有 OTA 固件文件 SHALL 在起始位置包含固定 128 字节 OTA Header。OTA Header 是 AECP 中唯一采用小端序编码的结构;该小端序仅适用于固件文件内部 Header 字段,不适用于 AECP 通信帧、属性值或命令参数。

下表中的类型为 OTA Header 文件字段类型,不是 AECP Data Type:

  • Uint32LE:4 字节无符号整数,小端序。
  • Utf8String[48]:固定 48 字节 UTF-8 字符串区域,末尾使用 NULL 填充。
  • Reserved[28]:固定 28 字节保留区域,SHALL 填充为 0x00。
偏移字段类型大小说明
0headerIdentifierUint32LE4 B固定标识 0x6C756D69。
4headerVersionUint32LE4 BHeader 格式版本,固定为 0x00000000。
8headerLengthUint32LE4 BHeader 长度,固定为 128。
12timestampUint32LE4 B固件构建时间戳,Unix Epoch 秒。
16manufacturerCodeUint32LE4 B厂商编码。
20imageTypeUint32LE4 BImage 类型:0 = APP,1 = BootLoader。
24imageTagIdUint32LE4 BImage Tag ID,范围 0x0000 ~ 0xFFFF。
28imageUpdateAddressUint32LE4 B目标 Flash 地址。
32imageFileSizeUint32LE4 B固件镜像大小,不含 OTA Header。
36imageFileCrc16Uint32LE4 B固件镜像 CRC16/XMODEM 校验值。
40imageSoftwareVersionUint32LE4 BImage 软件版本。
44imageHardwareVersionUint32LE4 BImage 硬件版本。
48imageFileNameUtf8String[48]48 BImage 文件名,UTF-8 字符串,末尾 NULL 填充。
96reservedReserved[28]28 B保留字段。SHALL 填充为 0x00。
124headerCrc16Uint32LE4 BHeader CRC16/XMODEM 校验值,覆盖偏移 0 到 123。

CRC16/XMODEM 实现​

OTA Header 与固件镜像校验使用 CRC16/XMODEM:

  • 初始值:0x0000
  • 多项式:0x1021
uint16_t imageFileCrc16(uint16_t u16Crc, const uint8_t *buf, uint32_t u32len)
{
uint16_t crc = u16Crc;
uint32_t len = u32len;

while (len--) {
int i;
crc ^= (uint16_t)(*buf++) << 8;
for (i = 0; i < 8; ++i) {
if (crc & 0x8000)
crc = (crc << 1) ^ 0x1021;
else
crc = crc << 1;
}
}
return crc;
}
注意

CRC16/XMODEM 的初始值为 0x0000,与 CRC16-Modbus(Overall Checksum 使用 0xFFFF)不同,请勿混用。

第七章 Thermostat Profile(Profile ID = 0x1000)​

Thermostat Profile 定义恒温器设备的专有属性与命令,适用于帧头 Profile ID = 0x1000 的通信帧。

所有实现 Thermostat Profile 的设备同时 SHALL 实现 Foundation Profile(0x0000) 中定义的全部属性与命令。

表格约定​

本章所有属性表的列含义统一遵循 第 1 章字段记号约定。

数据类型​

ThermostatSystemModeEnum8 类型​

ThermostatSystemModeEnum8 定义恒温器基础工作模式。该枚举的底层类型为 enum8。

值名称说明
0x00Off关闭。
0x01Auto自动模式。
0x02Cool制冷模式。
0x03Heat制热模式。

LocalConfigDisabledEnum8 类型​

LocalConfigDisabledEnum8 定义本地配置是否禁用。该枚举的底层类型为 enum8。

值名称说明
0x00Enabled允许本地配置。
0x01Disabled禁用本地配置。

TemperatureDisplayModeEnum8 类型​

TemperatureDisplayModeEnum8 定义温度显示单位。该枚举的底层类型为 enum8。

值名称说明
0x00Celsius摄氏度。
0x01Fahrenheit华氏度。

OpenWindowAlarmEnum8 类型​

该类型的底层类型为 enum8,用于表示开窗告警状态。

值名称说明
0x00NoAlarm无开窗告警。
0x01InternalOpenWindowAlarm内部温度探头检测到开窗。
0x02ExternalOpenWindowAlarm外部传感器检测到开窗。

FrostProtectionAlarmEnum8 类型​

该类型的底层类型为 enum8,用于表示防冻告警状态。

值名称说明
0x00NoAlarm无防冻告警。
0x01FrostProtectionAlarm防冻保护处于激活状态。

ThermostatFeatureMap32 类型​

ThermostatFeatureMap32 定义恒温器功能位图。该类型的底层类型为 map32。

位掩码名称说明
00x00000001HeatingServer 支持制热。
10x00000002CoolingServer 支持制冷。

本 Profile 属性表与命令表中的 Feature 必选性使用上表 名称。

AqaraThermostatFeatureMap32 类型​

AqaraThermostatFeatureMap32 定义 Aqara Thermostat 功能位图。该类型的底层类型为 map32。

位掩码名称说明
00x00000001OpenWindowDetectionServer 支持开窗检测与告警。
10x00000002FrostProtectionServer 支持防冻保护告警与可配置触发温度。

本 Profile 属性表与命令表中的 Feature 必选性使用上表 名称。

属性​

ID名称类型约束默认值访问权限归属方必选性简述
0x1000SystemModeThermostatSystemModeEnum8见枚举0x00R/W/RPSM基础工作模式
0x1001OccupiedHeatingSetpointint16见描述—R/W/RPSHeating设定制热温度
0x1002LocalTemperatureint160.01℃—R/RPSM环境温度
0x1003LocalTemperatureCalibrationint80.1℃0R/W/RPSO本地温度校准
0x1004LocalConfigDisabledLocalConfigDisabledEnum8见枚举0x00R/W/RPSO本地配置禁用
0x1005TemperatureDisplayModeTemperatureDisplayModeEnum8见枚举0x00R/W/RPSO温度显示单位
0x1006FrostProtectionEnabledbooltrue / falsefalseR/W/RPS[FrostProtection]防冻使能
0x1007FrostProtectionTemperatureint16Min ~ Max,0.01℃500R/W/RPSFrostProtection防冻触发温度
0x1008WindowDetectionEnabledbooltrue / falsefalseR/W/RPSOpenWindowDetection开窗检测使能
0x1009ActiveCurrentuint32mA—RPSO当前电流
0x100AActivePoweruint32mW—RPSO当前功率
0x100BOpenWindowAlarmOpenWindowAlarmEnum8见枚举0x00R/RPSOpenWindowDetection开窗告警状态
0x100COpenWindowTemperatureControlPauseDurationuint16Min ~ Max,min30R/W/RPS[OpenWindowDetection]开窗后温控暂停时长
0x100DOpenWindowTemperatureControlPauseDurationMinuint16min1RS[OpenWindowDetection]暂停时长下限
0x100EOpenWindowTemperatureControlPauseDurationMaxuint16min1440RS[OpenWindowDetection]暂停时长上限
0x100FFrostProtectionAlarmFrostProtectionAlarmEnum8见枚举0x00R/RPSFrostProtection防冻告警状态
0x1010FrostProtectionTemperatureMinint160.01℃500RSFrostProtection防冻温度下限
0x1011FrostProtectionTemperatureMaxint160.01℃1500RSFrostProtection防冻温度上限
0x1012CumulativeEnergyint64mWh—RPSO累计输入电能
0x1014ThermostatFeatureMapThermostatFeatureMap32Heating=0x1,Cooling=0x20x00000001RSM恒温器功能位图
0x1015AbsMinHeatSetpointLimitint160.01℃500RS[Heating]制热设定绝对下限
0x1016AbsMaxHeatSetpointLimitint160.01℃3000RS[Heating]制热设定绝对上限
0x1017MinHeatSetpointLimitint160.01℃500R/W/RPS[Heating]制热设定用户下限
0x1018MaxHeatSetpointLimitint160.01℃3000R/W/RPS[Heating]制热设定用户上限
0x1019AqaraThermostatFeatureMapAqaraThermostatFeatureMap32OpenWindowDetection=0x1,FrostProtection=0x20x00000003RSOAqara 恒温器功能位图
0xFFFBServerAttributeListlist[uint16]无额外约束—RSMServer 属性列表

SystemMode 属性​

SystemMode 表示恒温器当前基础工作模式。Client MAY WRITE 该属性切换工作模式。Server SHALL 在模式变化后 REPORT 该属性。

有效值见 ThermostatSystemModeEnum8。

OccupiedHeatingSetpoint 属性​

OccupiedHeatingSetpoint 表示有人占用场景下的制热目标温度,单位 0.01℃。例如 2650 表示 26.50℃,-900 表示 -9.00℃。当 ThermostatFeatureMap 的 Heating 位置位时,Server SHALL 实现该属性;未置位时 SHALL NOT 实现。

该属性已实现时,取值由以下已实现的限值共同决定。未实现的绝对限值分别以其表内默认值 500 / 3000 代替;未实现的用户上下限分别以对应的绝对限值(或其默认值)代替。

  • AbsMinHeatSetpointLimit / AbsMaxHeatSetpointLimit 是制造商声明的制热设定绝对上下限。
  • MinHeatSetpointLimit / MaxHeatSetpointLimit 是用户可配置的制热设定上下限。
  • 用户上下限与绝对上下限均已实现时,SHALL 满足:

AbsMinHeatSetpointLimit ≤ MinHeatSetpointLimit ≤ MaxHeatSetpointLimit ≤ AbsMaxHeatSetpointLimit

  • OccupiedHeatingSetpoint SHALL 满足有效下限 ≤ OccupiedHeatingSetpoint ≤ 有效上限,其中有效下限为已实现的 MinHeatSetpointLimit,否则为已实现的 AbsMinHeatSetpointLimit,再否则为默认值 500;有效上限为已实现的 MaxHeatSetpointLimit,否则为已实现的 AbsMaxHeatSetpointLimit,再否则为默认值 3000。

全部限值均已实现时,完整关系为:

AbsMinHeatSetpointLimit ≤ MinHeatSetpointLimit ≤ OccupiedHeatingSetpoint ≤ MaxHeatSetpointLimit ≤ AbsMaxHeatSetpointLimit

该属性已实现时,Server SHALL 在目标温度变化后 REPORT 该属性。

LocalTemperature 属性​

LocalTemperature 表示 Server 传感器实测环境温度,单位 0.01℃。例如 2650 表示 26.50℃。

该属性由 Server 维护,Client MAY READ,Server SHALL 在温度变化满足产品上报策略时 REPORT。

LocalTemperatureCalibration 属性​

LocalTemperatureCalibration 表示本地温度校准偏移,单位 0.1℃。例如 20 表示 +2.0℃。Server MAY 实现该属性。

该属性已实现时,最终本地温度 = LocalTemperature + LocalTemperatureCalibration,Client MAY WRITE 该属性调整校准偏移。未实现该属性时,不得叠加校准偏移,等效于校准值为 0。

LocalConfigDisabled 属性​

LocalConfigDisabled` 表示是否禁用本地配置。Client MAY WRITE 该属性。

有效值见 LocalConfigDisabledEnum8。

TemperatureDisplayMode 属性​

TemperatureDisplayMode 表示温度显示单位。Client MAY WRITE 该属性切换显示单位。

有效值见 TemperatureDisplayModeEnum8。

FrostProtectionEnabled 属性​

FrostProtectionEnabled 表示防冻保护是否启用。true 表示启用,false 表示禁用。

当该属性为 true 时,Server SHALL 根据 FrostProtectionTemperature 监测用于防冻判断的实测温度。当该属性为 false 时,Server SHALL NOT 应用防冻保护行为,并 MAY 将 FrostProtectionAlarm 设置为 NoAlarm。未实现该属性时,是否启用防冻保护由产品定义。

FrostProtectionTemperature 属性​

FrostProtectionTemperature 表示防冻保护触发温度,单位 0.01℃。该属性的值 SHALL 大于等于 FrostProtectionTemperatureMin,且小于等于 FrostProtectionTemperatureMax。

当 FrostProtectionEnabled 存在且为 true,并且用于防冻判断的实测温度低于该值时,Server SHALL 触发产品定义的防冻行为并将 FrostProtectionAlarm 设置为 FrostProtectionAlarm。若 FrostProtectionEnabled 不存在,防冻触发行为由产品定义。

WindowDetectionEnabled 属性​

WindowDetectionEnabled 表示开窗检测功能是否启用。true 表示启用,false 表示禁用。

当该属性为 true 时,Server MAY 使用快速温度变化、外部传感器输入或产品定义的其他逻辑检测开窗。当该属性为 false 时,Server SHALL NOT 应用开窗检测专有的温控行为,并 MAY 将 OpenWindowAlarm 设置为 NoAlarm、立即恢复温控。

ActiveCurrent 属性​

ActiveCurrent 表示当前电流,单位 mA。Server SHOULD 按产品定义的周期或变化策略 REPORT 该属性。

ActivePower 属性​

ActivePower 表示当前功率,单位 mW。Server SHOULD 按产品定义的周期或变化策略 REPORT 该属性。

OpenWindowAlarm 属性​

OpenWindowAlarm 表示当前开窗告警状态,有效值见 OpenWindowAlarmEnum8。

检测到开窗且 WindowDetectionEnabled 为 true 时,Server 应 将该属性设置为 InternalOpenWindowAlarm 或 ExternalOpenWindowAlarm,并进入控制暂停。告警清除后,Server 应 将该属性设置为 NoAlarm 并恢复温控。

OpenWindowAlarm 的值发生变化时,Server 应 REPORT 该属性。ClearOpenWindowAlarmReq 命令执行成功时,Server 应 清除告警并立即恢复温控。

OpenWindowTemperatureControlPauseDuration 属性​

OpenWindowTemperatureControlPauseDuration 表示开窗告警触发后控制暂停的持续时间,单位为分钟。该属性的值 应 大于等于 OpenWindowTemperatureControlPauseDurationMin,且小于等于 OpenWindowTemperatureControlPauseDurationMax。

“控制暂停”是指 Server 暂停为维持当前目标温度而产生的主动制热或制冷输出,例如停止驱动阀门、继电器、压缩机或其他温控执行器。控制暂停不等同于关闭设备,也不改变 SystemMode、目标温度及其他用户配置。暂停期间,Server 应 继续执行温度测量、属性读写与上报、命令处理及产品定义的安全保护;安全保护行为 优先于 控制暂停。

开窗告警触发后,Server 应 进入控制暂停并保持该属性指定的时长。暂停时间到期后,Server 应 根据当前 SystemMode、目标温度和实测温度恢复正常温控。若告警在计时结束前被清除,Server 应 立即结束控制暂停并重新进行温控判断。

OpenWindowTemperatureControlPauseDurationMin 属性​

OpenWindowTemperatureControlPauseDurationMin 表示 OpenWindowTemperatureControlPauseDuration 支持的最小值,单位为分钟。该属性由 Server 声明设备能力。Client SHALL 在 Profile Discovery 完成后 READ。该属性仅用于能力声明,Server SHALL NOT REPORT。

OpenWindowTemperatureControlPauseDurationMax 属性​

OpenWindowTemperatureControlPauseDurationMax 表示 OpenWindowTemperatureControlPauseDuration 支持的最大值,单位为分钟。该属性由 Server 声明设备能力。Client SHALL 在 Profile Discovery 完成后 READ。该属性仅用于能力声明,Server SHALL NOT REPORT。

FrostProtectionAlarm 属性​

FrostProtectionAlarm 表示当前防冻告警状态,有效值见 FrostProtectionAlarmEnum8。防冻保护激活时,Server 应 将该属性设置为 FrostProtectionAlarm;防冻保护退出后,Server 应 将该属性设置为 NoAlarm。

该属性的值发生变化时,Server 应 REPORT。

FrostProtectionTemperatureMin 属性​

FrostProtectionTemperatureMin 表示 FrostProtectionTemperature 支持的最小值,单位为 0.01℃。该属性由 Server 声明设备能力。Client SHALL 在 Profile Discovery 完成后 READ。该属性仅用于能力声明,Server SHALL NOT REPORT。

FrostProtectionTemperatureMax 属性​

FrostProtectionTemperatureMax 表示 FrostProtectionTemperature 支持的最大值,单位为 0.01℃。该属性由 Server 声明设备能力。Client SHALL 在 Profile Discovery 完成后 READ。该属性仅用于能力声明,Server SHALL NOT REPORT。

CumulativeEnergy 属性​

CumulativeEnergy 表示累计输入电能,单位 mWh,底层类型为 int64。该值 SHALL 单调不减。Server SHOULD 按产品定义的周期或变化策略 REPORT 该属性。

ThermostatFeatureMap 属性​

ThermostatFeatureMap 表示恒温器功能位图。有效值见 ThermostatFeatureMap32。该值由 Server 声明。

Client SHALL 在 Profile Discovery 完成后 READ 该属性。该属性仅用于能力声明,不存在运行期变化上报场景,Server SHALL NOT REPORT。

AbsMinHeatSetpointLimit 属性​

AbsMinHeatSetpointLimit 表示制热设定的绝对下限,单位 0.01℃。该属性由 Server 声明。

若该属性出现在 ServerAttributeList 中,Client SHALL 在 Profile Discovery 完成后 READ 该属性。该属性仅用于能力声明,不存在运行期变化上报场景,Server SHALL NOT REPORT。与 OccupiedHeatingSetpoint 及其他制热限值的关系见 OccupiedHeatingSetpoint 属性。

AbsMaxHeatSetpointLimit 属性​

AbsMaxHeatSetpointLimit 表示制热设定的绝对上限,单位 0.01℃。该属性由 Server 声明。

若该属性出现在 ServerAttributeList 中,Client SHALL 在 Profile Discovery 完成后 READ 该属性。该属性仅用于能力声明,不存在运行期变化上报场景,Server SHALL NOT REPORT。与 OccupiedHeatingSetpoint 及其他制热限值的关系见 OccupiedHeatingSetpoint 属性。

MinHeatSetpointLimit 属性​

MinHeatSetpointLimit 表示用户可设置的制热设定下限,单位 0.01℃。若 AbsMinHeatSetpointLimit 已实现,该值 SHALL 大于等于 AbsMinHeatSetpointLimit;若 MaxHeatSetpointLimit 已实现,该值 SHALL 小于等于 MaxHeatSetpointLimit。Client MAY WRITE 该属性。完整关系见 OccupiedHeatingSetpoint 属性。

MaxHeatSetpointLimit 属性​

MaxHeatSetpointLimit 表示用户可设置的制热设定上限,单位 0.01℃。若 AbsMaxHeatSetpointLimit 已实现,该值 SHALL 小于等于 AbsMaxHeatSetpointLimit;若 MinHeatSetpointLimit 已实现,该值 SHALL 大于等于 MinHeatSetpointLimit。Client MAY WRITE 该属性。完整关系见 OccupiedHeatingSetpoint 属性。

AqaraThermostatFeatureMap 属性​

AqaraThermostatFeatureMap 表示 Aqara Thermostat 功能位图。有效值见 AqaraThermostatFeatureMap32。该值由 Server 声明。

若该属性出现在 ServerAttributeList 中,Client SHALL 在 Profile Discovery 完成后 READ 该属性。该属性仅用于能力声明,不存在运行期变化上报场景,Server SHALL NOT REPORT。

ServerAttributeList 属性​

ServerAttributeList 声明 Thermostat Profile 下 Server 实际支持的 Attribute ID 列表。

该属性类型为 list[uint16]。列表元素 SHALL 按 Attribute ID 从小到大排列,并包含 ServerAttributeList 自身的 Attribute ID 0xFFFB。

Client SHALL 在 Profile Discovery 期间 READ 该属性。该属性仅用于能力发现,不存在运行期变化上报场景,Server SHALL NOT REPORT。若支持的属性集合发生变化,Server SHALL 发送 ProfileDiscoveryRequest,由 Client 重新 READ。

Thermostat 命令​

ID名称方向应答必选性简述
0x1000ClearOpenWindowAlarmReqClient → ServerClearOpenWindowAlarmRspOpenWindowDetection清除当前开窗告警并立即恢复温控。
0x1001ClearOpenWindowAlarmRspServer → ClientNOpenWindowDetection返回清除操作结果。

有参命令的参数定义见各命令 参数 表;Data Segment 编码规则见 Command。

ClearOpenWindowAlarmReq 命令​

该命令请求 Server 清除激活的开窗告警。命令执行成功后,Server 应 将 OpenWindowAlarm 设置为 NoAlarm,并立即恢复温控,不受剩余 OpenWindowTemperatureControlPauseDuration 限制。

该命令无参数。Server 应 使用配对命令 ClearOpenWindowAlarmRsp 返回执行结果,不再另行返回 ACKNOWLEDGE。

ClearOpenWindowAlarmRsp 命令​

该命令为 ClearOpenWindowAlarmReq 的配对返回命令。Client 收到后 应 不再返回 ACKNOWLEDGE。

参数​
参数顺序名称类型约束默认值
1Successbooltrue / false—

Success 表示命令的业务执行结果:true 表示操作成功,false 表示操作失败。

第八章 Clothes Rack Profile(Profile ID = 0x1001)​

Clothes Rack Profile 定义晾衣机设备的专有属性与命令,适用于帧头 Profile ID = 0x1001 的通信帧。

所有实现本 Profile 的设备同时 SHALL 实现 Foundation Profile(0x0000) 中定义的全部必选属性与命令。

表格约定​

本章所有属性表、命令表和参数表的列含义遵循 第 1 章字段记号约定。

数据类型​

CalibrationStatusCodeEnum8 类型​

CalibrationStatusCodeEnum8 定义行程校准命令的处理结果。该枚举的底层类型为 enum8。

值名称说明
0x00Success操作成功。
0x01Failure操作失败。
0x02NotInManualCalibrationMode当前不在校准模式。
0x03MissingCalibrationRecord缺少必需的校准点记录。

EnhanceModeMap8 类型​

EnhanceModeMap8 定义当前行程校准模式与校准点配置状态。该位图的底层类型为 map8。

位名称说明
0ManualCalibration当前处于手动校准模式。
1OpenRecordConfigured上限校准点已配置。
2CloseRecordConfigured下限校准点已配置。
3~7Reserved保留,必须为 0。

ManualCalibrationOperationEnum8 类型​

ManualCalibrationOperationEnum8 定义校准模式中的运动操作。该枚举的底层类型为 enum8。

值名称说明
0x00Open / Up向上运行。
0x01Close / Down向下运行。
0x02Stop停止运行。

ManualCalibrationRecordTypeEnum8 类型​

ManualCalibrationRecordTypeEnum8 定义需要记录的校准点。该枚举的底层类型为 enum8。

值名称说明
0x00Open / Up记录当前点为上限校准点。
0x01Close / Down记录当前点为下限校准点。

StepModeEnum8 类型​

StepModeEnum8 定义 Step 命令的相对运动方向。该枚举的底层类型为 enum8。

值名称说明
0x00UpOrOpen沿上升或打开方向运动。
0x01DownOrClose沿下降或关闭方向运动。

StowStateEnum8 类型​

StowStateEnum8 定义产品定义的收纳/隐藏位置状态。该枚举的底层类型为 enum8。

值名称说明
0x00NotStowed尚未到达产品定义的收纳/隐藏位置。
0x01Stowed已到达产品定义的收纳/隐藏位置。

MovementFaultBitmap8 类型​

MovementFaultBitmap8 定义当前活动的运动相关故障。该位图的底层类型为 map8。

位名称说明
0Obstacle设备运动过程中检测到障碍物。
1Overload设备负载或运行作用力超出允许范围。
2MotorFault电机故障。
3~7Reserved保留,必须为 0。

属性​

ID名称类型约束默认值访问权限归属方必选性简述
0x1000CurrentPositionPercentuint80 ~ 100,%—R/RPSM当前位置百分比
0x1001EnhanceModeEnhanceModeMap8见位图0x00R/RPSO行程校准状态
0x1002StowStateStowStateEnum8见枚举0x00R/RPSO产品定义的收纳/隐藏位置状态
0x1003OnOffbooltrue / falsefalseR/RPSO灯具开关状态
0x1004LightLeveluint8—R/RPSO灯具当前亮度
0x1005ColorTemperatureuint16ColorTempMin ~ ColorTempMax,K—R/RPSO灯具当前色温
0x1006LightLevelMinuint80x01RSO灯具最小亮度
0x1007LightLevelMaxuint80xFERSO灯具最大亮度
0x1008ColorTempMinuint16K2700RSO灯具最低色温
0x1009ColorTempMaxuint16K6500RSO灯具最高色温
0x100AMovementFaultStatusMovementFaultBitmap8见位图0x00R/RPSO运动相关故障状态
0xFFFBServerAttributeListlist[uint16]无额外约束—RSMServer 属性列表

CurrentPositionPercent 属性​

CurrentPositionPercent 表示晾杆当前位置。0 表示最上,100 表示最下。

Server SHALL 在到达目标、到达边界或停止后 REPORT 本属性。

EnhanceMode 属性​

EnhanceMode 表示当前行程校准模式及上下限校准点的配置状态。Server SHALL 在位图值变化后 REPORT 本属性。

bit0 为 1 表示设备处于手动行程校准模式;bit0 为 0 表示未处于手动行程校准模式。仅在校准模式有效的命令 SHALL 在 bit0 为 0 时执行失败。

bit1 为 1 表示上限校准点已配置,bit2 为 1 表示下限校准点已配置。对应校准点未配置时,相应 bit SHALL 为 0。bit3~7 为保留位且 SHALL 为 0。

StowState 属性​

StowState 表示设备的运动组件是否已到达产品定义的收纳/隐藏位置。

Stowed 表示已到达产品定义的收纳/隐藏位置;NotStowed 表示其他物理位置或运动状态。

Client SHALL 使用 SetStowState 请求状态变化。Server SHALL 在物理状态变化后更新并 REPORT 本属性。

OnOff 属性​

OnOff 表示灯具当前开关状态。Client SHALL 使用 Off 或 On 控制开关,不得 WRITE 本属性。

Server SHALL 在状态变化后 REPORT 本属性。

LightLevel 属性​

LightLevel 表示灯具当前亮度。Client SHALL 使用 MoveToLevel 控制亮度,不得 WRITE 本属性。

Server SHALL 在亮度变化后 REPORT 本属性。

ColorTemperature 属性​

ColorTemperature 表示灯具当前色温,单位为开尔文(K)。 mired单位转换参考 ColorTemperatureMireds = round(1000000 / ColorTemperature)

Client SHALL 使用 MoveToColorTemperature 控制色温,不得 WRITE 本属性。Server SHALL 在色温变化后 REPORT。

LightLevelMin 属性​

LightLevelMin 表示灯具可达到的最小亮度。

LightLevelMax 属性​

LightLevelMax 表示灯具可达到的最大亮度。

ColorTempMin 属性​

ColorTempMin 表示灯具支持的最低开尔文色温,即暖色端能力,默认值为 2700 K。

ColorTempMax 属性​

ColorTempMax 表示灯具支持的最高开尔文色温,即冷色端能力,默认值为 6500 K。

MovementFaultStatus 属性​

MovementFaultStatus 表示设备当前活动的运动相关故障。

bit0 为 1 表示运动过程中检测到障碍物,设备 SHALL 停止相应运动;bit0 为 0 表示当前无遇阻故障。

bit1 为 1 表示设备负载或运行作用力超出允许范围,设备 SHALL 停止相应运动;bit1 为 0 表示当前无过载故障。

bit2 为 1 表示存在电机故障,设备 SHALL 停止电机运动;bit2 为 0 表示当前无电机故障。

bit0、bit1 和 bit2 相互独立,多个故障位 MAY 同时置位。Server SHALL 在检测到故障时置位,并仅在对应故障条件解除后清除该位。

bit3~7 为保留位且 SHALL 为 0。0x00 表示当前无已定义的运动相关故障。

Server SHALL 在故障产生或解除后更新并 REPORT 本属性。

ServerAttributeList 属性​

ServerAttributeList 声明本 Profile 下 Server 实际支持的 Attribute ID 列表。元素 SHALL 按 Attribute ID 升序排列,并包含 0xFFFB。

Client SHALL 在 Profile Discovery 期间 READ 该属性。该属性仅用于能力发现,不存在运行期变化上报场景,Server SHALL NOT REPORT。若支持的属性集合发生变化,Server SHALL 发送 ProfileDiscoveryRequest,由 Client 重新 READ

Clothes Rack 命令​

ID名称方向应答必选性简述
0x1000UpOpenClient → ServerACKNOWLEDGEM控制设备上升。
0x1001DownCloseClient → ServerACKNOWLEDGEM控制设备下降。
0x1002StopClient → ServerACKNOWLEDGEM停止设备运动。
0x1003GoToPercentageClient → ServerACKNOWLEDGEO控制设备运行到目标百分比位置。
0x1004ToggleClient → ServerACKNOWLEDGEO执行产品定义的翻转或切换运动。
0x1005StepClient → ServerACKNOWLEDGEO按指定方向和百分比执行相对运动。
0x1006EnterManualCalibrationReqClient → ServerEnterManualCalibrationRspO进入行程校准模式。
0x1007EnterManualCalibrationRspServer → ClientNO返回进入校准模式结果。
0x1008ManualCalibrationOperationReqClient → ServerManualCalibrationOperationRspO控制校准过程中的运动。
0x1009ManualCalibrationOperationRspServer → ClientNO返回校准运动控制结果。
0x100ARecordManualCalibrationReqClient → ServerRecordManualCalibrationRspO记录当前校准点。
0x100BRecordManualCalibrationRspServer → ClientNO返回记录校准点结果。
0x100CClearManualCalibrationReqClient → ServerClearManualCalibrationRspO清除行程校准记录。
0x100DClearManualCalibrationRspServer → ClientNO返回清除校准记录结果。
0x100ECommitManualCalibrationReqClient → ServerCommitManualCalibrationRspO提交行程校准记录。
0x100FCommitManualCalibrationRspServer → ClientNO返回提交校准记录结果。
0x1010SetStowStateClient → ServerACKNOWLEDGEO请求进入或离开产品定义的收纳/隐藏位置。
0x1011OffClient → ServerACKNOWLEDGEO关闭灯具。
0x1012OnClient → ServerACKNOWLEDGEO打开灯具。
0x1013MoveToLevelClient → ServerACKNOWLEDGEO设置灯具目标亮度。
0x1014MoveToColorTemperatureClient → ServerACKNOWLEDGEO设置灯具目标色温。

有参命令的参数按参数顺序编码;Data Segment 编码见 COMMAND(OPC = 0x9)。

UpOpen 命令​

该命令请求设备向上运行,无参数。动作停止或到达上边界后,Server SHALL REPORT CurrentPositionPercent。

DownClose 命令​

该命令请求设备向下运行,无参数。动作停止或到达下边界后,Server SHALL REPORT CurrentPositionPercent。

Stop 命令​

该命令请求停止设备运动,无参数。停止后 Server SHALL REPORT CurrentPositionPercent。

GoToPercentage 命令​

该命令请求设备运行到目标百分比位置。

参数​
参数顺序名称类型约束默认值
1PositionPercentuint80 ~ 100—

动作完成后,Server SHALL REPORT CurrentPositionPercent。

Toggle 命令​

该命令请求设备执行产品定义的翻转或切换运动,无参数。

具体切换行为 SHALL 由产品定义。对于晾衣机,设备 MAY 在上端和下端目标状态之间切换,也可执行其他产品定义的运动序列。

运动完成或停止后,Server SHALL REPORT CurrentPositionPercent。

Step 命令​

该命令请求设备按照指定方向和指定百分比执行相对位置调整。

参数​
参数顺序名称类型约束默认值
1StepModeStepModeEnum8见枚举—
2Percent100thsuint161 ~ 10000—

UpOrOpen 表示沿上升或打开方向运动,位置百分比向 0% 减小;DownOrClose 表示沿下降或关闭方向运动,位置百分比向 100% 增大。

Percent100ths 表示相对运动步长,单位为 0.01%。1 表示 0.01%,100 表示 1.00%,10000 表示 100.00%。

Server SHALL 将计算得到的目标位置限制在有效位置范围内。运动完成或停止后,Server SHALL REPORT CurrentPositionPercent。

EnterManualCalibrationReq 命令​

该命令请求进入行程校准模式。

命令执行成功后,Server SHALL 将 EnhanceMode.bit0 设置为 1,并使用 CalibrationTimeout 启动无操作超时计时器。

进入校准模式 SHALL NOT 清除或修改已保存的上下限校准点,也 SHALL NOT 修改 EnhanceMode.bit1 和 bit2。新的校准会话开始时,Server SHALL 丢弃上一次会话遗留的临时校准记录。

参数​
参数顺序名称类型约束默认值
1CalibrationTimeoutuint1660 ~ 600 秒—

CalibrationTimeout 表示校准活动超时时间,单位为秒。若超时时间内未成功处理 ManualCalibrationOperationReq 或 RecordManualCalibrationReq,Server SHALL 退出校准模式、清除 EnhanceMode.bit0 并丢弃临时记录,不得保存临时校准点。

每次成功处理校准运动或记录命令后,Server SHALL 重新启动无操作超时计时器。

EnterManualCalibrationRsp 命令​

该命令返回 EnterManualCalibrationReq 的处理结果。

参数​
参数顺序名称类型约束默认值
1StatusCalibrationStatusCodeEnum8见枚举—

Success 表示已进入校准模式并启动超时计时器;Failure 表示当前状态不允许进入校准模式。

ManualCalibrationOperationReq 命令​

该命令请求校准模式中的运动操作。Server SHALL 仅在 EnhanceMode.bit0 为 1 时执行本命令,成功执行后 SHALL 重启无操作超时计时器。

参数​
参数顺序名称类型约束默认值
1OperationManualCalibrationOperationEnum8见枚举—

Open | Up 控制设备向上运行,Close | Down 控制设备向下运行,Stop 停止当前运动。

ManualCalibrationOperationRsp 命令​

该命令返回 ManualCalibrationOperationReq 的处理结果。

参数​
参数顺序名称类型约束默认值
1StatusCalibrationStatusCodeEnum8见枚举—

不在校准模式时 SHALL 返回 NotInManualCalibrationMode;无法执行请求的运动时 SHALL 返回 Failure。

RecordManualCalibrationReq 命令​

该命令请求临时记录当前校准点。Server SHALL 仅在 EnhanceMode.bit0 为 1 时执行本命令。

记录成功后,Server SHALL 保存临时记录但不得立即持久化,也不得修改 EnhanceMode.bit1 或 bit2,并 SHALL 重启无操作超时计时器。

参数​
参数顺序名称类型约束默认值
1RecordTypeManualCalibrationRecordTypeEnum8见枚举—

Open | Up 将当前位置临时记录为上限校准点,Close | Down 将当前位置临时记录为下限校准点。

RecordManualCalibrationRsp 命令​

该命令返回 RecordManualCalibrationReq 的处理结果。

参数​
参数顺序名称类型约束默认值
1StatusCalibrationStatusCodeEnum8见枚举—

不在校准模式时 SHALL 返回 NotInManualCalibrationMode;无法记录当前位置时 SHALL 返回 Failure。

ClearManualCalibrationReq 命令​

该命令请求清除临时或已保存的校准记录,无参数。

若设备处于校准模式,成功执行 SHALL 清除本次会话的临时记录、重启超时计时器并保持在校准模式,不得清除已保存记录或修改 EnhanceMode.bit1、bit2。

若设备不在校准模式,成功执行 SHALL 清除已保存的上下限校准点,并清除 EnhanceMode.bit1 和 bit2。

ClearManualCalibrationRsp 命令​

该命令返回 ClearManualCalibrationReq 的处理结果。

参数​
参数顺序名称类型约束默认值
1StatusCalibrationStatusCodeEnum8见枚举—

Success 表示适用的临时或已保存记录已清除;无法在当前状态清除时 SHALL 返回 Failure。

CommitManualCalibrationReq 命令​

该命令请求保存临时上下限记录并退出校准模式,无参数。Server SHALL 仅在 EnhanceMode.bit0 为 1 时执行本命令。

成功执行后,Server SHALL 持久化临时上限和下限记录,清除 EnhanceMode.bit0,设置 bit1 和 bit2,并清除全部临时记录。

若临时记录未同时包含上限和下限,Server SHALL 返回 MissingCalibrationRecord,不得保存任何临时记录,并 SHALL 退出校准模式。

CommitManualCalibrationRsp 命令​

该命令返回 CommitManualCalibrationReq 的处理结果。

参数​
参数顺序名称类型约束默认值
1StatusCalibrationStatusCodeEnum8见枚举—

不在校准模式时 SHALL 返回 NotInManualCalibrationMode;缺少必需记录时 SHALL 返回 MissingCalibrationRecord。

SetStowState 命令​

该命令请求设备的运动组件进入或离开产品定义的收纳/隐藏位置。

参数​
参数顺序名称类型约束默认值
1StowStateStowStateEnum8见枚举—

Stowed 请求运动到产品定义的收纳/隐藏位置;NotStowed 请求按照产品定义的行为离开收纳/隐藏位置。

ACKNOWLEDGE(Status=0x00) 仅表示请求已接受,完成状态 SHALL 通过 StowState REPORT。

Off 命令​

该命令请求关闭灯具,无参数。最终状态 SHALL 通过 OnOff REPORT。

On 命令​

该命令请求打开灯具,无参数。最终状态 SHALL 通过 OnOff REPORT。

MoveToLevel 命令​

该命令请求设置灯具目标亮度。

参数​
参数顺序名称类型约束默认值
1Leveluint80x01 ~ 0xFE—

设置结果 SHALL 通过 LightLevel REPORT。

MoveToColorTemperature 命令​

该命令请求设置灯具目标色温。

参数​
参数顺序名称类型约束默认值
1ColorTemperatureuint16ColorTempMin ~ ColorTempMax,K—

ColorTemperature 的单位为开尔文。最终设置结果 SHALL 通过 ColorTemperature REPORT。

第九章 Toilet Profile(Profile ID = 0x1002)​

Toilet Profile 定义智能马桶设备的专有属性、命令及设备事件的 AECP 上报映射,适用于帧头 Profile ID = 0x1001 的通信帧。

所有实现 Toilet Profile 的设备同时 SHALL 实现 Foundation Profile(0x0000) 中定义的全部必选属性与命令。

表格约定​

本章所有属性表、命令表和参数表的列含义统一遵循 第 1 章字段记号约定。

数据类型​

StatusCodeEnum8 类型​

StatusCodeEnum8 定义配对响应命令的 Status 参数所携带的处理结果。该枚举的底层类型为 enum8。

值名称说明
0x00Success请求已接受或配置已应用。
0x01Failure发生通用失败。
0x02InvalidParameter参数值不受支持或不符合约束。
0x03InvalidInState请求在当前设备状态下无效。
0x04BusyServer 正在处理冲突操作。
0x05UnsafeCondition不满足安全执行条件。
0x06NotOccupied请求要求有人着座,但当前无人着座。
0x07Occupied请求要求无人着座,但当前有人着座。
0x08Timeout请求未在允许时间内完成处理。
0x09UnsupportedServer 不支持所请求的功能。

Success 表示 Server 已接受请求。对于具有独立执行结果属性的操作,Success 不表示物理动作已经完成。

ToggleActionEnum8 类型​

ToggleActionEnum8 定义座盖或座圈控制动作。该枚举的底层类型为 enum8。

值名称说明
0x00Close移动到关闭位置。
0x01Open移动到打开位置。
0x02Toggle切换到与当前稳定状态相反的状态。

FlushTypeEnum8 类型​

FlushTypeEnum8 定义冲水类型。该枚举的底层类型为 enum8。

值名称说明
0x00LargeFlush大冲水。
0x01SmallFlush小冲水。

WashingModeEnum8 类型​

WashingModeEnum8 定义人体清洗模式。该枚举的底层类型为 enum8。

值名称说明
0x00Rinse臀洗。
0x01RinseMoving移动臀洗。
0x02FeminineWash妇洗。
0x03FeminineWashMoving移动妇洗。

MassageModeEnum8 类型​

MassageModeEnum8 定义按摩清洗模式。该枚举的底层类型为 enum8。

值名称说明
0x00Off关闭按摩清洗。
0x01PressureMassage水压强弱交替。
0x02TemperatureMassage水温冷热交替。

WaterPressureLevelEnum8 类型​

WaterPressureLevelEnum8 定义清洗水压等级。该枚举的底层类型为 enum8。

值名称说明
0x00Gentle轻柔。
0x01Standard标准。
0x02Strong强劲。

NozzlePositionEnum8 类型​

NozzlePositionEnum8 定义智能马桶清洗喷嘴的位置。该枚举的底层类型为 enum8。

值名称说明
0x00Rear后。
0x01Rearward较后。
0x02Middle中。
0x03Forward较前。
0x04Front前。

WashDryActionEnum8 类型​

WashDryActionEnum8 定义清洗和烘干组合控制动作。该枚举的底层类型为 enum8。

值名称说明
0x00Stop停止正在进行的清洗或烘干。
0x01DryOnly启动暖风烘干。
0x02WashOnly启动清洗,不自动衔接烘干。
0x03WashAndDry启动清洗,清洗完成后衔接烘干。

DryingTempLevelEnum8 类型​

DryingTempLevelEnum8 定义暖风烘干温度等级。该枚举的底层类型为 enum8。

值名称说明
0x00RoomTemp常温风。
0x01LowTemp低温。
0x02MediumLowTemp中低温。
0x03MediumTemp中温。
0x04MediumHighTemp中高温。
0x05HighTemp高温。

FanSpeedLevelEnum8 类型​

FanSpeedLevelEnum8 定义烘干风速。该枚举的底层类型为 enum8。

值名称说明
0x00LowSpeed低速。
0x01MediumSpeed中速。
0x02HighSpeed高速。

NozzleCleanActionEnum8 类型​

NozzleCleanActionEnum8 定义喷嘴清洁和人工维护动作。该枚举的底层类型为 enum8。

值名称说明
0x00Off停止清洁并收回喷嘴。
0x01AutoClean执行自动喷嘴清洁。
0x02ManualMaintenance伸出喷嘴供人工维护。

FoamShieldActionEnum8 类型​

FoamShieldActionEnum8 定义泡沫盾释放控制动作。该枚举的底层类型为 enum8。

值名称说明
0x00Start开始释放泡沫。
0x01Stop停止释放泡沫。

CleanFoamSystemActionEnum8 类型​

CleanFoamSystemActionEnum8 定义发泡装置动作。该枚举的底层类型为 enum8。

值名称说明
0x00ReleaseAntiSplashFoam向便池内释放防溅泡沫。
0x01CleanFoamSystem执行一次发泡装置水路清洗。

NightLightModeEnum8 类型​

NightLightModeEnum8 定义夜灯模式。该枚举的底层类型为 enum8。

值名称说明
0x00Off常关。
0x01On常开。
0x02Auto自动感应。

FlushStartCloseModeEnum8 类型​

FlushStartCloseModeEnum8 定义从冲水开始时触发的座盖和座圈自动闭合策略。该枚举的底层类型为 enum8。

值名称说明
0x00Disable不执行自动闭合。
0x01CloseLidAndSeat自动合盖并合圈。
0x02CloseSeatOnly仅自动合圈。

SittingReminderAlertEnum8 类型​

SittingReminderAlertEnum8 定义久坐提醒 Event 状态。该枚举的底层类型为 enum8。

值名称说明
0x00Normal正常状态。
0x01SittingReminder已触发久坐提醒。

TemperatureSensorFaultEnum8 类型​

TemperatureSensorFaultEnum8 定义温度传感器状态。该枚举的底层类型为 enum8。

值名称说明
0x00Normal正常。
0x01Overheat超温。
0x02Fault传感器异常。

BinaryFaultEnum8 类型​

BinaryFaultEnum8 定义正常或异常两种状态。该枚举的底层类型为 enum8。

值名称说明
0x00Normal正常。
0x01Fault异常。

FlowSensorFaultEnum8 类型​

FlowSensorFaultEnum8 定义水流状态。该枚举的底层类型为 enum8。

值名称说明
0x00Normal正常。
0x01Insufficient流量不足。
0x02Excessive流量超出允许范围。

FlushExecutionResultEnum8 类型​

FlushExecutionResultEnum8 定义一次冲水操作的最终结果。该枚举的底层类型为 enum8。

值名称说明
0x00LargeFlushCompleted大冲水执行完成。
0x01SmallFlushCompleted小冲水执行完成。
0x02LargeFlushFailed大冲水执行失败。
0x03SmallFlushFailed小冲水执行失败。

OperationResultEnum8 类型​

OperationResultEnum8 定义一次操作的最终结果。该枚举的底层类型为 enum8。

值名称说明
0x00Completed执行完成。
0x01Failed执行失败。

属性​

ID名称类型约束默认值访问权限归属方必选性简述
0x1000SeatOccupancybooltrue / falsefalseR/RPSO当前着座状态。
0x1001LidStatebooltrue / false—R/RPSO座盖稳定状态。
0x1002SeatStatebooltrue / false—R/RPSO座圈稳定状态。
0x1003EnableSeatHeatingbooltrue / falsefalseR/W/RPSO座圈加热使能状态。
0x1004SeatHeatingLeveluint16Min ~ Max,0.1℃340R/W/RPSO座圈加热目标温度。
0x1005MinSeatHeatingLeveluint160.1℃260R/RPSO支持的最小座圈加热温度。
0x1006MaxSeatHeatingLeveluint160.1℃400R/RPSO支持的最大座圈加热温度。
0x1007SeatHeatingLevelStepuint80.1℃10R/RPSO支持的座圈温度调节步进。
0x1008ToiletWashingModeWashingModeEnum8见枚举—R/W/RPSO人体清洗模式。
0x1009ToiletMassageModeMassageModeEnum8见枚举0x00(Off)R/W/RPSO按摩清洗模式。
0x100AEnableToiletWaterHeatingbooltrue / falsefalseR/W/RPSO清洗水加热使能状态。
0x100BToiletWaterTemperatureuint16Min ~ Max,0.1℃340R/W/RPSO清洗水目标温度。
0x100CMinToiletWaterTemperatureuint160.1℃260R/RPSO支持的最小清洗水温。
0x100DMaxToiletWaterTemperatureuint160.1℃400R/RPSO支持的最大清洗水温。
0x100EToiletWaterTemperatureStepuint80.1℃10R/RPSO支持的清洗水温调节步进。
0x100FToiletWaterPressureLevelWaterPressureLevelEnum8见枚举0x01(Standard)R/W/RPSO清洗水压等级。
0x1010NozzlePositionNozzlePositionEnum8见枚举0x02(Middle)R/W/RPSO清洗喷嘴位置。
0x1011EnableDryingbooltrue / falsefalseR/W/RPSO暖风烘干运行状态。
0x1012DryingTemperatureLevelDryingTempLevelEnum8见枚举0x00(RoomTemp)R/W/RPSO烘干风温挡位。
0x1013FanSpeedLevelFanSpeedLevelEnum8见枚举0x01(MediumSpeed)R/W/RPSO烘干风速。
0x1014RinseDurationuint1660 ~ 300 s180R/W/RPSO臀洗持续时间。
0x1015MinRinseDurationuint16s60R/RPSO支持的最小臀洗持续时间。
0x1016MaxRinseDurationuint16s300R/RPSO支持的最大臀洗持续时间。
0x1017FeminineWashDurationuint1660 ~ 300 s180R/W/RPSO妇洗持续时间。
0x1018MinFeminineWashDurationuint16s60R/RPSO支持的最小妇洗持续时间。
0x1019MaxFeminineWashDurationuint16s300R/RPSO支持的最大妇洗持续时间。
0x101ADryingDurationuint1660 ~ 600 s180R/W/RPSO暖风烘干持续时间。
0x101BMinDryingDurationuint16s60R/RPSO支持的最小暖风烘干持续时间。
0x101CMaxDryingDurationuint16s600R/RPSO支持的最大暖风烘干持续时间。
0x101DPlasmaSterilizeStatusbooltrue / falsefalseR/W/RPSO等离子杀菌运行状态。
0x101ENightLightModeNightLightModeEnum8见枚举—R/W/RPSO夜灯模式。
0x101FEnableEnergySavingbooltrue / false—R/W/RPSO节能模式开关。
0x1020EnableBeepbooltrue / false—R/W/RPSO常规操作提示音开关。
0x1021EnableAutoFoambooltrue / false—R/W/RPSO自动泡沫盾总开关。
0x1022EnableAutoFoamOnSitbooltrue / false—R/W/RPSO着座后自动释放泡沫盾。
0x1023EnableAutoFoamAfterFlushbooltrue / false—R/W/RPSO离座冲水后自动补充泡沫盾。
0x1024EnableAutoFoamOnFootFlipbooltrue / false—R/W/RPSO脚感翻圈后自动释放泡沫盾。
0x1025AutoFoamDurationuint1610 ~ 20 s18R/W/RPSO自动泡沫释放持续时间。
0x1026MinAutoFoamDurationuint16s10R/RPSO支持的最小自动泡沫释放持续时间。
0x1027MaxAutoFoamDurationuint16s20R/RPSO支持的最大自动泡沫释放持续时间。
0x1028SittingReminderThresholduint16600 ~ 3600 s1200R/W/RPSO久坐提醒阈值。
0x1029MinSittingReminderThresholduint16s600R/RPSO支持的最小久坐提醒阈值。
0x102AMaxSittingReminderThresholduint16s3600R/RPSO支持的最大久坐提醒阈值。
0x102BEnableAutoLidbooltrue / false—R/W/RPSO人体靠近自动开盖开关。
0x102CEnableAutoFlushbooltrue / false—R/W/RPSO离座自动冲水开关。
0x102DFlushStartCloseModeFlushStartCloseModeEnum8见枚举—R/W/RPSO从冲水开始触发的自动闭合策略。
0x102EFlushStartCloseDelayuint160 ~ 30 s3R/W/RPSO从冲水开始到自动闭合的延迟。
0x102FMinFlushStartCloseDelayuint16s0R/RPSO支持的最小冲水开始闭合延迟。
0x1030MaxFlushStartCloseDelayuint16s30R/RPSO支持的最大冲水开始闭合延迟。
0x1031EnableFootSensorbooltrue / false—R/W/RPSO脚部感应功能开关。
0x1032EnablePreWettingbooltrue / false—R/W/RPSO着座预润壁开关。
0x1033EnableAutoDeodorizerbooltrue / false—R/W/RPSO着座自动除臭开关。
0x1034SeatTempSensorFaultTemperatureSensorFaultEnum8见枚举0x00(Normal)R/RPSO当前座圈温度传感器故障状态。
0x1035PressureValveFaultBinaryFaultEnum8见枚举0x00(Normal)R/RPSO当前稳压阀故障状态。
0x1036WaterHeaterVoltageFaultBinaryFaultEnum8见枚举0x00(Normal)R/RPSO当前水加热电路故障状态。
0x1037FlowSensorFaultFlowSensorFaultEnum8见枚举0x00(Normal)R/RPSO当前水流故障状态。
0x1038OutletWaterTempSensorFaultTemperatureSensorFaultEnum8见枚举0x00(Normal)R/RPSO当前出水温度传感器故障状态。
0x1039InletWaterTempSensorFaultTemperatureSensorFaultEnum8见枚举0x00(Normal)R/RPSO当前进水温度传感器故障状态。
0x103ADryerFanFaultBinaryFaultEnum8见枚举0x00(Normal)R/RPSO当前烘干风机故障状态。
0x103BSittingReminderSittingReminderAlertEnum8见枚举—RPSO久坐提醒事件指示。
0x103CFlushExecutionResultFlushExecutionResultEnum8见枚举—RPSO冲水执行结果事件指示。
0x103DWashExecutionResultOperationResultEnum8见枚举—RPSO人体清洗结果事件指示。
0x103ENozzleCleanExecutionResultOperationResultEnum8见枚举—RPSO喷嘴清洁结果事件指示。
0x103FFoamShieldExecutionResultOperationResultEnum8见枚举—RPSO泡沫盾执行结果事件指示。
0xFFFBServerAttributeListlist[uint16]无额外约束—R/RPSMServer 支持的属性列表。

SeatOccupancy 属性​

SeatOccupancy 表示当前着座状态。false 表示未检测到用户着座,true 表示检测到用户着座。Server SHALL 在状态变化后 REPORT 该属性。

LidState 属性​

LidState 表示座盖最近一次确认的稳定状态,false 表示关闭,true 表示打开。Client MAY READ 该属性,并 SHALL 使用 LidControlReq 请求座盖动作;Server 只有在座盖到达目标位置后才 SHALL 更新并 REPORT 新值。

座盖运动期间,该属性 SHOULD 保持最近一次确认的稳定状态。请求因机械阻挡、着座状态或安全条件无法执行时,Server SHALL NOT 改变该属性。

SeatState 属性​

SeatState 表示座圈最近一次确认的稳定状态,false 表示关闭,true 表示打开。Client MAY READ 该属性,并 SHALL 使用 SeatControlReq 请求座圈动作;Server SHALL 遵守座盖与座圈之间的机械互锁关系,并在到达目标位置后 REPORT 新值。

EnableSeatHeating 属性​

EnableSeatHeating 表示座圈加热是否启用。false 表示停止主动加热但保留 SeatHeatingLevel,true 表示在温度限制和过温保护条件下按照目标温度进行调节。

SeatHeatingLevel 属性​

SeatHeatingLevel 表示配置的座圈加热目标温度,单位为 0.1℃,例如 340 表示 34.0℃。其值 SHALL 位于 MinSeatHeatingLevel 与 MaxSeatHeatingLevel 之间,并且与 MinSeatHeatingLevel 的差值 SHALL 为 SeatHeatingLevelStep 的整数倍。写入本属性 SHALL NOT 改变 EnableSeatHeating。

MinSeatHeatingLevel 属性​

MinSeatHeatingLevel 表示支持的最小座圈加热温度,单位为 0.1℃,并 SHALL 小于或等于 MaxSeatHeatingLevel。

MaxSeatHeatingLevel 属性​

MaxSeatHeatingLevel 表示支持的最大座圈加热温度,单位为 0.1℃,并 SHALL 大于或等于 MinSeatHeatingLevel。

SeatHeatingLevelStep 属性​

SeatHeatingLevelStep 表示支持的座圈温度调节步进,单位为 0.1℃,例如 10 表示 1.0℃。其值 SHALL 大于零。

ToiletWashingMode 属性​

ToiletWashingMode 表示配置的人体清洗模式。有效值见 WashingModeEnum8。Client WRITE 新值 SHALL NOT 自动启动清洗。

ToiletMassageMode 属性​

ToiletMassageMode 表示配置的按摩清洗模式。Off 表示关闭按摩,PressureMassage 表示水压强弱交替,TemperatureMassage 表示水温冷热交替。

EnableToiletWaterHeating 属性​

EnableToiletWaterHeating 表示是否启用清洗水主动加热。false 表示停止主动加热但保留 ToiletWaterTemperature,true 表示在供水条件、温度限制和过温保护条件下按照目标温度进行调节。

ToiletWaterTemperature 属性​

ToiletWaterTemperature 表示配置的清洗水目标温度,单位为 0.1℃,例如 340 表示 34.0℃。其值 SHALL 位于 MinToiletWaterTemperature 与 MaxToiletWaterTemperature 之间,并且与 MinToiletWaterTemperature 的差值 SHALL 为 ToiletWaterTemperatureStep 的整数倍。写入本属性 SHALL NOT 改变 EnableToiletWaterHeating。

MinToiletWaterTemperature 属性​

MinToiletWaterTemperature 表示支持的最小清洗水温,单位为 0.1℃,并 SHALL 小于或等于 MaxToiletWaterTemperature。

MaxToiletWaterTemperature 属性​

MaxToiletWaterTemperature 表示支持的最大清洗水温,单位为 0.1℃,并 SHALL 大于或等于 MinToiletWaterTemperature。

ToiletWaterTemperatureStep 属性​

ToiletWaterTemperatureStep 表示支持的清洗水温调节步进,单位为 0.1℃,例如 10 表示 1.0℃。其值 SHALL 大于零。

ToiletWaterPressureLevel 属性​

ToiletWaterPressureLevel 表示配置的清洗水压等级。Server MAY 根据当前清洗模式采用不同的实际水压标定,但相同枚举值的相对强弱关系 SHALL 保持一致。

NozzlePosition 属性​

NozzlePosition 表示配置的喷嘴位置。Rear 表示最后位置,Front 表示最前位置。Client WRITE 新值 SHALL NOT 单独启动清洗或喷嘴维护动作。

EnableDrying 属性​

EnableDrying 表示暖风烘干是否运行。Client 写入 true 时请求按照当前 DryingTemperatureLevel、FanSpeedLevel 和 DryingDuration 启动烘干,写入 false 时请求停止烘干。烘干完成、失败、停止或因安全条件中断时,Server SHALL 将本属性更新为 false 并 REPORT。

DryingTemperatureLevel 属性​

DryingTemperatureLevel 表示配置的暖风温度挡位,有效值见 DryingTempLevelEnum8。写入本属性 SHALL NOT 单独启动烘干。

FanSpeedLevel 属性​

FanSpeedLevel 表示配置的烘干风速。Client WRITE 新值 SHALL NOT 单独启动烘干。Server MAY 在安全限制生效时降低实际风速。

RinseDuration 属性​

RinseDuration 表示臀洗持续时间,单位为秒。其值 SHALL 位于 MinRinseDuration 与 MaxRinseDuration 之间,步长为 30 秒。Server SHALL 拒绝超出支持范围或不符合步长的值。

MinRinseDuration 属性​

MinRinseDuration 表示 Server 支持的最小臀洗持续时间,单位为秒,其值 SHALL 小于或等于 MaxRinseDuration。

MaxRinseDuration 属性​

MaxRinseDuration 表示 Server 支持的最大臀洗持续时间,单位为秒,其值 SHALL 大于或等于 MinRinseDuration。

FeminineWashDuration 属性​

FeminineWashDuration 表示妇洗持续时间,单位为秒。其值 SHALL 位于 MinFeminineWashDuration 与 MaxFeminineWashDuration 之间,步长为 30 秒。Server SHALL 拒绝超出支持范围或不符合步长的值。

MinFeminineWashDuration 属性​

MinFeminineWashDuration 表示 Server 支持的最小妇洗持续时间,单位为秒,其值 SHALL 小于或等于 MaxFeminineWashDuration。

MaxFeminineWashDuration 属性​

MaxFeminineWashDuration 表示 Server 支持的最大妇洗持续时间,单位为秒,其值 SHALL 大于或等于 MinFeminineWashDuration。

DryingDuration 属性​

DryingDuration 表示暖风烘干持续时间,单位为秒。其值 SHALL 位于 MinDryingDuration 与 MaxDryingDuration 之间,步长为 60 秒。Server SHALL 拒绝超出支持范围或不符合步长的值。

MinDryingDuration 属性​

MinDryingDuration 表示 Server 支持的最小暖风烘干持续时间,单位为秒,其值 SHALL 小于或等于 MaxDryingDuration。

MaxDryingDuration 属性​

MaxDryingDuration 表示 Server 支持的最大暖风烘干持续时间,单位为秒,其值 SHALL 大于或等于 MinDryingDuration。

PlasmaSterilizeStatus 属性​

PlasmaSterilizeStatus 表示等离子杀菌运行状态。Client WRITE true 请求启动杀菌,WRITE false 请求停止杀菌。Server 仅在请求被接受后 MAY 改变本属性。

NightLightMode 属性​

NightLightMode 表示夜灯模式。Off 表示常关,On 表示常开,Auto 表示由设备根据环境条件自动控制。

EnableEnergySaving 属性​

EnableEnergySaving 表示节能模式是否启用。

EnableBeep 属性​

EnableBeep 表示设备操作反馈提示音是否启用。false 表示关闭设备操作反馈提示音,true 表示启用设备操作反馈提示音。

EnableAutoFoam 属性​

EnableAutoFoam 表示自动泡沫盾功能总开关。值为 false 时,自动泡沫触发条件 SHALL NOT 启动泡沫释放,但各触发条件属性的配置值 SHALL 保留。

EnableAutoFoamOnSit 属性​

EnableAutoFoamOnSit 表示检测到用户着座后是否自动释放泡沫盾。该属性仅在 EnableAutoFoam = true 时生效。

EnableAutoFoamAfterFlush 属性​

EnableAutoFoamAfterFlush 表示离座冲水成功完成后是否自动补充泡沫盾。该属性仅在 EnableAutoFoam = true 时生效。

EnableAutoFoamOnFootFlip 属性​

EnableAutoFoamOnFootFlip 表示脚感触发座圈翻起后是否自动释放泡沫盾。该属性仅在 EnableAutoFoam = true 且 EnableFootSensor = true 时生效。

AutoFoamDuration 属性​

AutoFoamDuration 表示自动泡沫释放持续时间,单位为秒。其值 SHALL 位于 MinAutoFoamDuration 与 MaxAutoFoamDuration 之间,步长为 1 秒。Server SHALL 拒绝超出支持范围的值。

MinAutoFoamDuration 属性​

MinAutoFoamDuration 表示 Server 支持的最小自动泡沫释放持续时间,单位为秒,其值 SHALL 小于或等于 MaxAutoFoamDuration。

MaxAutoFoamDuration 属性​

MaxAutoFoamDuration 表示 Server 支持的最大自动泡沫释放持续时间,单位为秒,其值 SHALL 大于或等于 MinAutoFoamDuration。

SittingReminderThreshold 属性​

SittingReminderThreshold 表示触发久坐提醒所需的连续着座时间,单位为秒。其值 SHALL 位于 MinSittingReminderThreshold 与 MaxSittingReminderThreshold 之间,步长为 60 秒。

MinSittingReminderThreshold 属性​

MinSittingReminderThreshold 表示 Server 支持的最小久坐提醒阈值,单位为秒,其值 SHALL 小于或等于 MaxSittingReminderThreshold。

MaxSittingReminderThreshold 属性​

MaxSittingReminderThreshold 表示 Server 支持的最大久坐提醒阈值,单位为秒,其值 SHALL 大于或等于 MinSittingReminderThreshold。

EnableAutoLid 属性​

EnableAutoLid 表示人体靠近时自动打开座盖的功能是否启用。自动动作 SHALL 满足机械互锁和安全条件。

EnableAutoFlush 属性​

EnableAutoFlush 表示离座自动冲水功能是否启用。启用后,Server MAY 根据本地策略选择大冲水或小冲水,最终结果 SHALL 通过 FlushExecutionResult 事件映射属性 REPORT。

FlushStartCloseMode 属性​

FlushStartCloseMode 表示从冲水开始时触发的座盖和座圈自动闭合策略。CloseLidAndSeat 表示安排合圈并合盖,CloseSeatOnly 表示仅安排合圈。

FlushStartCloseDelay 属性​

FlushStartCloseDelay 表示从冲水开始到执行自动合盖或合圈动作的延迟,单位为秒。其值 SHALL 位于 MinFlushStartCloseDelay 与 MaxFlushStartCloseDelay 之间,步长为 3 秒。延迟期间检测到不安全条件时,Server SHALL 取消待执行的自动闭合动作。

MinFlushStartCloseDelay 属性​

MinFlushStartCloseDelay 表示 Server 支持的最小冲水开始自动闭合延迟,单位为秒,其值 SHALL 小于或等于 MaxFlushStartCloseDelay。

MaxFlushStartCloseDelay 属性​

MaxFlushStartCloseDelay 表示 Server 支持的最大冲水开始自动闭合延迟,单位为秒,其值 SHALL 大于或等于 MinFlushStartCloseDelay。

EnableFootSensor 属性​

EnableFootSensor 表示脚部感应功能是否启用。值为 false 时,Server SHALL NOT 响应脚感翻盖、翻圈或冲水动作,也 SHALL NOT 触发脚感自动泡沫释放。

EnablePreWetting 属性​

EnablePreWetting 表示着座时是否自动预润湿内壁。启用后,Server MAY 在 SeatOccupancy 从 false 变为 true 时执行预润湿,且 SHALL 满足供水和安全条件。

EnableAutoDeodorizer 属性​

EnableAutoDeodorizer 表示着座自动除臭功能是否启用。启用后,Server MAY 在检测到用户着座时启动除臭,并在离座后按产品定义的延迟停止。

SeatTempSensorFault 属性​

SeatTempSensorFault 表示当前座圈温度传感器故障状态。Client MAY 随时 READ 本属性。状态发生变化时 Server SHALL REPORT,包括恢复为 Normal;在 Overheat 或 Fault 状态下,Server SHALL 执行适用的加热保护。

PressureValveFault 属性​

PressureValveFault 表示当前稳压阀故障状态。Client MAY 随时 READ 本属性。状态发生变化时 Server SHALL REPORT,包括恢复为 Normal。

WaterHeaterVoltageFault 属性​

WaterHeaterVoltageFault 表示当前水加热电路故障状态。Client MAY 随时 READ 本属性。状态发生变化时 Server SHALL REPORT,包括恢复为 Normal;存在 Fault 时 Server SHALL 停止不安全的水加热操作。

FlowSensorFault 属性​

FlowSensorFault 表示当前检测到的水流状态。Client MAY 随时 READ 本属性。状态发生变化时 Server SHALL REPORT,包括恢复为 Normal,并 SHALL 根据当前操作执行适用的供水保护。

OutletWaterTempSensorFault 属性​

OutletWaterTempSensorFault 表示当前出水温度传感器故障状态。Client MAY 随时 READ 本属性。状态发生变化时 Server SHALL REPORT,包括恢复为 Normal;异常期间 Server SHALL 停止不安全的清洗水加热操作。

InletWaterTempSensorFault 属性​

InletWaterTempSensorFault 表示当前进水温度传感器故障状态。Client MAY 随时 READ 本属性。状态发生变化时 Server SHALL REPORT,包括恢复为 Normal,并 SHALL 在异常期间执行适用的供水和加热保护。

DryerFanFault 属性​

DryerFanFault 表示当前烘干风机故障状态。Client MAY 随时 READ 本属性。状态发生变化时 Server SHALL REPORT,包括恢复为 Normal;存在 Fault 时 Server SHALL 停止暖风烘干。

SittingReminder 属性​

SittingReminder 用于通过 AECP 承载对应久坐提醒 Event 的 AlertState 字段。连续着座时间达到 SittingReminderThreshold 时,Server SHALL 使用 SittingReminder 值发送一次 REPORT。同一次连续着座期间最多发送一次该 REPORT;检测到离座后重新允许下一次上报。本属性仅用于事件上报,不表示持久告警状态,Client 不对其发起 QUERY。

FlushExecutionResult 属性​

FlushExecutionResult 用于通过 AECP 承载对应冲水执行结果事件的 Result 字段。每次大冲水或小冲水完成或失败时,Server SHALL 发送一次 REPORT;即使数值与上一次相同,每次冲水也 SHALL 产生独立 REPORT。本属性仅用于事件上报,不表示可查询的最近结果状态。

WashExecutionResult 属性​

WashExecutionResult 用于通过 AECP 承载对应人体清洗结果事件的 Result 字段。每次人体清洗完成或失败时,Server SHALL 发送一次 REPORT。对于 WashAndDry,该值仅表示清洗阶段结果。本属性仅用于事件上报,Client 不对其发起 QUERY。

NozzleCleanExecutionResult 属性​

NozzleCleanExecutionResult 用于通过 AECP 承载对应喷嘴清洁结果事件的 Result 字段。每次自动喷嘴清洁完成或失败时,Server SHALL 发送一次 REPORT;人工维护模式的伸出或收回 SHALL NOT 产生该 REPORT。本属性仅用于事件上报,Client 不对其发起 QUERY。

FoamShieldExecutionResult 属性​

FoamShieldExecutionResult 用于通过 AECP 承载对应泡沫盾执行结果事件的 Result 字段。每次泡沫盾释放完成或失败时,Server SHALL 发送一次 REPORT;每次释放操作均 SHALL 产生独立 REPORT。本属性仅用于事件上报,Client 不对其发起 QUERY。

ServerAttributeList 属性​

ServerAttributeList 声明 Toilet Profile 下 Server 实际支持的 Attribute ID 列表。

该属性类型为 list[uint16]。列表元素 SHALL 按 Attribute ID 从小到大排列,并包含 ServerAttributeList 自身的 Attribute ID 0xFFFB。

实际支持的 0x103B 至 0x103F Event REPORT 映射属性 SHALL 包含在 ServerAttributeList 中。由于这些属性的 Access = RP 且不具备读权限,Client SHALL NOT 在 Profile Discovery 或正常运行期间 READ 这些属性。0x1034 至 0x103A 故障状态属性的 Access = R/RP,Client MAY 在 Profile Discovery 期间读取,以便接入后立即获得当前故障状态。

Event REPORT 映射​

AECP 不定义 Event 操作码。因此,每个 Aqara Toilet Cluster Event SHALL 通过下表对应的 Server 属性,使用 REPORT(OPC = 0x5) 传输。

Cluster Event IDEvent 名称AECP Attribute IDAttribute 类型
0x00SittingReminder0x103BSittingReminderAlertEnum8
0x01FlushExecutionResult0x103CFlushExecutionResultEnum8
0x02WashExecutionResult0x103DOperationResultEnum8
0x03NozzleCleanExecutionResult0x103EOperationResultEnum8
0x04FoamShieldExecutionResult0x103FOperationResultEnum8

REPORT 帧 SHALL 使用 Profile ID = 0x1001。Data Segment SHALL 按照 第 3 章 Data Segment 编码规则,由一个或多个连续排列的 Attribute Block 组成:

.... +--------+-----------+------+ +--------+-----------+------+ | AttrID | Data Type | Data | ... | AttrID | Data Type | Data | | (2 B) | (1 B) |(N B) | | (2 B) | (1 B) |(N B) | +--------+-----------+------+ +--------+-----------+------+ ....

每个 Attribute Block 表示一次 Event 发生,SHALL 携带 Attribute ID、本 Profile 声明的 Data Type 以及 Event Payload 数值。REPORT 的 Attribute Block SHALL NOT 携带属性级 Status。Client 接受 REPORT 后 SHALL 使用相同 Seq 返回 ACKNOWLEDGE(OPC = 0x6);ACKNOWLEDGE 中的 Status 作用于整个 REPORT 帧。

当协商的 UART 单帧长度允许时,同时产生的不同 Event 类型 MAY 通过同一个 REPORT 中的多个 Attribute Block 传输。同一 Event 类型重复发生时 SHALL 使用不同的 REPORT 事务。重传 SHALL 沿用原 Seq,Client SHALL NOT 将相同 Seq 的重传解释为新的 Event。

Event 上报 SHALL 遵循 Profile Discovery 规则。在 ProfileDiscoveryComplete 获得 ACKNOWLEDGE(Status = 0x00) 之前,Server SHALL NOT 发送这些 REPORT。

命令​

ID名称方向应答必选性简述
0x0001LidControlReqClient → ServerLidControlRspO请求座盖关闭、打开或切换状态。
0x0002LidControlRspServer → ClientNO返回座盖控制处理结果。
0x0003SeatControlReqClient → ServerSeatControlRspO请求座圈关闭、打开或切换状态。
0x0004SeatControlRspServer → ClientNO返回座圈控制处理结果。
0x0005FlushControlReqClient → ServerFlushControlRspO请求执行大冲水或小冲水。
0x0006FlushControlRspServer → ClientNO返回冲水请求处理结果。
0x0007WashDryCombinationControlReqClient → ServerWashDryCombinationControlRspO请求控制清洗和烘干流程。
0x0008WashDryCombinationControlRspServer → ClientNO返回清洗/烘干处理结果。
0x0009NozzleCleanReqClient → ServerNozzleCleanRspO请求喷嘴清洁或人工维护。
0x000ANozzleCleanRspServer → ClientNO返回喷嘴清洁处理结果。
0x000BFoamShieldControlReqClient → ServerFoamShieldControlRspO请求控制泡沫盾释放。
0x000CFoamShieldControlRspServer → ClientNO返回泡沫盾控制处理结果。
0x000DCleanFoamSystemControlReqClient → ServerCleanFoamSystemControlRspO请求释放防溅泡沫或执行发泡装置水路清洗。
0x000ECleanFoamSystemControlRspServer → ClientNO返回所请求发泡装置动作的处理结果。

对于已进入业务处理的请求,Server SHALL 返回本表声明的配对响应命令。响应命令携带类型为 StatusCodeEnum8 的 Status 参数,并声明 Response = N。

LidControlReq 命令​

该命令请求 Server 关闭、打开或切换座盖状态。

参数​
参数顺序名称类型约束默认值
1ActionToggleActionEnum8见枚举—
字段说明​

Close 请求关闭座盖,Open 请求打开座盖,Toggle 请求切换到与当前稳定状态相反的状态。座盖不处于可确定的稳定状态时,Server SHOULD 在 LidControlRsp 中返回 InvalidInState 或 Busy。

最终稳定状态由 LidState 表示。

LidControlRsp 命令​

该命令 SHALL 作为 LidControlReq 的响应发送。

参数​
参数顺序名称类型约束默认值
1StatusStatusCodeEnum8见枚举—
字段说明​

Status 表示座盖控制处理结果。Success 表示请求已接受;最终座盖状态由 LidState 表示。

SeatControlReq 命令​

该命令请求 Server 关闭、打开或切换座圈状态。Server SHALL 遵守座盖与座圈之间的机械互锁和着座安全条件。

参数​
参数顺序名称类型约束默认值
1ActionToggleActionEnum8见枚举—
字段说明​

Close 请求关闭座圈,Open 请求打开座圈,Toggle 请求切换到与当前稳定状态相反的状态。最终稳定状态由 SeatState 表示。

SeatControlRsp 命令​

该命令 SHALL 作为 SeatControlReq 的响应发送。

参数​
参数顺序名称类型约束默认值
1StatusStatusCodeEnum8见枚举—
字段说明​

Status 表示座圈控制处理结果。Success 表示请求已接受;最终座圈状态由 SeatState 表示。

FlushControlReq 命令​

该命令请求 Server 执行指定类型的冲水。Server SHALL 根据当前状态和安全条件决定是否接受请求,并 MAY 停止与冲水冲突的清洗或烘干操作。

参数​
参数顺序名称类型约束默认值
1FlushTypeFlushTypeEnum8见枚举—
字段说明​

LargeFlush 请求大冲水,SmallFlush 请求小冲水。每次冲水的最终结果 SHALL 通过 FlushExecutionResult 事件映射属性 REPORT。

FlushControlRsp 命令​

该命令 SHALL 作为 FlushControlReq 的响应发送。

参数​
参数顺序名称类型约束默认值
1StatusStatusCodeEnum8见枚举—
字段说明​

Status 表示冲水请求处理结果。Success 表示请求已接受,不表示冲水已经完成。冲水完成或失败由 FlushExecutionResult REPORT 表示。

WashDryCombinationControlReq 命令​

该命令请求 Server 启动或停止清洗和烘干流程。Server SHALL 使用当前配置的清洗模式、水温、水压、喷嘴位置、DryingTemperatureLevel、FanSpeedLevel 和持续时间属性处理请求。

要求人体清洗或暖风烘干的请求仅在检测到用户着座且满足安全条件时 MAY 执行。已接受的请求启动或停止暖风烘干时,Server SHALL 同步更新并 REPORT EnableDrying。

参数​
参数顺序名称类型约束默认值
1ActionWashDryActionEnum8见枚举—
字段说明​
  • Stop:停止当前清洗或烘干。
  • DryOnly:启动暖风烘干。
  • WashOnly:启动已配置的人体清洗,不自动衔接烘干。
  • WashAndDry:启动已配置的人体清洗,并在清洗成功后衔接烘干。

人体清洗完成或失败 SHALL 通过 WashExecutionResult 事件映射属性 REPORT。

WashDryCombinationControlRsp 命令​

该命令 SHALL 作为 WashDryCombinationControlReq 的响应发送。

参数​
参数顺序名称类型约束默认值
1StatusStatusCodeEnum8见枚举—
字段说明​

Status 表示清洗/烘干请求处理结果。Success 表示请求已接受。人体清洗完成或失败由 WashExecutionResult REPORT 表示。

NozzleCleanReq 命令​

该命令请求 Server 控制喷嘴清洁或人工维护位置。自动清洁和人工维护伸出 SHOULD 仅在无人着座且不存在冲突操作时执行。检测到用户着座时,Server SHALL 停止维护动作,并在安全条件允许时收回喷嘴。

参数​
参数顺序名称类型约束默认值
1ActionNozzleCleanActionEnum8见枚举—
字段说明​
  • Off:停止清洁并收回喷嘴。
  • AutoClean:执行自动喷嘴清洁。
  • ManualMaintenance:伸出喷嘴供人工维护,不启动人体清洗。

自动喷嘴清洁完成或失败 SHALL 通过 NozzleCleanExecutionResult 事件映射属性 REPORT。

NozzleCleanRsp 命令​

该命令 SHALL 作为 NozzleCleanReq 的响应发送。

参数​
参数顺序名称类型约束默认值
1StatusStatusCodeEnum8见枚举—
字段说明​

Status 表示喷嘴清洁或维护请求处理结果。Success 表示请求已接受。自动喷嘴清洁完成或失败由 NozzleCleanExecutionResult REPORT 表示。

FoamShieldControlReq 命令​

该命令请求 Server 开始或停止手动泡沫盾释放。Server SHALL 对连续释放时间应用产品定义的安全上限。

参数​
参数顺序名称类型约束默认值
1ActionFoamShieldActionEnum8见枚举—
字段说明​

Start 请求开始释放泡沫,Stop 请求停止释放泡沫。每次泡沫释放完成或失败 SHALL 通过 FoamShieldExecutionResult 事件映射属性 REPORT。

FoamShieldControlRsp 命令​

该命令 SHALL 作为 FoamShieldControlReq 的响应发送。

参数​
参数顺序名称类型约束默认值
1StatusStatusCodeEnum8见枚举—
字段说明​

Status 表示泡沫盾控制处理结果。Success 表示请求已接受。泡沫释放完成或失败由 FoamShieldExecutionResult REPORT 表示。

CleanFoamSystemControlReq 命令​

该命令请求 Server 释放防溅泡沫或执行一次发泡装置水路清洗。Server 仅在所需物料或供水可用且不存在冲突或不安全操作时 MAY 接受该命令。

参数​
参数顺序名称类型约束默认值
1ActionCleanFoamSystemActionEnum8见枚举—
字段说明​

ReleaseAntiSplashFoam 请求向便池内释放防溅泡沫;CleanFoamSystem 请求执行一次发泡装置水路清洗。对于不支持的值,Server SHALL 在 CleanFoamSystemControlRsp 中返回 InvalidParameter。

CleanFoamSystemControlRsp 命令​

该命令 SHALL 作为 CleanFoamSystemControlReq 的响应发送。

参数​
参数顺序名称类型约束默认值
1StatusStatusCodeEnum8见枚举—
字段说明​

Status 表示所请求发泡装置动作的处理结果。Success 表示请求已接受。

附录 A:串口消息示例​

本附录提供典型交互场景的完整串口消息示例,包含逐字节标注,帮助实现方验证帧的构造与解析逻辑。

示例场景说明​

以下示例均基于 Foundation Profile(Profile ID = 0x0000,Thermostat 示例使用 0x1000)。Client 侧发出的帧标注为 CLIENT SEND,Server 侧发出的帧标注为 SERVER SEND。

READ 与 READ_RESPONSE​

属性定义​

Attribute ID名称Data TypeSideAccess说明
0x1003ServerSoftwareVersionuint16SR/RPServer 固件版本。

帧内容​

READ 帧(CLIENT SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttribute ID
长度1 B2 B1 B1 B2 B1 B2 B
值 (Hex)5500 00010100 02A710 03

最后 2 字节 71 4C 为 Overall Checksum。

完整帧(Hex):55 00 00 01 01 00 02 A7 10 03 71 4C

READ_RESPONSE 帧(SERVER SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttr IDStatusData TypeData
长度1 B2 B1 B1 B2 B1 B2 B1 B1 B2 B
值 (Hex)5500 00010200 06A210 03002100 63

最后 2 字节 A8 56 为 Overall Checksum。

完整帧(Hex):55 00 00 01 02 00 06 A2 10 03 00 21 00 63 A8 56

REPORT 与 ACKNOWLEDGE​

属性定义​

Attribute ID名称Data TypeSideAccess说明
0x1005OtaStatusenum8SRPOTA 状态。

帧内容​

REPORT 帧(SERVER SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttr IDData TypeData
长度1 B2 B1 B1 B2 B1 B2 B1 B1 B
值 (Hex)5500 00080500 049A10 053002

最后 2 字节 24 81 为 Overall Checksum。

完整帧(Hex):55 00 00 08 05 00 04 9A 10 05 30 02 24 81

ACKNOWLEDGE 帧(CLIENT SEND)

字段SOFProfile IDSeqOPCD-LenHCSStatus
长度1 B2 B1 B1 B2 B1 B1 B
值 (Hex)5500 00080600 019C00

最后 2 字节 40 BF 为 Overall Checksum。

完整帧(Hex):55 00 00 08 06 00 01 9C 00 40 BF

WRITE 与 WRITE_RESPONSE​

属性定义​

Profile ID = 0x1000(Thermostat Profile)。

Attribute ID名称Data TypeSideAccess说明
0x1000SystemModeenum8CW系统模式。

帧内容​

WRITE 帧(CLIENT SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttr IDData TypeData
长度1 B2 B1 B1 B2 B1 B2 B1 B1 B
值 (Hex)5510 00020300 049210 003003

最后 2 字节 E5 50 为 Overall Checksum。

完整帧(Hex):55 10 00 02 03 00 04 92 10 00 30 03 E5 50

WRITE_RESPONSE 帧(SERVER SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttr IDStatus
长度1 B2 B1 B1 B2 B1 B2 B1 B
值 (Hex)5510 00020400 039210 0000

最后 2 字节 05 70 为 Overall Checksum。

完整帧(Hex):55 10 00 02 04 00 03 92 10 00 00 05 70

QUERY 与 QUERY_RESPONSE​

属性定义​

Attribute ID名称Data TypeSideAccess说明
0x0000ProductProfileIDuint16CQClient 产品 Profile ID。

帧内容​

QUERY 帧(SERVER SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttribute ID
长度1 B2 B1 B1 B2 B1 B2 B
值 (Hex)5500 00030700 029F00 00

最后 2 字节 B0 01 为 Overall Checksum。

完整帧(Hex):55 00 00 03 07 00 02 9F 00 00 B0 01

QUERY_RESPONSE 帧(CLIENT SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttr IDStatusData TypeData
长度1 B2 B1 B1 B2 B1 B2 B1 B1 B2 B
值 (Hex)5500 00030800 069A00 00002100 00

最后 2 字节 11 50 为 Overall Checksum。

完整帧(Hex):55 00 00 03 08 00 06 9A 00 00 00 21 00 00 11 50

COMMAND​

InitDiscoveryComplete 与 ACKNOWLEDGE​

COMMAND 帧(CLIENT SEND)

字段SOFProfile IDSeqOPCD-LenHCSCmd ID
长度1 B2 B1 B1 B2 B1 B2 B
值 (Hex)5500 00040900 029C00 01

最后 2 字节 70 C0 为 Overall Checksum。

完整帧(Hex):55 00 00 04 09 00 02 9C 00 01 70 C0

ACKNOWLEDGE 帧(SERVER SEND)

字段SOFProfile IDSeqOPCD-LenHCSStatus
长度1 B2 B1 B1 B2 B1 B1 B
值 (Hex)5500 00040600 01A000

最后 2 字节 40 BF 为 Overall Checksum。

完整帧(Hex):55 00 00 04 06 00 01 A0 00 40 BF

OtaChunkRequest 与 OtaChunkData(配对返回)​

每个命令参数按 Data Type (1 B) + Raw Data 编码。

OtaChunkRequest 帧(SERVER SEND)

字段SOFProfile IDSeqOPCD-LenHCSCmd IDOffset TypeOffsetLength TypeLength
长度1 B2 B1 B1 B2 B1 B2 B1 B4 B1 B1 B
值 (Hex)5500 00060900 099300 222300 00 00 002004

最后 2 字节 F0 83 为 Overall Checksum。

完整帧(Hex):55 00 00 06 09 00 09 93 00 22 23 00 00 00 00 20 04 F0 83

OtaChunkData 帧(CLIENT SEND,Response = N)

字段SOFProfile IDSeqOPCD-LenHCSCmd IDOffset TypeOffsetData TypeData (octstr)
长度1 B2 B1 B1 B2 B1 B2 B1 B4 B1 B6 B
值 (Hex)5500 00060900 0D8F00 232300 00 00 004104 DE AD BE EF

最后 2 字节 E0 47 为 Overall Checksum。

完整帧(Hex):55 00 00 06 09 00 0D 8F 00 23 23 00 00 00 00 41 04 DE AD BE EF E0 47

  • OtaChunkData 复用 OtaChunkRequest 的 Seq(本例均为 0x06)。
  • Server 收到 OtaChunkData 后不再返回 ACKNOWLEDGE。

NOTIFY 与 ACKNOWLEDGE​

属性定义​

Attribute ID名称Data TypeSideAccess说明
0x0003NetworkStatusenum8CN网络状态。

帧内容​

NOTIFY 帧(CLIENT SEND)

字段SOFProfile IDSeqOPCD-LenHCSAttr IDData TypeData
长度1 B2 B1 B1 B2 B1 B2 B1 B1 B
值 (Hex)5500 00050A00 049800 033001

最后 2 字节 E4 25 为 Overall Checksum。

完整帧(Hex):55 00 00 05 0A 00 04 98 00 03 30 01 E4 25

ACKNOWLEDGE 帧(SERVER SEND)

字段SOFProfile IDSeqOPCD-LenHCSStatus
长度1 B2 B1 B1 B2 B1 B1 B
值 (Hex)5500 00050600 019F00

最后 2 字节 40 BF 为 Overall Checksum。

完整帧(Hex):55 00 00 05 06 00 01 9F 00 40 BF