1、Introduction

1.1 Purpose

The AECC Cloud Platform provides a cloud-side data forwarding channel so that third-party platforms can synchronize inverter device data. This document mainly introduces the data forwarding method and the data parsing format.

1.2 Abbreviations & Definitions

MQTT —— a lightweight message transport protocol based on a client/server publish/subscribe model.

JSON —— a lightweight data interchange format.

1.3 Disclaimer

The content described in this document may differ slightly from actual usage due to version updates. We update this document periodically; if you encounter any problems during use, please contact us.

2、System Framework Diagram

Inverter / Storage Devices Device A · B · C Data Collector Logger AECC Cloud · DMS MQTT Broker Self-hosted MQTT Server topic: SUB/{deviceType}/0 Third-party Platform Subscribe / Push (QoS 1)
Data flow: Device → Collector → AECC Cloud DMS (MQTT Broker) → Third-party Platform (push by subscribed topic, QoS 1).

3、Data Message Service Description

3.1 Overview

Data Message Service (DMS) is an MQTT server built by the AECC Cloud Platform; it is an efficient, reliable, secure and convenient messaging service. DMS helps application developers quickly integrate messaging capabilities into their applications and easily achieve reliable forwarding and synchronization of device data.

3.2 Name Resolution
NameDescription
topicIdentifier used for subscribing to and publishing messages
client idConnection-specific identifier, globally unique
usernameUsername required to establish the connection
passwordPassword required to establish the connection
3.3 Topic Subscription

The third-party platform must establish a connection with the server via an MQTT client and subscribe to the corresponding topic. The required url, topic, client id, username and password are provided by the AECC Cloud Platform.

Topic Format Description

The platform assigns push topics based on the third-party account. After the third-party account and device are bound on the open platform, device data is pushed to the corresponding topic. The topic rules are as follows:

  1. The topic is prefixed with SUB/, for example: SUB/{deviceType}/0;
  2. A single account can be configured with multiple topics, separated by English commas; when pushing, the platform automatically matches the corresponding topic by device type (deviceType);
  3. Topics are uniformly allocated by the AECC Cloud Platform and cannot be modified by third parties;
  4. MQTT shared subscriptions are supported: when subscribing to $share/{consumerGroupName}/{topic}, clients within the same consumer group receive messages in a round-robin fashion (each message is delivered to only one client in the group), while different consumer groups each receive the full message stream.
3.4 Connection Example

The example connects to the server through the MQTTX client; the specific connection information needs to be obtained by contacting the AECC Cloud Platform.

ParameterExplanationExample
server addressMQTT server (DMS) address, provided by AECC Cloud PlatformThe platform provides
portDefault 8091, supports MQTT over TCP and SSL; the SSL port is subject to the platform8091
protocol versionMQTT 3.1 / 3.1.13.1.1
client idThe mqttId assigned by the platform is globally unique; when the same client ID reconnects, the new connection preempts the old onemqttId
usernameKeyId allocated by the platformkeyId
passwordKeySecret allocated by the platformkeySecret
Keep AliveHeartbeat keep-alive interval (seconds), recommended 60; the server judges connection timeout at 1.5x Keep Alive60
Clean SessionRecommended true; after a disconnect/reconnect a new subscription must be initiatedtrue
Subscription QoSThe platform pushes with QoS 1 (at least once); QoS 1 is recommended for subscriptions1
MQTTX Testing Steps
  1. Create a new connection, fill Host with the address and port provided by the platform, and fill Client ID with the mqttId assigned by the platform;
  2. Check User Credentials, fill Username with keyId and Password with keySecret;
  3. After connecting successfully via Connect, subscribe to the topic assigned by the platform (for multi-instance load balancing use $share/{consumerGroupName}/{topic});
  4. After binding the device on the platform and waiting for the device to report, you can view the pushed JSON data in the subscription window.
Java (Eclipse Paho) Subscription Example
String broker  = "tcp://<url>:8091";
String clientId = "<mqttId>";
MqttClient client = new MqttClient(broker, clientId, new MemoryPersistence());
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName("<keyId>");
options.setPassword("<keySecret>".toCharArray());
options.setKeepAliveInterval(60);
options.setCleanSession(true);
client.setCallback(new MqttCallbackExtended() {
    @Override
    public void messageArrived(String topic, MqttMessage message) {
        String json = new String(message.getPayload(), StandardCharsets.UTF_8);
        // To process push data, it is recommended to use msgId for idempotent deduplication
    }
    // Implement other callbacks as needed: connectionLost / deliveryComplete / connectComplete
});
client.connect(options);
client.subscribe("<topic>", 1);

4、Data Forwarding Model

4.1 Basic Device Data (transmitted once on power-on)
Field NameRequiredTypeDescriptionUnit
wifiSnyesstringWifi SN (collector serial number)
deviceSnyesstringDevice sn
nowTimeyesstringTransmission time
typeyesstringTransmission type: 1 - Device rated data, 2 - Device monitoring data
systemTimestampyeslongData collector system timestamp (GMT+8)
plantTimestampyeslongData collector power station timestamp (plant time zone)
topicyesstringCurrent topic
deviceTypeyesintDevice type code
datayesobjectData Entity (Data Model)
msgIdnostringMessage unique identifier (UUID, 32-bit), used for idempotent deduplication
datalogVersionnostringCollector software version number
4.2 Device Monitoring Data (interval transmission)
Field NameRequiredTypeDescriptionUnit
wifiSnyesstringWifi SN (collector serial number)
deviceSnyesstringDevice sn
nowTimeyesstringTransmission time
typeyesstringTransmission type: 1 - Device rated data, 2 - Device monitoring data
systemTimestampyeslongData collector system timestamp (GMT+8)
plantTimestampyeslongData collector power station timestamp (plant time zone)
topicyesstringCurrent topic
deviceTypeyesintDevice type code
datayesobjectData Entity (Data Model)
msgIdnostringMessage unique identifier (UUID, 32-bit), used for idempotent deduplication
datalogVersionnostringCollector software version number
4.3 Data Entity (data) Field Description

data is the data entity; different transmission types (type) correspond to different field structures. The fields below are based on the open-platform generic data model (inverter / energy-storage devices); fields may differ across device types — refer to the actual device report for the authoritative field set.

4.3.1 Device Rated Data (type=1, transmitted once on power-on)
FieldRequiredTypeDescriptionUnit
deviceTypeyesIntegerProduct type 0 (controller, residential) 1 (controller, streetlight) 3 (inverter) 4 (hybrid inverter) 5 (work-frequency off-grid)
deviceModelyesStringDevice model
deviceSoftwareCPU1yesStringSoftware version 1
deviceHardwareControlyesStringControl board version
deviceAddressyesStringRS485 address
modelCodeyesStringModel code
protocolVnyesStringRS485 protocol version
originCodeyesIntegerOrigin code
maxCurrentyesFloatMaximum currentA
batteryVoltageyesFloatBattery rated voltageV
batteryTypeyesIntegerBattery type 0: User define 1: SLD 2: FLD 3: GEL 4: Lithium iron phosphate x14 5: Lithium iron phosphate x15 6: Lithium iron phosphate x16 7: Lithium iron phosphate x7 8: Lithium iron phosphate x8 9: Lithium iron phosphate x9 10: Ternary lithium x7 11: Ternary lithium x8 13: Ternary lithium x13 14: Ternary lithium x14
overVoltageyesFloatOver-voltage (battery charge over-voltage protection point)V
chargingLimitVoltageyesFloatCharge limit voltageV
equalizingChargingVoltageyesFloatEqualize charge voltageV
OverChargeVoltageyesFloatBoost charge voltageV
OverChargeReturnVoltageyesFloatFloat charge voltageV
increaseChargeReturnVoltageyesFloatBoost charge return voltageV
overdisChargeReturnVoltageyesFloatOver-discharge return voltageV
underWarningVoltageyesFloatUnder-voltage warning voltageV
overdisChargeVoltageyesFloatOver-discharge voltageV
disChargeLimitVoltageyesFloatDischarge limit voltageV
dischargeDelayTimeyesFloatOver-discharge delay timeS
equalizingChargeTimeyesFloatEqualize charge timeMin
increaseChargeTimeyesFloatBoost charge timeMin
equalizingChargeIntervalyesFloatEqualize charge intervalD
mainsSwitchVoltageyesFloatMains switch voltageV
swichInvVoltageyesFloatInverter switch voltageV
balancedChargingTimeoutyesIntegerEqualize charge timeoutMin
parallelModeyesIntegerParallel mode 0: single 1: single-phase parallel 2: two-phase parallel 3: two-phase parallel 120 4: two-phase parallel 180 5: three-phase A 6: three-phase B 7: three-phase C
outputPriorityyesIntegerOutput priority 0: solar 1: line 2: sbu
ChargingCurrentyesFloatMains charge current limitA
equalizingChargingEnableyesStringEqualize charge enable
outputVoltageyesFloatOutput voltageV
outputFrequencyyesFloatOutput frequencyHz
maxChargingCurrentyesFloatMaximum charge currentA
ACInputRangeyesIntegerAC input range 0: wide range (APL) 1: narrow range (UPS)
energySavingModeyesIntegerEnergy-saving mode 0: disable 1: enable
overloadAutomaticRestartyesIntegerOverload automatic restart 0: disable 1: enable
overTemperatureSutomaticRestartyesIntegerOver-temperature automatic restart 0: disable 1: enable
chargingPriorityyesIntegerCharge priority 0: PV first, mains charging starts only when PV is invalid 1: mains first, PV charging starts only when mains is invalid 2: hybrid mode, mains and PV charge simultaneously, PV preferred 3: PV only, no mains charging
alarmControlyesIntegerAlarm control 0: disable 1: enable
alarmEnableyesIntegerAlarm enable on input source loss 0: disable 1: enable
overloadBypassEnableyesIntegerOverload bypass enable 0: disable 1: enable
splitPhaseTransformeryesIntegerSplit-phase transformer enable 0: disable 1: enable
BMSEnableyesIntegerBMS enable 0: disable 1: enable
BMSProtocolyesIntegerBMS protocol
4.3.2 Device Monitoring Data (type=2, transmitted at report interval)
FieldRequiredTypeDescriptionUnit
batElectricitySocyesFloatBattery SOC%
batVoltageyesFloatBattery voltageV
batCurrentyesFloatBattery currentA
solarVoltageyesFloatSolar panel voltageV
solarCurrentyesFloatSolar panel currentA
solarPoweryesFloatSolar panel powerW
statusyesIntegerLoad status and charge status 0: Charge off 1: Quick charge 2: Const voltage charge 4: Float charge 5: Reserved 6: Li battery activate 7: Reserved
chargingPoweryesFloatCharging powerW
faultCodeStryesStringMultiple fault codes (comma separated)
nowTimeStryesStringDevice time
machineStatusyesIntegerMachine status 0: power-on delay 1: waiting 2: initializing 3: soft start 4: mains operation 5: inverter operation 6: inverter-to-mains 7: mains-to-inverter 8: battery activation 9: manual shutdown 10: fault
busVoltageyesFloatBus voltageV
gridVoltageyesFloatGrid voltageV
gridCurrentyesFloatGrid currentA
gridFrequencyyesFloatGrid frequencyHz
inverterVoltageyesFloatInverter voltageV
inverterCurrentyesFloatInverter currentA
inverterFrequencyyesFloatInverter frequencyHz
loadCurrentyesFloatLoad currentA
loadActivePoweryesFloatLoad active powerW
loadApparentPoweryesFloatLoad apparent powerVA
mainsChargingCurrentyesFloatMains charging currentA
loadRateyesFloatLoad rate%
heatSinkTemAyesFloatPV heat sink temperature°C
heatSinkTemByesFloatInverter heat sink temperature°C
heatSinkTemCyesFloatTransformer temperature°C
pvChargingCurrentyesFloatPV charging currentA
todayChargeBatyesFloatBattery charge Ah todayAH
todayDischargeBatyesFloatBattery discharge Ah todayAH
todayElectricityPVyesFloatPV energy todaykWh
todayUsedEnergyLoadyesFloatLoad energy consumption todaykWh
totalRunningDayyesIntegerTotal running daysD
cumulateChargeHoursBatyesStringBattery cumulative charge AhAH
cumulateDischargeHoursBatyesStringBattery cumulative discharge AhAH
cumulateElectricityPVyesStringPV cumulative energykWh
cumulateUsedChargeLoadyesStringLoad cumulative energykWh
TodayChargeMainsyesIntegerMains charge energy todayAH
TodayConsumeChargeLoadTOMainsyesFloatLoad energy consumed from mains todaykWh
todayWorkInverteryesIntegerInverter working time todaykWh
todayWorkBypassyesIntegerBypass working time todaykWh
4.4 Push Mechanism & Integration Suggestions
  1. Push QoS is 1 (at least once); duplicate messages may be received on network jitter — idempotent dedup by msgId is recommended;
  2. Push frequency is consistent with the device report period (commonly 1 to 15 minutes, depending on device model and configuration);
  3. type=1 device rated data is transmitted once after the device powers on; type=2 device monitoring data is pushed continuously at the report interval;
  4. data.faultCodeStr is the set of device fault codes (multiple fault codes separated by English commas); for the meaning of specific fault codes, please contact AECC Cloud for the mapping table;
  5. After a third-party service reconnects (Clean Session=true), it must re-subscribe; exponential backoff reconnection is recommended to avoid frequent reconnections triggering server-side limits.
Contact Us