# 数据传输格式说明 ## 概述 Energy Monitor 系统使用 MQTT 协议进行数据传输,包含两个主要的通信方向: 1. **Home Assistant → 设备**: 发送数据获取请求 2. **设备 → Home Assistant**: 返回设备数据 ## 数据流图 ``` Home Assistant 集成 │ ▼ /data/data-get (请求) │ ▼ 设备端处理 │ ▼ /device/data (响应) │ ▼ Home Assistant 集成 │ ▼ 更新传感器状态 ``` ## 数据格式 ### 1. 数据获取请求 **主题**: `/data/data-get` **格式**: 纯文本 **内容**: `get_data` **频率**: 每秒5次(每0.2秒一次) ```bash 主题: /data/data-get 内容: get_data ``` ### 2. 设备数据响应 **主题**: `/device/data` **格式**: JSON **编码**: UTF-8 #### 完整数据格式 ```json { "solar_power": 1500.5, "home_power": 1200.0, "grid_import": 300.0, "grid_export": 0.0, "battery_charge": 200.0, "battery_discharge": 0.0, "battery_soc": 85.5 } ``` #### 字段说明 | 字段名 | 类型 | 单位 | 说明 | |--------|------|------|------| | `solar_power` | float | W | 太阳能发电功率 | | `home_power` | float | W | 家庭用电功率 | | `grid_import` | float | W | 从电网购买功率 | | `grid_export` | float | W | 向电网出售功率 | | `battery_charge` | float | W | 电池充电功率 | | `battery_discharge` | float | W | 电池放电功率 | | `battery_soc` | float | % | 电池电量百分比 | ## 使用示例 ### Python 设备端示例 ```python import json import paho.mqtt.client as mqtt def on_message(client, userdata, msg): if msg.topic == "/data/data-get": # 收到数据请求,发送设备数据 data = { "solar_power": 1500.5, "home_power": 1200.0, "grid_import": 300.0, "grid_export": 0.0, "battery_charge": 200.0, "battery_discharge": 0.0, "battery_soc": 85.5 } # 发送到 /device/data 主题 client.publish("/device/data", json.dumps(data)) # 设置 MQTT 客户端 client = mqtt.Client() client.on_message = on_message client.connect("192.168.0.101", 1883, 60) client.subscribe("/data/data-get") client.loop_forever() ``` ### 测试命令 使用 mosquitto 客户端测试: ```bash # 监听数据获取请求 mosquitto_sub -h 192.168.0.101 -t "/data/data-get" # 监听设备数据 mosquitto_sub -h 192.168.0.101 -t "/device/data" # 手动发送数据请求 mosquitto_pub -h 192.168.0.101 -t "/data/data-get" -m "get_data" # 手动发送设备数据 mosquitto_pub -h 192.168.0.101 -t "/device/data" -m '{"solar_power": 1500.5, "home_power": 1200.0}' ``` ## 注意事项 1. **JSON 格式**: 设备数据必须是有效的 JSON 格式 2. **数值类型**: 所有功率值应为数字类型(int 或 float) 3. **电量范围**: battery_soc 应在 0-100 之间 4. **功率单位**: 所有功率值单位为瓦特 (W) 5. **实时性**: 数据应尽可能实时更新 6. **错误处理**: 设备端应处理数据请求失败的情况 ## 数据验证 Home Assistant 集成会验证接收到的数据: - JSON 格式正确性 - 必需字段存在性 - 数值类型正确性 - 数值范围合理性 如果数据格式不正确,会在日志中记录警告信息。