Complex Trait Details

SupportedEndpointDynamic and EndpointArrayDynamic

Meaning of Traits

  • SupportedEndpointDynamic: (For non-Matter devices) Used to determine whether the device supports "dynamic endpoints".
  • EndpointArrayDynamic: (For all devices) Displays the current dynamic list of available (activated, working, etc.) endpoints of the device.

When querying device capabilities, if the above fields appear in the response, please determine whether to obtain the dynamic endpoint list based on the device type.

Matter devices (model prefix aqara.matter) and non-Matter devices have different handling for these two traits. Please refer to the How to Determine below for specific methods.

How to Determine

Based on the device type, the specific process for determining whether a device supports dynamic endpoints is as follows:

Matter Devices

For all Matter devices, please make the following checks:

  1. Use the spec.query.specdevice.config API to query device traits.
  2. Look for the EndpointArrayDynamic field in the API response:
    • If it exists and has a value: The value is the list of available endpoints.
    • If it does not exist or has no value: All endpoints are available by default; no extra handling is required.

Non-Matter Devices

Only the non-Matter devices listed in the table below support the SupportedEndpointDynamic and EndpointArrayDynamic traits. Only when querying the traits of these devices do you need to follow the determination process below. Other non-Matter devices can ignore these two traits.

Note

The following list contains devices supporting dynamic endpoints as of November 26, 2025. As products are continually updated, this list will also change. Do not hardcode this table content into your program. We recommend always referring to the latest device list on this page during development to ensure compatibility and stability.

Model Device Name
aqara.airrtc.ecn001 VRF Controller T1
lumi.motion.agl001 Presence Sensor FP2
lumi.gateway.agl004 Hub M3
lumi.gateway.acn012 Hub M3
aqara.airrtc.acn02 Temperature control mate T1 (indoor unit)
lumi.curtain.acn010 Organ smart Curtain Controller C4
lumi.airrtc.aus002 Thermostat Hub W200
lumi.airrtc.aus001 Aqara Wall Thermostat S1 Pro
lumi.fitting.agl001 Current Sensor R100
lumi.airrtc.aeu001 Floor Heating Thermostat W500
lumi.airrtc.acn002 Thermostat W400 (VRF)
lumi.airrtc.acn003 Thermostat W400 (FCU)
lumi.gateway.agl011 Hub M200
  1. Call the spec.query.qlinkmodel.config API to query device traits.
  2. Check whether SupportedEndpointDynamic.attribute.defaultValue in the response is 1:
    • Yes: The device supports dynamic endpoints.
      1. Call spec.query.trait API (traitCode set as EndpointArrayDynamic) to get the device's current dynamic endpoint list.
      2. Check whether value in the response has a value:
        • Yes: This value is the list of available endpoints.
        • No or this trait does not exist: All endpoints returned by the trait query API are available.
    • No: The device does not support dynamic endpoints; all endpoints returned by the trait query API are available.

Example

Below is an example using the VRF Controller T1 (model aqara.airrtc.ecn001).

Query Device Traits

This device's model does not start with aqara.matter, so it's a non-Matter device.

Therefore, you should call spec.query.qlinkmodel.config to query this device's traits.

Tips

For VRF Controllers (such as aqara.airrtc.ecn001 and lumi.airrtc.vrfegl01), it's recommended to only pass in a single model per API call. This helps avoid excessive response data size, improves query efficiency.

Request Example
{
    "intent" : "spec.query.qlinkmodel.config",
    "data":{
        "models": ["aqara.airrtc.ecn001"]
    }  
}
Response Example

The following response contains both SupportedEndpointDynamic and EndpointArrayDynamic, and SupportedEndpointDynamic.defaultValue is 1, which means the endpoints for VRF Controller T1 are dynamically variable.

{
    "code": 0,
    "message": "Success",
    "msgDetails": null,
    "requestId": "xxxxxxx.xxxxxxxxx.xxxxxxx",
    "result": {
        "data": {
            "aqara.airrtc.ecn001": {
                "types": [
                    "AirConditioner",
                    "Ventilation",
                    "FloorHeating"
                ],
                "endpoints": [
                    {
                        "functions": [
                            {
                                "functionId": 128,
                                "traits": [
                                    {
                                        "traitId": 32901,
                                        "attribute": {
                                            "readable": true,
                                            "enums": [
                                                {
                                                    "value": "0",
                                                    "key": "Offline"
                                                },
                                                {
                                                    "value": "1",
                                                    "key": "Online"
                                                }
                                            ],
                                            "format": "Bool",
                                            "type": "BOOLEAN",
                                            "subscribable": true,
                                            "writable": false
                                        },
                                        "traitCode": "Reachable"
                                    }
                                ],
                                "functionCode": "BasicInformation",
                                "commands": []
                            },
                            {
                                "functionId": 129,
                                "traits": [
                                    {
                                        "traitId": 33013,
                                        "attribute": {
                                            "readable": true,
                                            "defaultValue": "[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97]",
                                            "format": "Array",
                                            "type": "OTHER",
                                            "subscribable": true,
                                            "writable": false
                                        },
                                        "traitCode": "EndpointArrayDynamic"
                                    },
                                    {
                                        "traitId": 32906,
                                        "attribute": {
                                            "readable": true,
                                            "enums": [
                                                {
                                                    "value": "0",
                                                    "key": "False"
                                                },
                                                {
                                                    "value": "1",
                                                    "key": "True"
                                                }
                                            ],
                                            "defaultValue": "1",
                                            "format": "Bool",
                                            "type": "BOOLEAN",
                                            "subscribable": true,
                                            "writable": false
                                        },
                                        "traitCode": "SupportedEndpointDynamic"
                                    }
                                ],
                                "functionCode": "Descriptor",
                                "commands": []
                            },
                            // ...other traits
                        ],
                        "endpointId": 0,
                        "endpointTypes": [
                            "Root"
                        ]
                    },
                    // ... other endpoints
                ],
                "model": "aqara.airrtc.ecn001"
            }
        }
    }
}

Query Latest Value of EndpointArrayDynamic

Call the spec.query.trait API to query the device's current available endpoint list.

Request Example
{
    "intent": "spec.query.trait",
    "data": {
        "traits": [
            {
                "deviceId": "aqara.airrtc.ecn001",
                "endpointId": 0,
                "functionCode": "Descriptor",
                "traitCode": "EndpointArrayDynamic"
            }
        ]
    }
}
Response Example

From the value field in the response below, you can see that the currently available endpoints for this device are endpointId 0 through 10.

{
    "code": 0,
    "message": "Success",
    "msgDetails": null,
    "requestId": "",
    "result": {
        "data": [
            {
                "functionCode": "Descriptor",
                "endpointId": 0,
                "time": 1762417659743,
                "deviceId": "aqara.airrtc.ecn001",
                "value": "[0,1,2,3,4,5,6,7,8,9,10]",
                "traitCode": "EndpointArrayDynamic"
            }
        ]
    }
}
lumi LogoCopyright © 2023 Lumi United Technology Co., Ltd. all right reserved,powered by GitbookFile Modify: 2025-11-27 12:05:49

results matching ""

    No results matching ""