颜色控制 Cluster(ColorControl)
Cluster ID: 0x0300 |
所在 Endpoint: 通常在 Endpoint 1(功能端点,与 OnOff / LevelControl 同端点)
ColorControl 是 Matter 灯具设备的颜色控制核心 Cluster,支持通过三种颜色模型控制灯光颜色: Hue/Saturation(色相/饱和度)、XY 色坐标(CIE 1931)、Color Temperature(色温,单位 Mireds)。 此外还支持 Enhanced Hue(16-bit 高精度色相)和 Color Loop(自动循环变色)等高级功能。
Matter 使用 Mireds(微倒数度)作为色温单位,换算公式:Mireds = 1,000,000 / Kelvin。
例如 6500K 冷白 ≈ 153 Mireds,2700K 暖白 ≈ 370 Mireds。Mireds 值越小色温越高(偏冷白),值越大色温越低(偏暖黄)。
Feature 能力(Feature Map)
ColorControl 通过 Feature Map 声明设备支持哪些颜色控制能力。不同能力决定了可用的命令和属性集合。
读取 ColorCapabilities (0x400A) 可以获取设备支持的能力位图。
大多数家用智能灯至少支持 CT(色温),全彩灯通常支持 HS + XY + CT。发送命令前务必先检查 ColorCapabilities,向不支持的能力发送命令会被设备拒绝。
命令(Commands)
ColorControl 定义了 19 个命令,按颜色模型分为五组:Hue/Saturation 控制、XY 色坐标控制、色温控制、Enhanced Hue 控制、Color Loop 控制。 点击下方表格中的命令 ID 可跳转到对应的详细说明。
所有命令都支持 OptionsMask 和 OptionsOverride 参数,用于临时覆盖 Options (0x000F) 属性中的 ExecuteIfOff 标志位。
| ID | 名称 | 说明 | 所需 Feature |
|---|---|---|---|
0x00 |
MoveToHue | 移动到指定色相值 | HS |
0x01 |
MoveHue | 持续向指定方向移动色相 | HS |
0x02 |
StepHue | 色相步进 | HS |
0x03 |
MoveToSaturation | 移动到指定饱和度 | HS |
0x04 |
MoveSaturation | 持续向指定方向移动饱和度 | HS |
0x05 |
StepSaturation | 饱和度步进 | HS |
0x06 |
MoveToHueAndSaturation | 同时设置色相和饱和度 | HS |
0x07 |
MoveToColor | 移动到指定 XY 色坐标 | XY |
0x08 |
MoveColor | 持续移动 XY 色坐标 | XY |
0x09 |
StepColor | XY 色坐标步进 | XY |
0x0A |
MoveToColorTemperature | 移动到指定色温 | CT |
0x4B |
MoveColorTemperature | 持续向指定方向移动色温 | CT |
0x4C |
StepColorTemperature | 色温步进 | CT |
0x40 |
EnhancedMoveToHue | 移动到指定 Enhanced Hue(16-bit) | EHUE |
0x41 |
EnhancedMoveHue | 持续移动 Enhanced Hue | EHUE |
0x42 |
EnhancedStepHue | Enhanced Hue 步进 | EHUE |
0x43 |
EnhancedMoveToHueAndSaturation | 同时设置 Enhanced Hue 和 Saturation | EHUE |
0x44 |
ColorLoopSet | 配置并激活/关闭 Color Loop | CL |
0x47 |
StopMoveStep | 停止当前的 Move 或 Step 过渡 | HS XY CT |
MoveToHue —— 移动到指定色相(0x00)
将灯光色相平滑过渡到目标值。Hue 取值 0~254,映射到 0°~360° 色环。Direction 参数控制色环上的过渡方向。
| 参数 | 类型 | 说明 |
|---|---|---|
| Hue | uint8 | 目标色相值,0~254 |
| Direction | DirectionEnum | 过渡方向:ShortestDistance / LongestDistance / Up / Down |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
用户在 App 色环上选择一个颜色时调用。先将选中的角度换算为 0~254 的 Hue 值(hue = angle * 254 / 360),Direction 通常用 Shortest (0) 取最短路径。TransitionTime 设 10 表示 1 秒平滑过渡。
MoveHue —— 持续移动色相(0x01)
以恒定速率持续移动色相值,直到收到 StopMoveStep 或色相到达自然边界。
| 参数 | 类型 | 说明 |
|---|---|---|
| MoveMode | MoveModeEnum | 移动模式:Stop / Up / Down |
| Rate | uint8 | 每秒变化的色相步数 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
用户按住色相调节按钮时持续调节。松开按钮后发送 StopMoveStep (0x47) 停止。
StepHue —— 色相步进(0x02)
将色相增加或减少一个指定的步长值。
| 参数 | 类型 | 说明 |
|---|---|---|
| StepMode | StepModeEnum | 步进方向:Up / Down |
| StepSize | uint8 | 每次步进的色相变化量 |
| TransitionTime | uint8 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
MoveToSaturation —— 移动到指定饱和度(0x03)
将灯光饱和度平滑过渡到目标值。Saturation 取值 0~254,0 为无色(白光),254 为最高饱和度。
| 参数 | 类型 | 说明 |
|---|---|---|
| Saturation | uint8 | 目标饱和度,0~254 |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
用户拖动饱和度滑条时调用。Saturation 值 0~254 对应 UI 上的 0%~100%。通常配合 MoveToHue 一起使用,也可以用 MoveToHueAndSaturation 一次设置两者。
MoveSaturation —— 持续移动饱和度(0x04)
以恒定速率持续移动饱和度值,直到收到 StopMoveStep。参数结构同 MoveHue。
StepSaturation —— 饱和度步进(0x05)
将饱和度增加或减少一个指定的步长值。参数结构同 StepHue。
MoveToHueAndSaturation —— 同时设置色相和饱和度(0x06)
一次命令同时设置色相和饱和度,比分开发送两个命令更高效,过渡更平滑。
| 参数 | 类型 | 说明 |
|---|---|---|
| Hue | uint8 | 目标色相值,0~254 |
| Saturation | uint8 | 目标饱和度,0~254 |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
用户在色盘(Color Wheel)上直接选择一个颜色点时调用,一次命令完成色相 + 饱和度的设置。推荐优先使用此命令而非分别调用 MoveToHue + MoveToSaturation。
MoveToColor —— 移动到指定 XY 色坐标(0x07)
将灯光颜色过渡到指定的 CIE 1931 XY 色坐标。X 和 Y 取值 0~0xFEFF,映射到 0.0~1.0 的色度坐标。
| 参数 | 类型 | 说明 |
|---|---|---|
| ColorX | uint16 | CIE x 坐标,0~0xFEFF(实际值 = ColorX / 65536) |
| ColorY | uint16 | CIE y 坐标,0~0xFEFF(实际值 = ColorY / 65536) |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
需要精确控制颜色(如匹配品牌色或灯光设计方案)时使用。XY 色坐标是设备无关的绝对颜色表示,不同厂商的灯在相同 XY 值下理论上会呈现相同颜色。
MoveColor —— 持续移动 XY 色坐标(0x08)
以恒定速率在 XY 色度平面上持续移动。
| 参数 | 类型 | 说明 |
|---|---|---|
| RateX | int16 | X 坐标每秒变化量(有符号) |
| RateY | int16 | Y 坐标每秒变化量(有符号) |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
StepColor —— XY 色坐标步进(0x09)
将 X 和 Y 坐标各增加/减少一个步长值。
| 参数 | 类型 | 说明 |
|---|---|---|
| StepX | int16 | X 坐标步进量(有符号) |
| StepY | int16 | Y 坐标步进量(有符号) |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
MoveToColorTemperature —— 移动到指定色温(0x0A)
将灯光色温平滑过渡到目标值。目标值会被裁剪到 [ColorTempPhysicalMinMireds, ColorTempPhysicalMaxMireds] 范围内。
这是色温灯最常用的命令。
| 参数 | 类型 | 说明 |
|---|---|---|
| ColorTemperatureMireds | uint16 | 目标色温值(Mireds) |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
用户拖动色温滑条时调用。UI 通常显示 Kelvin(2700K ~ 6500K),发送命令前需转换:mireds = 1000000 / kelvin。设备会自动将超出物理范围的值裁剪到 Min/Max Mireds。
MoveColorTemperature —— 持续移动色温(0x4B)
以恒定速率持续移动色温值,并可指定移动的上下限范围。
| 参数 | 类型 | 说明 |
|---|---|---|
| MoveMode | MoveModeEnum | 移动模式:Stop / Up / Down |
| Rate | uint16 | 每秒变化的 Mireds 值 |
| ColorTemperatureMinimumMireds | uint16 | 移动下限 |
| ColorTemperatureMaximumMireds | uint16 | 移动上限 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
StepColorTemperature —— 色温步进(0x4C)
将色温增加或减少一个指定的步长值,并可指定步进的上下限范围。
| 参数 | 类型 | 说明 |
|---|---|---|
| StepMode | StepModeEnum | 步进方向:Up / Down |
| StepSize | uint16 | 每次步进的 Mireds 变化量 |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| ColorTemperatureMinimumMireds | uint16 | 步进下限 |
| ColorTemperatureMaximumMireds | uint16 | 步进上限 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
EnhancedMoveToHue —— 移动到指定 Enhanced Hue(0x40)
与 MoveToHue 类似,但使用 16-bit Enhanced Hue(0~0xFFFF),精度是标准 Hue 的 256 倍。 适用于需要精细颜色控制的场景。
| 参数 | 类型 | 说明 |
|---|---|---|
| EnhancedHue | uint16 | 目标 Enhanced Hue 值,0~0xFFFF |
| Direction | DirectionEnum | 过渡方向 |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
当 8-bit Hue 的 254 级精度不够时使用(例如大型 LED 灯带需要极致平滑过渡)。Enhanced Hue = 标准 Hue * 256,但范围更大(0~65535)。发送前需检查设备是否支持 EHUE feature。
EnhancedMoveHue —— 持续移动 Enhanced Hue(0x41)
以恒定速率持续移动 Enhanced Hue 值。参数结构类似 MoveHue,但 Rate 为 uint16。
EnhancedStepHue —— Enhanced Hue 步进(0x42)
将 Enhanced Hue 增加或减少一个指定的步长值。参数结构类似 StepHue,但 StepSize 为 uint16。
EnhancedMoveToHueAndSaturation —— 同时设置 Enhanced Hue 和 Saturation(0x43)
一次命令同时设置 16-bit Enhanced Hue 和 8-bit Saturation。
| 参数 | 类型 | 说明 |
|---|---|---|
| EnhancedHue | uint16 | 目标 Enhanced Hue 值 |
| Saturation | uint8 | 目标饱和度,0~254 |
| TransitionTime | uint16 | 过渡时间,单位 1/10 秒 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
ColorLoopSet —— 配置 Color Loop(0x44)
配置并激活/关闭 Color Loop(自动循环变色)。通过 UpdateFlags 位图控制本次命令要更新哪些参数。 激活后,灯光会按设定的时间周期在色环上自动循环。
| 参数 | 类型 | 说明 |
|---|---|---|
| UpdateFlags | UpdateFlagsBitmap | 指定本次更新哪些字段(见下方位图) |
| Action | ColorLoopActionEnum | 循环动作:关闭 / 从起始色开始 / 从当前色开始 |
| Direction | ColorLoopDirectionEnum | 循环方向:递减 / 递增 |
| Time | uint16 | 完成一圈循环的时间(秒) |
| StartHue | uint16 | 循环起始的 Enhanced Hue 值 |
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
氛围灯、派对模式等需要灯光自动变色的场景。UpdateFlags 设为 0x0F(全部更新),Action 设为 2(从当前色开始循环),Time 设为 30(30 秒一圈),Direction 设为 1(递增方向)。关闭时 Action 设为 0。
StopMoveStep —— 停止过渡(0x47)
立即停止当前正在进行的 Move 或 Step 颜色过渡。灯光保持在当前颜色状态。 适用于所有颜色模型(HS、XY、CT)。
| 参数 | 类型 | 说明 |
|---|---|---|
| OptionsMask | bitmap8 | 选项掩码 |
| OptionsOverride | bitmap8 | 选项覆盖 |
使用场景与参数
用户松开持续调节按钮(如色温滑条的长按箭头)时发送,用于停止 MoveHue / MoveSaturation / MoveColor / MoveColorTemperature 等持续移动类命令。
属性详解
ColorControl Cluster 共有 52 个属性,按功能分为六组。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x0000 |
CurrentHue | uint8 | 当前颜色状态 | 当前色相值(0~254) |
0x0001 |
CurrentSaturation | uint8 | 当前颜色状态 | 当前饱和度(0~254) |
0x0002 |
RemainingTime | uint16 | 当前颜色状态 | 当前过渡的剩余时间(1/10 秒) |
0x0003 |
CurrentX | uint16 | 当前颜色状态 | 当前 CIE x 坐标 |
0x0004 |
CurrentY | uint16 | 当前颜色状态 | 当前 CIE y 坐标 |
0x0007 |
ColorTemperatureMireds | uint16 | 当前颜色状态 | 当前色温(Mireds) |
0x0008 |
ColorMode | enum8 | 颜色模式 | 当前颜色模式 |
0x000F |
Options | bitmap8 | 颜色模式 | ExecuteIfOff 选项 |
0x4001 |
EnhancedColorMode | enum8 | 颜色模式 | 增强颜色模式(含 Enhanced Hue) |
0x4000 |
EnhancedCurrentHue | uint16 | Enhanced Hue 与 Color Loop | 当前 Enhanced Hue 值(16-bit) |
0x4002 |
ColorLoopActive | uint8 | Enhanced Hue 与 Color Loop | Color Loop 是否激活 |
0x4003 |
ColorLoopDirection | uint8 | Enhanced Hue 与 Color Loop | Color Loop 循环方向 |
0x4004 |
ColorLoopTime | uint16 | Enhanced Hue 与 Color Loop | 循环一圈的时间(秒) |
0x4005 |
ColorLoopStartEnhancedHue | uint16 | Enhanced Hue 与 Color Loop | 循环起始 Enhanced Hue |
0x4006 |
ColorLoopStoredEnhancedHue | uint16 | Enhanced Hue 与 Color Loop | 循环关闭时恢复的 Enhanced Hue |
0x400A |
ColorCapabilities | bitmap16 | 能力与色温范围 | 设备支持的颜色能力 |
0x400B |
ColorTempPhysicalMinMireds | uint16 | 能力与色温范围 | 物理最小色温(Mireds) |
0x400C |
ColorTempPhysicalMaxMireds | uint16 | 能力与色温范围 | 物理最大色温(Mireds) |
0x400D |
CoupleColorTempToLevelMinMireds | uint16 | 能力与色温范围 | 色温联动亮度的最小 Mireds |
0x4010 |
StartUpColorTemperatureMireds | uint16 / null | 能力与色温范围 | 开机默认色温 |
0x0005 |
DriftCompensation | enum8 | 漂移补偿与灯具信息 | 颜色漂移补偿类型 |
0x0006 |
CompensationText | string | 漂移补偿与灯具信息 | 补偿机制描述文本 |
0x0010 |
NumberOfPrimaries | uint8 / null | 漂移补偿与灯具信息 | 灯具原色(Primary)数量 |
0x0011~0x002A |
Primary1~6 (X/Y/Intensity) | uint16 / uint8 | 原色坐标 | 6 组原色的 CIE XY 坐标与强度 |
0x0030~0x003C |
WhitePoint / ColorPoint R/G/B | uint16 / uint8 | 白点与色点 | 白点坐标、RGB 色点坐标与强度 |
当前颜色状态
反映灯光当前的颜色参数,是 App UI 展示和状态同步的核心数据源。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
CurrentHue 当前色相 |
uint8 | 当前色相值,0~254 映射到 0°~360° 色环。需 HS feature |
0x0001 |
CurrentSaturation 当前饱和度 |
uint8 | 当前饱和度,0~254。0 = 白光,254 = 最高饱和度。需 HS feature |
0x0002 |
RemainingTime 剩余过渡时间 |
uint16 | 当前颜色过渡的剩余时间,单位 1/10 秒。0 表示无过渡进行中 |
0x0003 |
CurrentX 当前 X 坐标 |
uint16 | 当前 CIE 1931 x 色坐标,0~0xFEFF。实际值 = CurrentX / 65536。需 XY feature |
0x0004 |
CurrentY 当前 Y 坐标 |
uint16 | 当前 CIE 1931 y 色坐标,0~0xFEFF。实际值 = CurrentY / 65536。需 XY feature |
0x0007 |
ColorTemperatureMireds 当前色温 |
uint16 | 当前色温值,单位 Mireds。范围由物理限制属性决定。需 CT feature |
Matter 的 Hue 取值范围是 0~254(不是 0~255 或 0~360)。换算公式:角度 = Hue * 360 / 254,Hue = 角度 * 254 / 360。
同理 Saturation 也是 0~254。UI 上通常显示百分比:百分比 = Saturation * 100 / 254。
颜色模式与选项
标识设备当前使用的颜色控制模型以及命令执行选项。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0008 |
ColorMode 颜色模式 |
enum8 | 当前颜色模式,只读。发送不同颜色命令后设备自动切换 |
0x000F |
Options 选项 |
bitmap8 | Bit 0 = ExecuteIfOff:灯关着时是否仍然执行颜色命令。可写 |
0x4001 |
EnhancedColorMode 增强颜色模式 |
enum8 | 比 ColorMode 多一个状态:Enhanced Hue and Saturation。只读 |
ColorMode 枚举值
EnhancedColorMode 枚举值
ColorMode 只有 3 种值(0/1/2),是旧版兼容属性。EnhancedColorMode 多了第 4 种值(3 = Enhanced Hue),是实际判断设备当前颜色模式时应该优先读取的属性。
发送 MoveToHue 命令后 ColorMode 变为 0,发送 EnhancedMoveToHue 后 EnhancedColorMode 变为 3。
Enhanced Hue 与 Color Loop
高精度色相控制和自动循环变色的状态属性。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x4000 |
EnhancedCurrentHue 增强色相 |
uint16 | 当前 16-bit Enhanced Hue 值,0~0xFFFF。精度是标准 Hue 的 256 倍 |
0x4002 |
ColorLoopActive 循环激活 |
uint8 | 0 = 未激活,1 = 已激活。需 CL feature |
0x4003 |
ColorLoopDirection 循环方向 |
uint8 | 0 = Decrement(递减),1 = Increment(递增) |
0x4004 |
ColorLoopTime 循环时间 |
uint16 | 完成一圈色相循环的时间,单位秒 |
0x4005 |
ColorLoopStartEnhancedHue 循环起始色 |
uint16 | Color Loop 开始时的 Enhanced Hue 值 |
0x4006 |
ColorLoopStoredEnhancedHue 循环存储色 |
uint16 | Color Loop 关闭时恢复到的 Enhanced Hue 值 |
能力与色温范围
描述设备支持的颜色控制能力和色温物理范围。开发时必须先读取这些属性来确定可用的控制方式。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x400A |
ColorCapabilities 颜色能力 |
bitmap16 | 设备支持的颜色控制能力位图(见下方 Feature Map 定义) |
0x400B |
ColorTempPhysicalMinMireds 最小色温 |
uint16 | 设备支持的最低色温值(Mireds),即最高 Kelvin。范围 1~65279 |
0x400C |
ColorTempPhysicalMaxMireds 最大色温 |
uint16 | 设备支持的最高色温值(Mireds),即最低 Kelvin。范围 1~65279 |
0x400D |
CoupleColorTempToLevelMinMireds 色温联动亮度最小值 |
uint16 | 当色温联动亮度功能启用时,允许的最小 Mireds 值 |
0x4010 |
StartUpColorTemperatureMireds 开机色温 |
uint16 / null | 设备上电后的初始色温。null 表示恢复上次断电前的色温。可写 |
ColorCapabilities 位图
一个典型的色温灯泡:MinMireds = 153(≈ 6536K 冷白)、MaxMireds = 500(= 2000K 暖黄)。
UI 上色温滑条的两端应该取这两个值。发送 MoveToColorTemperature 时目标值超出此范围,设备会自动裁剪。
漂移补偿与灯具信息
描述灯具的颜色漂移补偿机制和原色(Primary)数量。大多数 App 开发无需关注这些属性。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0005 |
DriftCompensation 漂移补偿 |
enum8 | 灯具使用的颜色漂移补偿类型 |
0x0006 |
CompensationText 补偿描述 |
string | 对漂移补偿机制的文字描述 |
0x0010 |
NumberOfPrimaries 原色数量 |
uint8 / null | 灯具中独立颜色原色(LED 通道)的数量,最大 6。null 表示未知 |
DriftCompensation 枚举值
原色坐标(Primary 1~6)
灯具最多可以声明 6 组原色(Primary),每组包含 CIE XY 坐标和强度值。这些属性描述灯具 LED 的物理色域, 通常由固件设置,App 开发一般不需要读取。
Primary 1~6 属性列表(点击展开)
| 组 | X 坐标 ID | Y 坐标 ID | 强度 ID |
|---|---|---|---|
| Primary 1 | 0x0011 | 0x0012 | 0x0013 |
| Primary 2 | 0x0015 | 0x0016 | 0x0017 |
| Primary 3 | 0x0019 | 0x001A | 0x001B |
| Primary 4 | 0x0020 | 0x0021 | 0x0022 |
| Primary 5 | 0x0024 | 0x0025 | 0x0026 |
| Primary 6 | 0x0028 | 0x0029 | 0x002A |
所有 X / Y 坐标为 uint16 类型,范围 0~0xFEFF;Intensity 为 uint8 / nullable 类型。
白点与色点
描述灯具的白点坐标和 RGB 三色点坐标,用于色彩校准。这些属性可写,通常由高级校准工具使用, App 开发一般不需要关注。
白点与色点属性列表(点击展开)
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0030 | WhitePointX | uint16 | 白点 CIE x 坐标 |
0x0031 | WhitePointY | uint16 | 白点 CIE y 坐标 |
0x0032 | ColorPointRX | uint16 | 红色点 CIE x 坐标 |
0x0033 | ColorPointRY | uint16 | 红色点 CIE y 坐标 |
0x0034 | ColorPointRIntensity | uint8 / null | 红色点强度 |
0x0036 | ColorPointGX | uint16 | 绿色点 CIE x 坐标 |
0x0037 | ColorPointGY | uint16 | 绿色点 CIE y 坐标 |
0x0038 | ColorPointGIntensity | uint8 / null | 绿色点强度 |
0x003A | ColorPointBX | uint16 | 蓝色点 CIE x 坐标 |
0x003B | ColorPointBY | uint16 | 蓝色点 CIE y 坐标 |
0x003C | ColorPointBIntensity | uint8 / null | 蓝色点强度 |
命令参数枚举值速查
以下枚举类型在多个命令的参数中复用。
DirectionEnum(色相过渡方向)
MoveModeEnum(持续移动模式)
StepModeEnum(步进方向)
MoveModeEnum 的值是 0、1、3(没有 2),StepModeEnum 的值是 1、3(没有 0 和 2)。
这是沿用自 ZCL(ZigBee Cluster Library)的历史设计。传错值(比如 2)设备会返回错误。
ColorLoopActionEnum(循环动作)
ColorLoopDirectionEnum(循环方向)
UpdateFlags 位图(ColorLoopSet 命令参数)
标准示例
以下是一个支持全能力(HS + XY + CT + EHUE + CL)的全彩灯的典型属性数据示例:
{
// --- 当前颜色状态 ---
"0x0000": 127, // CurrentHue = 127(约 180°,青色附近)
"0x0001": 200, // CurrentSaturation = 200(高饱和度)
"0x0003": 24939, // CurrentX = 24939(CIE x ≈ 0.3805)
"0x0004": 24701, // CurrentY = 24701(CIE y ≈ 0.3769)
"0x0007": 370, // ColorTemperatureMireds = 370(≈ 2703K 暖白)
"0x0002": 0, // RemainingTime = 0(无过渡进行中)
// --- 颜色模式 ---
"0x0008": 2, // ColorMode = ColorTemperature(当前用色温控制)
"0x4001": 2, // EnhancedColorMode = ColorTemperature
"0x000F": 0, // Options = 0(不启用 ExecuteIfOff)
// --- Enhanced Hue & Color Loop ---
"0x4000": 0, // EnhancedCurrentHue = 0
"0x4002": 0, // ColorLoopActive = 0(未激活循环)
"0x4003": 0, // ColorLoopDirection = Decrement
"0x4004": 25, // ColorLoopTime = 25 秒
"0x4005": 0, // ColorLoopStartEnhancedHue = 0
"0x4006": 0, // ColorLoopStoredEnhancedHue = 0
// --- 能力与色温范围 ---
"0x400A": 31, // ColorCapabilities = 0x1F(支持全部五种能力)
"0x400B": 153, // ColorTempPhysicalMinMireds = 153(≈ 6536K)
"0x400C": 500, // ColorTempPhysicalMaxMireds = 500(≈ 2000K)
"0x400D": 153, // CoupleColorTempToLevelMinMireds = 153
"0x4010": 370 // StartUpColorTemperatureMireds = 370(开机暖白)
}
实际从设备读取数据时,Attribute ID 是十六进制字符串作为 key。"0x0007" 是 ColorTemperatureMireds,"0x400A" 是 ColorCapabilities。
位图值 31 = 0x1F = 二进制 11111,表示五种能力全部支持。
常见场景
场景 1:色温滑条调节
- 读取
ColorCapabilities (0x400A),确认 Bit 4(CT)为 1 - 读取
ColorTempPhysicalMinMireds (0x400B)和ColorTempPhysicalMaxMireds (0x400C)确定滑条范围 - 用户拖动滑条时,将 Kelvin 转换为 Mireds:
mireds = 1000000 / kelvin - 发送
MoveToColorTemperature (0x0A),TransitionTime 设为 5(0.5 秒过渡) - 订阅
ColorTemperatureMireds (0x0007)确认设备已到达目标色温
场景 2:色盘选色(Hue/Saturation)
- 读取
ColorCapabilities (0x400A),确认 Bit 0(HS)为 1 - 用户在色盘上选择一个点,获取角度和半径
- 角度 → Hue:
hue = angle * 254 / 360 - 半径 → Saturation:
saturation = radius * 254 / maxRadius - 发送
MoveToHueAndSaturation (0x06)一次设置两个值 - 订阅
CurrentHue (0x0000)和CurrentSaturation (0x0001)确认结果
场景 3:灯光控制页面初始化
- 读取
ColorCapabilities (0x400A)—— 决定 UI 上展示哪些控制组件(色盘、色温滑条等) - 读取
EnhancedColorMode (0x4001)—— 确定当前是哪种颜色模式,高亮对应的 UI Tab - 根据模式读取对应属性:色温模式读
ColorTemperatureMireds,HS 模式读CurrentHue+CurrentSaturation - 如支持 CT,读取
ColorTempPhysicalMinMireds/MaxMireds设置滑条范围 - 订阅所有相关属性的变化,保持 UI 与设备状态同步
场景 4:氛围灯 / 派对模式(Color Loop)
- 读取
ColorCapabilities (0x400A),确认 Bit 2(CL)为 1 - 发送
ColorLoopSet (0x44):UpdateFlags =0x0F,Action =2(从当前色开始),Direction =1(递增),Time =30(30 秒一圈) - 读取
ColorLoopActive (0x4002)确认循环已激活 - 关闭时再次发送 ColorLoopSet,Action =
0(Deactivate)