支持设备
  • CT 电表、红外读表器、P1 电表、智能插座、Linky 读表器
  • 储能机、逆变器、电池
  • 热泵、充电桩
  • 所有能控云产品及使用能控云 WIFI 模块接入的设备

设备类型概览

CT / 红外 / P1 / Linky

电表与读表器

智能插座

功率 / 用电

储能机

PV / AC / 电池

逆变器

有功功率

充电桩

充电枪 1 / 2

热泵

功率 / 温度

1 文档概览

这份指南把原始接口文档整理成"先跑通,再扩展"的顺序:先找设备,再读状态,最后再做控制和透传。最适合第一次接入的人:只想快速把 EMS 数据接进自己的程序、看板、网关或平台。

维度 建议
第一步 先通过 mDNS 找到设备 IP 和端口
第二步 用 HA JSON 读取设备参数,确认连通
第三步 再读能源控制参数,最后做写入
第四步 如果你已有工业协议,再看 RTU / TCP 透传
2 接入范围
  • 适用于 AECC EMS 本地接口接入场景。
  • 支持 HA JSON 数据接口、能源控制参数接口、Modbus RTU 透传接口、Modbus TCP 接口。
  • 第一次联调建议只开一个接口,先把读取跑通,再扩展到设置和透传。
3 接入路线怎么选

如果不知道先接哪个接口,按下面这个顺序走,最省时间。

场景 优先接口 原因
先确认设备能连通 mDNS + HA JSON 读取 只读接口风险低,最容易验证网络和设备状态
只做运行监测 HA JSON 数据接口 能拿到设备状态、功率、SOC 等数据
要改策略或限值 能源控制参数接口 支持读取和设置控制参数
已有 RTU 报文 Modbus RTU 透传接口 可以把现有报文直接转发给 EMS
系统原生 Modbus Modbus TCP 接口 适合 PLC、网关和工业上位机
4 准备工作
  • 设备已上电并成功联网。
  • 开发机或网关与 EMS 设备在同一局域网。
  • 先拿到设备 IP,默认端口为 TCP 8080。
  • 先做读取,确认报文格式和返回结构,再做写入。
  • 建议准备 TCP 调试工具、mDNS 工具和 Modbus 工具。
5 最短接入流程
  1. 通过 mDNS 发现设备,记录 s_ips_port
  2. 建立 TCP 连接,默认端口 8080。
  3. 先发一个只读 JSON 请求,例如获取设备参数。
  4. 检查响应里是否有 ResponseSerialNumberTarget 等关键字段。
  5. 确认读取正常后,再尝试能源控制参数。
  6. 最后再做设置或 Modbus 透传。
提示: 建议先只打通一个接口,再按同样方式扩展到其他接口。
6 JSON 报文规则

JSON 请求里最重要的是几个固定字段:Get / Set / Response / SerialNumber / CommandSource / Target

Get 读取方法名,例如 EnergyParameter
Set 设置方法名,例如 EnergycontrolparametersListDataTransmission
Response 响应方法名,用于确认返回类型
SerialNumber 请求序号,建议每次自增 1
CommandSource 命令来源,常见为 Web
Target 响应目标,常见为 WebHA

请求示例:

{
  "Get": "EnergyParameter",
  "SerialNumber": 1,
  "CommandSource": "Web"
}
7 设备发现:mDNS

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"
}
8 HA JSON 数据接口

这个接口最适合做监控、看板和首次联通测试。先把"获取设备参数"跑通,再逐步扩字段。

建议先看顶层摘要字段,再展开设备列表。这样调试时最容易判断是网络问题、报文问题,还是字段解析问题。

通信方式: TCP
端口: 8080
协议: JSON
建议: 先读 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 响应目标,常见为 WebHA
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
9 能源控制参数接口

这个接口是"读取和设置控制策略"的入口,适合做限功率、时间段策略、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 虚拟电厂调度时段。
提示: 建议一次只改少量字段,确认成功后再继续改下一项。这样出错时更容易定位。
10 Modbus RTU 透传接口

如果你手里已经有标准 Modbus RTU 报文,不需要重写业务逻辑,直接透传即可。

这个接口适合把现成的 RTU 报文原样转给 EMS。注意 TransmittedData 需要是带 CRC 的完整 RTU 帧,并且字节间用空格分隔。

通信方式: TCP
端口: 8080
协议: JSON

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,字节之间用空格分隔。发送前建议先用串口工具确认原始报文,然后再转成字符串传输。
11 Modbus TCP 接口

Modbus TCP 用于直接读取 EMS 接入设备寄存器,适合 PLC、网关和工业上位机。

通信方式: TCP
端口: 8080
协议: MODBUS-TCP

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
说明: Modbus TCP 报文由 MBAP 头和 PDU 组成,不包含 Modbus RTU 的 CRC 校验字段。
12 调试与验收清单
阶段 要检查什么 通过标准
发现 设备 IP、端口、型号是否正确 能拿到 s_ip,并能说明设备是谁
连接 TCP 8080 是否可连 客户端连得上并能收到响应
读取 JSON 字段是否完整 Get / Response / SerialNumber 对应正常
设置 失败字段和失败原因 能定位到具体字段,而不是只看"失败"
透传 RTU / TCP 报文格式 RTU 含 CRC,TCP 不含 CRC
回归 修改后是否恢复原值 改完能读回,必要时能恢复
接入建议: 建议先读、后改、再读回确认。这样最容易定位问题,也方便回退。
13 高频问答 QA
Q1:第一次接入应该先用哪个接口?
先用 mDNS 找设备,再用 HA JSON 的获取设备参数接口。这个路径最稳,也最容易确认是不是网络问题。
Q2:不知道设备 IP 怎么办?
先看 mDNS 返回里的 s_ips_port;如果拿不到,再查路由器后台或现场网络配置。
Q3:默认端口是多少?
本地接口默认是 TCP 8080。
Q4:SerialNumber 是做什么的?
它是请求序号,建议每次请求递增,方便把请求和响应一一对应起来。
Q5:CommandSource 应该填什么?
示例里是 Web;如果接入 Home Assistant,可按目标系统的要求填写对应来源。
Q6:为什么能源控制参数要分开读和写?
因为读和写的关注点不同。先读可以确认当前状态,写则是改策略,分开做更容易排错。
Q7:SetFailedField 出现了怎么办?
优先看失败字段和失败原因,单独修正那一项,不要直接把整包重发。
Q8:透传接口里为什么要把报文转成字符串?
因为文档规定 TransmittedData 以字符串方式传输,字节之间用空格分隔。
Q9:RTU 和 TCP 的区别是什么?
RTU 是串行报文,CRC 必须保留;TCP 是网络报文,不带 RTU 的 CRC。
Q10:读取寄存器地址以谁为准?
以 EMS 当前接入设备的协议为准。
Q11:能不能一开始就做写参数?
可以,但不建议。新手最好先把只读接口跑稳,再切到写参数。
Q12:调试时日志该记录什么?
建议记录设备 IP、端口、请求报文、响应报文、SerialNumber、失败字段和时间。
Q13:拿到很多字段,不知道先看哪些?
先看设备在线状态、总功率、SOC、当前模式和你的业务最关心的 2~3 个字段。
Q14:为什么要先读回原值?
这样能知道设置前是什么状态,也方便改完后回退。
Q15:怎么判断是不是网络问题?
如果连不上 TCP、拿不到 mDNS 或一直超时,优先排查网络而不是接口字段。
Q16:接口兼容性?
HA、Modbus RTU、Modbus TCP 接口设备均支持。
👉 联系我们获得完整文档或支持 👈
联系我们