单位本地化 Cluster(Unit Localization)
Cluster ID: 0x002D |
所在 Endpoint: Endpoint 0(Root Node)
Unit Localization 用于存储用户的温度单位显示偏好。设备收到这个设置后,在本地屏幕、面板等界面上按用户偏好的单位展示温度。 这是 Matter 中最简单的 Cluster 之一 —— 只有 1 个属性,没有命令,通过 Write 操作直接配置。
恒温器面板上显示的是华氏度,但用户习惯看摄氏度?写入 TemperatureUnit = Celsius 即可切换。
这个 Cluster 只影响显示单位,不会改变设备内部的温度数据(内部始终使用标准单位存储和传输)。
Feature Map
Unit Localization 定义了一个 Feature —— TEMP。设备声明支持该 Feature 后,才会暴露 TemperatureUnit 属性。
| Bit | 代号 | 名称 | 说明 |
|---|---|---|---|
0 |
TEMP | Temperature Unit | 支持温度单位配置。启用后暴露 TemperatureUnit 属性 |
如果设备的 Feature Map 中 TEMP 位为 0,则不会暴露 TemperatureUnit 属性,读取会返回 UNSUPPORTED_ATTRIBUTE。
对于恒温器、温度传感器这类需要显示温度的设备,通常都会启用 TEMP。
属性总览
Unit Localization 只有一个属性,依赖 TEMP Feature。
| ID | 名称 | 类型 | 读写 | 依赖 Feature | 说明 |
|---|---|---|---|---|---|
0x00 |
TemperatureUnit | enum8 | 读写 | TEMP | 温度显示单位偏好 |
TemperatureUnit(温度显示单位)
用户偏好的温度显示单位。写入该属性后,设备在本地界面(屏幕、面板、LED 等)上按指定单位显示温度值。 这个属性不影响设备通过 Matter 协议上报的温度数据 —— 协议传输的温度始终以 0.01°C 为单位。
TempUnitEnum 枚举值
命令(Commands)
Unit Localization 没有定义任何命令。所有配置通过直接 Write 属性完成。 这是 Matter 中常见的模式 —— 对于纯配置类的 Cluster,直接读写属性比定义专用命令更简洁。
想切换温度单位?直接对 TemperatureUnit 属性发一个 Write 请求就行。
不需要 Timed Interaction,也没有安全限制。
Write 请求示例(切换到摄氏度):
{
"writeRequests": [{
"attributePath": {
"endpointId": 0,
"clusterId": "0x002D",
"attributeId": "0x00" // TemperatureUnit
},
"attributeValue": 1 // Celsius(摄氏度)
}]
}
Read 请求示例(查询当前设置):
{
"attributeRequests": [{
"endpointId": 0,
"clusterId": "0x002D",
"attributeId": "0x00" // TemperatureUnit
}]
}
示例数据
读取一台恒温器设备 Endpoint 0 上的 Unit Localization Cluster 属性:
{
// --- 属性 ---
"0x0": 0 // TemperatureUnit = Fahrenheit(华氏度)
}
实际场景
场景一:美国用户 —— 保持华氏度
一位美国用户购买了一台 Matter 恒温器。恒温器出厂默认 TemperatureUnit = Fahrenheit,
面板上显示 72°F。用户习惯华氏度,无需修改。
App 配网完成后读取属性,发现 TemperatureUnit = 0(Fahrenheit),App 界面同步以 °F 显示温度。
用户在 App 和设备面板上看到的单位一致,不需要额外操作。
场景二:公制用户 —— 切换到摄氏度
一位中国用户购买了同一台恒温器(出厂默认华氏度)。面板上显示 72°F,用户看不懂。
用户在 App 设置中选择「摄氏度」,App 向设备写入 TemperatureUnit = 1(Celsius)。
写入成功后,恒温器面板立即切换显示为 22°C。App 界面也同步以 °C 显示。 注意:设备通过 Matter 协议上报的原始数据(比如 Thermostat Cluster 的 LocalTemperature)始终是 0.01°C 为单位的整数值, 不受 TemperatureUnit 的影响。这个属性只控制设备本地显示和 App 的展示偏好。
App 中的「温度单位设置」功能通常这样实现:
- 配网完成后,根据用户手机的地区设置自动判断偏好单位(
Locale为en_US等用华氏度,其余用摄氏度) - 向设备 Endpoint 0 写入
TemperatureUnit - App 端温度显示同步使用相同单位,保持一致
- 在设置页提供手动切换入口,用户随时可以改