设备功能接口(trait)

对于 Aqara 设备,endpoint(端点)、function(功能) 和 trait(功能点)是描述和操作智能设备功能的三个核心层级。

  • 端点:代表设备的物理或逻辑端口,每个端点标识设备的一个子单元(如插座的某一个孔),用 endpointId 唯一标识。
  • 功能:每个端点可包含一个或多个功能,例如“开关控制”、“状态信息”等。功能以 functionCode 区分。
  • 功能点:每个功能进一步由多个功能点组成。功能点是可读、可写、可订阅的最小操作单元,对应具体的某个属性和操作,如“开关状态”、“当前功率值”等。功能点以 traitCode 区分。

以双键开关 A 为例,示意上述关系:

双键开关 A
  ├─ Root (endpointId: 0)
  │    └─ 基本信息 (functionCode: BasicInformation)
  │    │      └─ 固件版本(traitCode:FirmwareRevision)
  │    │      └─ ...
  │    └─ ...
  ├─ Public (endpointId: 1)
  │    └─ 电量控制 (functionCode: EnergyManagement)
  │    │      └─ 电压值(traitCode:CurrentVoltage)
  │    │      └─ ...
  │    └─ ...
  ├─ Switch (endpointId: 2)
  │    └─ 开关功能 (functionCode: Output)
  │    │      └─ 开关状态(traitCode:OnOff)
  └─ Switch (endpointId: 3)
       └─ 开关功能 (functionCode: Output)
       │      └─ 开关状态(traitCode:OnOff)

在实际业务开发时,您会经常在接口参数和返回中遇到 deviceType、trait 等字段。关于这些字段涉及的设备类型和功能点编码,可参考以下文档:

根据 ID 查询 Matter 设备的功能

  • 接口intent:spec.query.specdevice.config
  • 接口描述:该接口通过 Matter 设备的 ID 查询其功能。Matter 设备,是指 model 前缀为 aqara.matter. 的设备。

请求参数说明

名称 类型 是否必须 描述
dids Array<String> 待查询的 matter 设备 ID 列表,数组长度上限为 10。

请求参数示例

{ 
    "intent" : "spec.query.specdevice.config", 
    "data":{ 
        "dids": ["matt.2990fb3413ed87c9b7370000"] 
    }
}

响应参数说明

result.data 是一个 Object 数组。下表为 result.data 的数据结构详情,表中的各字段均为 result.data 的子结构:

字段 类型 说明
deviceId String 设备 ID。
deviceTypesList Array<String> 设备支持的类型列表,字符串含义请参考 设备类型说明
endpoints Array<Object> 端点列表。
endpoints[].endpointId Number 端点 ID。
endpoints[].deviceType String 端点类型列表。
endpoints[].functions Array<Object> 功能列表。
endpoints[].functions[].functionId Number 功能 ID。
endpoints[].functions[].functionCode String 功能代码。
endpoints[].functions[].traits Array<Object> 功能点列表。
endpoints[].functions[].traits[].traitId Number 功能点 ID。
endpoints[].functions[].traits[].traitCode String 功能点代码,对应设备支持的具体功能。请参阅 功能点代码,了解该功能点详情包括含义、类型(如数值、布尔、枚举等)、是否可读/可写/可上报等。
endpoints[].functions[].traits[].parameter Object 功能点属性。
endpoints[].functions[].traits[].parameter.readable Boolean 是否可读。
endpoints[].functions[].traits[].parameter.writable Boolean 是否可写。
endpoints[].functions[].traits[].parameter.subscribable Boolean 是否可订阅。
endpoints[].functions[].traits[].parameter.type String 功能点属性的类型,详情请参考 功能点属性类型
endpoints[].functions[].traits[].parameter.unit String 单位。仅当 parameter.typeIntegerFloat 时,此字段有意义。
endpoints[].functions[].traits[].parameter.defaultValue String 默认值。
endpoints[].functions[].traits[].parameter.min/max/step 数值 数值型的最小/最大/步进值。
endpoints[].functions[].traits[].parameter.supportedValues Array<Object> 枚举值列表。仅当 parameter.typeEum 时,此字段有意义。
endpoints[].functions[].traits[].parameter.supportedValues.key string 枚举键。
endpoints[].functions[].traits[].parameter.supportedValues.value string 枚举值。
endpoints[].functions[].traits[].value Any 功能点当前值。
endpoints[].functions[].traits[].time Number 功能点值更新的 UTC 时间戳(毫秒级),可能无此字段。
model String 设备的 model 名称。

功能点属性类型

名称 类型 说明
Bool 布尔型 真或假(true/false)。
Integer 整型 整数类型。
Float 浮点型 带小数的数字。
String 字符型 字符串。
Struct 结构体 Aqara 自定义的结构数据,形式为 JSON 字符串,可以包含多种类型字段。
Enum 枚举 枚举类型,定义有限个取值。
List[X] 列表 元素类型为 X 的列表,形式为 JSON 字符串,X 可为 Integer、Float、String、Struct、Enum。
Data 数据块 16 进制字符串(Hex String),如 "0x01AB3F"。

响应数据示例

{
    "code": 0,
    "message": "Success",
    "msgDetails": null,
    "requestId": "",
    "result": {
        "data": [
            {
                "deviceTypesList": [
                    "ContactSensor"
                ],
                "endpoints": [
                    {
                        "functions": [
                            {
                                "functionId": 128,
                                "traits": [
                                    {
                                        "traitId": 32901,
                                        "parameter": {
                                            "readable": true,
                                            "type": "Bool",
                                            "subscribable": true,
                                            "writable": false
                                        },
                                        "time": 1762399511357,
                                        "value": true,
                                        "traitCode": "Reachable"
                                    }
                                ],
                                "functionCode": "BasicInformation"
                            },
                            {
                                ...
                            }
                        ],
                        "endpointId": 0,
                        "deviceType": "Root"
                    },
                    {
                        ...
                    },
                ],
                "model": "aqara.matter.4447_8194",
                "deviceId": "matt.2990fb3413ed87c9b7370000"
            }
        ]
    }
}

根据 model 查询非 Matter 设备的功能

  • 接口intent:spec.query.qlinkmodel.config
  • 接口描述:该接口通过非 Matter 设备的 model 查询其所有功能。

请求参数说明

名称 类型 是否必须 描述
models Array of String 待查询的 model 列表,数组长度上限为 5。

请求参数示例

{
    "intent" : "spec.query.qlinkmodel.config",
    "data":{
        "models": ["lumi.switch.aus002"]
    }  
}

响应数据说明

result.data 是一个 Map<String, Object>,以设备的 model 作为 key,其 value 为该设备的配置对象。下表为 result.data 的数据结构详情,表中的各字段均为 result.data 的子结构:

字段 类型 说明
{model} Object {model} 表示动态字段名,即以具体的设备 model 名称为 key,不同 model 对应不同的配置对象。
{model}.model String 设备 model 名称。
{model}.deviceTypesList Array<String> 设备支持的类型列表,字符串含义请参考 设备类型说明
{model}.endpoints Array<Object> 端点列表。
{model}.endpoints[].endpointId Number 端点 ID。
{model}.endpoints[].deviceType String 端点类型列表。
{model}.endpoints[].functions Array<Object> 功能列表。
{model}.endpoints[].functions[].functionId Number 功能 ID。
{model}.endpoints[].functions[].functionCode String 功能代码。
{model}.endpoints[].functions[].traits Array<Object> 功能点列表。
{model}.endpoints[].functions[].traits[].traitId Number 功能点 ID。
{model}.endpoints[].functions[].traits[].traitCode String 功能点代码,对应设备支持的具体功能。请参阅 功能点代码,了解该功能点详情包括含义、类型(如数值、布尔、枚举等)、是否可读/可写/可上报等。
{model}.endpoints[].functions[].traits[].parameter Object 功能点属性。
{model}.endpoints[].functions[].traits[].parameter.readable Boolean 是否可读。
{model}.endpoints[].functions[].traits[].parameter.writable Boolean 是否可写。
{model}.endpoints[].functions[].traits[].parameter.subscribable Boolean 是否可订阅。
{model}.endpoints[].functions[].traits[].parameter.type String 功能点属性的类型,详情请参考 功能点属性类型
{model}.endpoints[].functions[].traits[].parameter.unit String 单位。仅当 parameter.typeIntegerFloat 时,此字段有意义。
{model}.endpoints[].functions[].traits[].parameter.defaultValue String 默认值。
{model}.endpoints[].functions[].traits[].parameter.min/max/step 数值 数值型的最小/最大/步进值。
{model}.endpoints[].functions[].traits[].parameter.supportedValues Array<Object> 枚举值列表。仅当 parameter.typeEnum 时,此字段有意义。
{model}.endpoints[].functions[].traits[].parameter.supportedValues.key string 枚举键。
{model}.endpoints[].functions[].traits[].parameter.supportedValues.value string 枚举值。

响应数据示例

{
    "code": 0,
    "message": "Success",
    "msgDetails": null,
    "requestId": "",
    "result": {
        "data": {
            "lumi.switch.aus002": {
                "deviceTypesList": [
                    "Switch",
                    "Button",
                    "OccupancySensor"
                ],
                "endpoints": [
                    {
                        "functions": [
                            {
                                "functionId": 128,
                                "traits": [
                                    {
                                        "traitId": 32901,
                                        "parameter": {
                                            "readable": true,
                                            "type": "Bool",
                                            "subscribable": true,
                                            "writable": false
                                        },
                                        "traitCode": "Reachable"
                                    }
                                ],
                                "functionCode": "BasicInformation" 
                            },
                            {
                                ...
                            }
                        ],
                        "endpointId": 0,
                        "deviceType": "Root"
                    },
                    {
                        ...
                    }
                ],
                "model": "lumi.switch.aus002"
            }
        }
    }        
}

获取最新功能点值

  • 接口intent:spec.query.trait
  • 接口描述:本接口支持批量查询 trait 的当前值,单次最多支持 50 个 trait。如果传入的 trait 数量超过 50,仅返回前 50 个 trait 的最新值。

请求参数说明

参数 类型 是否必须 描述
traits Array<Object> 待查询功能点的数组,最多支持 50 个。
traits.deviceId String 设备唯一标识。
traits.endpointId Number 端点 ID。
traits.functionCode String 功能代码。
traits.traitCode String 功能点代码,对应设备支持的具体功能。请参阅 功能点代码说明,了解该功能点详情包括含义、类型(如数值、布尔、枚举等)、是否可读/可写/可上报等。

请求参数示例

{
    "intent": "spec.query.trait",
    "data": {
        "traits": [
            {
                "deviceId": "lumi1.54ef448a0b73",
                "endpointId": 0,
                "functionCode": "BasicInformation",
                "traitCode": "Reachable"
            },
            {
                "deviceId": "lumi1.54ef448a0b73",
                "endpointId": 0,
                "functionCode": "Descriptor",
                "traitCode": "EndpointArrayDynamic"
            },
            {
                ...
            }
        ]
    }
}

响应参数说明

result.data 是一个 Object 数组,下表为 result.data 的数据结构详情,表中的各字段均为 result.data 的子结构:

字段名 类型 说明
functionCode String 功能代码,标识功能点所属的功能类型,如 BasicInformation 等
endpointId Number 端点 ID。
time Number/Null 功能点值更新的 UTC 时间戳(毫秒)。当值为 null时,表示您不需要关注此功能点的更新时间。
deviceId String 设备 ID。
value String 功能点当前值,类型视 traitCode 所表示功能点而定 。
traitCode String 功能点代码,对应设备支持的具体功能。请参阅 功能点代码说明,了解该功能点详情包括含义、类型(如数值、布尔、枚举等)、是否可读/可写/可上报等。

响应数据示例

{
    "code": 0,
    "message": "Success",
    "msgDetails": null,
    "requestId": "",
    "result": {
        "data": [
            {
                "functionCode": "BasicInformation",
                "endpointId": 0,
                "time": null,
                "deviceId": "lumi1.54ef448a0b73",
                "value": true,
                "traitCode": "Reachable"
            },
            {
                "functionCode": "Descriptor",
                "endpointId": 0,
                "time": 1762417659743,
                "deviceId": "lumi1.54ef448a0b73",
                "value": "[0,1,2,3]",
                "traitCode": "EndpointArrayDynamic"
            },
            {
                ...
            }
        ]
    }
}

控制设备

  • 接口intent:spec.write.trait
  • 接口描述:本接口用于通过指定功能点列表批量控制设备。单次最多可控制 10 台设备,对每台设备可同时下发任意数量的功能点。当设备数量超过 10 台时,仅处理前 50 个功能点的控制请求,超出部分将被忽略。

请求参数说明

字段 类型 是否必填 说明
traits Array<Object> 待写入的功能点的数组。
数组长度说明:
  • 若设备数量不超过 10 台,则可包含任意数量的功能点;
  • 若设备数量超过 10 台,仅处理前 50 个功能点,超出部分将被忽略。
traits.deviceId String 设备唯一ID。
traits.endpointId Number 端点ID。
traits.functionCode String 功能代码。
traits.traitCode String 功能点代码。
traits.value Any 功能点目标值。

请求参数示例

{
    "intent": "spec.write.trait",
    "data": {
        "traits": [
            {
                "deviceId": "lumi1.54ef448a0b73",
                "endpointId": 3,
                "functionCode": "Output",
                "traitCode": "OnOff",
                "value": false
            }
        ]
    }
}

响应参数说明

字段 类型 说明
functionCode String 功能代码,对应被控制的功能,如 "Output"。
endpointId Number 端点 ID,标识具体功能所在的端点。
deviceId String 设备 ID,被控制的设备唯一标识。
value Any 设置后的功能点值,类型与实际 trait 属性相关。
traitCode String 功能点代码,对应设备支持的具体功能。请参阅 功能点代码说明,了解该功能点详情包括含义、类型(如数值、布尔、枚举等)、是否可读/可写/可上报等。
code Number 设备调用返回码,0 表示调用成功,非 0 表示调用失败(仅代表接口请求本身,不代表设备实际控制成功与否)。

响应数据示例

result.data 是一个 Object 数组,下表为 result.data 的数据结构详情,表中的各字段均为 result.data 的子结构:

{
    "code": 0,
    "message": "Success",
    "msgDetails": null,
    "requestId": "",
    "result": {
        "data": [
            {
                "functionCode": "Output",
                "endpointId": 3,
                "deviceId": "lumi1.54ef448a0b73",
                "value": false,
                "traitCode": "OnOff",
                //设备调用是否成功,0:成功,非0:不成功,这只代表接口调用成功,不代表设备控制成功
                "code": 0
            }
        ]
    }
}

订阅和取订设备功能值

如需订阅或取消订阅设备功能点值的推送,请参考消息推送接口(trait)文档中的相关说明:

lumi LogoCopyright © 2023 深圳绿米联创科技有限公司 all right reserved,powered by Gitbook文档修改时间: 2026-01-04 10:24:49

results matching ""

    No results matching ""