Skip to content

Real-time Data Forwarding

SolisCloud supports obtaining device real-time data through general data forwarding methods, suitable for high-frequency real-time data acquisition scenarios. When the HTTP API rate limit (10 times/second) cannot meet business needs, this method is recommended (no rate limit).

Applicable Scenarios

  • Need to obtain device data in real-time at second-level frequency
  • HTTP API rate limits cannot meet business requirements
  • Need to receive device status changes and alarm notifications in real-time

Supported Protocols

ProtocolDescriptionApplicable Scenarios
RocketMQMessage queue forwardingHigh-throughput, reliable delivery
MQTTMQTT protocol forwardingIoT scenarios, lightweight
HTTPHTTP callback forwardingSimple integration, webhook mode

Data Forwarding Flow

Activation Process

  1. Contact the SolisCloud integration team to apply for data forwarding service
  2. Provide forwarding configuration information (protocol type, receiving address, etc.)
  3. After configuration is completed, real-time data will be pushed to the specified address

Note

The data forwarding service must be applied for separately and is not included in the self-service API activation. Please contact the integration team for configuration support.

Forwarding Data Format

Regardless of the forwarding protocol used, the message body is in a unified JSON format. Each message is scoped to a single collector and contains real-time data for all inverters under that collector.

Data Example

json
{
  "time": 1572315457000,
  "sn": "10000",
  "isRealtime": 0,
  "collector1": {
    "collectorVer": "211",
    "type": 0,
    "model": "4G",
    "rssiLevel": 1,
    "rssi": -90,
    "lat": 30000000,
    "lon": 120000000,
    "dataUploadCycle": 300,
    "currentWorkingTime": 86400,
    "totalWorkingTime": 2592000
  },
  "inverter1": [
    {
      "inverterSn": "aa08fcb5aa08fcb5",
      "inverterModel": "23",
      "inverterVer": "2568",
      "ratedPower": 15000,
      "nationalCode": "13",
      "national": "GN-380L",
      "inverterTemp": 14.0,
      "pac": 10017,
      "reactivePower": 120,
      "apparentPower": 10100,
      "eToday": 3765.7,
      "eMonth": 92343,
      "eYear": 926474,
      "eTotal": 3154573,
      "pv": [
        { "u": 200.0, "i": 2.0 },
        { "u": 200.0, "i": 2.0 },
        { "u": 200.0, "i": 2.0 }
      ],
      "mppt": [
        { "u": 400.0, "i": 6.0 },
        { "u": 400.0, "i": 6.0 }
      ],
      "ac": [
        { "u": 220.1, "i": 2.1 },
        { "u": 200.2, "i": 2.2 },
        { "u": 200.3, "i": 2.3 }
      ],
      "fac": 50.00,
      "psum": -500,
      "gridPurchasedTotalEnergy": 1200.5,
      "gridSellTotalEnergy": 800.3,
      "batteryPower": 0,
      "batteryState": 0,
      "batteryHealthSoh": 98.5,
      "batteryCapacitySoc": 85.0,
      "familyLoadPower": 3500,
      "bypassLoadPower": 0,
      "homeLoadTodayEnergy": 12.5,
      "homeLoadTotalEnergy": 3650.0,
      "state": "1245",
      "subState": 0,
      "alarmCn": "",
      "alarmEn": ""
    }
  ]
}

Data Field Reference

Top-level Fields

FieldTypeDescription
timeLongData timestamp (milliseconds)
snStringCollector SN
isRealtimeIntegerReal-time flag: 0 = real-time, 1 = historical backfill

Collector Information (collector1)

FieldTypeDescription
collectorVerStringCollector firmware version
typeIntegerConnection type: 1=GPRS, 2=WIFI
modelStringCollector model: GPRS / WIFI / 4G / LAN / W4G, etc.
rssiLevelIntegerSignal strength level (1-5)
rssiIntegerSignal value: GPRS 1~31, WIFI -20~-100
latIntegerLatitude (multiply by 0.000001 for actual value)
lonIntegerLongitude (multiply by 0.000001 for actual value)
dataUploadCycleIntegerData upload interval (seconds)
currentWorkingTimeLongCurrent session uptime (seconds)
totalWorkingTimeLongCumulative uptime (seconds)

Inverter Information (inverter1 array)

Each inverter is an object containing the following fields:

Basic Information

FieldTypeDescription
inverterSnStringInverter SN
inverterModelStringInverter model code
inverterVerStringInverter firmware version
ratedPowerDoubleRated power (W)
nationalCodeStringGrid standard code
nationalStringGrid standard name
inverterTempDoubleInverter temperature (℃)

Generation Side

FieldTypeDescription
pacDoubleReal-time power (W)
reactivePowerDoubleReactive power (Var)
apparentPowerDoubleApparent power (VA)
eTodayDoubleToday's energy (kWh)
eMonthDoubleThis month's energy (kWh)
eYearDoubleThis year's energy (kWh)
eTotalDoubleCumulative energy (kWh)

DC Side (pv array)

FieldTypeDescription
uDoubleDC voltage (V)
iDoubleDC current (A)

MPPT Data (mppt array)

FieldTypeDescription
uDoubleMPPT voltage (V)
iDoubleMPPT current (A)

AC Side (ac array)

FieldTypeDescription
uDoubleAC voltage (V)
iDoubleAC current (A)
facDoubleGrid frequency (Hz)

Grid Side

FieldTypeDescription
psumDoubleTotal grid power (W), positive=selling, negative=buying
gridPurchasedTotalEnergyDoubleCumulative grid purchase energy (kWh)
gridSellTotalEnergyDoubleCumulative grid sell energy (kWh)

Battery Side

FieldTypeDescription
batteryPowerDoubleBattery power (W), positive=charging, negative=discharging
batteryStateIntegerBattery status: 0=normal, 1=offline, 2=fault
batteryHealthSohDoubleBattery SOH (%)
batteryCapacitySocDoubleBattery SOC (%)
batteryListArrayMulti-battery list (each item contains the above battery fields)

Load Side

FieldTypeDescription
familyLoadPowerDoubleHome load power (W)
bypassLoadPowerDoubleBypass load power (W)
homeLoadTodayEnergyDoubleToday's load energy consumption (kWh)
homeLoadTotalEnergyDoubleCumulative load energy consumption (kWh)

Inverter Status

FieldTypeDescription
stateStringInverter status code (decimal), see below
subStateIntegerSub-status
alarmCnStringAlarm message in Chinese (only present during alarm)
alarmEnStringAlarm message in English (only present during alarm)

Status Code Interpretation

A state decimal value greater than 4100 (hex greater than 1004) indicates an inverter alarm. Common alarm codes:

Status Code (Hex)Description
1004HControl off-grid
1010HGrid over voltage
1011HGrid under voltage
1012HGrid over frequency
1013HGrid under frequency
1015HNo grid
1020HDC over voltage
1032HOver temperature protection
1033HPV insulation fault
1034HLeakage current protection
2010HFail Safe
2011HMeter communication failure
2012HBattery communication failure

Protocol Configuration

RocketMQ Configuration

ParameterRequiredDescription
namesrvAddrYesRocketMQ NameServer address
topicYesMessage topic
consumerGroupYesConsumer group
accessKeyNoAccess key (required when ACL is enabled)
secretKeyNoSecret key (required when ACL is enabled)

RocketMQ Best Practices

  • Use cluster consumption mode to ensure no message loss
  • Implement idempotent processing to prevent duplicate consumption
  • Set a reasonable consumption timeout (default 30 seconds)

MQTT Configuration

ParameterRequiredDescription
brokerUrlYesMQTT Broker address
topicYesSubscription topic
clientIdYesClient ID (must be unique)
usernameNoUsername
passwordNoPassword

MQTT Best Practices

  • Use QoS 1 (at-least-once delivery)
  • Ensure clientId uniqueness — duplicate connections will cause disconnections
  • Implement automatic reconnection mechanism

HTTP Callback Configuration

ParameterRequiredDescription
callbackUrlYesHTTP callback URL (must be publicly accessible)
methodNoRequest method, fixed to POST
headersNoCustom request headers (can be used for authentication)

HTTP Callback Best Practices

  • Callback URL should support HTTPS
  • Receiver must return HTTP 200 within 5 seconds, otherwise the push is considered failed
  • Automatic retry on failure (up to 3 attempts)
  • Implement signature verification to validate request origin

Push Frequency

ItemDescription
Push frequencyFollows device reporting frequency, typically second-level
Rate limitNo limit
Message orderingMessages for the same device are pushed in chronological order
Message reliabilityRocketMQ/MQTT guarantee at-least-once delivery; HTTP retries on failure

FAQ

What's the difference between forwarded data and HTTP API queries?
ComparisonHTTP APIReal-time Forwarding
Data update frequency5 minutesSecond-level
Access patternPull (active)Push (passive)
Rate limit10 times/secondNo limit
Use caseLow-frequency queries, reportingReal-time monitoring, high-frequency analytics
How do I distinguish real-time data from historical backfill?

Check the top-level field isRealtime:

  • 0 = real-time data
  • 1 = historical backfill (data from periods when the device was offline, backfilled after reconnection)
What if some fields are missing from forwarded data?

Fields vary by device type:

  • Grid-tied inverters: No battery-related fields (batteryPower, batteryCapacitySoc, etc.)
  • Hybrid inverters: Include all fields
  • Older collector models: May lack MPPT data

We recommend dynamically parsing fields based on inverterModel.