IcdManagement Cluster

Cluster ID: 0x0046  |  Endpoint: Fixed on Endpoint 0 (Root Endpoint)

ICD Management manages Intermittently Connected Devices (ICD), commonly known as "sleepy devices" — door/window sensors, temperature/humidity sensors, battery-powered buttons, etc. These devices spend most of their time in sleep mode to conserve power, only briefly waking for communication at fixed intervals or specific events. ICD Management defines the device's sleep/wake cycles, manages subscriber registrations, and maintains connectivity through the Check-In protocol.

SIT and LIT — Two Operating Modes

ICD devices have two operating modes: SIT (Short Idle Time) mode and LIT (Long Idle Time) mode. SIT devices have short idle intervals (typically no more than 15 seconds), so the Controller can wait for the device to wake within the normal MRP retry window; LIT devices have longer idle intervals (up to several hours), requiring the Controller to rely on the Check-In protocol to establish communication. LIT mode significantly extends battery life, but interaction response is slower.

Commands

ICD Management has 4 commands. RegisterClient and UnregisterClient manage the Check-In message subscriber list; StayActiveRequest keeps the device temporarily awake. Click a command ID in the table below to jump to its detailed description.

ID Name Direction Description Required Feature
0x00 RegisterClient Client → Server Register a Check-In client CIP
0x01 RegisterClientResponse Server → Client Registration result, returns ICDCounter CIP
0x02 UnregisterClient Client → Server Unregister a Check-In client CIP
0x03 StayActiveRequest Client → Server Request the device to stay active for a period LITS
0x04 StayActiveResponse Server → Client Returns the actual active duration promised by the device LITS

RegisterClient — Register Client (0x00)

Registers a Check-In client with the ICD device. After successful registration, the device sends a Check-In message to the client each time it wakes from sleep, saying "I'm awake, send any pending requests now." This is the core mechanism for LIT devices to maintain connectivity with Controllers.

ParameterTypeDescription
CheckInNodeID uint64 Target node ID for receiving Check-In messages — typically the Controller or Hub's NodeID
MonitoredSubject uint64 Monitored Subject (Case-AuthTag or NodeID) — identifies which user/entity is watching this device
Key octstr (16 bytes) HMAC verification key — used to verify Check-In message authenticity and prevent forgery
VerificationKey octstr (16 bytes) Optional. Verification key — used to verify the initiator's identity during registration. Required if the device demands verification
Usage Scenarios

After commissioning, Hub/Controller registers itself as a Check-In client with the battery sensor. Subsequently, the sensor sends a Check-In message each time it wakes; the Hub then sends subscription requests or reads data during the device's brief active window.

RegisterClientResponse — Registration Response (0x01)

Device response to RegisterClient. Returns the current ICDCounter value, which the client uses to verify the freshness of subsequent Check-In messages (prevents replay attacks).

FieldTypeDescription
ICDCounter uint32 Device's current Check-In counter value. The client should save this value; subsequent Check-In messages must have a Counter greater than this

UnregisterClient — Unregister Client (0x02)

Removes a Check-In client from the ICD device's registration list. After removal, the device no longer sends Check-In messages to that client.

ParameterTypeDescription
CheckInNodeID uint64 Node ID of the client to remove — must match the CheckInNodeID used during registration
VerificationKey octstr (16 bytes) Optional. Verification key — same purpose as during registration, prevents unauthorized unregistration
Usage Scenarios

When removing a Hub from the home, the Hub needs to first call UnregisterClient to unregister itself from all registered ICD devices, to prevent devices from wasting battery by continuing to send Check-In messages to a non-existent node.

StayActiveRequest — Request Stay Active (0x03)

Requests the ICD device to stay in active mode for an additional period, temporarily not returning to sleep. Applicable when needing to perform a series of interactions with the device (e.g. OTA upgrade, batch configuration) but the device's default active time is too short.

ParameterTypeDescription
StayActiveDuration uint32 Requested additional active duration, in milliseconds. The device will remain awake for at least this long after the current active period ends
Usage Scenarios

The Controller needs to perform an OTA firmware upgrade on a door/window sensor. The sensor's default active window is only 10 seconds, insufficient for firmware transfer. The Controller sends StayActiveRequest (StayActiveDuration = 120000, i.e. 2 minutes), the sensor replies with StayActiveResponse indicating how long it can actually maintain, and the Controller completes the upgrade within this window.

StayActiveResponse — Stay Active Response (0x04)

Device response to StayActiveRequest. The device may not fully satisfy the requested duration (e.g. low battery), and the response contains the actual active duration the device promises.

FieldTypeDescription
PromisedActiveDuration uint32 Actual active duration promised by the device, in milliseconds. May be less than requested. The Controller should complete all operations within this time

Attributes

ICD Management attributes are divided into four functional groups. Click an attribute ID in the summary table below to jump to its detailed description.

ID Name Type Group Description
0x0000 IdleModeDuration uint32 Sleep/Wake Parameters Idle mode duration (seconds)
0x0001 ActiveModeDuration uint32 Sleep/Wake Parameters Active mode duration (milliseconds)
0x0002 ActiveModeThreshold uint16 Sleep/Wake Parameters Active mode extension threshold (milliseconds)
0x0003 RegisteredClients list<MonitoringRegistrationStruct> Registration Management List of registered monitoring clients
0x0004 ICDCounter uint32 Registration Management Check-In message counter
0x0005 ClientsSupportedPerFabric uint16 Registration Management Maximum registered clients per Fabric
0x0006 UserActiveModeTriggerHint UserActiveModeTriggerBitmap User Wake-up Hints Bitmap of user-available wake-up methods
0x0007 UserActiveModeTriggerInstruction string (max 128) User Wake-up Hints Wake-up operation text instructions
0x0008 OperatingMode OperatingModeEnum Operating Mode Current operating mode (SIT / LIT)
0x0009 MaximumCheckInBackOff uint32 Operating Mode Maximum Check-In back-off interval (seconds)

Sleep/Wake Parameters (0x0000-0x0002)

Defines the device's sleep and wake cycle parameters. These three values directly determine the device's power saving level and communication responsiveness — the longer the idle time, the more power saved, but the slower the response.

Time Unit Note

IdleModeDuration is in seconds, while ActiveModeDuration and ActiveModeThreshold are in milliseconds. For example, IdleModeDuration = 300 means 5 minutes idle, ActiveModeDuration = 10000 means 10 seconds active.

IDNameTypeDescription
0x0000 IdleModeDuration
Idle Mode Duration
uint32 Duration the device stays in idle (sleep) mode, in seconds. The device does not actively send or receive messages during this time. SIT devices typically ≤ 15 seconds, LIT devices can reach hours. Minimum 1 second
0x0001 ActiveModeDuration
Active Mode Duration
uint32 Duration the device stays in active mode, in milliseconds. The device maintains a communication window for at least this long each time it wakes. Minimum 300 milliseconds
0x0002 ActiveModeThreshold
Active Mode Threshold
uint16 Additional active time extension after receiving communication in active mode, in milliseconds. Timer resets on each received message, preventing the device from suddenly sleeping during interaction. SIT device minimum 300ms, LIT device minimum 5000ms
Developer Tip

SIT device's IdleModeDuration ≤ 15 seconds, aligned with MRP's Idle Retransmission Timeout, allowing the Controller to wait for the device to wake within the normal retry window. If IdleModeDuration > 15 seconds, the device is in LIT mode, and the Controller must wait for Check-In messages to communicate.

Registration Management (0x0003-0x0005)

Manages the Check-In client registration list. Only registered clients will receive Check-In messages from the device.

IDNameTypeDescription
0x0003 RegisteredClients
Registered Clients
list<MonitoringRegistrationStruct> List of currently registered Check-In clients. Number of registrations per Fabric cannot exceed ClientsSupportedPerFabric. Requires CIP feature
0x0004 ICDCounter
Check-In Counter
uint32 Monotonically increasing counter for Check-In messages sent by the device. Clients use this to detect message replay — if the received Counter ≤ the last saved value, it may indicate a replay attack. Requires CIP feature
0x0005 ClientsSupportedPerFabric
Max Clients Per Fabric
uint16 Maximum number of Check-In clients that can be registered per Fabric. Minimum 1. Limited by the device's storage and power resources — more clients means more Check-In messages to send each wake-up. Requires CIP feature

User Wake-up Hints (0x0006-0x0007)

When the Controller needs to communicate with a LIT device but doesn't want to wait for Check-In, it can prompt the user to manually wake the device. These two attributes tell the App how to guide user actions — e.g. "press the button on the device" or "open/close the door once."

IDNameTypeDescription
0x0006 UserActiveModeTriggerHint
Wake-up Mode Hint
UserActiveModeTriggerBitmap Bitmap identifying which methods users can use to manually wake the device. The App should display corresponding guidance based on this bitmap. Requires UAT feature
0x0007 UserActiveModeTriggerInstruction
Wake-up Instruction
string (max 128) Vendor-defined operation instruction text. When special trigger methods like ActuateSensorLightsBlink are set in the bitmap, this field provides specific operational guidance (e.g. "press the top button 3 times consecutively"). Requires UAT feature

UserActiveModeTriggerBitmap Common Bits

Bit 0
PowerCycle Power cycle — remove battery and reinsert
Bit 1
SettingsMenu Device's built-in settings menu can trigger wake-up
Bit 2
CustomInstruction See the UserActiveModeTriggerInstruction field for details
Bit 3
DeviceManual Refer to device user manual
Bit 4
ActuateSensor Actuate sensor — e.g. open/close door/window, walk in front of PIR sensor
Bit 5
ActuateSensorSeconds Actuate sensor then wait several seconds (Instruction field specifies seconds)
Bit 6
ActuateSensorTimes Actuate sensor multiple times (Instruction field specifies count)
Bit 7
ActuateSensorLightsBlink Actuate sensor until indicator light blinks
Bit 8
ResetButton Press the device's Reset button
Bit 9
ResetButtonLightsBlink Press Reset button until indicator light blinks
Bit 10
ResetButtonSeconds Long press Reset button for several seconds (Instruction field specifies seconds)
Bit 11
ResetButtonTimes Press Reset button multiple times (Instruction field specifies count)

Operating Mode (0x0008-0x0009)

Device's current operating mode and Check-In back-off parameters.

IDNameTypeDescription
0x0008 OperatingMode
Operating Mode
OperatingModeEnum Device's current ICD operating mode: SIT (short idle) or LIT (long idle). Devices supporting DSLS feature can dynamically switch between modes. Requires LITS feature
0x0009 MaximumCheckInBackOff
Max Check-In Backoff
uint32 Maximum Check-In message sending interval when there are no registered clients, in seconds. The device gradually extends the interval up to this limit to further conserve power when no one is listening. Requires LITS feature

Enum Quick Reference

OperatingModeEnum — Operating Mode

Describes the ICD device's current operating mode, corresponding to the OperatingMode (0x0008) attribute.

0
SIT(Short Idle Time) Short Idle Time mode — idle interval ≤ 15 seconds, Controller can communicate within MRP retry window, Check-In protocol not required
1
LIT(Long Idle Time) Long Idle Time mode — idle interval can be up to hours, Controller must wait for Check-In message or prompt user to manually wake device

Data Structures

MonitoringRegistrationStruct

Describes a registered Check-In client's information, the structure of each list element in the RegisteredClients (0x0003) attribute.

FieldTypeDescription
CheckInNodeID uint64 Node ID for receiving Check-In messages — typically the Controller or Hub from registration
MonitoredSubject uint64 Monitored Subject — identifies which user or entity is watching this device
FabricIndex uint8 Fabric index this registration belongs to

MonitoringRegistrationStruct data example:

{
  "CheckInNodeID": 1,                   // Check-In message target node ID
  "MonitoredSubject": 112233,           // Monitored Subject (typically the user's NodeID)
  "FabricIndex": 1                      // Fabric index
}

Feature Bitmap

ICD Management declares device ICD capabilities through FeatureMap (0xFFFC):

Bit 0
CIP(Check-In Protocol) Check-In Protocol — device sends Check-In messages to registered clients upon waking. Enables RegisterClient / UnregisterClient commands and RegisteredClients / ICDCounter / ClientsSupportedPerFabric attributes
Bit 1
UAT(User Active Mode Trigger) User Active Mode Trigger — device supports manual wake-up by user (pressing button, triggering sensor, etc.). Enables UserActiveModeTriggerHint and UserActiveModeTriggerInstruction attributes
Bit 2
LITS(Long Idle Time Sitting) Long Idle Time Sitting — device can operate in LIT mode with idle intervals exceeding 15 seconds. Enables OperatingMode, MaximumCheckInBackOff attributes and StayActiveRequest / StayActiveResponse commands. Depends on CIP
Bit 3
DSLS(Dynamic SIT LIT Switching) Dynamic SIT/LIT Switching — device can dynamically switch between SIT and LIT based on conditions (e.g., switch to SIT when there are active subscriptions for faster response, switch back to LIT when idle to save power). Depends on LITS
Feature Dependencies

LITS depends on CIP (long-idle devices must support Check-In protocol to be discoverable), DSLS depends on LITS (dynamic switching requires LIT mode support first). Therefore, a device supporting DSLS must have a FeatureMap of at least 0b1111 (CIP + UAT + LITS + DSLS).

Example Data

Read results from an ICD Management Cluster of a battery-powered door/window sensor running in LIT mode:

{
  // --- Sleep/Wake Time Parameters ---
  "0x0000": 300,              // IdleModeDuration = 300 seconds (idle mode lasts 5 minutes)
  "0x0001": 10,               // ActiveModeDuration = 10000 milliseconds (active mode lasts 10 seconds)
  "0x0002": 5000,             // ActiveModeThreshold = 5000 milliseconds (active mode extension threshold 5 seconds)

  // --- Registration Management ---
  "0x0003": [                 // RegisteredClients (list of registered monitoring clients)
    {
      "CheckInNodeID": 1,
      "MonitoredSubject": 1,
      "FabricIndex": 1
    }
  ],
  "0x0004": 42,               // ICDCounter = 42 (Check-In message counter)
  "0x0005": 2,                // ClientsSupportedPerFabric = 2 (max 2 clients per Fabric)

  // --- User Wake-up Hints ---
  "0x0006": 1,                // UserActiveModeTriggerHint = PowerCycle (hint user to wake by power cycling)
  "0x0007": "",               // UserActiveModeTriggerInstruction = "" (no additional instructions)

  // --- Operating Mode ---
  "0x0008": 1,                // OperatingMode = LIT (Long Idle Time mode)
  "0x0009": 3600              // MaximumCheckInBackOff = 3600 seconds (max Check-In back-off interval 1 hour)
}
Developer Tip

When reading ICD Management attributes, note that the device may be sleeping. For SIT devices, the Controller can wait for the device to wake within the MRP retry window and complete the read; for LIT devices, a Check-In message must be received or the user must manually wake the device before reading. Before reading, you can first check OperatingMode (0x0008) to determine the device's operating mode.

Common Scenarios

Scenario 1: Register Check-In Monitoring After Commissioning
  1. After commissioning the device, read FeatureMap (0xFFFC) to confirm the device supports the CIP feature
  2. Read ClientsSupportedPerFabric (0x0005) to confirm registration slots are available
  3. Send RegisterClient (0x00) with the Hub's NodeID as CheckInNodeID and generate a 16-byte HMAC Key
  4. Save the ICDCounter value returned in RegisterClientResponse for subsequent Check-In message verification
  5. Each time the device wakes, the Hub receives a Check-In message and completes data synchronization within the active window
Scenario 2: OTA Upgrade — Extend Active Window
  1. Wait for the LIT device to send a Check-In message (or prompt the user to manually wake the device)
  2. Within the device's active window, send StayActiveRequest (0x03) requesting sufficient active time (e.g. 120 seconds)
  3. Check PromisedActiveDuration in StayActiveResponse to confirm the actual duration the device promises
  4. Execute the OTA upgrade process within the promised time window
  5. If not enough, send another StayActiveRequest before the window ends to extend the time