光照度测量 Cluster(IlluminanceMeasurement)
Cluster ID: 0x0400 |
所在 Endpoint: 通常在 Endpoint 1+(功能端点)
IlluminanceMeasurement 用于上报环境光照强度(单位 lux)。 这是一个纯只读的 Server Cluster —— 没有任何命令,只有 5 个属性。 光照传感器、多合一环境传感器、智能窗帘控制器等设备会用到它。
MeasuredValue 不是 lux 的直接值,而是经过对数变换后的整数:
MeasuredValue = 10000 × log10(lux) + 1
反向换算(App 必须做的):
lux = 10(MeasuredValue - 1) / 10000
例如设备返回 10001,实际光照是 10 lux,不是一万多 lux。
直接展示原始值会让用户误以为亮度极高。展示前必须做对数反转。
1 = 1 lux(月光) |
10001 = 10 lux(昏暗走廊) |
20001 = 100 lux(普通室内) |
30001 = 1000 lux(阴天户外) |
40001 = 10000 lux(晴天户外)
值为 0 表示光照低于传感器可测下限;值为 null 表示传感器尚未完成测量或数据无效,App 应显示"--"。
属性总览
IlluminanceMeasurement 有 5 个属性,其中 MeasuredValue 是最核心的。点击属性 ID 可跳转到详细说明。
| ID | 名称 | 类型 | 读写 | 说明 |
|---|---|---|---|---|
0x00 |
MeasuredValue | uint16 / null | 只读 | 当前光照度(对数刻度),Nullable |
0x01 |
MinMeasuredValue | uint16 / null | 只读 | 传感器可测最低光照度,Nullable |
0x02 |
MaxMeasuredValue | uint16 / null | 只读 | 传感器可测最高光照度,Nullable |
0x03 |
Tolerance | uint16 | 只读 | 测量容差(对数刻度) |
0x04 |
LightSensorType | enum8 / null | 只读 | 传感器类型,Nullable |
属性详解
MeasuredValue(当前光照度)
传感器最近一次测量到的光照强度,采用对数刻度编码。这是整个 Cluster 最核心的属性。
- 类型: uint16,Nullable
- 有效范围:
1~65534(对应约 1 lux ~ 3.5 × 106 lux) - 特殊值:
0= 光照低于可测下限;null= 数据无效或未完成测量 - 换算:
lux = 10(MeasuredValue - 1) / 10000
{`// 设备返回 MeasuredValue
val rawValue: Int? = 10001 // Nullable,可能为 null
val lux = when {
rawValue == null -> null // 传感器未就绪
rawValue == 0 -> 0.0 // 低于可测下限
else -> Math.pow(10.0, (rawValue - 1).toDouble() / 10000.0)
}
// rawValue = 10001 → lux = 10.0
// rawValue = 20001 → lux = 100.0
// rawValue = 30001 → lux = 1000.0
// 显示时处理 null 和精度
val display = lux?.let { String.format("%.0f lux", it) } ?: "--"`}
MinMeasuredValue(可测最低光照度)
传感器能够测量的最低光照度值(对数刻度编码)。当 MeasuredValue 为 0 时,
表示实际光照低于此下限。
- 类型: uint16,Nullable
- 范围:
1~65533 - Nullable: 为
null时表示设备未定义下限
MaxMeasuredValue(可测最高光照度)
传感器能够测量的最高光照度值(对数刻度编码)。
MeasuredValue 不会超过此值。
- 类型: uint16,Nullable
- 范围:
2~65534,且必须大于MinMeasuredValue - Nullable: 为
null时表示设备未定义上限
Tolerance(测量容差)
传感器的测量精度容差,同样采用对数刻度。这是可选属性,不是所有设备都上报。
- 类型: uint16(无符号)
- 范围:
0~2048
LightSensorType(传感器类型)
描述设备使用的光照传感器类型。不同传感器类型在光谱响应和灵敏度上有差异。
值为 null 表示传感器类型未知。
LightSensorTypeEnum 枚举值
命令
IlluminanceMeasurement 是一个纯只读的 Server Cluster,没有任何命令。 设备负责采集光照数据并更新属性,App 端只需读取(Read)或订阅(Subscribe)即可获取数据。
示例数据
读取一个光照传感器的 IlluminanceMeasurement Cluster 属性:
{
// --- IlluminanceMeasurement Cluster(Endpoint 1)---
"0x0": 10001, // MeasuredValue = 10001 → 10 lux(普通走廊照度)
"0x1": 1, // MinMeasuredValue = 1 → 1 lux
"0x2": 50001, // MaxMeasuredValue = 50001 → 100000 lux
"0x3": 0, // Tolerance = 0(未上报容差)
"0x4": 0 // LightSensorType = Photodiode
}
订阅光照变化 —— 实时跟踪光照更新:
{
// 订阅光照变化(每 10 秒~2 分钟上报一次)
"subscribeRequests": [{
"attributePath": {
"endpointId": 1,
"clusterId": "0x0400",
"attributeId": "0x00" // MeasuredValue
},
"minIntervalFloor": 10, // 最少 10 秒上报一次
"maxIntervalCeiling": 120 // 最多 2 分钟上报一次
}]
}
常见场景
场景 1:读取并展示当前光照度
- 读取
MeasuredValue (0x00),先判断null(传感器未就绪)和0(低于可测下限) - 对数反转:
lux = 10(MeasuredValue - 1) / 10000 - 根据 lux 值选择合适的展示单位 —— 低于 1000 显示整数(如"320 lux"),超过 1000 可用"klux"(如"12.5 klux")
- 可选:读取
LightSensorType (0x04),在设备详情页展示传感器类型
场景 2:自动窗帘 / 灯光联动
- 订阅
MeasuredValue (0x00),持续监听光照变化 - 设定阈值 —— 例如低于 100 lux(对应 MeasuredValue ≈ 20001)时自动开灯,高于 500 lux(对应 ≈ 26990)时自动关灯
- 加入回差(Hysteresis) —— 开灯阈值和关灯阈值拉开差距,避免阴天云层间歇导致灯光反复开关
- 结合 OccupancySensing Cluster(0x0406):只在有人时响应光照变化,无人时保持关灯
场景 3:日照统计与节能分析
- 定时采样
MeasuredValue(如每 5 分钟一次),转换为 lux 后存储 - 按日统计光照曲线 —— 可以判断房间朝向、遮光效果
- 结合 LevelControl Cluster(0x0008)的调光记录,分析自然光利用率,优化灯光策略
- 对数刻度天然适合大范围光照记录 —— 从月光(1 lux)到直射阳光(100000 lux)都能精确表达