Files
homeassistant-jackery/DATA_FORMAT.md
不求圣剑 3f698d6e16 first commit
2025-10-14 10:44:00 +08:00

3.3 KiB
Raw Blame History

数据传输格式说明

概述

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秒一次)

主题: /data/data-get
内容: get_data

2. 设备数据响应

主题: /device/data
格式: JSON
编码: UTF-8

完整数据格式

{
  "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 设备端示例

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 客户端测试:

# 监听数据获取请求
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 格式正确性
  • 必需字段存在性
  • 数值类型正确性
  • 数值范围合理性

如果数据格式不正确,会在日志中记录警告信息。