低功耗 Cluster(LowPower)

Cluster ID: 0x0508  |  所在 Endpoint: 媒体端点(电视、机顶盒、流媒体棒等)

LowPower 是 Matter 中最简单的 Cluster 之一 —— 没有任何属性、没有事件、没有 Feature,只有唯一一个命令:Sleep。 它的职责非常单一:让媒体设备进入低功耗待机(Standby / Sleep)模式。

这个 Cluster 通常和 WakeOnLan Cluster(0x0503) 配合使用: LowPower 负责「让设备睡下去」,WakeOnLan 提供「把设备叫醒」所需的网络地址。 两者是媒体设备电源管理的一对搭档。

Sleep vs Off —— 为什么不直接用 OnOff?

OnOff Cluster 的 Off 命令语义是「关闭功能」,对灯来说是灭灯,对插座是断电。 但对电视而言,「关闭」通常不是断电,而是进入待机模式 —— 屏幕和主处理器休眠,但网卡仍然保持监听状态,以便远程唤醒。

LowPower 的 Sleep 命令明确表达了这种「进入低功耗待机」的语义, 与 OnOff 的 Off(彻底关闭功能)形成区分。 实际上,很多电视同时实现了两个 Cluster:OnOff 用于开/关机状态管理,LowPower 专门用于进入待机。

命令(Commands)

LowPower Cluster 只有 1 个命令,没有参数,也没有专用的返回数据。 这是 Matter 规范中最精简的命令定义之一。

ID 名称 参数 响应 说明
0x00 Sleep 无 Status 让设备进入低功耗待机模式

Sleep —— 进入待机(0x00)

让媒体设备进入低功耗待机(Sleep / Standby)模式。 命令没有任何参数,执行成功后设备返回通用的 Status = SUCCESS 响应。

设备收到 Sleep 命令后的具体行为由厂商实现决定,但通常包括:

  • 关闭屏幕和音频输出
  • 暂停或停止正在播放的媒体内容
  • 主处理器进入低功耗状态
  • 网卡保持活跃,继续监听 WoL Magic Packet(如果支持 WakeOnLan)

调用示例:

// Sleep 命令请求(Command ID: 0x00)
{
  "invokeRequests": [{
    "commandPath": {
      "endpointId": 1,
      "clusterId": "0x0508",
      "commandId": "0x00"       // Sleep
    }
    // 无参数字段 —— Sleep 是零参数命令
  }]
}

// 响应:Status = SUCCESS(无返回数据)
Sleep 之后可能无法通过 Matter 通信

设备进入深度待机后,Matter 通信栈可能随之关闭。 这意味着 Sleep 之后你无法再通过 Matter 命令唤醒设备 —— 唤醒需要走底层的 WoL 魔术包或用户物理操作(遥控器、机身按钮)。 因此,发送 Sleep 之前务必确保已缓存设备的 WakeOnLan 地址信息。

属性说明

LowPower Cluster 没有定义任何应用层属性。 这意味着你无法通过读取属性来判断设备当前是否处于待机状态 —— 设备一旦进入待机,通信都可能断开了,属性也就无从读取。

如果需要判断设备的在线/待机状态,通常有以下方式:

  • 监测设备的 Matter 会话(Session)是否仍然活跃
  • 通过 mDNS 广播观察设备是否仍可发现
  • 尝试读取其他 Cluster 属性(如 BasicInformation),超时即认为设备已待机
只有全局属性

虽然没有应用层属性,但 LowPower Cluster 仍然有 Matter 规范要求的全局属性 (ClusterRevision、FeatureMap、AttributeList 等)。 这些属性用于协议层面的版本协商和能力发现,不涉及业务功能。

关联 Cluster

LowPower 不是孤立存在的,它在媒体设备的电源管理中与另外两个 Cluster 紧密配合:

Cluster ID 职责 与 LowPower 的关系
WakeOnLan 0x0503 提供设备 MAC 地址用于 WoL 唤醒 互补关系:LowPower 让设备睡下,WakeOnLan 帮你把它叫醒
OnOff 0x0006 设备的开/关/切换控制 语义区分:Off = 关闭功能,Sleep = 进入待机(设备仍可被远程唤醒)

媒体设备的典型电源 Cluster 组合

一台智能电视通常同时实现以下三个 Cluster,分别覆盖电源管理的不同层面:

睡
LowPower(0x0508) Controller 发送 Sleep 命令,设备进入待机
醒
WakeOnLan(0x0503) Controller 读取 MAC 地址,发送 Magic Packet 唤醒设备
开关
OnOff(0x0006) 管理设备的开机/关机状态(语义不同于待机)

示例数据

读取一台电视的 LowPower Cluster 属性(几乎没有业务数据):

{
  // LowPower Cluster(0x0508)没有应用层属性
  // 它是一个纯命令型 Cluster,只提供 Sleep 命令
  // 读取该 Cluster 只会返回全局属性(ClusterRevision、FeatureMap 等)

  "0xFFFD": 1,              // ClusterRevision = 1
  "0xFFFC": 0               // FeatureMap = 0(无 Feature)
}
开发提示

LowPower Cluster 的存在本身就是一种能力声明 —— 如果设备的某个 Endpoint 上有这个 Cluster, 说明该设备支持通过 Matter 进入待机模式。 你可以通过 Descriptor Cluster 的 ServerList 属性 来检查设备是否实现了 LowPower(0x0508),从而决定是否在 UI 上显示「待机」按钮。

常见场景

场景 1:语音助手关闭电视(Sleep + WoL 缓存)

用户对着智能音箱说「关闭客厅电视」,要求电视进入待机模式,同时保留远程唤醒能力。

  1. Hub 确认目标设备的 Endpoint 上存在 LowPower Cluster(检查 Descriptor 的 ServerList)
  2. Hub 检查本地缓存中是否已有该设备的 WakeOnLan 地址(MAC / Link-Local)
  3. 如果没有缓存,先读取 WakeOnLan Cluster 的 MACAddress 并存储到本地
  4. 向设备发送 LowPower 的 Sleep (0x00) 命令
  5. 设备关闭屏幕和音频,进入低功耗待机模式
  6. Matter 通信可能断开 —— Hub 记录设备状态为「待机」
  7. 后续用户说「打开电视」时,Hub 使用缓存的 MAC 地址发送 WoL Magic Packet 唤醒

关键点:Sleep 命令发送前必须确保 WakeOnLan 地址已缓存。 一旦设备进入深度待机,Matter 通信断开,就再也无法通过 Matter 读取 MAC 地址了。

场景 2:定时待机(节能自动化)

用户设置了节能自动化规则:每晚 23:00 如果电视仍在运行,自动进入待机以节省电量。

  1. 自动化引擎在 23:00 触发
  2. 通过 OnOff Cluster 读取电视的 OnOff (0x0000) 属性,确认当前是否开启
  3. 如果 OnOff = true(电视仍在运行),发送 LowPower 的 Sleep 命令
  4. 电视进入待机模式,屏幕熄灭,但网卡保持活跃
  5. 第二天早上,用户可以通过遥控器、语音助手或 WoL 唤醒电视

为什么用 Sleep 而不是 Off? Sleep 让设备保持可远程唤醒的状态,OnOff 的 Off 可能导致设备完全关机, 需要用户物理按下电源按钮才能开启,对智能家居场景不友好。