Files
homeassistant-jackery/docs/PRD.md
wongshan-m1 a1a1f9d2c0 docs: replace Mermaid diagrams with PNG images for GitLab compatibility
GitLab 11 does not support Mermaid rendering. Exported 4 diagrams
(architecture, auth flow, config flow, energy mapping) as PNG images
and updated PRD.md to reference them.

Made-with: Cursor
2026-03-05 13:56:59 +08:00

436 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Jackery DIY3 系列 Home Assistant 集成插件 (HACS) 产品需求文档
---
## 文档版本历史
| 版本 | 日期 | 作者 | 变更说明 |
|------|------|------|----------|
| 1.0 | 2025-03-04 | 黄国庆 | 初稿:完整功能定义、架构设计、实体清单 |
---
## 1. 项目概述与用户价值
### 1.1 项目背景
Jackery华宝新能最新一代户用储能产品 **DIY3** 面向全球市场。为满足极客用户Geek User**数据主权****本地化控制** 的强烈诉求,需开发一款基于 Home Assistant Community Store (HACS) 分发的自定义集成插件,将 DIY3 主机及其配套智能配件Smart CT、Smart Plug无缝接入 Home Assistant 生态。
### 1.2 目标用户
| 用户画像 | 描述 |
|----------|------|
| 核心用户 | 拥有 Jackery DIY3 储能系统、同时是 Home Assistant 活跃用户的技术爱好者 |
| 典型特征 | 重视数据隐私、偏好本地优先架构、熟悉 HACS 安装流程、有能力自建 HA 实例 |
| 地域分布 | 欧美及亚太市场的独立屋/别墅用户为主 |
### 1.3 用户价值
#### 数据主权 (Data Sovereignty)
- 所有能源数据通过 **局域网 MQTT** 获取,设备连接用户本地 MQTT Broker不依赖云端中转。
- 数据在用户自有 HA 实例内存储与处理,完全由用户掌控。
- 即使互联网中断,本地数据采集与展示不受影响。
#### 无缝集成 (Seamless Integration)
- 一键通过 HACS 安装,标准 Config Flow 配置,无需编写 YAML。
- 支持 mDNS 设备自动发现,降低手动输入 IP 的门槛。
- 传感器实体完全适配 HA 原生 **Energy Dashboard**,用户可直接查看太阳能发电、电池充放、电网交互等能源数据。
#### 与云端共存 (Cloud Coexistence)
- 本地集成**不影响**设备与 Jackery Cloud 的连接。
- 用户可同时使用 Jackery APP云端和 HA本地查看设备数据两条通道独立并存、互不干扰。
---
## 2. 系统架构
### 2.1 整体架构描述
![系统架构图](img/architecture.png)
### 2.2 前置条件(用户侧)
Jackery 集成采用 **MQTT 协议** 通信,设备与 HA 之间需要一个 **本地 MQTT Broker** 作为消息中转。用户需在使用前完成以下准备:
| 序号 | 前置条件 | 说明 | 责任方 |
|------|----------|------|--------|
| ① | **部署 MQTT Broker** | 用户需在局域网内运行一个 MQTT Broker。推荐使用 Home Assistant 官方的 **Mosquitto broker Add-on**(在 HA 的「设置 → 加载项 → 加载项商店」中安装),也可使用任何标准 MQTT Broker如 EMQX、HiveMQ 等) | 用户 |
| ② | **配置 HA 内置 MQTT 集成** | 在 HA 的「设置 → 设备与服务 → 添加集成」中搜索并配置 **MQTT** 集成,填写 Broker 地址、端口、用户名/密码(如有),确保 HA 成功连接到 Broker | 用户 |
| ③ | **在 Jackery APP 中配置 MQTT 地址** | 在 APP 的设备设置中开启「本地访问 / HA 集成」,输入步骤 ① 中 Broker 的 **IP 地址与端口**,使设备连接到同一个 Broker | 用户 |
| ④ | **确保网络互通** | HA 运行设备、MQTT Broker、Jackery DIY3 主机三者需处于 **同一局域网**(或网络可达) | 用户 |
> **为什么需要用户自建 MQTT Broker**
>
> Jackery 集成采用 **Local First** 架构所有数据在用户本地网络内流转不经过任何云端服务。MQTT Broker 是实现本地发布/订阅通信的核心组件。Home Assistant 官方提供了开箱即用的 Mosquitto Add-on安装仅需点击几下绝大多数用户无需额外配置。
### 2.3 架构要点
| 要点 | 说明 |
|------|------|
| **连接方式** | 设备与 HA 通过局域网内的 MQTT Broker 通信Token 鉴权 |
| **MQTT Broker** | 用户自行部署(推荐 HA Mosquitto Add-onJackery 集成依赖 HA 内置 MQTT 集成与 Broker 通信 |
| **设备发现** | 支持 mDNS 自动发现局域网内的 DIY3 设备,同时支持手动输入设备 SN |
| **数据获取** | 设备通过 MQTT 主动上报状态与事件数据HA 集成定时通过 MQTT 发送数据请求指令5 秒间隔),获取主机及全部子设备数据 |
| **云端共存** | DIY3 主机同时保持与 Jackery Cloud 的独立连接APP 功能不受影响 |
| **子设备拓扑** | Smart CT 和 Smart Plug 通过主机内部协议连接HA 仅与主机通信;主机负责聚合子设备数据,统一通过 MQTT 上报 |
| **安全策略** | 本版本严格只读,仅提供 Sensor 与 Binary Sensor不包含任何控制类实体 |
### 2.4 授权流程
> **前提**:用户已完成 §2.2 中的前置条件MQTT Broker 已部署、HA MQTT 集成已配置)。
以下描述用户从零开始完成设备授权与集成配置的完整流程:
![授权流程图](img/auth_flow.png)
**授权流程分步说明:**
| 步骤 | 执行方 | 动作 |
|------|--------|------|
| 13 | 用户 → APP | 在 Jackery APP 中找到目标设备进入「Home Assistant / 本地访问」设置页,打开 MQTT/本地访问开关 |
| 4 | 用户 → APP | 在 APP 中输入本地 MQTT Broker 地址与端口(即 HA 所在机器的 IP 和 Mosquitto 端口) |
| 56 | APP → 设备 | APP 向设备下发指令,生成一次性 Local Access Token设备启用 MQTT 功能并连接用户本地 Broker |
| 7 | APP → 用户 | APP 界面展示 Token 与设备 SN支持复制 |
| 810 | 用户 → HA | 在 HA 中添加 Jackery 集成,选择已发现设备(或手动输入设备 SN粘贴 Token |
| 11 | HA → 设备 | HA 通过 MQTT 订阅设备主题,验证连通性与 Token 鉴权 |
| 12 | HA | 验证通过后自动识别设备型号,创建 Device 及全部 Sensor 实体 |
> **注意**:当前版本 Token 无过期机制,也不支持续期。后续版本将考虑 Token 生命周期管理(见第 9 节路线图)。
---
## 3. 核心约束
以下约束在本版本中 **必须严格遵守**,不可协商。
| 编号 | 约束 | 说明 |
|------|------|------|
| C-1 | **HACS 分发** | 以 Custom Component 形式通过 HACS 安装,不进入 HA 官方核心库 |
| C-2 | **Local First** | 通过局域网本地 MQTT Broker 通信,确保低延迟与断网可用 |
| C-3 | **云端共存** | 本地连接不影响设备与 Jackery Cloud 的通信APP 功能完整 |
| C-4 | **严格只读** | 本版本 **禁止任何控制操作**。不得包含 Switch、Number、Button 等可写实体,仅提供 Sensor 与 Binary Sensor |
| C-5 | **不暴露 EMS** | 能源管理策略充电优先级、市电互补等由设备端黑盒处理HA 仅展示最终状态 |
| C-6 | **Token 鉴权** | 使用 Jackery APP 生成的一次性 Token 进行身份验证 |
---
## 4. 设备支持范围
### 4.1 支持设备列表
| 设备 | 类型 | 数量限制 | 连接方式 |
|------|------|----------|----------|
| **DIY3 主机** | 储能主机 | 每条集成配置对应 1 台主机;同一 HA 支持添加多台 | 通过局域网 MQTT Broker 通信 |
| **Smart CT** | 智能互感器 | 每台主机最多 1 台 | 通过主机内部协议连接,数据由主机聚合上报 |
| **Smart Plug** | 智能插座 | 每台主机最多 10 个 | 通过主机内部协议连接,数据由主机聚合上报 |
### 4.2 Smart CT 规格
| 特性 | 说明 |
|------|------|
| 电气类型 | 支持单相与三相 |
| 上报数据 | 各相电压 (V)、电流 (A)、有功功率 (W);总有功功率 (W);能量 (kWh) |
| 典型用途 | 安装于家庭电表侧,监测家庭总负载与电网交互 |
### 4.3 Smart Plug 规格
| 特性 | 说明 |
|------|------|
| 上报数据 | 实时功率 (W)、累计能量 (kWh)、开关状态(只读展示) |
| 数量 | 单台主机最多配对 10 个 |
| 注意 | HA 中 **不可控制** 插座开关,遵循只读原则 |
---
## 5. 详细功能清单
### 5.1 配置流程 (Config Flow)
#### 5.1.1 流程设计
![Config Flow 流程图](img/config_flow.png)
#### 5.1.2 Config Flow 步骤
| 步骤 | 名称 | 说明 |
|------|------|------|
| Step 1 | 设备选择 | 展示通过 mDNS 发现的 DIY3 设备列表(显示设备名称 + SN同时提供「手动输入设备 SN」选项 |
| Step 2 | Token 输入 | 用户粘贴从 Jackery APP 获取的 Local Access Token可选填 MQTT 主题前缀(默认 `hb` |
| Step 3 | 连接验证 | 集成通过 MQTT 订阅设备主题,验证连通性与 Token 鉴权;失败时显示明确错误信息(见 5.1.3 |
| Step 4 | 设备创建 | 验证成功后自动识别设备型号及已连接的子设备CT、Plug创建 Device 与全部 Sensor 实体 |
#### 5.1.3 错误处理
| 错误场景 | 错误码 | 用户提示文案 |
|----------|--------|-------------|
| MQTT 不可用或设备不可达 | `cannot_connect` | "无法连接到设备请检查1) MQTT 集成已配置并连接到 Broker2) 设备已在 APP 中开启本地访问并连接到同一 Broker" |
| Token 无效 | `invalid_auth` | "Token 验证失败,请检查 Token 是否正确。可在 Jackery APP 中重新生成" |
| 设备已被添加 | `already_configured` | "该设备已添加到 Home Assistant" |
| 设备不支持 | `unsupported_device` | "该设备型号暂不支持,请确认固件已更新至最新版本" |
| 设备未启用本地访问 | `local_access_disabled` | "设备的本地访问功能未开启,请在 Jackery APP 中开启" |
#### 5.1.4 多设备支持
- **不限制实例数量**:用户可重复执行配置流程添加多台 DIY3 主机。
- 每台主机为独立的 HA Device其下挂载的 CT 和 Plug 为子设备。
- 各主机使用独立的 MQTT 主题订阅与数据请求任务,互不影响。
### 5.2 实体映射 (Entity Mapping)
#### 5.2.1 Entity ID 命名规范
```
sensor.jackery_{device_sn}_{entity_key}
binary_sensor.jackery_{device_sn}_{entity_key}
```
- `device_sn`:设备序列号,自动从 MQTT 消息中获取,全小写,特殊字符替换为下划线。
- `entity_key`:实体标识,采用 `snake_case`,与下方表格中的 Key 列对应。
- 子设备 Entity ID 格式:`sensor.jackery_{sub_device_sn}_{entity_key}`
**示例**
```
sensor.jackery_diy3a12345_battery_soc
sensor.jackery_diy3a12345_solar_power
sensor.jackery_ct00001_grid_import_power
sensor.jackery_plug00001_load_power
binary_sensor.jackery_diy3a12345_online
```
#### 5.2.2 DIY3 主机实体
DIY3 主机提供以下四类传感器,覆盖实时监控与长期统计需求:
- **实时功率**:光伏总输入及分路功率、电池充/放电功率、市电购电/馈网功率、EPS 离网输出功率、家庭用电功率(计算值)。
- **电池状态**SOC剩余电量百分比、SOH健康度、电池温度、已连接电池包数量。
- **能量统计**:光伏累计发电量、电池累计充/放电量、累计购电量、累计馈网电量、EPS 累计输出电量。所有能量传感器均适配 HA **Energy Dashboard**
- **运行状态**:在线/离线状态Binary Sensor、当前错误码及可读描述。
#### 5.2.3 Smart CT 实体
Smart CT 提供电网侧的电气监测数据:
- **功率**电网总有功功率以及各相A/B/C有功功率。
- **电压与电流**:各相电压 (V)、电流 (A)。
- **能量统计**:累计正向(购电)电量、累计反向(馈网)电量,适配 Energy Dashboard。
> 单相配置时仅创建 A 相实体;三相配置时自动创建 A/B/C 三相实体,由设备 API 返回的 CT 类型决定。
#### 5.2.4 Smart Plug 实体
Smart Plug 提供单一负载的用电监测:
- **实时功率**:插座负载功率 (W)。
- **能量统计**:插座累计用电量 (kWh),适配 Energy Dashboard。
- **开关状态**:以 Binary Sensor 只读展示当前开关状态(开/关),用户 **不可** 在 HA 中操控。
#### 5.2.5 HA Device 信息
- 每个设备在 HA 中注册为独立 Device以序列号 (SN) 唯一标识。
- 设备显示名称格式:`Jackery {型号} {SN 后 4 位}`(如 "Jackery DIY3 2345")。
- Smart CT 与 Smart Plug 通过 `via_device` 关联到所属 DIY3 主机,形成设备树。
#### 5.2.6 错误码
- 设备端上报数字错误码,集成内置映射表将其翻译为用户可读的描述文案。
- 错误码分为 Warning警告与 Error故障两个级别涵盖电池异常、光伏异常、电网异常、逆变器异常、子设备通讯丢失等类别。
- 未识别的错误码统一展示为 "Unknown Error ({code})"。
> 详细的实体字段定义(含 Key、单位、device_class、state_class 等)与错误码映射表见技术设计文档。
---
## 6. UI/UX 交互说明
### 6.1 设备页面
添加成功后,在 HA **设置 → 设备与服务 → Jackery** 下可看到:
- **设备列表**:每台 DIY3 主机为一个独立设备,其下关联的 CT 和 Plug 以子设备形式展示。
- **设备详情**显示设备型号、SN、固件版本如有、在线状态。
- **实体列表**:该设备下的全部 Sensor 与 Binary Sensor。
### 6.2 Home Energy Management 适配
HA 内置的 [Home Energy Management](https://www.home-assistant.io/docs/energy/) 是 Jackery 集成的核心展示场景。该模块支持电网、太阳能、电池、独立设备四大能源维度Jackery 集成需 **全面适配** 以下各项。
#### 6.2.1 适配总览
![Energy 适配总览](img/energy_mapping.png)
#### 6.2.2 Electricity Grid电网用电
HA Energy Dashboard 的电网模块需要区分 **从电网购入的电量****向电网馈出的电量**
| Dashboard 配置项 | 对应 Jackery 实体 | 数据来源 | 要求 |
|-----------------|------------------|----------|------|
| Grid consumption (购电) | `sensor.jackery_{sn}_grid_import_energy` | DIY3 主机上报 或 Smart CT 正向电量 | `device_class: energy`, `state_class: total_increasing`, 单位 kWh |
| Return to grid (馈网) | `sensor.jackery_{sn}_grid_export_energy` | DIY3 主机上报 或 Smart CT 反向电量 | 同上 |
> **Smart CT 优先**:当 Smart CT 已连接时,建议用户优先使用 CT 的 `grid_import_energy` / `grid_export_energy`,因为 CT 直接安装在电表侧,数据更准确。
#### 6.2.3 Solar Panels太阳能
| Dashboard 配置项 | 对应 Jackery 实体 | 要求 |
|-----------------|------------------|------|
| Solar production (发电量) | `sensor.jackery_{sn}_solar_energy` | `device_class: energy`, `state_class: total_increasing`, 单位 kWh |
> 用户也可同时配置 `solar_power`(实时功率 W用于 Energy Dashboard 的功率展示HA 2024.x 起支持在 Energy Dashboard 中配置 `state_class: measurement` 的功率传感器)。
#### 6.2.4 Home Batteries家庭电池
HA 的电池模块需要 **充电电量****放电电量** 两个传感器。
| Dashboard 配置项 | 对应 Jackery 实体 | 要求 |
|-----------------|------------------|------|
| Energy going in to battery (充电) | `sensor.jackery_{sn}_battery_charge_energy` | `device_class: energy`, `state_class: total_increasing`, 单位 kWh |
| Energy coming out of battery (放电) | `sensor.jackery_{sn}_battery_discharge_energy` | 同上 |
> **电池 SOC 展示**:虽然 Energy Dashboard 本身不直接使用 SOC但用户可在 Dashboard 卡片或自动化中使用 `battery_soc` 传感器,了解当前电池状态。
#### 6.2.5 Individual Devices独立设备
每个 Smart Plug 的用电量可作为独立设备接入 Energy Dashboard让用户追踪单一负载的能耗。
| Dashboard 配置项 | 对应 Jackery 实体 | 要求 |
|-----------------|------------------|------|
| Individual device (单个插座) | `sensor.jackery_{plug_sn}_load_energy` | `device_class: energy`, `state_class: total_increasing`, 单位 kWh |
> 每个 Smart Plug 可独立添加为一个 Individual Device最多支持 10 个。
#### 6.2.6 实体技术要求汇总
为确保所有能量传感器均能被 HA Energy Dashboard 自动识别,必须满足以下技术要求:
| 要求 | 说明 |
|------|------|
| `device_class` | 必须为 `energy` |
| `state_class` | 必须为 `total_increasing`累计递增值HA 自动处理归零/重置) |
| `native_unit_of_measurement` | 必须为 `kWh` |
| 数据连续性 | 设备重启或离线恢复后,累计值应从上次值继续递增而非归零 |
| 更新频率 | 能量值至少每 **60 秒** 更新一次(推荐随功率数据同步更新,即 5 秒) |
---
## 7. 非功能性需求
### 7.1 数据刷新
| 参数 | 值 | 说明 |
|------|-----|------|
| 数据请求间隔 | **5 秒** | 集成通过 MQTT 定时发送数据请求指令,兼顾实时性与资源占用 |
| 协议 | MQTT | 通过局域网本地 MQTT Broker发布/订阅模式 |
| 离线判定 | **60 秒** 无数据 | 超过 60 秒未收到设备 MQTT 消息,标记设备离线 |
### 7.2 离线与异常处理
| 场景 | 处理策略 |
|------|----------|
| 设备无 MQTT 消息 | 超过 **60 秒** 未收到设备上报数据,将该设备及其子设备全部实体标记为 `Unavailable` |
| 设备恢复在线 | 收到设备 MQTT 消息后自动恢复所有实体状态为 `Available` |
| 子设备离线 | CT 或 Plug 从设备 MQTT 消息中消失时,对应实体标记为 `Unavailable`;重新出现时恢复 |
| Token 失效 | 设备拒绝 Token 鉴权时,记录日志并在 HA 集成页面显示 **"Reauthentication Required"** 提示 |
| MQTT Broker 不可用 | 集成记录 warning 日志,待 Broker 恢复后自动重新订阅 |
| 消息格式异常 | JSON 解析失败时保持上一次有效数据,记录 warning 日志 |
### 7.3 性能要求
| 指标 | 目标值 |
|------|--------|
| MQTT 消息端到端延迟 | < 500ms局域网环境 |
| 内存占用 | < 50MB10 台设备场景) |
| CPU 影响 | 单台设备 MQTT 订阅对 HA 主进程 CPU 增量 < 1% |
### 7.4 兼容性
| 项目 | 要求 |
|------|------|
| Home Assistant 最低版本 | **2024.6.0**(需 MQTT 集成与最新 ConfigFlow API 支持) |
| MQTT 集成 | HA 内置 MQTT 集成需预先配置并连接到本地 Broker |
| Python 版本 | ≥ 3.12(随 HA 版本要求) |
| HACS 版本 | ≥ 2.0 |
| 设备固件 | 需设备端固件支持本地 MQTT 功能(由 Jackery APP ≥ 2.10.18 触发启用) |
---
## 8. 风险与限制声明
### 8.1 为何暂不开放 Write 权限
| 维度 | 说明 |
|------|------|
| **安全性** | 储能设备涉及大功率电池充放电,错误的控制指令可能引发电气安全风险。设备端 EMS能源管理系统包含复杂的保护逻辑温度限流、SOC 保护、并离网切换等),在 HA 侧开放控制需确保 **完全复现** 这些保护逻辑,否则存在安全隐患 |
| **可靠性** | HA 作为第三方平台,其自动化脚本、网络延迟等因素可能导致指令时序异常。储能设备对指令时序有严格要求(如并网/离网切换),不当操作可能导致设备保护性停机 |
| **责任边界** | 开放控制权限后,因第三方自动化引发的设备异常难以界定责任。从产品合规与用户安全角度,需待本地 API 的安全校验机制成熟后再逐步开放 |
| **EMS 复杂性** | 能源管理策略涉及电价时段、天气预测、电池寿命优化等多维度决策,当前由设备端黑盒实现。在 HA 侧暴露控制接口需要定义清晰的 API 语义与状态机,这需要更长的设计与测试周期 |
### 8.2 已知限制
| 限制 | 说明 | 影响 |
|------|------|------|
| Token 无续期 | 当前 Token 一次性生成,无过期与续期机制 | 若 Token 泄露,需用户在 APP 重新生成 |
| 无 TLS 加密 | 当前本地 MQTT 通信为明文 | 局域网内风险可控,但不适用于跨网段访问 |
| 不支持固件升级 | HA 集成不提供 OTA 功能 | 固件升级需通过 Jackery APP 完成 |
| 无历史数据回填 | 集成仅采集实时与累计数据 | 集成首次安装前的历史数据不可追溯 |
| 仅支持 DIY3 | 当前版本仅适配 DIY3 系列 | 其他型号需后续版本支持 |
---
## 9. 后期规划路线图
以下为基于当前版本的能力演进规划,按优先级排列:
| 优先级 | 阶段 | 功能 | 说明 |
|--------|------|------|------|
| P0 | V1.0 | **本版本交付内容** | 只读集成、mDNS 发现、MQTT 订阅与定时请求、全量 Sensor |
| P1 | V1.1 | **Token 生命周期管理** | Token 过期提醒、APP 端续期/吊销、HA 侧 Reauthentication Flow |
| P1 | V1.1 | **TLS 加密** | MQTT Broker 启用 TLS自签证书或 Jackery CA 签发),保护局域网通信 |
| P2 | V1.2 | **诊断与日志** | 在 HA 集成页面提供「诊断」按钮,导出连接日志与设备状态快照 |
| P2 | V1.2 | **可配置请求间隔** | 在集成 Options Flow 中允许用户调整数据请求频率1s30s |
| P2 | V1.2 | **设备友好命名** | 支持在配置流或 Options 中自定义设备显示名称 |
| P3 | V2.0 | **有限控制权限** | 开放低风险操作(如设置 SOC 上/下限),需设备端 API 支持指令校验 |
| P3 | V2.0 | **多型号支持** | 扩展至其他 Jackery 储能产品线 |
| P3 | V2.0 | **OAuth 2.0 授权** | 替换一次性 Token实现标准化的 OAuth 2.0 Device Flow 授权 |
| P4 | V2.x | **EMS 策略透传** | 在 HA 中展示/切换设备端预定义的 EMS 策略(如「自用优先」「馈网优先」),但策略执行仍由设备端负责 |
| P4 | V2.x | **HA 官方核心集成** | 代码质量与覆盖率达标后,提交至 HA 核心仓库,成为官方内置集成 |
| P4 | V2.x | **固件版本展示** | 在 HA Device 信息中展示当前固件版本,并提示是否有新版本可用(不执行 OTA |
---
## 附录 A术语表
| 术语 | 说明 |
|------|------|
| DIY3 | Jackery 最新一代户用储能产品项目代号/型号 |
| Smart CT | 智能互感器,安装于电表侧,监测电网交互数据 |
| Smart Plug | 智能插座,监测单一负载的功率与用电量 |
| EMS | Energy Management System能源管理系统 |
| SOC | State of Charge电池剩余电量百分比 |
| SOH | State of Health电池健康度百分比 |
| EPS | Emergency Power Supply应急电源/离网输出 |
| HACS | Home Assistant Community Store社区插件商店 |
| mDNS | Multicast DNS局域网设备自动发现协议 |
| Config Flow | HA 标准配置向导 UI 框架 |
| Energy Dashboard | HA 内置能源仪表盘 |
---
## 附录 B参考资料
| 资源 | 链接 |
|------|------|
| Home Assistant 开发文档 | https://developers.home-assistant.io/ |
| HACS 开发指南 | https://hacs.xyz/docs/developer/start |
| HA Energy Dashboard 文档 | https://www.home-assistant.io/docs/energy/ |
| HA Config Flow 文档 | https://developers.home-assistant.io/docs/config_entries_config_flow_handler |
| HA Sensor Entity 文档 | https://developers.home-assistant.io/docs/core/entity/sensor |
| Power Flow Card Plus | https://github.com/flixlix/power-flow-card-plus |
---
*文档结束*