Files
homeassistant-jackery/custom_components/jackery/README.md
2026-01-22 17:53:21 +08:00

216 lines
6.2 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 - Home Assistant 自定义集成
这是一个 Home Assistant 自定义集成,用于通过 MQTT 接收 Jackery 储能设备的监控数据并创建传感器实体。
## 功能特性
该集成采用**协调器模式**Coordinator Pattern所有传感器共享一个 `JackeryDataCoordinator` 实例,统一管理 MQTT 订阅和数据请求,提高效率并减少资源占用。
### 传感器列表
集成提供以下丰富的传感器数据:
#### 🔋 电池信息
- **Battery SOC** (电池电量) - 单位:%
- **Battery Charge Power** (电池充电功率) - 单位W
- **Battery Discharge Power** (电池放电功率) - 单位W
- **Battery Temperature** (电池温度) - 单位°C
- **Battery Count** (电池数量)
#### ☀️ 太阳能 (PV)
- **Solar Power** (太阳能总功率) - 单位W
- **Solar Power PV1 - PV4** (各路 PV 功率) - 单位W
#### ⚡ 电网 (Grid)
- **Grid Import Power** (电网取电功率) - 单位W
- **Grid Export Power** (电网馈电功率) - 单位W
- **Max Output Power** (最大并网输出功率) - 单位W
#### 🔌 EPS (离网输出)
- **EPS Output Power** (EPS 输出功率) - 单位W
- **EPS Input Power** (EPS 输入功率) - 单位W
- **EPS State** (EPS 状态)
- **EPS Switch Status** (EPS 开关状态)
#### ⚙️ 设置与状态
- **SOC Charge Limit** (充电 SOC 限制) - 单位:%
- **SOC Discharge Limit** (放电 SOC 限制) - 单位:%
- **Auto Standby Allowed** (是否允许自动待机)
- **Auto Standby Status** (自动待机状态)
## 前置要求
⚠️ **重要:本集成依赖 Home Assistant 的 MQTT 集成**
在安装 Jackery 之前,您必须先配置 MQTT 集成:
1. 进入 Home Assistant 的 **设置****设备与服务**
2. 点击 **添加集成**,搜索 **MQTT**
3. 配置您的 MQTT broker 连接信息:
- **Broker**: MQTT broker 地址(例如:`localhost``core-mosquitto` 或 IP 地址)
- **Port**: 端口号(默认:`1883`
- **Username/Password**: 如需要认证,请填写
## 安装步骤
### 方式 A通过 HACS 安装(推荐)
1. 确保已安装 [HACS](https://hacs.xyz/)
2. 进入 HACS → 集成
3. 点击右上角菜单 → 自定义仓库
4. 添加此仓库 URL 并选择类别为"集成"
5. 搜索 "Jackery" 并安装
6. 重启 Home Assistant
### 方式 B手动安装
`custom_components/jackery` 文件夹复制到 Home Assistant 的 `config/custom_components/` 目录下:
```
config/
custom_components/
jackery/
__init__.py
manifest.json
sensor.py
config_flow.py
strings.json
translations/
```
然后重启 Home Assistant。
### 配置集成
1. 进入 Home Assistant 的 **设置****设备与服务**
2. 点击右下角的 **添加集成** 按钮
3. 搜索 "Jackery"
4. **Token**: 输入您的设备 Token必填用于认证
5. **MQTT Topic Prefix**: 输入 MQTT 主题前缀(可选,默认:`hb`
6. 点击提交完成配置
如果 MQTT 集成未配置或不可用,将显示错误提示。
## 架构设计
### 协调器模式
集成使用 `JackeryDataCoordinator` 类统一管理所有传感器的数据获取:
- **单一协调器实例**:所有传感器共享一个协调器,避免重复订阅和请求
- **统一数据请求**:每 10 秒发送一次查询请求
- **自动分发数据**:协调器接收响应后,根据 JSON 字段自动分发给对应的传感器
- **自动发现设备**:通过监听状态主题自动获取设备序列号 (SN)
### 数据流程
1. **发现阶段**
- 协调器订阅通配符主题 (`hb/device/+/status`)
- 当接收到消息时,从主题中提取设备 SN (`hb/device/{sn}/status`)
2. **轮询阶段**
- 获得设备 SN 后,启动定时任务(默认 10秒
-`hb/device/{sn}/action` 发送查询指令 (`type: 25`)
3. **数据处理**
- 接收设备在 `status` 主题回复的 JSON 数据
- 解析 JSON 字段(如 `batSoc`, `pvPw` 等)
- 转换数据单位(如温度除以 10
- 更新所有关联的传感器实体状态
## MQTT 主题格式
集成使用以下 MQTT 主题模式(假设前缀为默认的 `hb`
- **状态/数据主题**: `hb/device/{sn}/status`
- 设备在此主题发布实时状态数据
- Payload 示例:
```json
{
"batSoc": 85,
"batInPw": 0,
"batOutPw": 150,
"cellTemp": 255,
"pvPw": 400,
...
}
```
- **控制/查询主题**: `hb/device/{sn}/action`
- 集成向此主题发送查询指令
- Payload 示例:
```json
{
"type": 25,
"eventId": 0,
"messageId": 1234,
"ts": 1700000000,
"token": "YOUR_TOKEN",
"body": null
}
```
## 查看传感器
配置完成后,你可以在以下位置查看传感器:
- **开发者工具** → **状态** → 搜索 "jackery" 或传感器名称
- 传感器实体 ID 格式:`sensor.battery_soc`、`sensor.solar_power` 等
- 每个传感器包含以下属性:
- `device_sn`: 设备序列号
- `raw_key`: 原始 JSON 字段名
## 在 Lovelace 中使用
你可以使用这些传感器创建能源流图表。例如使用 Energy Flow Card Plus
```yaml
type: custom:energy-flow-card-plus
entities:
solar:
entity: sensor.solar_power
name: Solar
grid:
entity:
consumption: sensor.grid_import_power
production: sensor.grid_export_power
name: Grid
battery:
entity:
consumption: sensor.battery_charge_power
production: sensor.battery_discharge_power
state_of_charge: sensor.battery_soc
name: Battery
home:
entity: sensor.eps_output_power # 或其他代表家庭负载的传感器
name: Home
```
## 故障排除
### 常见问题
1. **无法发现设备**
- 确认设备已连接到 MQTT Broker
- 使用 MQTT 工具(如 MQTT Explorer监听 `hb/#`,确认设备是否有发送消息
- 确认配置中的 "Topic Prefix" 与设备实际使用的一致(默认为 `hb`
2. **有设备 SN 但无数据更新**
- 检查 Token 是否正确
- 检查日志中是否有 "Sent poll request" 记录
- 确认设备是否响应了 `type: 25` 的请求
### 启用调试日志
在 `configuration.yaml` 中添加:
```yaml
logger:
default: info
logs:
custom_components.jackery: debug
```
## 许可证
MIT License