单位本地化 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 与属性的关系

如果设备的 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 枚举值

0
Fahrenheit 华氏度(°F)—— 美国等少数地区使用
1
Celsius 摄氏度(°C)—— 全球大多数地区使用
2
Kelvin 开尔文(K)—— 科学/工业场景使用

命令(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 中的「温度单位设置」功能通常这样实现:

  1. 配网完成后,根据用户手机的地区设置自动判断偏好单位(Locale 为 en_US 等用华氏度,其余用摄氏度)
  2. 向设备 Endpoint 0 写入 TemperatureUnit
  3. App 端温度显示同步使用相同单位,保持一致
  4. 在设置页提供手动切换入口,用户随时可以改