风扇 Cluster(FanControl)
Cluster ID: 0x0202 |
所在 Endpoint: 通常在 Endpoint 1(功能端点)
FanControl 是 Matter 中控制风扇设备的核心 Cluster,适用于 HVAC 系统风扇、吊扇、独立风扇等场景。 它定义了风扇模式切换、转速控制、摇头、风感模式、送风方向等全部能力。 风扇类设备的日常开发基本都围绕这个 Cluster 展开。
FanControl 的能力差异很大 —— 一个简单的 HVAC 风扇可能只支持百分比调速,
而一台高端吊扇可能同时支持多档位、自动模式、摇头、自然风和正反转。
开发前先读取 FeatureMap (0xFFFC),确认设备支持哪些 Feature,再决定 UI 布局。
Feature 位图
FanControl Cluster 通过 FeatureMap(0xFFFC)声明设备支持哪些能力。Feature 直接决定了哪些属性和命令可用:
一台普通 HVAC 风扇:FeatureMap = 0x00(无额外 Feature,仅百分比调速)。
一台高端吊扇:FeatureMap = 0x3F(全部 6 个 Feature),支持多档位、自动模式、摇头、风感、步进和正反转。
独立落地扇:FeatureMap = 0x0F(SPD + AUT + RCK + WND),有档位、自动、摇头和风感,但不支持步进和反转。
命令(Commands)
FanControl Cluster 只有一个命令 —— Step,用于步进式调整风速。
大部分风扇控制通过直接写属性完成(如写入 FanMode、PercentSetting、SpeedSetting 等),
Step 命令提供了一种不需要知道当前状态就能增减风速的便捷方式。
点击下方表格中的命令 ID 可跳转到详细说明。
| ID | 名称 | 说明 | Feature 要求 |
|---|---|---|---|
0x00 |
Step | 步进调速(增加或减少一档) | STEP |
Step —— 步进调速(0x00)
向风扇发送步进调速指令,逐级增大或减小风速。 具体增减的幅度由设备自行决定(通常对应一个百分比或一个档位)。 如果当前风速已到最大或最小值,再向同方向调整时设备会忽略(不报错)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Direction | StepDirectionEnum | 是 | 步进方向(见下方枚举) |
| Wrap | bool | 否 | 是否循环。true 表示到最大后再 Increase 会回到最小值(反之亦然) |
| LowestOff | bool | 否 | 循环时最低档是否为关闭。true 表示减到最低后再减一步会关闭风扇 |
StepDirection 枚举值
使用场景与参数
适合物理遥控器的「风速+」「风速-」按键 —— 每按一次发送一个 Step 命令,不需要事先读取当前速度。
如果 Wrap = true,用户可以不断按「风速+」循环切换档位(如:低 → 中 → 高 → 关 → 低 ...)。
属性详解
FanControl Cluster 的属性按功能分为五组。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x00 |
FanMode | enum8 | 风扇模式 | 当前工作模式 |
0x01 |
FanModeSequence | enum8 | 风扇模式 | 支持的模式序列 |
0x02 |
PercentSetting | uint8 / null | 百分比控制 | 目标风速百分比 |
0x03 |
PercentCurrent | uint8 | 百分比控制 | 实际风速百分比 |
0x04 |
SpeedMax | uint8 | 多档位控制 | 最大档位数 |
0x05 |
SpeedSetting | uint8 / null | 多档位控制 | 目标档位 |
0x06 |
SpeedCurrent | uint8 | 多档位控制 | 实际档位 |
0x07 |
RockSupport | bitmap8 | 摇头功能 | 支持的摇头方向 |
0x08 |
RockSetting | bitmap8 | 摇头功能 | 当前摇头设置 |
0x09 |
WindSupport | bitmap8 | 风感模式 | 支持的风感模式 |
0x0A |
WindSetting | bitmap8 | 风感模式 | 当前风感设置 |
0x0B |
AirflowDirection | enum8 | 送风方向 | 送风方向(正转/反转) |
风扇模式(0x00, 0x01)
控制风扇的工作模式和模式切换范围。FanMode 是最核心的控制属性 —— 大部分 App 界面上的模式按钮直接对应它。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x00 |
FanMode 风扇模式 |
enum8 | 风扇当前的工作模式。写入新值可切换模式。Auto 和 Smart 模式下设备自行调节转速。见下方枚举 |
0x01 |
FanModeSequence 模式序列 |
enum8 | 声明设备支持的模式组合。决定 FanMode 可写入哪些值 —— 如果序列里没有 Auto,就不能写 Auto。见下方枚举 |
FanMode 枚举值
写入 FanMode 时,设备会自动更新 PercentSetting 和 SpeedSetting(如果支持 SPD Feature)。
例如写入 FanMode = High 后,PercentSetting 可能自动变为 100。
反过来,直接写 PercentSetting 或 SpeedSetting 也可能导致 FanMode 联动变化。
读取状态时以 PercentCurrent / SpeedCurrent 为准,不要依赖 Setting 值。
FanModeSequence 枚举值
百分比控制(0x02, 0x03)
所有风扇都支持百分比控制 —— 这是最通用的调速方式,不依赖任何 Feature。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x02 |
PercentSetting 目标风速百分比 |
uint8 / null | 目标风速百分比,范围 0~100。写入 0 等同于 FanMode = Off。Nullable —— null 表示设备处于自动/智能模式,风速由设备自行管理 |
0x03 |
PercentCurrent 实际风速百分比 |
uint8 | 风扇当前实际运转的风速百分比,范围 0~100。这是只读属性,反映真实物理状态。界面展示应以此值为准 |
PercentSetting 是「目标值」(你想要多少),PercentCurrent 是「实际值」(风扇真正在转多少)。
两者可能不一致 —— 例如写入 PercentSetting = 60 后,由于电机特性或档位量化,
实际转速可能是 58% 或 65%。App 界面上展示风速时应使用 PercentCurrent。
多档位控制(0x04, 0x05, 0x06)
需要 SPD(MultiSpeed) Feature。百分比是连续值,档位是离散值 —— 对于有物理挡位的风扇(如 3 挡吊扇),用 SpeedSetting 比百分比更自然。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x04 |
SpeedMax 最大档位 |
uint8 | 设备支持的最大档位数,范围 1~100。只读属性。例如 SpeedMax = 3 表示风扇有 3 个档位(1、2、3) |
0x05 |
SpeedSetting 目标档位 |
uint8 / null | 目标档位,范围 0~SpeedMax。写入 0 等同于关闭。Nullable —— null 表示自动模式下由设备决定。需要 SPD Feature |
0x06 |
SpeedCurrent 实际档位 |
uint8 | 风扇当前实际运转的档位,范围 0~SpeedMax。只读属性。需要 SPD Feature |
设备内部会在百分比和档位之间自动换算。例如 SpeedMax = 4 的风扇:
写入 SpeedSetting = 2 后,PercentCurrent 大约是 50%;
写入 PercentSetting = 75 后,SpeedCurrent 大约是 3。
具体换算逻辑由设备固件决定,不一定是精确的线性映射。
摇头功能(0x07, 0x08)
需要 RCK(Rocking) Feature。控制风扇的物理摆动方向 —— 常见于独立风扇和部分吊扇。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x07 |
RockSupport 摇头能力位图 |
bitmap8 | 设备支持哪些摇头方向(只读)。见下方位图 |
0x08 |
RockSetting 摇头设置位图 |
bitmap8 | 当前启用的摇头方向。可读写,写入的值必须是 RockSupport 的子集。全部清零表示停止摇头 |
Rock 位图定义
RockSetting 是位图,可以同时启用多个方向。例如 RockSetting = 0x03(Bit 0 + Bit 1)表示同时左右 + 上下摇头。
但前提是 RockSupport 的对应位也是 1 —— 写入不支持的方向会被设备拒绝。
风感模式(0x09, 0x0A)
需要 WND(Wind) Feature。提供模拟自然风、睡眠风等非匀速送风模式,让体感更舒适。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x09 |
WindSupport 风感能力位图 |
bitmap8 | 设备支持哪些风感模式(只读)。见下方位图 |
0x0A |
WindSetting 风感设置位图 |
bitmap8 | 当前启用的风感模式。可读写,写入值必须是 WindSupport 的子集。全部清零表示匀速送风 |
Wind 位图定义
虽然 WindSetting 是位图格式,但 SleepWind 和 NaturalWind 通常互斥 —— 不应同时启用两种风感。 规范未明确禁止同时设置,但实际设备的行为未定义。建议 App 界面上设计为单选按钮。
送风方向(0x0B)
需要 AIRDIR(AirDirection) Feature。控制风扇叶片的旋转方向 —— 主要用于吊扇的夏/冬模式切换。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0B |
AirflowDirection 送风方向 |
enum8 | 风扇叶片的旋转方向。对于吊扇,正转向下送风(夏季),反转向上循环(冬季)。见下方枚举 |
AirflowDirection 枚举值
吊扇正反转的实际用途
夏季(Forward / 正转):叶片逆时针旋转,产生向下气流,人站在扇下感受到凉风。
冬季(Reverse / 反转):叶片顺时针旋转,将热空气沿天花板向下推送。
人不会直接感受到风吹,但房间温度更均匀,暖气效率更高。
很多用户不知道吊扇有这个功能 —— App 可以在换季时主动提示切换方向。
示例数据
一台支持全部 Feature 的智能吊扇在运转中的 FanControl Cluster 读取结果:
{
// --- 风扇模式 ---
"0x00": 5, // FanMode = Auto(自动模式)
"0x01": 2, // FanModeSequence = OffLowMedHighAuto
// --- 百分比控制 ---
"0x02": 60, // PercentSetting = 60(目标风速 60%)
"0x03": 58, // PercentCurrent = 58(实际风速 58%)
// --- 多档位控制(SPD Feature)---
"0x04": 10, // SpeedMax = 10(最多 10 档)
"0x05": 6, // SpeedSetting = 6(目标档位 6)
"0x06": 6, // SpeedCurrent = 6(实际档位 6)
// --- 摇头功能(RCK Feature)---
"0x07": 0x03, // RockSupport = 0x03(支持左右 + 上下)
"0x08": 0x01, // RockSetting = 0x01(当前左右摇头)
// --- 风感模式(WND Feature)---
"0x09": 0x03, // WindSupport = 0x03(支持睡眠风 + 自然风)
"0x0A": 0x02, // WindSetting = 0x02(当前自然风)
// --- 送风方向(AIRDIR Feature)---
"0x0B": 0 // AirflowDirection = Forward(正转送风)
}
最简单的风扇可能只有 FanMode(0x00)、FanModeSequence(0x01)、PercentSetting(0x02)和 PercentCurrent(0x03)四个属性。
其余属性都依赖 Feature。读取前先检查 FeatureMap (0xFFFC),
对不支持的属性发起读取会返回 UNSUPPORTED_ATTRIBUTE。
常见场景
场景 1:基础风扇控制
查看步骤
- 读取
FanModeSequence (0x01)确定设备支持哪些模式 - 写入
FanMode (0x00)切换模式(Off / Low / Medium / High) - 或者写入
PercentSetting (0x02)直接设置百分比风速 - 订阅
PercentCurrent (0x03)实时同步 App 界面的风速显示
场景 2:多档位风扇界面
查看步骤
- 确认
FeatureMap包含 SPD(Bit 0),读取SpeedMax (0x04)获取最大档位数 - 根据 SpeedMax 动态生成档位按钮(例如 SpeedMax = 5 就显示 1~5 五个按钮)
- 写入
SpeedSetting (0x05)切换档位 - 订阅
SpeedCurrent (0x06)更新界面上的当前档位高亮 - 如果同时支持 STEP Feature,可以用
Step命令配合遥控器的 +/- 按键
场景 3:吊扇完整控制面板
查看步骤
- 读取
FeatureMap,按支持的 Feature 显示/隐藏对应 UI 模块 - 风速区域:如有 SPD 显示档位滑块,否则显示百分比滑块
- 摇头区域(RCK):读取
RockSupport (0x07),只显示支持的方向选项。写入RockSetting (0x08)控制摇头 - 风感区域(WND):读取
WindSupport (0x09),显示支持的模式(睡眠风/自然风)。写入WindSetting (0x0A)切换风感 - 方向区域(AIRDIR):显示正转/反转切换按钮,写入
AirflowDirection (0x0B) - 提示:切换送风方向前建议先将风扇停止(
FanMode = Off),待方向切换完成后再开启
场景 4:HVAC 系统联动
查看步骤
- FanControl 通常和 Thermostat Cluster(0x0201)在同一个 Endpoint 上配合使用
- 当 Thermostat 的
SystemMode切换为FanOnly时,对应的 FanControl 开始工作 - 如果风扇支持 AUT Feature,可以设为
FanMode = Auto,让风扇根据温控需求自动调节转速 - 读取 Thermostat 的
ThermostatRunningState (0x29)中的 FanState 位,确认风扇是否在运转