36 Zigbee Device Binding
36.1 Learning Objectives
By the end of this chapter, you will be able to:
- Configure Device Binding: Set up direct switch-to-light control without coordinator routing
- Differentiate Client/Server Clusters: Distinguish between input (server) and output (client) cluster roles in Zigbee endpoints
- Design ZCL Cluster Configurations: Architect comprehensive cluster layouts for smart devices with multiple capabilities
- Implement Energy Monitoring: Configure Electrical Measurement and Metering clusters for real-time and cumulative reporting
- Evaluate Zigbee 3.0 Compliance: Assess whether a device meets mandatory and optional certification requirements for smart plugs
What is device binding? Binding creates a direct link between two devices so they communicate without going through a central hub. When you press a switch, the command goes directly to the light - even if the coordinator is offline.
Client vs Server Clusters:
| Cluster Role | Description | Example Device |
|---|---|---|
| Server (Input) | Receives commands, has attributes | Light bulb |
| Client (Output) | Sends commands to servers | Wall switch |
Why binding matters:
- Lower latency: 25ms direct vs 100ms via hub
- Offline resilience: Works without coordinator
- Local automation: No cloud dependency
Prerequisites:
36.2 Prerequisites
Before diving into these examples, you should be familiar with:
- Zigbee Fundamentals and Architecture: Core Zigbee concepts including device roles and the protocol stack
- Zigbee Application Profiles: Understanding ZCL clusters and endpoint configurations
- Zigbee Network Scaling Examples: Group messaging and scene concepts
36.3 Worked Example: Configuring Zigbee Device Binding for Direct Switch-to-Light Control
Scenario: A smart home has a Zigbee wall switch that needs to control a ceiling light directly, without routing commands through the coordinator. This enables local control even if the hub is offline, and reduces latency from ~100ms (hub-routed) to ~25ms (direct mesh).
Given:
- Wall Switch: Address 0x0018, Endpoint 1, IEEE 0x00158D0001AB0001
- Ceiling Light: Address 0x0025, Endpoint 1, IEEE 0x00158D0001AB0002
- Coordinator: Address 0x0000
- Profile: Zigbee 3.0 Home Automation (0x0104)
- Control Clusters: On/Off (0x0006), Level Control (0x0008)
- Physical Distance: Switch and light are 4 meters apart (single hop)
36.3.1 Step 1: Verify Switch Endpoint Configuration
Simple Descriptor for Wall Switch (0x0018, Endpoint 1):
- Profile ID: 0x0104 (Zigbee HA)
- Device ID: 0x0103 (On/Off Light Switch)
- Device Version: 1
Input Clusters (Server - switch receives):
- Basic (0x0000): Device information
- Identify (0x0003): Blink LED on command
Output Clusters (Client - switch sends commands):
- On/Off (0x0006): Switch SENDS on/off/toggle commands
- Level Control (0x0008): Switch SENDS brightness commands
- Scenes (0x0005): Switch SENDS scene recall commands
Key point: On/Off cluster is OUTPUT (client) because
the switch ORIGINATES commands, not receives them.
36.3.2 Step 2: Verify Light Endpoint Configuration
Simple Descriptor for Ceiling Light (0x0025, Endpoint 1):
- Profile ID: 0x0104 (Zigbee HA)
- Device ID: 0x0101 (Dimmable Light)
- Device Version: 1
Input Clusters (Server - light receives):
- Basic (0x0000): Device information
- Identify (0x0003): Blink on command
- Groups (0x0004): Group membership management
- Scenes (0x0005): Scene storage and recall
- On/Off (0x0006): Light RECEIVES on/off/toggle commands
- Level Control (0x0008): Light RECEIVES brightness commands
Output Clusters (Client): None (light doesn't send commands)
Key point: On/Off cluster is INPUT (server) because
the light RECEIVES commands and acts on them.
36.3.3 Step 3: Create On/Off Cluster Binding on Switch
ZDO Bind Request (sent to Switch 0x0018):
- Source IEEE: 0x00158D0001AB0001 (Switch)
- Source Endpoint: 1
- Cluster ID: 0x0006 (On/Off)
- Destination Address Mode: 0x03 (IEEE 64-bit)
- Destination IEEE: 0x00158D0001AB0002 (Light)
- Destination Endpoint: 1
Switch Binding Table Entry Created:
+-------+----------+--------+---------+--------------------+--------+
| Index | Cluster | SrcEP | DstType | Destination | DstEP |
+-------+----------+--------+---------+--------------------+--------+
| 0 | 0x0006 | 1 | IEEE | 0x00158D0001AB0002 | 1 |
+-------+----------+--------+---------+--------------------+--------+
Binding response: ZDO_SUCCESS (0x00)
36.3.4 Step 4: Create Level Control Cluster Binding
ZDO Bind Request (sent to Switch 0x0018):
- Source IEEE: 0x00158D0001AB0001
- Source Endpoint: 1
- Cluster ID: 0x0008 (Level Control)
- Destination Address Mode: 0x03 (IEEE 64-bit)
- Destination IEEE: 0x00158D0001AB0002
- Destination Endpoint: 1
Updated Switch Binding Table:
+-------+----------+--------+---------+--------------------+--------+
| Index | Cluster | SrcEP | DstType | Destination | DstEP |
+-------+----------+--------+---------+--------------------+--------+
| 0 | 0x0006 | 1 | IEEE | 0x00158D0001AB0002 | 1 |
| 1 | 0x0008 | 1 | IEEE | 0x00158D0001AB0002 | 1 |
+-------+----------+--------+---------+--------------------+--------+
36.3.5 Step 5: Test Direct Control Path
Test 1: Button Press (Toggle)
T=0ms: User presses switch button
T=2ms: Switch MCU detects GPIO interrupt
T=5ms: Switch checks binding table for cluster 0x0006
T=6ms: Binding found -> resolve IEEE to network address
T=10ms: Address cache hit: 0x00158D0001AB0002 -> 0x0025
T=12ms: ZCL Toggle command (0x02) constructed:
- Frame Control: 0x01 (cluster-specific, to server)
- Sequence: 0x42
- Command: 0x02 (Toggle)
T=15ms: APS frame sent to 0x0025, Endpoint 1
T=20ms: Light receives frame via direct mesh link
T=22ms: Light executes toggle: OFF -> ON
T=25ms: Light sends Default Response (success)
T=28ms: Switch receives ACK
Total latency: 28ms (direct) vs ~100ms (hub-routed)
Device binding reduces control latency by eliminating coordinator relay overhead, critical for responsive lighting control.
\[\text{Latency}_{\text{direct}} = T_{\text{MAC}} + T_{\text{process}} \quad \text{vs} \quad \text{Latency}_{\text{hub}} = 2T_{\text{MAC}} + T_{\text{hub}} + T_{\text{process}}\]
Worked example: For the wall switch → ceiling light binding: - MAC transmission time: 10ms (single-hop direct link) - Processing time: 5ms (ZCL command execution) - Hub routing overhead: 50ms (coordinator queue + retransmit)
Direct binding: 10 + 5 = 15ms Hub-routed: 2(10) + 50 + 5 = 75ms
The 5x improvement (15ms vs 75ms) is why direct binding is essential for responsive lighting — the 100ms human perception threshold is comfortably met.
36.3.6 Step 6: Test Dimming Control
Test 2: Long Press (Dim Up)
T=0ms: User holds button for 500ms
T=500ms: Switch detects long press, initiates Move command
T=505ms: ZCL Move command constructed:
- Cluster: 0x0008 (Level Control)
- Command: 0x01 (Move)
- Move Mode: 0x00 (Up)
- Rate: 50 (units per second)
T=510ms: Frame sent to Light 0x0025
T=520ms: Light begins continuous dimming up
T=2500ms: User releases button
T=2505ms: Switch sends Stop command (0x03)
T=2515ms: Light stops at current level (e.g., 178 of 254)
Result: Smooth dimming from press-and-hold gesture
36.3.7 Step 7: Verify Offline Resilience
Test 3: Coordinator Offline
Scenario: Coordinator loses power
T=0ms: Coordinator 0x0000 goes offline
T=5s: Routers detect lost parent, re-route mesh
T=10s: Network stabilized without coordinator
T=15s: User presses switch
T=15.015s: Switch sends Toggle to Light
T=15.030s: Light responds, toggles state
LOCAL CONTROL WORKS WITHOUT COORDINATOR
Why? Binding uses IEEE address stored on switch.
Switch -> Light direct mesh path doesn't require coordinator.
Only new device joining, key distribution need coordinator.
36.3.8 Result
The wall switch now controls the ceiling light directly with 25-30ms latency, regardless of coordinator status. Both On/Off and Level Control clusters are bound, enabling toggle, on, off, and dimming commands.
| Control Action | ZCL Command | Cluster | Latency |
|---|---|---|---|
| Single Press | Toggle (0x02) | 0x0006 | ~25ms |
| Double Press | On (0x01) | 0x0006 | ~25ms |
| Triple Press | Off (0x00) | 0x0006 | ~25ms |
| Long Press | Move (0x01) | 0x0008 | ~25ms start |
| Release | Stop (0x03) | 0x0008 | ~25ms |
Zigbee binding creates a persistent association between a source endpoint’s output cluster and a destination endpoint’s input cluster. The binding is stored on the source device (switch), not the destination (light). This means:
- Bindings survive power cycles on both devices
- Multiple switches can bind to the same light (many-to-one)
- One switch can bind to multiple lights by adding more binding entries (one-to-many)
- Local mesh control works even when the coordinator is offline because the switch has the light’s IEEE address cached
For reliable binding, always use IEEE (64-bit) addresses rather than network (16-bit) addresses, as network addresses can change if a device rejoins the network.
36.4 Mid-Chapter Knowledge Check
Where is a Zigbee device binding entry physically stored?
- On the coordinator in its routing table
- On the destination device (e.g., the light) in its input cluster
- On the source device (e.g., the switch) in its binding table
- In the cloud gateway’s device registry
C) On the source device (e.g., the switch) in its binding table. The binding entry is stored on the device that originates commands (the client). This is why the switch can still reach the light even when the coordinator is offline – it has the destination IEEE address stored locally in its own non-volatile memory.
36.5 Worked Example: Designing Zigbee Cluster Configuration for Smart Outlet with Energy Monitoring
Scenario: You are developing a smart outlet product that must: (1) control on/off state remotely, (2) report real-time power consumption, (3) track cumulative energy usage, and (4) implement overload protection. The outlet must be Zigbee 3.0 certified for interoperability with major smart home hubs.
Given:
- Device: Single-outlet smart plug with internal current/voltage sensor
- Profile: Zigbee 3.0 Home Automation (0x0104)
- Network Role: Router (mains-powered, must route for mesh)
- Maximum Load: 15A @ 120V (1800W)
- Energy Sensor: ADE7953 IC (measures voltage, current, power, energy)
- Network Address: 0x003A (assigned by coordinator)
- IEEE Address: 0x00124B00ABCD1234
36.5.1 Step 1: Define Endpoint Structure
Endpoint 1: Smart Outlet Functions
- Profile ID: 0x0104 (Zigbee Home Automation)
- Device ID: 0x0051 (Smart Plug)
- Device Version: 1
Endpoint 242: Green Power Proxy (Required for Zigbee 3.0)
- Profile ID: 0xA1E0 (Green Power)
- Device ID: 0x0061 (GP Proxy Basic)
Why separate endpoints?
- Endpoint 1: Application-specific functionality
- Endpoint 242: Mandatory for Zigbee 3.0 certification
- Allows Green Power devices (battery-less) to interact
36.5.2 Step 2: Configure Server Clusters on Endpoint 1
Required Server Clusters (outlet provides these services):
Basic Cluster (0x0000):
- Attribute 0x0000: ZCLVersion = 0x03
- Attribute 0x0001: ApplicationVersion = 0x01
- Attribute 0x0003: HWVersion = 0x02
- Attribute 0x0004: ManufacturerName = "SmartPlug Inc"
- Attribute 0x0005: ModelIdentifier = "SP-1500-ZB"
- Attribute 0x0006: DateCode = "20251215"
- Attribute 0x0007: PowerSource = 0x01 (Mains, single phase)
Identify Cluster (0x0003):
- Attribute 0x0000: IdentifyTime = 0 (seconds remaining)
- Command 0x00: Identify (flash LED for IdentifyTime seconds)
- Command 0x01: IdentifyQuery
Groups Cluster (0x0004):
- Attribute 0x0000: NameSupport = 0x80 (names supported)
- Command 0x00: AddGroup
- Command 0x01: ViewGroup
- Command 0x02: GetGroupMembership
- Command 0x03: RemoveGroup
- Command 0x04: RemoveAllGroups
Scenes Cluster (0x0005):
- Attribute 0x0000: SceneCount = 0
- Attribute 0x0001: CurrentScene = 0x00
- Attribute 0x0002: CurrentGroup = 0x0000
- Attribute 0x0003: SceneValid = FALSE
- Attribute 0x0004: NameSupport = 0x80
- Command 0x00: AddScene
- Command 0x01: ViewScene
- Command 0x02: RemoveScene
- Command 0x05: RecallScene
- Command 0x06: GetSceneMembership
On/Off Cluster (0x0006):
- Attribute 0x0000: OnOff = 0x00 (Off initially)
- Attribute 0x4000: GlobalSceneControl = TRUE
- Attribute 0x4001: OnTime = 0
- Attribute 0x4002: OffWaitTime = 0
- Command 0x00: Off
- Command 0x01: On
- Command 0x02: Toggle
- Command 0x40: OffWithEffect
- Command 0x41: OnWithRecallGlobalScene
- Command 0x42: OnWithTimedOff
36.5.3 Step 3: Configure Energy Monitoring Clusters
Electrical Measurement Cluster (0x0B04) - Real-time readings:
Measurement Type Attributes:
- Attribute 0x0000: MeasurementType = 0x00000008 (AC Active Power)
AC (Single Phase) Measurement Attributes:
- Attribute 0x0505: RMSVoltage = 1200 (120.0V with divisor 10)
- Attribute 0x0506: RMSVoltageMin = 1000 (100.0V - brownout)
- Attribute 0x0507: RMSVoltageMax = 1300 (130.0V - overvoltage)
- Attribute 0x0508: RMSCurrent = 52 (0.52A with divisor 100)
- Attribute 0x0509: RMSCurrentMin = 0
- Attribute 0x050A: RMSCurrentMax = 1500 (15.0A max load)
- Attribute 0x050B: ActivePower = 62 (62W)
- Attribute 0x050D: ReactivePower = 8 (8VAR)
- Attribute 0x050E: ApparentPower = 63 (63VA)
- Attribute 0x050F: PowerFactor = 98 (0.98 PF)
Formatting Attributes:
- Attribute 0x0600: ACVoltageMultiplier = 1
- Attribute 0x0601: ACVoltageDivisor = 10
- Attribute 0x0602: ACCurrentMultiplier = 1
- Attribute 0x0603: ACCurrentDivisor = 100
- Attribute 0x0604: ACPowerMultiplier = 1
- Attribute 0x0605: ACPowerDivisor = 1
Metering Cluster (0x0702) - Cumulative energy:
Reading Information Attributes:
- Attribute 0x0000: CurrentSummationDelivered = 123456
(123.456 kWh with divisor 1000)
- Attribute 0x0200: Status = 0x00 (Normal operation)
- Attribute 0x0300: UnitOfMeasure = 0x00 (kWh)
- Attribute 0x0301: Multiplier = 1
- Attribute 0x0302: Divisor = 1000
- Attribute 0x0303: SummationFormatting = 0x2B
(3 digits after decimal, 5 digits before)
- Attribute 0x0306: MeteringDeviceType = 0x00 (Electric)
36.5.4 Step 4: Implement Overload Protection Cluster
Device Temperature Configuration Cluster (0x0002):
- Attribute 0x0000: CurrentTemperature = 35 (35C internal temp)
- Attribute 0x0001: MinTempExperienced = 20
- Attribute 0x0002: MaxTempExperienced = 45
- Attribute 0x0010: OverTempTotalDuration = 0
- Attribute 0x0011: DeviceTempAlarmMask = 0x02 (high temp alarm)
- Attribute 0x0012: LowTempThreshold = 0
- Attribute 0x0013: HighTempThreshold = 70 (shutdown at 70C)
Overload Protection Logic (firmware):
void monitor_safety() {
uint16_t current = read_rms_current(); // in 0.01A units
int16_t temp = read_internal_temp(); // in degrees C
// Over-current protection (15A limit)
if (current > 1500) {
set_outlet_state(OFF);
send_zcl_alarm(OVER_CURRENT_ALARM);
log_event("Overcurrent: %d.%02dA", current/100, current%100);
}
// Over-temperature protection (70C limit)
if (temp > 70) {
set_outlet_state(OFF);
send_zcl_alarm(OVER_TEMP_ALARM);
log_event("Overtemp: %dC", temp);
}
// Update ZCL attributes
update_attribute(0x0B04, 0x0508, current);
update_attribute(0x0002, 0x0000, temp);
}36.5.5 Step 5: Configure Attribute Reporting
Power Reporting Configuration:
Configure Reporting Command to Outlet:
- Cluster: 0x0B04 (Electrical Measurement)
- Attribute: 0x050B (ActivePower)
- Data Type: 0x29 (INT16S)
- Minimum Interval: 10 seconds
- Maximum Interval: 300 seconds
- Reportable Change: 5 (5W threshold)
Energy Reporting Configuration:
- Cluster: 0x0702 (Metering)
- Attribute: 0x0000 (CurrentSummationDelivered)
- Data Type: 0x25 (UINT48)
- Minimum Interval: 60 seconds
- Maximum Interval: 900 seconds (15 minutes)
- Reportable Change: 100 (0.1 kWh threshold)
Result: Hub receives power updates every 10-300 seconds
(or immediately if change > 5W), energy updates every
1-15 minutes (or immediately if change > 0.1 kWh).
36.5.6 Step 6: Test ZCL Command Sequence
Scenario: User turns on outlet via hub app
T=0ms: Hub sends ZCL On command to 0x003A/EP1
Frame: [01 42 01] (FrameCtrl, SeqNum, On)
T=15ms: Outlet receives, activates relay
T=20ms: Outlet sends Default Response (success)
T=25ms: Outlet updates OnOff attribute to 0x01
T=30ms: Outlet sends Report Attributes (if reporting configured)
- OnOff: 0x01
T=1000ms: Power stabilizes, ADE7953 samples
T=1010ms: Outlet reads: 120.2V, 0.52A, 62W
T=1020ms: Report Attributes sent:
- RMSVoltage: 1202
- RMSCurrent: 52
- ActivePower: 62
Hub displays: "Smart Outlet ON - 62W"
36.5.7 Step 7: Verify Zigbee 3.0 Certification Requirements
Mandatory Clusters for Smart Plug (0x0051):
[CHECK] Basic (0x0000) - Device identification
[CHECK] Identify (0x0003) - Physical identification
[CHECK] Groups (0x0004) - Group membership
[CHECK] Scenes (0x0005) - Scene participation
[CHECK] On/Off (0x0006) - Primary function
Optional but Recommended:
[CHECK] Electrical Measurement (0x0B04) - Real-time power
[CHECK] Metering (0x0702) - Energy accumulation
[CHECK] Device Temperature (0x0002) - Safety monitoring
Green Power Proxy (Endpoint 242):
[CHECK] GP Proxy Table - Store GP device info
[CHECK] GP Sink Table - Forward GP commands
Base Device Behavior (BDB):
[CHECK] Touchlink commissioning capable
[CHECK] Network steering (join existing network)
[CHECK] Finding & Binding support
All requirements met for Zigbee 3.0 Smart Plug certification.
36.5.8 Result
The smart outlet is configured with 8 server clusters providing comprehensive functionality: remote on/off control, real-time power monitoring, cumulative energy tracking, safety protection, scene/group support, and Zigbee 3.0 compliance.
| Cluster | ID | Function | Key Attributes |
|---|---|---|---|
| Basic | 0x0000 | Device info | ManufacturerName, ModelID |
| Identify | 0x0003 | Physical ID | IdentifyTime |
| Groups | 0x0004 | Group control | Group table (16 max) |
| Scenes | 0x0005 | Scene recall | SceneCount, CurrentScene |
| On/Off | 0x0006 | Power control | OnOff state |
| Elec Meas | 0x0B04 | Real-time power | Voltage, Current, Power |
| Metering | 0x0702 | Energy tracking | SummationDelivered (kWh) |
| Device Temp | 0x0002 | Safety | CurrentTemperature, alarms |
Zigbee 3.0 smart outlets require careful cluster configuration to achieve both certification compliance and practical functionality. Key distinctions:
Electrical Measurement (0x0B04) reports instantaneous values (voltage, current, power at this moment)
Metering (0x0702) accumulates consumption over time (total kWh since installation)
For certification: - Basic and Identify clusters are mandatory for all devices - Groups and Scenes enable integration with automation systems - Green Power Proxy endpoint allows the outlet to forward commands from battery-less switches
Always implement safety features (overcurrent, overtemperature) in firmware with hardware backup, as these cannot be reliably handled by ZCL alone.
The Mistake: A developer configures Zigbee device binding using 16-bit network addresses (e.g., 0x0018 for the switch, 0x0025 for the light) instead of 64-bit IEEE addresses.
Why this fails:
Initial Configuration (Works):
- Switch: Network Address 0x0018, IEEE 0x00158D0001AB0001
- Light: Network Address 0x0025, IEEE 0x00158D0001AB0002
- Binding: 0x0018 → 0x0025 (network addresses)
- Result: Switch controls light ✓
After light power cycle + network rejoin:
- Switch: Network Address 0x0018 (unchanged)
- Light: NEW Network Address 0x002C (reassigned by coordinator)
- Binding: 0x0018 → 0x0025 (stale address!)
- Result: Switch sends to 0x0025, light never receives ✗
The Problem: Network addresses (16-bit short addresses) are dynamically assigned and can change when: - Device loses power and rejoins network - Coordinator performs address conflict resolution - Network undergoes topology reorganization - Device moves to different parent router
The Solution: Always use IEEE addresses (64-bit MAC addresses) for binding:
Correct Configuration:
- Binding: IEEE 0x00158D0001AB0001 → IEEE 0x00158D0001AB0002
- Switch stores the light's IEEE address permanently
- When sending commands, switch looks up current network address via address resolution
- Even if light's network address changes to 0x002C, binding still works
How to Fix:
ZDO Bind Request (Correct):
- Source IEEE: 0x00158D0001AB0001 (Switch)
- Source Endpoint: 1
- Cluster ID: 0x0006 (On/Off)
- Destination Address Mode: 0x03 (IEEE 64-bit) ← CRITICAL
- Destination IEEE: 0x00158D0001AB0002 (Light)
- Destination Endpoint: 1
Real-World Impact:
- Network address binding fails after ~20-30% of power cycles (when coordinator reassigns addresses)
- IEEE address binding works 100% of the time (IEEE addresses are permanent, burned into hardware)
- Professional Zigbee products always use IEEE addresses for bindings
Key Takeaway: The Zigbee spec supports both address modes, but only IEEE addressing provides reliable persistent binding across network changes. Always use Destination Address Mode: 0x03 (IEEE 64-bit) in binding requests.
36.6 Visual Reference: Binding Architecture
Lila the LED is excited: “I just learned something amazing! My wall switch can talk to me directly without going through the Coordinator first!”
Max the Microcontroller explains: “That’s called device binding! Instead of Switch -> Coordinator -> Lila, the switch sends commands directly to Lila. It’s like passing a note directly to your friend instead of giving it to the teacher first.”
Sammy the Sensor asks: “But why is that better?”
Lila the LED responds: “Speed! Direct binding takes only 25 milliseconds – that’s 4 times faster than going through the Coordinator. And if the Coordinator is offline, I still work! The switch and I are best friends who can always communicate.”
Bella the Battery adds: “And with ZCL clusters, devices know exactly how to talk to each other. My smart outlet has 8 different conversation topics: on/off control, brightness, energy monitoring, temperature safety, and more!”
Key ideas for kids:
- Device binding = Two devices becoming direct friends who talk without a middleman
- ZCL clusters = Conversation topics that devices understand (like “turn on” or “how much power?”)
- Client/Server = The switch asks questions (client), the light answers them (server)
- Offline resilience = Bound devices work even when the network captain is away
36.7 Knowledge Check
Q1: What is the primary advantage of Zigbee device binding over coordinator-routed communication?
- Higher encryption strength
- Lower latency (25ms vs. 100ms+) and continued operation when the coordinator is offline
- Support for more devices on the network
- Better range between devices
B) Lower latency (25ms vs. 100ms+) and continued operation when the coordinator is offline – Device binding creates a direct communication path between two devices, bypassing the coordinator. This reduces latency to approximately 25ms and ensures the bound devices continue functioning even during coordinator downtime.
36.8 Knowledge Check
Q2: In Zigbee’s client/server cluster model, which device has the OUTPUT (client) cluster?
- The light bulb that receives on/off commands
- The wall switch that sends on/off commands
- The coordinator that manages the network
- The router that forwards messages
B) The wall switch that sends on/off commands – In Zigbee’s cluster model, the device that initiates commands has the OUTPUT (client) cluster, while the device that receives and acts on commands has the INPUT (server) cluster. A switch sends “turn on” commands (client), while a light receives and executes them (server).
36.9 Concept Relationships
| Concept | Relationship to Device Binding | Practical Impact |
|---|---|---|
| IEEE Address vs Network Address | Binding uses IEEE (64-bit) for persistence | Network addresses change; IEEE stays permanent |
| Client/Server Clusters | Switch=client (sends), Light=server (receives) | Determines cluster direction in endpoint config |
| ZCL Clusters | Define device capabilities | Smart outlet needs 8 clusters for full functionality |
| Electrical Measurement vs Metering | Real-time power vs cumulative energy | Two separate clusters for different purposes |
| Zigbee 3.0 Certification | Mandatory cluster requirements | Basic + Identify required for all devices |
36.10 See Also
- Zigbee Application Profiles - ZCL cluster definitions
- Zigbee Network Formation - How binding fits into commissioning
- Zigbee Network Scaling - Group messaging for bulk control
- Zigbee Practical Exercises - Hands-on binding practice
Challenge: Configure a 4-button wall switch to control 4 different lights in a room using direct binding.
Specifications:
- Switch: 4 endpoints (one per button)
- Lights: 4 separate dimmable bulbs
- Button 1 → Overhead light (full brightness toggle)
- Button 2 → Reading lamp (dim to 30%)
- Button 3 → Ambient light (color control)
- Button 4 → All Off scene
Tasks:
- Design endpoint configuration for the switch (4 output endpoints)
- Configure bindings for each button-to-light pair
- Implement “All Off” as a group multicast
- Calculate total binding table entries needed
Hint: Each binding requires one table entry. Button 4 can use group addressing to avoid 4 separate unicast bindings.
Common Pitfalls
A binding between an On/Off switch (cluster 0x0006 client) and a dimmer light requires the target to implement the Level Control cluster — not just On/Off. Verify both source and target cluster requirements before creating bindings.
When a bound device is replaced, the old binding entry persists and generates error responses to the controlling device. Remove stale bindings using the coordinator or management tool when devices are replaced.
Zigbee devices have a fixed binding table size (typically 8–32 entries). Creating bindings beyond this limit silently overwrites older entries. Check device binding table capacity before designing binding-heavy control schemes.
36.11 Summary
This chapter covered two essential Zigbee implementation patterns:
- Device Binding: Demonstrated how to configure direct switch-to-light control with 25ms latency, working even when the coordinator is offline
- Client/Server Cluster Roles: Explained that switches have OUTPUT (client) clusters for commands they send, while lights have INPUT (server) clusters for commands they receive
- ZCL Cluster Configuration: Designed a complete smart outlet with 8 clusters covering control, energy monitoring, safety, and certification requirements
- Energy Monitoring: Showed the difference between Electrical Measurement (real-time) and Metering (cumulative) clusters
- Zigbee 3.0 Compliance: Listed mandatory and optional clusters needed for certification
36.12 Knowledge Check
::
::
36.13 What’s Next
| Topic | Chapter | Key Concepts |
|---|---|---|
| Hands-On Practice | Zigbee Practical Exercises | XBee setup, Zigbee2MQTT integration, OTA firmware updates |
| Group Messaging | Zigbee Network Scaling Examples | Group addressing, scene management, multicast for bulk control |
| Network Security | Zigbee Security | Network key distribution, Trust Center, encryption mechanisms |
| ZCL Cluster Profiles | Zigbee Application Profiles | ZCL cluster definitions, device types, profile interoperability |
| Network Formation | Zigbee Network Formation | Coordinator startup, device joining, address assignment |