本文档介绍 EMS 能源管理系统的本地局域网 API 协议,使用 mDNS 服务发现,结合 TCP/JSON 进行设备参数查询与设置、能源控制参数管理(16个功率控制时段)、以及 Modbus-TCP 数据透传。协议:TCP:8080 + JSON,以及 TCP:8080 上的 Modbus-TCP。
CT/IR/P1/Linky/Plug
ZL-xxx
PV / AC
Electricity/Power
Connector 1/2
Heating/Cooling
EMS 设备在局域网内通过 mDNS 服务发现暴露自身信息,App 可以无需手动配置 IP 即可发现并连接设备。
1.1.1 通信配置
1.1.2 mDNS 参数说明
| 字段 | 类型 | 描述 |
|---|---|---|
s_type |
string | 服务类型标识,示例: SXD-mDNS-IF-NKYWLTS011 |
s_sn |
string | 设备唯一标识(如 NKYWLTS011) |
s_domain / name |
string | 域名:SXD-mDNS.local |
s_ip |
string | 设备 IP 地址,如 192.168.3.206 |
s_port |
string | 服务端口:8080 |
s_type |
string | 设备类型 |
Service Type: _http._tcp Name: SXD-mDNS-IF-NKYWLTS011 Domain: local Port: 8080 Address: SXD-mDNS.local TXT Records: s_sn=NKYWLTS011 s_ip=192.168.3.206 s_port=8080 s_type=xxx
App 通过 TCP:8080 连接设备,发送 JSON 命令获取设备侧的功率汇总、能管参数以及子设备状态信息。
| 字段 | 类型 | 说明 |
|---|---|---|
Get |
string | "EnergyParameter" : 获取能管参数 |
SerialNumber |
int | 请求包序号,每请求一次自动加一 |
CommandSource |
string | 命令源标识:"Web"(网页) / "HA"(Home Assistant) |
请求示例:
{
"Get": "EnergyParameter",
"SerialNumber": 1,
"CommandSource": "Web"
}
应答包含三大部分:顶层字段、功率参数汇总(SSumInfoList)以及子设备列表(储能机 / 逆变器 / 插座 / 充电桩)。
1.3.1 顶层字段
| 字段 | 字段名 | 类型 | 说明 |
|---|---|---|---|
Response |
Response | string | "EnergyParameter" |
SerialNumber |
SerialNumber | int | 回显请求包序号 |
Target |
Target | string | 响应目标:"Web" / "HA" |
SSumInfoList |
SSumInfoList | array | 功率参数汇总 |
ControlEnableStatus |
ControlEnableStatus | int | 绿电计划开关:0=关闭,1=开启 |
1.3.2 SSumInfoList 字段
| 字段名 | 类型 | 单位/说明 |
|---|---|---|
| MeterTotalActivePower | double | 电表总功率 (W) |
| TotalPVPower | double | PV 功率 (W) |
| TotalPVChargePower | double | PV 总充电功率 (W) |
| TotalACChargePower | double | AC 总充电功率 (W) |
| TotalSmartLoadElectricalPower | double | 智能负载总用电功率 (W) |
| AverageBatteryAverageSOC | int | 电池平均 SOC (%) |
| TotalBatteryOutputPower | double | 电池总输出功率 (W) |
| TotalGridOutputPower | double | 设备总并网功率 (W) |
| TotalBackUpPower | double | 设备总离网功率 (W) |
| TotalChargePower | double | 电池总充电功率 (W) |
1.3.3 子设备列表字段
| 所属子设备 | 字段 | 类型 | 说明 |
|---|---|---|---|
| Storage_list 储能机列表 |
DevAddr | int | 注册 ID |
| StorageSN | string | 储能机序列号(如 ZL-2502250374-00039) | |
| StorageStatus | int | 储能机状态 | |
| PvChargingPower | double | 储能机 PV 充电功率 (W) | |
| AcChargingPower | double | 储能机 AC 充电功率 (W) | |
| BatterySoc | int | 储能机电池 SOC (%) | |
| BatteryDischargingPower | double | 储能机电池放电功率 (W) | |
| AcInActivePower | double | 储能机并网有功功率 (W) | |
| OffGridLoadPower | double | 储能机离网功率 (W) | |
| BatteryChargingPower | double | 储能机电池充电功率 (W) | |
| PvStringCount | int | PV 接口数量 | |
| Pv1Power / Pv2Power / Pv3Power / Pv4Power | double | PV1~4 功率 (W) | |
| Connector2Status / Connector2Power | int / double | 充电枪2 状态 / 功率 | |
| InterverInfoList 逆变器列表 |
InterverSN | string | 逆变器 SN |
| InterverStatus | string | 逆变器状态 | |
| InterverActivePower | int | 逆变器有功功率 (W) | |
| Connector1Status / Connector1Power | int / double | 充电枪1 状态 / 功率 (2=充电中, 3=充电结束) | |
| PlugInfoList 插座设备列表 |
DevAddr | int | 注册 ID |
| lsThirdParty | int | 三方设备标志(0=关闭,1=开启) | |
| FansDevType | int | 三方设备型号 | |
| PlugSN | string | 插座序列号 | |
| PlugStatus | int | 插座状态(0=关闭,1=开启) | |
| PlugActvePower | double | 插座有功功率 (W) | |
| PlugVol | double | 插座电压 (V) | |
| PlugCurrent | double | 插座电流 (A) | |
| PlugRatePower / PlugElectricity | double | 额定功率 (W) / 用电量 (KWh) | |
| ChargerInfoList 充电桩列表 |
DevAddr / lsThirdParty / FansDevType | int / int / int | 同插座字段 |
| ChargerSN | string | 充电桩序列号 | |
| ChargerStatus | int | 充电桩状态(0=关闭,1=准备,2=充电中,3=充电结束) | |
| ConnectorElectricity | double | 充电枪用电量 (KWh) |
响应示例:
{
"Response": "EnergyParameter",
"SerialNumber": 1,
"Target": "Web",
"SSumInfoList": [{
"MeterTotalActivePower": 0,
"TotalPVPower": 0,
"TotalPVChargePower": 0,
"TotalACChargePower": 0,
"TotalSmartLoadElectricalPower": 0,
"AverageBatteryAverageSOC": 20,
"TotalBatteryOutputPower": 40,
"TotalGridOutputPower": 0,
"TotalBackUpPower": 0,
"TotalChargePower": 0
}],
"ControlEnableStatus": 0,
"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
}, {
"DevAddr": 2,
"StorageSN": "ZL-2411080327-00039",
"StorageStatus": 1,
"PvChargingPower": 0,
"AcChargingPower": 0,
"BatterySoc": 20,
"BatteryDischargingPower": 40,
"AcInActivePower": 0,
"OffGridLoadPower": 0,
"BatteryChargingPower": 0,
"PvStringCount": 0,
"Pv1Power": 0,
"Pv2Power": 0,
"Pv3Power": 0,
"Pv4Power": 0
}]
}
| 字段 | 字段名 | 类型 | 读写属性 | 说明 |
|---|---|---|---|---|
EnergyManagement |
EnergyManagement | string | R/W | 能管联动使能: 0=关闭, 1=开启 |
PowerControlPeriod1 ~ PowerControlPeriod16 |
PowerControlPeriod1~16 | string | R/W | 功率控制时段 1~16 |
BaseDischargePower |
BaseDischargePower | string | R/W | 基础放电功率 (W) |
PeriodValid |
PeriodValid | string | R/W | 时间段有效 |
Timestamp |
Timestamp | string | R/W | 格式:"yyyy-mm-dd hh:mm:ss",实例:"2024-09-20 00:00:00" |
ScheduledModeEnabled |
ScheduledModeEnabled | string | R/W | 定时模式使能 |
PhaseDetectionEnabled |
PhaseDetectionEnabled | string | R/W | 相位识别使能(仅三相不平衡调控模式下生效):0=关闭,1=开启 |
MeterSelector |
MeterSelector | string | R/W | 参与能管控制的电表 ID |
SystemMaxPowerLimit |
SystemMaxPowerLimit | string | R/W | 系统最大用电功率限制,总功率控制时使用总功率数据 |
功率控制时段格式说明
[时间段使能],[起始时间],[结束时间],[强制取/馈电功率限制],[允许取电功率限制],[功率控制模式],[充电最大SOC],[放电最小SOC]
列如:
"1,09:00,23:59,1000,500,0,100,10"
解释:使能该时间段,时间为 09:00-23:59,强制取/馈电功率限制为 1000W,允许取电功率限制为 500W,负载优先模式。
通用字段
| 字段 | 字段名 | 类型 | 说明 |
|---|---|---|---|
Get |
Get | string | "Energycontrolparameters":读取能源控制参数 |
Set |
Set | string | "Energycontrolparameters":设置能源控制参数 |
Response |
Response | string | "Energycontrolparameters":应答读取命令 |
SerialNumber |
SerialNumber | int | 每请求一次自动加一 |
CommandSource |
CommandSource | string | "Web":网页 / "HA":Home Assistant |
Target |
Target | string | 响应目标字段名 |
RegControlField |
RegControlField | string | 读取对应字段 |
| 字段 | 描述 |
|---|---|
Get |
返回读取的地址数据 |
SetParameters |
返回设置的地址及数据 |
SetControlInfo |
返回设置的字段及数据 |
查询请求示例:
{
"Get": "Energycontrolparameters",
"SerialNumber": 1,
"CommandSource": "Web",
"RegControlField": [
"EnergyManagement",
"PowerControlPeriod1",
"PowerControlPeriod2",
"PowerControlPeriod3",
"PowerControlPeriod4"
]
}
{
"Response": "Energycontrolparameters",
"SerialNumber": 1,
"Target": "Web",
"ControlInfoField": {
"EnergyManagement": "1",
"PowerControlPeriod1": "1,09:00,23:59,1000,500,0,100,10",
"PowerControlPeriod2": "1,00:00,1:59,0,500,1,100,10",
"PowerControlPeriod3": "1,02:00,4:59,0,500,2,50,10",
"PowerControlPeriod4": "1,05:00,8:59,0,500,2,100,10"
}
}
{
"Set": "Energycontrolparameters",
"SerialNumber": 1,
"CommandSource": "Web",
"SetControlInfoField": {
"EnergyManagement": "1",
"PowerControlPeriod1": "1,09:00,23:59,1000,500,0,100,10"
}
}
{
"Response": "Energycontrolparameters",
"SerialNumber": 1,
"Target": "Web",
"SetParametersField": {
"EnergyManagement": "1",
"PowerControlPeriod1": "1,09:00,23:59,1000,500,0,100,10"
}
}
App 可以通过数据透传命令将 Modbus RTU 帧下发给 EMS 接入的子设备,设备返回 Modbus 响应。
| 字段 | 字段名 | 类型 | 说明 |
|---|---|---|---|
Set |
Set | string | "DataTransmission":数据透传 |
Response |
Response | string | 透传应答 |
SerialNumber |
SerialNumber | int | 每请求一次自动加一 |
CommandSource |
CommandSource | string | "Web":网页 / "HA":Home Assistant |
Target |
Target | string | 响应目标:"Web" / "HA" |
SetCommand |
SetCommand | string | 透传参数配置 |
FunctionCode |
FunctionCode | int | 标准 Modbus 功能码(支持 0x03、0x04、0x06、0x10) |
TransmittedData |
TransmittedData | string | 设置/返回的透传数据 |
CommandResponse |
CommandResponse | string | 响应数据 |
ControlState |
ControlState | string | 透传状态:"succeed" / "fail" |
{
"Set": "DataTransmission",
"SerialNumber": 1,
"CommandSource": "Web",
"SetCommand": {
"FunctionCode": 3,
"TransmittedData": "01 03 FE 06 00 03 56 67"
}
}
{
"Response": "DataTransmission",
"SerialNumber": 1,
"Target": "Web",
"CommandResponse": {
"FunctionCode": 3,
"ControlState": "succeed",
"TransmittedData": "01 03 06 00 01 02 03 04 05 2F CE"
}
}
当 8080 端口被占用或设备不支持透传时,建议使用第 3 节基于 TCP:8080 + JSON 的数据透传命令,接口更加标准化。
_http._tcp)自动发现设备的 IP 和端口,无需手动配置。
EnergyParameter 用于获取设备的实时功率汇总和子设备状态;Energycontrolparameters 用于读取/设置能源管理配置(16个功率控制时段和各种使能开关)。
0x03(读保持寄存器)、0x04(读输入寄存器)、0x06(写单个寄存器)和 0x10(写多个寄存器)。
[时间段使能],[起始时间],[结束时间],[强制取/馈电功率限制],[允许取电功率限制],[功率控制模式],[充电最大SOC],[放电最小SOC]。例如:"1,09:00,23:59,1000,500,0,100,10"。
PowerControlPeriod1 ~ PowerControlPeriod16。
DataTransmission 通过 TCP:8080 + JSON 传递 Modbus 命令,协议更加标准化;直接 Modbus-TCP 需要根据 EMS 当前接入的设备协议进行解析。