Matter Lighting App Multi-Endpoint Configuration Guide#
1. Two-Endpoint Demo Guide#
1.1 Endpoint Definition#
Endpoint ID |
Device Type |
Supported Clusters |
|---|---|---|
Endpoint 1 |
Dimmable Light (Main Light) |
Identify / On/Off / Level Control |
Endpoint 2 |
Color Temperature Light (CCT Light) |
Identify / On/Off / Level Control / Color Control |
1.2 ZAP Configuration#
Edit examples/lighting-app/lighting-common/lighting-app.zap and add
Endpoint 2.
Use a separate endpoint type for Endpoint 2:
Endpoint 1 -> endpointTypeIndex 1
Endpoint 2 -> endpointTypeIndex 2
Enable the Identify server cluster on Endpoint 2 and regenerate the Matter data model:
./scripts/tools/zap/generate.py examples/lighting-app/lighting-common/lighting-app.zap
For two Identify server endpoints, the generated configuration should contain:
#define MATTER_DM_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (2)
1.3 chip-tool Validation#
# Read IdentifyTime on endpoint 1
./chip-tool identify read identify-time 1 1
# Read IdentifyTime on endpoint 2
./chip-tool identify read identify-time 1 2
# Start Identify on endpoint 1
./chip-tool identify identify 5 1 1
# Start Identify on endpoint 2
./chip-tool identify identify 5 1 2
2. Extending to 6 Endpoints (6 Lights)#
2.1 Step 1: Add Endpoints in ZAP Configuration#
Edit examples/lighting-app/lighting-common/lighting-app.zap:
Add Endpoint 3 through Endpoint 6.
Create a separate endpoint type for each endpoint.
Add the required clusters:
Identify
On/Off
Level Control
Color Control (if required)
Regenerate the Matter data model.
For six Identify server endpoints, the generated configuration should contain:
#define MATTER_DM_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT (6)
2.2 Step 2: Configure Identify Endpoints#
File to modify: examples/lighting-app/telink/include/AppTask.h
For the two-endpoint configuration:
#include <zap-generated/gen_config.h>
#if MATTER_DM_IDENTIFY_CLUSTER_SERVER_ENDPOINT_COUNT > 1
inline constexpr chip::EndpointId kExampleSecondaryEndpointId = 2;
#define TELINK_APP_IDENTIFY_ENDPOINTS(X) \
X(kExampleEndpointId) \
X(kExampleSecondaryEndpointId)
#endif
For additional endpoints, define their IDs and extend
TELINK_APP_IDENTIFY_ENDPOINTS:
inline constexpr chip::EndpointId kExampleSecondaryEndpointId = 2;
inline constexpr chip::EndpointId kExampleEndpoint3Id = 3;
inline constexpr chip::EndpointId kExampleEndpoint4Id = 4;
inline constexpr chip::EndpointId kExampleEndpoint5Id = 5;
inline constexpr chip::EndpointId kExampleEndpoint6Id = 6;
#define TELINK_APP_IDENTIFY_ENDPOINTS(X) \
X(kExampleEndpointId) \
X(kExampleSecondaryEndpointId) \
X(kExampleEndpoint3Id) \
X(kExampleEndpoint4Id) \
X(kExampleEndpoint5Id) \
X(kExampleEndpoint6Id)
The common Telink code creates one Identify instance for every endpoint in
this list.
2.3 Step 3: Identify Callbacks#
IdentifyStartHandler and IdentifyStopHandler use the endpoint ID from the
Identify instance and keep the existing indication PWM behavior.
No additional changes are required for the two-endpoint demo.
2.4 Step 4: On/Off/Level/Color Control#
No additional instances are required for On/Off, Level Control, or Color Control clusters.
These clusters work on all endpoints configured in ZAP.
3. Summary#
To add more lighting endpoints:
Add the endpoints and endpoint types in ZAP.
Enable the required clusters.
Regenerate the Matter data model.
Add the endpoint IDs to
TELINK_APP_IDENTIFY_ENDPOINTS.