这份指南把原始接口文档整理成"先跑通,再扩展"的顺序:先找设备,再读状态,最后再做控制和透传。默认端口:TCP 8080;数据格式:JSON / Modbus;推荐顺序:mDNS → JSON → 控制 → 透传。
电表与读表器
功率 / 用电
PV / AC / 电池
有功功率
充电枪 1 / 2
功率 / 温度
这份指南把原始接口文档整理成"先跑通,再扩展"的顺序:先找设备,再读状态,最后再做控制和透传。最适合第一次接入的人:只想快速把 EMS 数据接进自己的程序、看板、网关或平台。
| 维度 | 建议 |
|---|---|
| 第一步 | 先通过 mDNS 找到设备 IP 和端口 |
| 第二步 | 用 HA JSON 读取设备参数,确认连通 |
| 第三步 | 再读能源控制参数,最后做写入 |
| 第四步 | 如果你已有工业协议,再看 RTU / TCP 透传 |
如果不知道先接哪个接口,按下面这个顺序走,最省时间。
| 场景 | 优先接口 | 原因 |
|---|---|---|
| 先确认设备能连通 | mDNS + HA JSON 读取 |
只读接口风险低,最容易验证网络和设备状态 |
| 只做运行监测 | HA JSON 数据接口 |
能拿到设备状态、功率、SOC 等数据 |
| 要改策略或限值 | 能源控制参数接口 | 支持读取和设置控制参数 |
| 已有 RTU 报文 | Modbus RTU 透传接口 |
可以把现有报文直接转发给 EMS |
| 系统原生 Modbus | Modbus TCP 接口 |
适合 PLC、网关和工业上位机 |
s_ip 和 s_port。
Response、SerialNumber、Target 等关键字段。
JSON 请求里最重要的是几个固定字段:Get / Set / Response / SerialNumber / CommandSource / Target。
Get
读取方法名,例如 EnergyParameter
Set
设置方法名,例如 EnergycontrolparametersList、DataTransmission
Response
响应方法名,用于确认返回类型
SerialNumber
请求序号,建议每次自增 1
CommandSource
命令来源,常见为 Web
Target
响应目标,常见为 Web 或 HA
请求示例:
{
"Get": "EnergyParameter",
"SerialNumber": 1,
"CommandSource": "Web"
}
mDNS 负责回答两个问题:设备在哪里、这台设备是什么。
7.1 mDNS 字段表
| 字段 | 描述 | 类型 |
|---|---|---|
_http._tcp |
服务类型标识 | 字符串 |
SXD-mDNS.local |
域名 | 字符串 |
s_sn |
设备序列号 | 字符串 |
s_ip |
设备 IP 地址 | 字符串 |
s_port |
服务端口 | 字符串 |
s_type |
设备类型 | 字符串 |
7.2 mDNS 数据示例
{
"_http._tcp": "SXD-mDNS-IF-NKYWLTS011",
"SXD-mDNS.local": "8080",
"s_sn": "NKYWLTS011",
"s_ip": "192.168.3.206",
"s_port": "8080",
"s_type": "131"
}
这个接口最适合做监控、看板和首次联通测试。先把"获取设备参数"跑通,再逐步扩字段。
建议先看顶层摘要字段,再展开设备列表。这样调试时最容易判断是网络问题、报文问题,还是字段解析问题。
Response / SerialNumber / Target,再看列表字段8.1 获取设备参数的最短请求
{
"Get": "EnergyParameter",
"SerialNumber": 1,
"CommandSource": "Web"
}
8.2 返回体通常是"顶层摘要 + 多个设备列表"的结构
{
"Response": "EnergyParameter",
"SerialNumber": 1,
"Target": "Web",
"Storage_list": [{
"DevAddr": 1,
"StorageSN": "ZL-2502250374-00039",
"StorageStatus": 1,
"PvChargingPower": 0,
"AcChargingPower": 0,
"BatterySoc": 100,
"BatteryDischargingPower": 50,
"AcInActivePower": -350,
"OffGridLoadPower": 0,
"BatteryChargingPower": 0,
"PvStringCount": 0,
"Pv1Power": 0,
"Pv2Power": 0,
"Pv3Power": 0,
"Pv4Power": 0
}],
"SSumInfoList": {
"ControlEnableStatus": 1,
"MeterTotalActivePower": 0,
"TotalPVPower": 4,
"TotalPVChargePower": 0,
"TotalACChargePower": 0,
"TotalSmartLoadElectricalPower": 0,
"AverageBatteryAverageSOC": 60,
"TotalBatteryOutputPower": 9,
"TotalGridOutputPower": -35,
"TotalBackUpPower": 0,
"TotalChargePower": 0
},
"ChargerInfoList": [{
"DevAddr": 55,
"lsThirdParty": 0,
"FansDevType": 0,
"lsInterconnect": 1,
"ChargerSN": "SXDI78C594",
"ChargerStatus": 1,
"Connector1Status": 0,
"Connector1Power": 0,
"Connector2Status": 0,
"Connector2Power": 0,
"ConnectorElectricity": 0
}],
"PlugInfoList": [{
"DevAddr": 110,
"lsThirdParty": 0,
"FansDevType": 6,
"lsInterconnect": 1,
"PlugSN": "NKPG1DDC40",
"PlugStatus": 0,
"PlugActvePower": 0,
"PlugVol": 2359,
"PlugCurrent": 0,
"PlugRatePower": 2000,
"PlugElectricity": 0
}],
"HotInfoList": [{
"DevAddr": 150,
"lsThirdParty": 0,
"FansDevType": 6,
"lsInterconnect": 1,
"HotSN": "SXDI7A47B8",
"HotStatus": 1,
"HotActvePower": 0,
"HotActvePowerMAX": 1200,
"HotTEMP": 258,
"HotTEMPMAX": 470
}]
}
8.3 顶层关键字段
| 关键字段 | 说明 |
|---|---|
Response |
响应方法名,通常为 EnergyParameter |
SerialNumber |
请求序号,用来和请求一一对应 |
Target |
响应目标,常见为 Web 或 HA |
SSumInfoList |
顶层功率汇总对象 |
PlugInfoList |
插座设备列表 |
ChargerInfoList |
充电桩列表 |
Storage_list |
储能机列表 |
HotInfoList |
热水 / 热泵类设备列表 |
8.4 常见列表字段说明
先按列表分组理解,再按业务字段细看,最不容易迷路。
| 列表字段 | 常见字段 | 用途 |
|---|---|---|
SSumInfoList |
ControlEnableStatus / MeterTotalActivePower / TotalPVPower / TotalChargePower |
看整体运行状态 |
Storage_list |
StorageSN / StorageStatus / BatterySoc / BatteryChargingPower |
看储能机状态 |
PlugInfoList |
PlugSN / PlugStatus / PlugActvePower / PlugVol / PlugCurrent |
看插座负载 |
ChargerInfoList |
ChargerSN / ChargerStatus / Connector1Status / Connector2Status |
看充电桩状态 |
HotInfoList |
HotSN / HotStatus / HotActvePower / HotTEMP |
看热水设备状态 |
InterverInfoList |
InterverSN / InterverStatus / InterverActivePower |
看逆变器状态 |
8.5 SSumInfoList 字段详细拆解
| 字段 | 说明 | 类型 |
|---|---|---|
ControlEnableStatus |
绿电计划开关,0 关闭 / 1 开启 | int |
MeterTotalActivePower |
电表总功率,单位 W | double |
TotalPVPower |
PV 功率,单位 W | double |
TotalPVChargePower |
PV 总充电功率,单位 W | double |
TotalACChargePower |
AC 总充电功率,单位 W | double |
TotalSmartLoadElectricalPower |
智能负载总用电功率,单位 W | double |
AverageBatteryAverageSOC |
电池平均 SOC,单位 % | int |
TotalBatteryOutputPower |
电池总输出功率,单位 W | double |
TotalGridOutputPower |
设备总并网功率,单位 W | double |
TotalBackUpPower |
设备总离网功率,单位 W | double |
TotalChargePower |
电池总充电功率,单位 W | double |
8.6 Storage_list 字段详细拆解
| 字段 | 说明 | 类型 |
|---|---|---|
DevAddr |
注册 ID | int |
StorageSN |
储能机序列号 | string |
StorageStatus |
储能机状态,0 关闭 / 1 开启 | int |
PvChargingPower |
储能机 PV 充电功率,单位 W | double |
AcChargingPower |
储能机 AC 充电功率,单位 W | double |
BatterySoc |
储能机电池 SOC,单位 % | int |
BatteryDischargingPower |
储能机电池放电功率,单位 W | double |
AcInActivePower |
储能机并网有功功率,单位 W | double |
OffGridLoadPower |
储能机离网功率,单位 W | double |
BatteryChargingPower |
储能机电池充电功率,单位 W | double |
PvStringCount |
储能机 PV 接口数量 | int |
Pv1Power / Pv2Power / Pv3Power / Pv4Power |
各 PV 输入功率,单位 W | double |
8.7 PlugInfoList 字段详细拆解
| 字段 | 说明 | 类型 |
|---|---|---|
DevAddr |
注册 ID | int |
lsThirdParty |
三方设备标志 | int |
FansDevType |
三方设备型号 | int |
PlugSN |
插座序列号 | string |
PlugStatus |
插座状态,0 关闭 / 1 开启 | int |
PlugActvePower |
插座有功功率,单位 W | double |
PlugVol |
插座电压,单位 V | double |
PlugCurrent |
插座电流,单位 A | double |
PlugRatePower |
插座额定功率,单位 W | double |
PlugElectricity |
插座用电量,单位 kWh | double |
8.8 ChargerInfoList 字段详细拆解
| 字段 | 说明 | 类型 |
|---|---|---|
DevAddr |
注册 ID | int |
lsThirdParty |
三方设备标志 | int |
FansDevType |
三方设备型号 | int |
ChargerSN |
充电桩序列号 | string |
ChargerStatus |
充电桩状态 | int |
Connector1Status |
充电枪 1 状态,0 关闭 / 1 准备 / 2 充电中 / 3 充电结束 | int |
Connector1Power |
充电枪 1 功率,单位 W | double |
Connector2Status |
充电枪 2 状态,0 关闭 / 1 准备 / 2 充电中 / 3 充电结束 | int |
Connector2Power |
充电枪 2 功率,单位 W | double |
ConnectorElectricity |
充电枪用电量,单位 kWh | double |
8.9 HotInfoList 字段详细拆解
| 字段 | 说明 | 类型 |
|---|---|---|
DevAddr |
注册 ID | int |
lsThirdParty |
三方设备标志 | int |
FansDevType |
三方设备型号 | int |
HotSN |
热水设备序列号 | string |
HotStatus |
热水设备状态,0 关闭 / 1 开启 | int |
HotActvePower |
热水设备当前功率,单位 W | double |
HotActvePowerMAX |
热水设备最大功率,单位 W | double |
HotTEMP |
当前温度,原文为十分之一摄氏度 | int |
HotTEMPMAX |
最高温度,原文为十分之一摄氏度 | int |
这个接口是"读取和设置控制策略"的入口,适合做限功率、时间段策略、SOC 控制和联动控制。
写参数前建议先读回原值并保存,尤其是功率时段、SOC 阈值和峰谷策略这类会影响现场行为的字段。
| 字段 | 字段名 | 类型 | 说明 |
|---|---|---|---|
Get |
获取方法 | string | "EnergycontrolparametersList": 读取能源控制参数 |
Set |
设置方法 | string | "EnergycontrolparametersList": 设置能源控制参数 |
Response |
应答 | string | "EnergycontrolparametersList": 读取/设置应答 |
SerialNumber |
请求包序号 | int | 每请求一次自动加一 |
CommandSource |
命令源 | string | "Web": 网页 |
Target |
命令源 | string | "HA": Home Assistant |
RegControlField |
读取参数字段 | array | 需要读取的二级字段名数组 |
ControlInfoField |
读取结果 | object | 返回字段名及规范化后的当前值 |
SetControlInfoField |
设置参数 | object | 需要设置的字段名及参数值 |
SetParametersField |
设置成功结果 | object | 返回设置成功字段及设置后的实际读取值 |
SetFailedField |
设置失败结果 | object | 可选。key 为失败字段名,value 为失败原因 |
9.1 读取请求与返回
请求:
{
"Get": "EnergycontrolparametersList",
"SerialNumber": 1,
"CommandSource": "Web",
"RegControlField": [
"PhaseRecognitionTrigger",
"MeterSelector",
"SystemMaxPowerLimit",
"PowerRegulationOperatingPoint"
]
}
响应:
{
"Response": "EnergycontrolparametersList",
"SerialNumber": 1,
"Target": "Web",
"ControlInfoField": {
"EnergyManagement": "0",
"ScheduledModeEnabled": "1",
"PhaseRecognitionTrigger": "0",
"MeterSelector": "1",
"SystemMaxPowerLimit": "10800,3600,3600,3600",
"PhaseRecognitionPowerMultiplier": "50",
"PowerRegulationOperatingPoint": "10",
"DeviceGridInputPowerLimit": "800",
"PeakShavingConfig": "0:0",
"BaseDischargePower": "0",
"PeriodValidTimestamp": "2024-09-20 00:00:00",
"InstantControlPeriod": "255,20261231,0,00:00,23:59,800,0,6,100,10",
"ValleyChargePowerStrategy": "0",
"SystemAcChargePowerLimits": "4200,1400,1400,1400",
"VppDispatchPeriod": "255,20261231,0,00:00,23:59,800,100,10,7000"
}
}
9.2 设置请求与返回
请求:
{
"Set": "EnergycontrolparametersList",
"SerialNumber": 2,
"CommandSource": "Web",
"SetControlInfoField": {
"PhaseRecognitionTrigger": "0",
"MeterSelector": "1",
"SystemMaxPowerLimit": "10800,3600,3600,3600",
"PhaseRecognitionPowerMultiplier": "50",
"PowerRegulationOperatingPoint": "10",
"DeviceGridInputPowerLimit": "800"
}
}
响应:
{
"Response": "EnergycontrolparametersList",
"SerialNumber": 2,
"Target": "Web",
"SetParametersField": {
"PhaseRecognitionTrigger": "0",
"MeterSelector": "1",
"SystemMaxPowerLimit": "10800,3600,3600,3600"
}
}
SetFailedField;全部成功时,这个字段可以不返回。
9.3 常用字段速查
| 字段 | 参数说明 | 数据类型 | 单位 | 读写属性 | 解释 |
|---|---|---|---|---|---|
EnergyManagement |
能管联动使能 | 字符串 | / | R/W | 0:关闭能管联动 / 1:开启能管联动 |
ScheduledModeEnabled |
定时模式使能 | 字符串 | / | R/W | 0:关闭 / 1:开启,但是不开启功率补偿 / 2:开启,并开启功率补充 |
PhaseRecognitionTrigger |
相位识别触发 | 字符串 | / | R/W | 0:清除触发/空闲 / 1:触发一次相位识别 |
MeterSelector |
电表选择 | 字符串 | / | R/W | 参与能管控制的电表 ID,使用非负整数 |
SystemMaxPowerLimit |
系统最大用电功率限制 | 字符串 | W | R/W | 格式:totalLimitW,phaseALimitW,phaseBLimitW,phaseCLimitW |
PhaseRecognitionPowerMultiplier |
相位识别功率倍率 | 字符串 | / | R/W | 相位识别使用的功率倍率,使用非负整数 |
PowerRegulationOperatingPoint |
功率调节运行点 | 字符串 | W | R/W | 功率调节运行点,使用有符号整数 |
DeviceGridInputPowerLimit |
设备电网输入功率限制 | 字符串 | W | R/W | 设备允许从电网输入的功率上限,使用非负整数 |
PeakShavingConfig |
削峰配置 | 字符串 | / | R/W | 格式: enable:socThreshold; 示例: 1:50; 关闭时规范化为 0:0 |
BaseDischargePower |
基础放电功率 | 字符串 | W | R/W | 基础放电功率字段 |
PeriodValidTimestamp |
时间段有效时间戳 | 字符串 | / | R/W | 格式:"yyyy-mm-dd hh:mm:ss"; 示例:"2024-09-20 00:00:00" |
9.4 时间段类字段
| 字段 | 说明 |
|---|---|
PowerControlPeriod1 ~ PowerControlPeriod16 |
功率控制时间段 1 到 16,格式一致,适合按现场时段配置。 |
[时间段使能],[起始时间],[结束时间],[强制取/馈电功率限制],[允许取电功率限制],[功率控制模式],[充电最大 SOC],[放电最小 SOC]
示例:
"1,09:00,23:59,1000,500,0,100,10"
表示该时段开启,时间从 09:00 到 23:59,强制限制 1000W,允许取电 500W。
9.5 其他组合字段
| 字段 | 说明 |
|---|---|
InstantControlPeriod |
即时控制时段,常见格式包含日期、时段、功率限制和 SOC 门限。 |
ValleyChargePowerStrategy |
谷充电策略。 |
SystemAcChargePowerLimits |
系统 AC 充电限制,通常按总量与分相配置。 |
VppDispatchPeriod |
虚拟电厂调度时段。 |
如果你手里已经有标准 Modbus RTU 报文,不需要重写业务逻辑,直接透传即可。
这个接口适合把现成的 RTU 报文原样转给 EMS。注意 TransmittedData 需要是带 CRC 的完整 RTU 帧,并且字节间用空格分隔。
10.1 透传字段说明
| 字段 | 字段名 | 类型 | 说明 |
|---|---|---|---|
Set |
设置方法 | string | "DataTransmission": 数据透传 |
Response |
应答 | string | 返回透传结果 |
SerialNumber |
请求包序号 | int | 每请求一次自动加一 |
CommandSource |
命令源 | string | "Web": 网页 |
Target |
命令源 | string | "HA": Home Assistant |
SetCommand |
透传参数 | string | 透传参数配置 |
FunctionCode |
功能码 | string | 支持 0x03 / 0x04 / 0x06 / 0x10 |
TransmittedData |
透传数据 | string | 设置/返回的透传数据 |
CommandResponse |
透传响应参数 | string | 响应数据 |
ControlState |
透传状态 | string | 成功: "succeed" / 失败: "fail" |
10.2 发送示例
{
"Set": "DataTransmission",
"SerialNumber": 1,
"CommandSource": "Web",
"SetCommand": {
"FunctionCode": 3,
"TransmittedData": "01 03 FE 06 00 03 56 67"
}
}
10.3 返回示例
{
"Response": "DataTransmission",
"SerialNumber": 1,
"Target": "Web",
"CommandResponse": {
"FunctionCode": 3,
"ControlState": "succeed",
"TransmittedData": "01 03 06 00 01 02 03 04 05 2F CE"
}
}
TransmittedData 是整帧 RTU 报文字符串,包含 CRC,字节之间用空格分隔。发送前建议先用串口工具确认原始报文,然后再转成字符串传输。
Modbus TCP 用于直接读取 EMS 接入设备寄存器,适合 PLC、网关和工业上位机。
11.1 标准报文示例
请求报文 (0x03):
00 01 00 00 00 06 01 03 FE 06 00 03
响应报文:
00 01 00 00 00 09 01 03 06 00 01 00 02 00 03
| 阶段 | 要检查什么 | 通过标准 |
|---|---|---|
| 发现 | 设备 IP、端口、型号是否正确 | 能拿到 s_ip,并能说明设备是谁 |
| 连接 | TCP 8080 是否可连 | 客户端连得上并能收到响应 |
| 读取 | JSON 字段是否完整 | Get / Response / SerialNumber 对应正常 |
| 设置 | 失败字段和失败原因 | 能定位到具体字段,而不是只看"失败" |
| 透传 | RTU / TCP 报文格式 | RTU 含 CRC,TCP 不含 CRC |
| 回归 | 修改后是否恢复原值 | 改完能读回,必要时能恢复 |
s_ip 和 s_port;如果拿不到,再查路由器后台或现场网络配置。
Web;如果接入 Home Assistant,可按目标系统的要求填写对应来源。
TransmittedData 以字符串方式传输,字节之间用空格分隔。