窗帘 Cluster(WindowCovering)
Cluster ID: 0x0102 |
所在 Endpoint: 通常在 Endpoint 1(功能端点)
WindowCovering 是 Matter 中控制窗帘类设备的核心 Cluster,适用于电动卷帘、百叶窗、窗帘轨道、遮阳篷、投影幕布等所有需要「升降」或「倾斜」控制的设备。 它定义了窗帘的运动控制命令、位置反馈属性,以及设备类型与安全状态的完整描述。
WindowCovering 使用 percent100ths(百分之一的百分比)表示位置,范围 0–10000。
0 代表完全打开(窗帘收起),10000 代表完全关闭(窗帘放下)。
这与直觉可能相反 — 数值越大,遮挡越多。百分比属性(如 CurrentPositionLiftPercentage)的范围是 0–100,含义一致。
命令(Commands)
WindowCovering Cluster 共有 7 个命令。基础三件套(UpOrOpen / DownOrClose / StopMotion)是所有窗帘设备都支持的, 后四个精确定位命令需要设备启用对应的 Feature 组合。 点击下方表格中的命令 ID 可跳转到对应的详细说明。
| ID | 名称 | 说明 | 所需特性 |
|---|---|---|---|
0x00 |
UpOrOpen | 升起 / 打开窗帘 | 无 |
0x01 |
DownOrClose | 降下 / 关闭窗帘 | 无 |
0x02 |
StopMotion | 立即停止运动 | 无 |
0x04 |
GoToLiftValue | 升降到指定绝对值 | LF + AB |
0x05 |
GoToLiftPercentage | 升降到指定百分比 | LF + PA |
0x07 |
GoToTiltValue | 倾斜到指定绝对值 | TL + AB |
0x08 |
GoToTiltPercentage | 倾斜到指定百分比 | TL + PA |
UpOrOpen — 升起 / 打开(0x00)
将窗帘向「全开」方向运动。对卷帘来说是向上收起,对窗帘轨道来说是向两侧拉开。 不需要任何参数,设备收到后立即开始运动,直到到达全开位置或收到 StopMotion 命令。
使用场景
用户点击 App 上的「打开窗帘」按钮、语音助手执行「打开窗帘」、早安自动化场景触发时调用。
DownOrClose — 降下 / 关闭(0x01)
将窗帘向「全关」方向运动。对卷帘来说是向下展开,对窗帘轨道来说是向中间合拢。 不需要任何参数,设备收到后立即运动到全关位置。
使用场景
用户点击「关闭窗帘」按钮、晚安场景自动关闭窗帘、光线传感器检测到强光时自动调用。
StopMotion — 停止运动(0x02)
立即停止窗帘所有轴的运动(升降和倾斜)。不需要参数。
停止后 OperationalStatus 的所有运动位归零。
使用场景
窗帘运动过程中,用户再次点击控制按钮可发送 StopMotion 让窗帘停在当前位置。 也用于安全保护 — 检测到障碍物或异常时紧急停止。
GoToLiftValue — 升降到绝对值(0x04)
将窗帘升降到指定的绝对位置值。这个值对应设备内部的物理单位(如电机步数),
范围由 InstalledOpenLimitLift 和 InstalledClosedLimitLift 决定。
| 参数 | 类型 | 说明 |
|---|---|---|
| LiftValue | uint16 | 目标升降位置的绝对值 |
使用场景
需要精确控制窗帘到物理刻度位置时使用。大多数场景建议用 GoToLiftPercentage(百分比更直观)。
GoToLiftPercentage — 升降到百分比(0x05)
将窗帘升降到指定的百分比位置。这是最常用的精确控制命令。
参数使用 percent100ths(百分之一的百分比,范围 0–10000),0 = 全开,10000 = 全关。
| 参数 | 类型 | 说明 |
|---|---|---|
| LiftPercent100thsValue | percent100ths | 目标升降位置。0 = 全开,5000 = 半开,10000 = 全关 |
使用场景与参数
App 上的滑块控件拖动到 30% 位置时,发送 GoToLiftPercentage(LiftPercent100thsValue = 3000)。
「打开到一半」的语音指令可发送 5000。建议在 App 上把滑块显示为「打开程度」(0% = 全关,100% = 全开),
发送时做 10000 - 用户值 * 100 的换算。
GoToTiltValue — 倾斜到绝对值(0x07)
将百叶窗叶片倾斜到指定的绝对位置值。仅支持带倾斜功能的百叶窗类设备。
| 参数 | 类型 | 说明 |
|---|---|---|
| TiltValue | uint16 | 目标倾斜位置的绝对值 |
GoToTiltPercentage — 倾斜到百分比(0x08)
将百叶窗叶片倾斜到指定的百分比位置。与升降百分比逻辑一致,
0 = 叶片完全打开(平行于窗面),10000 = 叶片完全关闭(垂直于窗面)。
| 参数 | 类型 | 说明 |
|---|---|---|
| TiltPercent100thsValue | percent100ths | 目标倾斜位置。0 = 叶片全开,10000 = 叶片全关 |
使用场景
百叶窗的叶片角度调节。例如下午阳光直射时,把叶片调到 7000(70% 关闭)既能遮阳又能保持通风。
属性详解
WindowCovering Cluster 的属性按功能分为四组。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x0000 |
Type | enum8 | 类型与配置 | 窗帘类型 |
0x000D |
EndProductType | enum8 | 类型与配置 | 终端产品类型 |
0x0007 |
ConfigStatus | bitmap8 | 类型与配置 | 配置与运行状态标志 |
0x0017 |
Mode | bitmap8 | 类型与配置 | 运行模式标志 |
0x000B |
TargetPositionLiftPercent100ths | percent100ths / null | 升降位置 | 目标升降位置 |
0x000E |
CurrentPositionLiftPercent100ths | percent100ths / null | 升降位置 | 当前升降位置(高精度) |
0x0008 |
CurrentPositionLiftPercentage | uint8 / null | 升降位置 | 当前升降位置(百分比) |
0x0003 |
CurrentPositionLift | uint16 / null | 升降位置 | 当前升降绝对值 |
0x0001 |
PhysicalClosedLimitLift | uint16 | 升降位置 | 物理关闭极限值 |
0x0010 |
InstalledOpenLimitLift | uint16 | 升降位置 | 安装后的全开极限 |
0x0011 |
InstalledClosedLimitLift | uint16 | 升降位置 | 安装后的全关极限 |
0x000C |
TargetPositionTiltPercent100ths | percent100ths / null | 倾斜位置 | 目标倾斜位置 |
0x000F |
CurrentPositionTiltPercent100ths | percent100ths / null | 倾斜位置 | 当前倾斜位置(高精度) |
0x0009 |
CurrentPositionTiltPercentage | uint8 / null | 倾斜位置 | 当前倾斜位置(百分比) |
0x0004 |
CurrentPositionTilt | uint16 / null | 倾斜位置 | 当前倾斜绝对值 |
0x0002 |
PhysicalClosedLimitTilt | uint16 | 倾斜位置 | 物理关闭极限值 |
0x0012 |
InstalledOpenLimitTilt | uint16 | 倾斜位置 | 安装后的全开极限 |
0x0013 |
InstalledClosedLimitTilt | uint16 | 倾斜位置 | 安装后的全关极限 |
0x000A |
OperationalStatus | bitmap8 | 运行状态 | 各轴运动方向 |
0x001A |
SafetyStatus | bitmap16 | 运行状态 | 安全异常标志 |
类型与配置(0x0000, 0x000D, 0x0007, 0x0017)
描述窗帘设备的物理类型、产品分类以及当前的配置和运行模式。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
Type 窗帘类型 |
enum8 | 窗帘的机械类型(见下方枚举),决定了设备支持升降、倾斜还是两者兼有 |
0x000D |
EndProductType 终端产品类型 |
enum8 | 更细化的产品分类(见下方枚举),用于 App 展示合适的图标和控制界面 |
0x0007 |
ConfigStatus 配置状态 |
bitmap8 | 设备的配置与能力标志位(见下方位图) |
0x0017 |
Mode 运行模式 |
bitmap8 | 设备的运行模式标志位(见下方位图) |
Type 枚举值
EndProductType 枚举值
Type 决定设备的机械能力(能升降、能倾斜、还是两者兼有),影响哪些 Feature 和命令可用。
EndProductType 是更细致的产品分类,主要用于 App 选择合适的图标和控制界面。
两者都是设备出厂固定的,不可修改。
ConfigStatus 位图
Mode 位图
升降位置(0x0001–0x0011)
描述窗帘升降轴的当前位置、目标位置和行程极限。所有升降属性需要设备支持 LF(Lift) 特性。
CurrentPositionLiftPercent100ths 的范围是 0–10000(精度为 0.01%),
而 CurrentPositionLiftPercentage 的范围是 0–100(精度为 1%)。
两者表达同一个位置,percent100ths 精度更高,开发时优先使用它。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x000B |
TargetPositionLiftPercent100ths 目标升降位置 |
percent100ths / null | 窗帘正在前往的目标升降位置。运动中此值与当前位置不同,停止后两者一致。null 表示未知。需要 LF + PA |
0x000E |
CurrentPositionLiftPercent100ths 当前升降位置(高精度) |
percent100ths / null | 当前升降位置,0 = 全开,10000 = 全关。运动过程中实时更新。null 表示位置未知(如刚上电尚未校准)。需要 LF + PA |
0x0008 |
CurrentPositionLiftPercentage 当前升降百分比 |
uint8 / null | 当前升降位置的粗略百分比(0–100)。是 Percent100ths 的低精度版本。需要 LF + PA |
0x0003 |
CurrentPositionLift 当前升降绝对值 |
uint16 / null | 当前升降位置的绝对值(设备内部单位)。需要 LF + AB |
0x0001 |
PhysicalClosedLimitLift 物理关闭极限 |
uint16 | 升降轴物理关闭位置的绝对值上限。需要 LF + AB |
0x0010 |
InstalledOpenLimitLift 安装全开极限 |
uint16 | 安装后实际可到达的全开位置绝对值。需要 LF + PA |
0x0011 |
InstalledClosedLimitLift 安装全关极限 |
uint16 | 安装后实际可到达的全关位置绝对值。需要 LF + PA |
倾斜位置(0x0002–0x0013)
描述窗帘倾斜轴(百叶窗叶片角度)的当前位置、目标位置和行程极限。所有倾斜属性需要设备支持 TL(Tilt) 特性。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x000C |
TargetPositionTiltPercent100ths 目标倾斜位置 |
percent100ths / null | 叶片正在前往的目标倾斜位置。null 表示未知。需要 TL + PA |
0x000F |
CurrentPositionTiltPercent100ths 当前倾斜位置(高精度) |
percent100ths / null | 当前叶片倾斜位置,0 = 叶片全开,10000 = 叶片全关。需要 TL + PA |
0x0009 |
CurrentPositionTiltPercentage 当前倾斜百分比 |
uint8 / null | 当前叶片倾斜位置的粗略百分比(0–100)。需要 TL + PA |
0x0004 |
CurrentPositionTilt 当前倾斜绝对值 |
uint16 / null | 当前叶片倾斜位置的绝对值。需要 TL + AB |
0x0002 |
PhysicalClosedLimitTilt 物理关闭极限 |
uint16 | 倾斜轴物理关闭位置的绝对值上限。需要 TL + AB |
0x0012 |
InstalledOpenLimitTilt 安装全开极限 |
uint16 | 安装后实际可到达的叶片全开位置绝对值。需要 TL + PA |
0x0013 |
InstalledClosedLimitTilt 安装全关极限 |
uint16 | 安装后实际可到达的叶片全关位置绝对值。需要 TL + PA |
运行状态(0x000A, 0x001A)
描述窗帘当前的运动方向和安全异常状态。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x000A |
OperationalStatus 运行状态 |
bitmap8 | 各运动轴的当前运动方向(见下方位图)。全部为 0 表示已停止 |
0x001A |
SafetyStatus 安全状态 |
bitmap16 | 安全异常标志(见下方位图)。任何位为 1 都表示存在异常 |
OperationalStatus 位图
OperationalStatus 用 3 组 2-bit 字段表示三个轴的运动方向:
00 = 已停止,01 = 正在打开(向 0 方向),10 = 正在关闭(向 10000 方向)。
SafetyStatus 位图
Feature 位图
WindowCovering Cluster 通过 FeatureMap(0xFFFC)声明设备支持哪些能力。Feature 的组合决定了哪些命令和属性可用:
电动卷帘:通常为 LF + PA(支持升降和百分比定位),FeatureMap = 0x05。
百叶窗:通常为 LF + TL + PA(升降 + 倾斜 + 位置感知),FeatureMap = 0x07。
纯倾斜百叶窗:通常为 TL + PA(仅倾斜),FeatureMap = 0x06。
读取 FeatureMap 后,App 应据此决定显示升降控件、倾斜控件还是两者都显示。
示例数据
一个支持升降 + 位置感知的电动卷帘在 30% 位置(接近全开)时的 WindowCovering Cluster 读取结果:
{
// --- 类型与配置 ---
"0x0000": 0, // Type = Rollershade(卷帘)
"0x000D": 0, // EndProductType = RollerShade
"0x0007": 0x09, // ConfigStatus = Operational + LiftPositionAware
"0x0017": 0x00, // Mode = 正常运行(所有位为 0)
// --- 升降位置 ---
"0x000E": 3000, // CurrentPositionLiftPercent100ths = 30.00%
"0x0008": 30, // CurrentPositionLiftPercentage = 30%
"0x000B": 3000, // TargetPositionLiftPercent100ths = 30.00%(目标与当前一致,已停止)
"0x0010": 0, // InstalledOpenLimitLift = 0(全开位置)
"0x0011": 10000, // InstalledClosedLimitLift = 10000(全关位置)
// --- 运行状态 ---
"0x000A": 0x00, // OperationalStatus = 所有轴已停止
"0x001A": 0x0000 // SafetyStatus = 无异常
}
对于只支持 UpOrOpen / DownOrClose 的简单窗帘(无位置感知),可能没有百分比属性。
读取前先检查 FeatureMap (0xFFFC) 判断设备支持哪些能力,再决定读取哪些属性和展示什么控件。
不支持倾斜的设备不会上报 Tilt 相关属性。
常见场景
场景 1:基础开合控制
- 发送
UpOrOpen (0x00)打开窗帘,或DownOrClose (0x01)关闭窗帘 - 订阅
OperationalStatus (0x000A)监控运动状态 - 运动过程中,用户可发送
StopMotion (0x02)让窗帘停在当前位置 - 订阅
CurrentPositionLiftPercent100ths (0x000E)实时更新 App 上的位置显示
场景 2:滑块精确控制位置
- 读取
FeatureMap (0xFFFC),确认设备支持 LF + PA 特性 - App 上展示一个 0%–100% 的滑块,0% = 全关,100% = 全开
- 用户拖动滑块到 70%(表示打开 70%),换算后发送
GoToLiftPercentage (0x05),参数 LiftPercent100thsValue =3000(因为 0 = 全开,所以 100% - 70% = 30% = 3000) - 订阅
CurrentPositionLiftPercent100ths和TargetPositionLiftPercent100ths,前者跟踪实际位置,后者可用于显示目标指示器
场景 3:百叶窗升降 + 叶片倾斜
- 读取
FeatureMap,确认设备同时支持 LF + TL(升降和倾斜) - App 上展示两个控件:升降滑块 + 倾斜滑块
- 升降用
GoToLiftPercentage (0x05)控制窗帘高度 - 倾斜用
GoToTiltPercentage (0x08)调节叶片角度 - 用户场景:「百叶窗放到一半高度,叶片倾斜 45 度让光线进来但挡住视线」 — 升降发 5000,倾斜发 5000
场景 4:自动化 — 日出日落联动
- 早晨日出时,自动化规则触发
UpOrOpen (0x00)打开所有窗帘 - 下午阳光强烈时,触发
GoToLiftPercentage (0x05)关到 70%(LiftPercent100thsValue = 7000) - 晚上日落后,触发
DownOrClose (0x01)完全关闭 - 配合光照传感器(IlluminanceMeasurement Cluster),可实现更智能的光线自适应
场景 5:异常处理
- 订阅
SafetyStatus (0x001A),监控安全异常 - 如果
ObstacleDetected(Bit 5)为 1,说明窗帘运行路径有障碍物,App 应提示用户检查 - 如果
MotorJammed(Bit 8)为 1,说明电机堵转,可能需要维修 - 如果
ThermalProtection(Bit 4)为 1,电机过热保护中,等待冷却后自动恢复 - 检查
Mode (0x0017)的 CalibrationMode(Bit 1),如果为 1 说明设备正在校准,暂不接受位置命令