窗帘 Cluster(WindowCovering)

Cluster ID: 0x0102  |  所在 Endpoint: 通常在 Endpoint 1(功能端点)

WindowCovering 是 Matter 中控制窗帘类设备的核心 Cluster,适用于电动卷帘、百叶窗、窗帘轨道、遮阳篷、投影幕布等所有需要「升降」或「倾斜」控制的设备。 它定义了窗帘的运动控制命令、位置反馈属性,以及设备类型与安全状态的完整描述。

位置值约定:0 = 全开,10000 = 全关

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 枚举值

0
Rollershade 卷帘
1
Rollershade - 2 Motor 双电机卷帘
2
Rollershade - Exterior 室外卷帘
3
Rollershade - Exterior - 2 Motor 室外双电机卷帘
4
Drapery 窗帘(左右拉开式)
5
Awning 遮阳篷
6
Shutter 百叶窗 / 卷闸
7
TiltBlindTiltOnly 倾斜百叶窗(仅支持倾斜)
8
TiltBlindLiftAndTilt 倾斜百叶窗(支持升降 + 倾斜)
9
ProjectorScreen 投影幕布
255
Unknown 未知类型

EndProductType 枚举值

0
RollerShade 卷帘
1
RomanShade 罗马帘
2
BalloonShade 气球帘
3
WovenWood 编织木帘
4
PleatedShade 风琴帘 / 蜂巢帘
5
RollerShutter 卷闸
6
ExteriorVenetianBlind 室外百叶窗
7
LateralLeftCurtain 左侧拉帘
8
LateralRightCurtain 右侧拉帘
9
CentralCurtain 对开帘
10
RollerCurtain 滚筒帘
11
ExteriorVerticalScreen 室外垂直遮阳屏
12
AwningTerracePatio 露台遮阳篷
13
AwningVerticalScreen 垂直遮阳篷
14
TiltOnlyInteriorBlind 室内百叶窗(仅倾斜)
15
InteriorBlind 室内百叶窗
16
VerticalBlindStripCurtain 垂直百叶帘 / 条帘
17
InteriorVenetianBlind 室内威尼斯百叶窗
18
ExteriorVenetianBlind 室外威尼斯百叶窗
19
LateralLeftVerticalBlind 左侧垂直百叶
20
LateralRightVerticalBlind 右侧垂直百叶
21
CentralVerticalBlind 对开垂直百叶
22
RollerShutterTerrace 露台卷闸
23
ProjectorScreen 投影幕布
255
Unknown 未知产品类型
Type vs EndProductType

Type 决定设备的机械能力(能升降、能倾斜、还是两者兼有),影响哪些 Feature 和命令可用。 EndProductType 是更细致的产品分类,主要用于 App 选择合适的图标和控制界面。 两者都是设备出厂固定的,不可修改。

ConfigStatus 位图

Bit 0
Operational 设备可正常运行(1 = 正常,0 = 未就绪)
Bit 1
OnlineReserved 在线(保留位,目前始终为 1)
Bit 2
LiftMovementReversed 升降方向反转(1 = 电机反向运行)
Bit 3
LiftPositionAware 升降位置感知(1 = 可报告精确位置)
Bit 4
TiltPositionAware 倾斜位置感知(1 = 可报告精确倾斜角度)
Bit 5
LiftEncoderControlled 升降编码器控制(1 = 使用编码器反馈位置)
Bit 6
TiltEncoderControlled 倾斜编码器控制(1 = 使用编码器反馈角度)

Mode 位图

Bit 0
MotorDirectionReversed 电机方向反转
Bit 1
CalibrationMode 校准模式(设备正在校准行程极限)
Bit 2
MaintenanceMode 维护模式(设备暂停正常操作)
Bit 3
LEDFeedback LED 反馈(1 = 运动时 LED 指示)

升降位置(0x0001–0x0011)

描述窗帘升降轴的当前位置、目标位置和行程极限。所有升降属性需要设备支持 LF(Lift) 特性。

percent100ths 与 percentage 的区别

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 方向)。

Bit 0–1
Global 全局运动方向(综合升降和倾斜的整体状态)
Bit 2–3
Lift 升降轴运动方向
Bit 4–5
Tilt 倾斜轴运动方向

SafetyStatus 位图

Bit 0
RemoteLockout 远程锁定(设备拒绝远程操作)
Bit 1
TamperDetection 篡改检测(设备检测到异常干预)
Bit 2
FailedCommunication 通信故障(与电机控制器通信失败)
Bit 3
PositionFailure 定位故障(位置传感器异常)
Bit 4
ThermalProtection 热保护(电机过热,暂停运行)
Bit 5
ObstacleDetected 检测到障碍物(运动路径上有阻挡)
Bit 6
Power 电源异常(供电不足或中断)
Bit 7
StopInput 外部停止信号(收到硬件停止输入)
Bit 8
MotorJammed 电机堵转
Bit 9
HardwareFailure 硬件故障
Bit 10
ManualOperation 手动操作中(用户正在手动拉动窗帘)

Feature 位图

WindowCovering Cluster 通过 FeatureMap(0xFFFC)声明设备支持哪些能力。Feature 的组合决定了哪些命令和属性可用:

Bit 0
LF(Lift) 支持升降运动 — 窗帘可以上下移动
Bit 1
TL(Tilt) 支持倾斜调节 — 百叶窗叶片可旋转
Bit 2
PA(Position Aware Lift) 位置感知 — 可报告和定位到精确百分比位置
Bit 3
AB(Absolute Position) 绝对位置 — 支持以设备内部单位定位
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:基础开合控制
  1. 发送 UpOrOpen (0x00) 打开窗帘,或 DownOrClose (0x01) 关闭窗帘
  2. 订阅 OperationalStatus (0x000A) 监控运动状态
  3. 运动过程中,用户可发送 StopMotion (0x02) 让窗帘停在当前位置
  4. 订阅 CurrentPositionLiftPercent100ths (0x000E) 实时更新 App 上的位置显示
场景 2:滑块精确控制位置
  1. 读取 FeatureMap (0xFFFC),确认设备支持 LF + PA 特性
  2. App 上展示一个 0%–100% 的滑块,0% = 全关,100% = 全开
  3. 用户拖动滑块到 70%(表示打开 70%),换算后发送 GoToLiftPercentage (0x05),参数 LiftPercent100thsValue = 3000(因为 0 = 全开,所以 100% - 70% = 30% = 3000)
  4. 订阅 CurrentPositionLiftPercent100ths 和 TargetPositionLiftPercent100ths,前者跟踪实际位置,后者可用于显示目标指示器
场景 3:百叶窗升降 + 叶片倾斜
  1. 读取 FeatureMap,确认设备同时支持 LF + TL(升降和倾斜)
  2. App 上展示两个控件:升降滑块 + 倾斜滑块
  3. 升降用 GoToLiftPercentage (0x05) 控制窗帘高度
  4. 倾斜用 GoToTiltPercentage (0x08) 调节叶片角度
  5. 用户场景:「百叶窗放到一半高度,叶片倾斜 45 度让光线进来但挡住视线」 — 升降发 5000,倾斜发 5000
场景 4:自动化 — 日出日落联动
  1. 早晨日出时,自动化规则触发 UpOrOpen (0x00) 打开所有窗帘
  2. 下午阳光强烈时,触发 GoToLiftPercentage (0x05) 关到 70%(LiftPercent100thsValue = 7000)
  3. 晚上日落后,触发 DownOrClose (0x01) 完全关闭
  4. 配合光照传感器(IlluminanceMeasurement Cluster),可实现更智能的光线自适应
场景 5:异常处理
  1. 订阅 SafetyStatus (0x001A),监控安全异常
  2. 如果 ObstacleDetected(Bit 5)为 1,说明窗帘运行路径有障碍物,App 应提示用户检查
  3. 如果 MotorJammed(Bit 8)为 1,说明电机堵转,可能需要维修
  4. 如果 ThermalProtection(Bit 4)为 1,电机过热保护中,等待冷却后自动恢复
  5. 检查 Mode (0x0017) 的 CalibrationMode(Bit 1),如果为 1 说明设备正在校准,暂不接受位置命令