Supported Devices
  • CT meters, infrared meter readers, P1 meters, smart plugs, Linky meter readers
  • Energy storage systems, inverters, batteries
  • Heat pumps, chargers
  • All Energy Control Cloud products and any device using Energy Control Cloud WIFI modules

Device Type Overview

CT / IR / P1 / Linky

Meters & readers

Smart Plug

Power / Electricity

Energy Storage

PV / AC / Battery

Inverter

Active Power

Charger

Connector 1 / 2

Heat Pump

Power / Temp

1 Document Overview

This guide organizes the raw interface documentation into a "run it first, then extend" sequence: discover the device first, then read state, and finally perform control and pass-through. It is best suited for first-time integration: anyone who wants to quickly ingest EMS data into their own application, dashboard, gateway, or platform.

Stage Suggestion
Step 1 Discover the device IP and port via mDNS
Step 2 Use HA JSON to read device parameters and confirm connectivity
Step 3 Read energy control parameters, then perform writes
Step 4 If you already have industrial protocols, see RTU / TCP pass-through
2 Scope
  • Applies to AECC EMS local interface integration scenarios.
  • Supports HA JSON data interface, energy control parameters interface, Modbus RTU pass-through interface, and Modbus TCP interface.
  • For the first joint debug, it is recommended to open only one interface and get the read working first, then extend to settings and pass-through.
3 Route Selection

If you don't know which interface to start with, follow the sequence below — it saves time.

Scenario Priority Interface Reason
Confirm device reachability mDNS + HA JSON read Read-only interface is low risk and easiest to verify network and device state
Monitoring only HA JSON data interface Get device state, power, SOC and similar data
Change strategies or limits Energy control parameters interface Supports reading and setting control parameters
Already have RTU frames Modbus RTU pass-through Forward existing frames directly to EMS
Native Modbus system Modbus TCP interface Suited for PLC, gateways, and industrial hosts
4 Prerequisites
  • Device is powered on and connected to the network successfully.
  • Dev machine or gateway is on the same LAN as the EMS device.
  • Get the device IP first; the default port is TCP 8080.
  • Read first to confirm the message format and response structure, then write.
  • Prepare a TCP debug tool, mDNS tool, and Modbus tool.
5 Minimum Integration Flow
  1. Discover the device via mDNS and record s_ip and s_port.
  2. Establish a TCP connection, default port 8080.
  3. Send a read-only JSON request first, e.g. get device parameters.
  4. Check the response for key fields such as Response, SerialNumber, Target.
  5. Once read is confirmed, try energy control parameters.
  6. Finally perform settings or Modbus pass-through.
Tip: It is recommended to open only one interface first, then extend to other interfaces in the same way.
6 JSON Message Rules

The most important fields in a JSON request are: Get / Set / Response / SerialNumber / CommandSource / Target.

Get Read method name, e.g. EnergyParameter
Set Write method name, e.g. EnergycontrolparametersList, DataTransmission
Response Response method name, used to confirm the return type
SerialNumber Request sequence, recommended to auto-increment by 1 each time
CommandSource Command source, commonly Web
Target Response target, commonly Web or HA

Example request:

{
  "Get": "EnergyParameter",
  "SerialNumber": 1,
  "CommandSource": "Web"
}
7 Device Discovery: mDNS

mDNS answers two questions: where the device is, and what this device is.

7.1 mDNS Fields

Field Description Type
_http._tcp Service type identifier String
SXD-mDNS.local Domain name String
s_sn Device serial number String
s_ip Device IP address String
s_port Service port String
s_type Device type String

7.2 mDNS Data Example

{
  "_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 Data Interface

This interface is best suited for monitoring, dashboards, and first-time connectivity tests. Get "device parameters" working first, then expand fields gradually.

It is recommended to look at top-level summary fields first, then expand device lists. This makes debugging easier — is it network, message, or field parsing?

Protocol: TCP
Port: 8080
Protocol Type: JSON
Suggestion: Read Response / SerialNumber / Target first, then list fields

8.1 Minimum Request for Device Parameters

{
  "Get": "EnergyParameter",
  "SerialNumber": 1,
  "CommandSource": "Web"
}

8.2 Response: Top-Level Summary + Multiple Device Lists

{
  "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 Top-Level Key Fields

Key Field Description
Response Response method name, usually EnergyParameter
SerialNumber Request sequence, used to map responses to requests
Target Response target, commonly Web or HA
SSumInfoList Top-level power summary object
PlugInfoList Smart plug device list
ChargerInfoList Charger list
Storage_list Energy storage list
HotInfoList Hot water / heat pump device list

8.4 Common List Fields

Group by list first, then look at business fields in detail — easiest to stay oriented.

List Field Common Fields Purpose
SSumInfoList ControlEnableStatus / MeterTotalActivePower / TotalPVPower / TotalChargePower Overall running state
Storage_list StorageSN / StorageStatus / BatterySoc / BatteryChargingPower Energy storage state
PlugInfoList PlugSN / PlugStatus / PlugActvePower / PlugVol / PlugCurrent Plug load
ChargerInfoList ChargerSN / ChargerStatus / Connector1Status / Connector2Status Charger state
HotInfoList HotSN / HotStatus / HotActvePower / HotTEMP Hot water device state
InterverInfoList InterverSN / InterverStatus / InterverActivePower Inverter state

8.5 SSumInfoList Field Details

Field Description Type
ControlEnableStatus Green-power plan switch, 0=Off / 1=On int
MeterTotalActivePower Meter total active power, unit W double
TotalPVPower PV power, unit W double
TotalPVChargePower PV total charge power, unit W double
TotalACChargePower AC total charge power, unit W double
TotalSmartLoadElectricalPower Smart load total electrical power, unit W double
AverageBatteryAverageSOC Battery average SOC, unit % int
TotalBatteryOutputPower Battery total output power, unit W double
TotalGridOutputPower Device total grid-tied power, unit W double
TotalBackUpPower Device total off-grid power, unit W double
TotalChargePower Battery total charge power, unit W double

8.6 Storage_list Field Details

Field Description Type
DevAddr Registration ID int
StorageSN Energy storage serial number string
StorageStatus Energy storage status, 0=Off / 1=On int
PvChargingPower Energy storage PV charge power, unit W double
AcChargingPower Energy storage AC charge power, unit W double
BatterySoc Energy storage battery SOC, unit % int
BatteryDischargingPower Battery discharge power, unit W double
AcInActivePower AC grid-tied active power, unit W double
OffGridLoadPower Off-grid load power, unit W double
BatteryChargingPower Battery charge power, unit W double
PvStringCount Number of PV input strings int
Pv1Power / Pv2Power / Pv3Power / Pv4Power Each PV input power, unit W double

8.7 PlugInfoList Field Details

Field Description Type
DevAddr Registration ID int
lsThirdParty Third-party device flag int
FansDevType Third-party device model int
PlugSN Plug serial number string
PlugStatus Plug status, 0=Off / 1=On int
PlugActvePower Plug active power, unit W double
PlugVol Plug voltage, unit V double
PlugCurrent Plug current, unit A double
PlugRatePower Plug rated power, unit W double
PlugElectricity Plug electricity, unit kWh double

8.8 ChargerInfoList Field Details

Field Description Type
DevAddr Registration ID int
lsThirdParty Third-party device flag int
FansDevType Third-party device model int
ChargerSN Charger serial number string
ChargerStatus Charger status int
Connector1Status Connector 1 status, 0=Off / 1=Ready / 2=Charging / 3=Charging end int
Connector1Power Connector 1 power, unit W double
Connector2Status Connector 2 status, 0=Off / 1=Ready / 2=Charging / 3=Charging end int
Connector2Power Connector 2 power, unit W double
ConnectorElectricity Connector electricity, unit kWh double

8.9 HotInfoList Field Details

Field Description Type
DevAddr Registration ID int
lsThirdParty Third-party device flag int
FansDevType Third-party device model int
HotSN Hot water device serial number string
HotStatus Hot water device status, 0=Off / 1=On int
HotActvePower Hot water device current power, unit W double
HotActvePowerMAX Hot water device max power, unit W double
HotTEMP Current temperature, raw value in tenths of a degree Celsius int
HotTEMPMAX Max temperature, raw value in tenths of a degree Celsius int
9 Energy Control Parameters Interface

This interface is the entry point for reading and setting control strategies: power limits, time-period strategies, SOC control, and linkage control.

Before writing parameters, read the original values back and save them — especially for power periods, SOC thresholds, and peak/valley strategies.

Field Field Name Type Description
Get Read method string "EnergycontrolparametersList": read energy control parameters
Set Write method string "EnergycontrolparametersList": set energy control parameters
Response Reply string "EnergycontrolparametersList": read/write reply
SerialNumber Request sequence int Auto-incremented by 1 per request
CommandSource Command source string "Web": web page
Target Command source string "HA": Home Assistant
RegControlField Read parameter fields array Array of secondary field names to read
ControlInfoField Read result object Field names and normalized current values
SetControlInfoField Set parameters object Field names and values to set
SetParametersField Set success result object Successful fields and the actual values read back after setting
SetFailedField Set failed result object Optional. Key is failed field name, value is the failure reason

9.1 Read Request & Response

Request:

{
  "Get": "EnergycontrolparametersList",
  "SerialNumber": 1,
  "CommandSource": "Web",
  "RegControlField": [
    "PhaseRecognitionTrigger",
    "MeterSelector",
    "SystemMaxPowerLimit",
    "PowerRegulationOperatingPoint"
  ]
}

Response:

{
  "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 Write Request & Response

Request:

{
  "Set": "EnergycontrolparametersList",
  "SerialNumber": 2,
  "CommandSource": "Web",
  "SetControlInfoField": {
    "PhaseRecognitionTrigger": "0",
    "MeterSelector": "1",
    "SystemMaxPowerLimit": "10800,3600,3600,3600",
    "PhaseRecognitionPowerMultiplier": "50",
    "PowerRegulationOperatingPoint": "10",
    "DeviceGridInputPowerLimit": "800"
  }
}

Response:

{
  "Response": "EnergycontrolparametersList",
  "SerialNumber": 2,
  "Target": "Web",
  "SetParametersField": {
    "PhaseRecognitionTrigger": "0",
    "MeterSelector": "1",
    "SystemMaxPowerLimit": "10800,3600,3600,3600"
  }
}
Note: If any field fails to write, the interface returns SetFailedField; when all fields succeed, this field may be omitted.

9.3 Common Field Reference

Field Parameter Description Type Unit R/W Explanation
EnergyManagement Energy management linkage enable String / R/W 0: Off / 1: On
ScheduledModeEnabled Scheduled mode enable String / R/W 0: Off / 1: On but no power compensation / 2: On with power compensation
PhaseRecognitionTrigger Phase recognition trigger String / R/W 0: Clear / idle / 1: Trigger one phase recognition
MeterSelector Meter selection String / R/W Meter ID participating in energy management control, non-negative integer
SystemMaxPowerLimit System max power limit String W R/W Format: totalLimitW,phaseALimitW,phaseBLimitW,phaseCLimitW
PhaseRecognitionPowerMultiplier Phase recognition power multiplier String / R/W Non-negative integer
PowerRegulationOperatingPoint Power regulation operating point String W R/W Signed integer
DeviceGridInputPowerLimit Device grid input power limit String W R/W Upper limit of grid input power, non-negative integer
PeakShavingConfig Peak-shaving configuration String / R/W Format: enable:socThreshold; example: 1:50; normalized to 0:0 when off
BaseDischargePower Base discharge power String W R/W Base discharge power field
PeriodValidTimestamp Period valid timestamp String / R/W Format: "yyyy-mm-dd hh:mm:ss"; example: "2024-09-20 00:00:00"

9.4 Time Period Fields

Field Description
PowerControlPeriod1 ~ PowerControlPeriod16 Power control period 1 to 16. Same format. Suitable for site time-period configuration.
Each power control period format:
[时间段使能],[起始时间],[结束时间],[强制取/馈电功率限制],[允许取电功率限制],[功率控制模式],[充电最大 SOC],[放电最小 SOC]
Example:
"1,09:00,23:59,1000,500,0,100,10"

Means: this period is enabled, time 09:00 to 23:59, forced take/feed power limit 1000W, allowed take power limit 500W.

9.5 Other Combined Fields

Field Description
InstantControlPeriod Instant control period. Common format includes date, time period, power limit and SOC threshold.
ValleyChargePowerStrategy Valley charge power strategy.
SystemAcChargePowerLimits System AC charge power limits, usually total + per-phase.
VppDispatchPeriod Virtual power plant dispatch period.
Tip: It is recommended to change only a few fields at a time and confirm before moving to the next. Easier to locate issues when things go wrong.
10 Modbus RTU Pass-through Interface

If you already have standard Modbus RTU frames, there is no need to rewrite business logic — just pass them through.

This interface is suitable for forwarding existing RTU frames directly to EMS. Note that TransmittedData must be a complete RTU frame with CRC, and bytes are separated by spaces.

Protocol: TCP
Port: 8080
Protocol Type: JSON

10.1 Pass-through Field Reference

Field Field Name Type Description
Set Write method string "DataTransmission": data pass-through
Response Reply string Returns pass-through result
SerialNumber Request sequence int Auto-incremented by 1 per request
CommandSource Command source string "Web": web page
Target Command source string "HA": Home Assistant
SetCommand Pass-through parameters string Pass-through parameter configuration
FunctionCode Function code string Supports 0x03 / 0x04 / 0x06 / 0x10
TransmittedData Pass-through data string Pass-through data for set / return
CommandResponse Pass-through response string Response data
ControlState Pass-through state string Success: "succeed" / Failure: "fail"

10.2 Send Example

{
  "Set": "DataTransmission",
  "SerialNumber": 1,
  "CommandSource": "Web",
  "SetCommand": {
    "FunctionCode": 3,
    "TransmittedData": "01 03 FE 06 00 03 56 67"
  }
}

10.3 Response Example

{
  "Response": "DataTransmission",
  "SerialNumber": 1,
  "Target": "Web",
  "CommandResponse": {
    "FunctionCode": 3,
    "ControlState": "succeed",
    "TransmittedData": "01 03 06 00 01 02 03 04 05 2F CE"
  }
}
Tip: TransmittedData is a complete RTU frame string, including CRC, with bytes separated by spaces. Before sending, verify the raw frame with a serial tool, then convert to string.
11 Modbus TCP Interface

Modbus TCP is used to directly read EMS-accessed devices' registers, suitable for PLCs, gateways, and industrial hosts.

Protocol: TCP
Port: 8080
Protocol Type: MODBUS-TCP

11.1 Standard Message Examples

Request (0x03):

00 01 00 00 00 06 01 03 FE 06 00 03

Response:

00 01 00 00 00 09 01 03 06 00 01 00 02 00 03
Note: Modbus TCP messages consist of MBAP header and PDU, and do not include the Modbus RTU CRC field.
12 Debug & Acceptance Checklist
Stage What to Check Pass Criteria
Discovery Device IP, port, model Get s_ip and tell what the device is
Connect TCP 8080 reachable Client connects and receives response
Read JSON fields complete Get / Response / SerialNumber mapped correctly
Set Failed fields and reasons Locate the specific field, not just "failed"
Pass-through RTU / TCP frame format RTU includes CRC, TCP excludes CRC
Regression Restore original value after changes Can read back after changes, restore when needed
Integration Recommendation: Read first, change second, read back to confirm. This is the easiest way to locate issues and to roll back.
13 FAQ
Q1: Which interface should I use first when integrating?
Use mDNS first to find the device, then use HA JSON's "get device parameters" interface. This is the most reliable path and the easiest way to confirm it's a network issue.
Q2: What if I don't know the device IP?
First check s_ip and s_port in the mDNS response; if not available, check the router admin or the local network configuration.
Q3: What is the default port?
The local interface default is TCP 8080.
Q4: What is SerialNumber for?
It is the request sequence. It is recommended to increment on each request, so requests and responses can be mapped one-to-one.
Q5: What should I put in CommandSource?
The example uses Web; if integrating with Home Assistant, fill the corresponding source according to the target system's requirements.
Q6: Why is energy control parameters separated into read and write?
Because read and write have different concerns. Read first to confirm current state; write is to change strategy. Separating them makes debugging easier.
Q7: What to do if SetFailedField appears?
Prioritize the failed field and reason, fix that one item separately, do not resend the whole packet.
Q8: Why is the frame converted to a string in the pass-through interface?
Because the spec says TransmittedData is transmitted as a string, with bytes separated by spaces.
Q9: What is the difference between RTU and TCP?
RTU is serial, CRC must be kept; TCP is network, without the RTU CRC.
Q10: Whose protocol are the read register addresses based on?
Based on the protocol of the device currently accessed by EMS.
Q11: Can I start with write parameters?
Yes, but not recommended. Begin by getting the read-only interface stable, then switch to writes.
Q12: What should logging record during debugging?
Device IP, port, request frames, response frames, SerialNumber, failed fields, and timestamps.
Q13: I have many fields — which should I look at first?
First device online state, total power, SOC, current mode, and the 2–3 fields most relevant to your business.
Q14: Why read the original value back first?
This way you know the state before the change, and it's easier to roll back afterwards.
Q15: How to tell if it's a network problem?
If you can't connect to TCP, can't get mDNS, or always time out, prioritize network over interface fields.
Q16: Compatibility across interfaces?
HA, Modbus RTU, and Modbus TCP interfaces are all supported.
👉 Contact us to get complete documentation or support. 👈
Contact Us