Skip to main content

OpenData API

1️⃣ Introduction

OpenData is a lightweight communication framework designed for WiFi-based INDEVOLT IoT devices. Devices connect to local networks via WiFi, supporting both active data push and response to external queries.

Core Features

  • Device data acquisition: Real-time pulling of device data.
  • Device control: Dynamic adjustment of device parameters and configurations.

Use Cases

  • Receiving external HTTP query requests.


2️⃣ Preparations

Step 1: Install Tools

  • Postman / cURL: Used for invoking HTTP APIs to retrieve device data or update device configurations.
  • Any network debugging tool (e.g., NetAssist): Used for receiving UDP broadcasts.

Step 2: Enable API

Device APIs are disabled by default and must be enabled before use. OpenData provides three modes:

You can configure the Local API in the INDEVOLT App:

  • Device is online: It is recommended to use Cloud Configuration, which is simpler to operate
  • Device is not online: You can use Local Bluetooth Configuration to connect directly to the device and complete the setup

Step 3: Check Firmware Version

If it is lower than the minimum version listed in the table below, please update the firmware.

ModelApplicable firmware version
BK1600/BK1600UltraV1.3.0A_R006.072_M4848_00000039
SolidFlex2000/PowerFlex2000CMS:CMS:V1406.07.002E

You can check the device firmware version in the INDEVOLT app.

Step 4: Obtain IP Address

Choose any one of the following methods:

  • 🧩Method 1: Query via router’s management list;

  • 🧩Method 2: Check in App device settings:

  • 🧩Method 3: Obtain IP via UDP broadcast:

    (1) Ensure the device's WiFi network and computer are on the same local area network.
    (2) Open a network debugging tool.
    (3) Select UDP protocol.
    (4) Select Local Host Addr.
    (5) Set Local Host Post to 10000.
    (6) Click Open.

    (7) Configure Remote with broadcast address and port: 255.255.255.255:8099.

    (8) Enter AT command in message box: AT+IGDEVICEIP.
    (9) Click Send.

    (10) INDEVOLT devices on the same network will respond with their IP address and serial number (SN).


3️⃣ HTTP Usage

3.1 Request Structure

Request Methods

MethodDescription
GETRequests the server to return specified resources.
POSTRequests the server to perform specified operations.

Request Address

http://{IP_ADDRESS}:8080/rpc/{API}

where

  • {IP_ADDRESS}: Device IP address.
  • {API}: HTTP API to be invoked.

Request Example

  • Retrieve device data:

    POST http://192.168.31.213:8080/rpc/Indevolt.GetData?config={"t":[1664,1665]}

cURL command Example

  • Retrieve battery SOC:

    curl -g -X POST -H "Content-Type: application/json" "http://192.168.1.75:8080/rpc/Indevolt.GetData?config={\"t\":[6002]}"

3.2 Errors

Status codeDescriptionExplanation
400Bad RequestThe server cannot understand the format of the request; the client should modify the request and try again.
401UnauthorizedThe request requires authentication; the client needs to provide valid credentials.
403ForbiddenThe server understands the request but refuses to execute it, usually due to permission issues.
404Not FoundThe server cannot find the requested resource, possibly because the resource does not exist or has been deleted.
405Method Not AllowedThe requested method is incompatible with the resource, for example, performing a write operation on a read-only resource.
408Request TimeoutThe server times out while waiting for the request; the client can retry later.
409ConflictThe request conflicts with the current state of the resource, for example, multiple users editing the same resource simultaneously.
410GoneThe requested resource has been permanently deleted and there is no new address.
500Internal Server ErrorThe server encounters an unknown error and cannot complete the request.
501Not ImplementedThe server does not support the requested method and cannot execute it.
502Bad GatewayThe server, acting as a gateway or proxy, received an invalid response from the upstream server.
503Service UnavailableThe server is currently unable to handle the request, possibly due to overload or maintenance.
504Gateway TimeoutThe server, acting as a gateway or proxy, did not receive a timely response from the upstream server.
505HTTP Version Not SupportedThe server does not support the HTTP version used in the request.

4️⃣ HTTP Digest

Digest Authentication verifies user identity in network communications, preventing plaintext password transmission.

In HTTP + Digest mode:

  • New or factory-reset devices must first use the User.SetConfig interface to modify the default password.
  • Other APIs become accessible only after successful password modification.

Required tools

  • ASCII to hexadecimal converter
  • Hexadecimal to base64 converter
  • AES_GCM encryption tool

Password modification example

  1. Convert the new password, original password, and random number from string to hexadecimal.
ASCII stringHexadecimal
New passwordqwertyui71 77 65 72 74 79 75 69
Original passwordqazwsxed71 61 7a 77 73 78 65 64 00 00 00 00 00 00 00 00
(Supplement 0 to 16 bytes)
Random number12345631 32 33 34 35 36 00 00 00 00 00 00
(Supplement 0 to 12 bytes)
  1. Use AES_GCM encryption tool to encrypt, fill in the corresponding information as follows.

  2. Convert ciphertext and tag from hexadecimal to base64.

HexadecimalBase64
Ciphertext4e b2 90 67 54 02 d4 c4TrKQZ1QC1MQ=
Tagcf 0b d0 4e 37 a0 e6 bb cb 74 1b cb ce ab 72 9azwvQTjeg5rvLdBvLzqtymg==
  1. Complete the digest authentication fields and send the User.SetConfig request with the new password. The result returns true, indicating successful modification.

    POST http://{IP_ADDRESS}:8080/rpc/User.SetConfig?config={"Password":"{PASSWORD}"}

    where

    • {IP_ADDRESS}:Device IP address.
    • {PASSWORD}:Base64-encoded ciphertext encrypted with AES128-GCM.
ParameterTypeDescriptionAttribute
UsernameStringDefault opendrequired
PasswordStringDefault device key.

- Using the default password can only request the User.SetConfig interface to change the password.
- Once the password is modified, using the modified password can request other interfaces.
required
RealmString- If calling the User.SetConfig interface to update the password, you need to pass the AES128-GCM tag value.
- If calling other interfaces in Base64 format, you may use a random value.
required
NonceDefault type of DigestRandom values can be usedrequired
AlgorithmDefault type of DigestMD5required
qopDefault type of Digestauthrequired
Nonce CountDefault type of DigestRandom values can be usedrequired
Client NonceDefault type of DigestRandom values can be usedrequired

5️⃣ API

ComponentDescription
IndevoltRetrieve device data and control device.
SysObtain CMS (Communication Management System) information.

6️⃣ Indevolt

Indevolt allows you to retrieve real-time device data and send control commands by making standard HTTP requests.

6.1 Retrieve device data

Example
  • Request

    POST http://192.168.31.213:8080/rpc/Indevolt.GetData?config={"t":[1664,1665]}

  • Response

    {
    "1664":100,
    "1665":251
    }

Function: Indevolt.GetData

Parameter

ParameterTypeDescription
configObjectt: The request address for data, specified in the cJSON Point column of the table below.

Return value

Device data in JSON format.

cJSON PointcJSON Value TypeUnitPoint DescriptionEnum DefinitionAPIAnnotation
SN
0StringDevice SNIndevolt.GetData
Firmware Version Information
1118StringPG2000Series EMSIndevolt.GetData
1109StringPG2000Series BMS-MBIndevolt.GetData
1119 StringPG2000Series PCS Indevolt.GetData
1120StringPG2000Series DCDC Indevolt.GetData
1136StringSFA/PFA DCDC1 Indevolt.GetData
1137 StringSFA/PFA BMS1 Indevolt.GetData
1138 StringSFA/PFA DCDC2 Indevolt.GetData
1139 String SFA/PFA BMS2Indevolt.GetData
1140String SFA/PFA DCDC3Indevolt.GetData
1141 StringSFA/PFA BMS3 Indevolt.GetData
1142 String SFA/PFA DCDC4Indevolt.GetData
1143StringSFA/PFA BMS4 Indevolt.GetData
1098 String SFA/PFA DCDC5Indevolt.GetData
1099StringSFA/PFA BMS5 Indevolt.GetData
System Operating Information
7101EnumWorking Mode1: Self-consumed Prioritized
4: Real-time Control
5: Charge/Discharge Schedule
Indevolt.GetData
142NumkWhRated CapacityIndevolt.GetData
2618NumGrid Charging1000: Disable
1001: Enable
Indevolt.GetData
11009NumWInverter Input LimitIndevolt.GetData
2101NumWTotal AC Input PowerIndevolt.GetData
2108NumWTotal AC Output PowerIndevolt.GetData
11010NumWFeed-in Power LimitIndevolt.GetData
11011NumWMax AC Output PowerIndevolt.GetData
680NumBypass0: Disable
1: Enable
Indevolt.GetData
11039NumBypass mode0: Eps
1: M-Inv
Indevolt.GetDataAutomatically switch according to forward and reverse current
6105Num%Backup SOCIndevolt.GetData
7171NumLight0: Disable
1: Enable
Indevolt.GetData
8646NumDayBattery Calibration: Cycle 0-60
0: OFF
Indevolt.GetDataOperating time without full charge
8647NumTimeBattery Calibration: Start Time DEC-->HEX
H: hour
L: minute
Indevolt.GetDatae.g.: 256-->0100

01(HEX-H)-->01h
00(HEX-L)-->00min
2802NumWBattery Calibration: Charging power (AC)Indevolt.GetData
Cluster Information
606EnumMaster-slave identification1000: Master
1001: Slave
1002: None
Indevolt.GetData
Bypass Power
667FloatWBypass powerIndevolt.GetDataReal-time power flowing through the bypass path.
- Grid-tied: power may come from the microinverter or be supplied directly to loads
- Off-grid: power is directly supplied to loads
Electrical Energy Information
2107NumkWhTotal AC Input EnergyIndevolt.GetDataTotal energy imported from the grid. This energy can be used to charge the battery or directly supply loads through bypass.
2104NumkWhTotal AC Output EnergyIndevolt.GetDataComprehensive electrical energy, including (DC+AC+Bypass)
11035NumWhDaily bypass M-inv input energyIndevolt.GetDataDaily energy coming from the microinverter. This is only available in grid-tied mode, when the system is connected to a microinverter.
11034NumWhTotal bypass M-inv input energyIndevolt.GetDataTotal energy coming from the microinverter. This is only available in grid-tied mode, when the system is connected to a microinverter.
11037Num KWhDaily off-grid bypass output energyIndevolt.GetDataDaily electrical energy of off - grid bypass discharge
2105Num KWhTotal off-grid bypass output energyIndevolt.GetDataTotal electrical energy of off-grid bypass discharge
9285Num WhDaily bypass output energyIndevolt.GetDataDaily electrical energy of bypass discharge (grid-connected + off-grid)
9284NumWhTotal bypass output energyIndevolt.GetDataTotal electrical energy of bypass discharge (grid-connected + off-grid)
1502NumkWhDaily PV GenerationIndevolt.GetData
1505NumWhCumulative ProductionIndevolt.GetData
6004NumkWhBattery Daily Charging EnergyIndevolt.GetData
6005NumkWhBattery Daily Discharging EnergyIndevolt.GetData
6006NumkWhBattery Total Charging EnergyIndevolt.GetData
6007NumkWhBattery Total Discharging EnergyIndevolt.GetData
Electricity Meter Status
7120EnumMeter Connection Status1000: Enable
1001: Disable
Indevolt.GetData
11016FloatWMeter PowerIndevolt.GetData
Grid Information
2600NumVGrid VoltageIndevolt.GetData
2612NumHzGrid FrequencyIndevolt.GetData
Battery Pack Operating Parameters
6001EnumBattery Charge/Discharge State1000: Static
1001: Charging
1002: Discharging
Indevolt.GetData
6000NumWBattery PowerIndevolt.GetData
6002Num%Battery SOC TotalIndevolt.GetData
9008StringBatt SN-MBIndevolt.GetData
9000Num%Batt SOC-MBIndevolt.GetData
9004NumVBatt V-MBIndevolt.GetData
9013NumABatt I-MBIndevolt.GetData
9012NumBatt Temp-MBIndevolt.GetData
9009NumVBatt Cell1 V-MBIndevolt.GetData
9011NumVBatt Cell2 V-MBIndevolt.GetData
9032StringBatt SN-Pack1Indevolt.GetData
9016Num%Batt SOC-Pack1Indevolt.GetData
9020NumVBatt V-Pack1Indevolt.GetData
19173NumABatt I-Pack1Indevolt.GetData
9030NumBatt Temp-Pack1Indevolt.GetData
9021NumVBatt Cell1 V-Pack1Indevolt.GetData
9023NumVBatt Cell2 V-Pack1Indevolt.GetData
9051StringBatt SN-Pack2Indevolt.GetData
9035Num%Batt SOC-Pack2Indevolt.GetData
9039NumVBatt V-Pack2Indevolt.GetData
19174NumABatt I-Pack2Indevolt.GetData
9049NumBatt Temp-Pack2Indevolt.GetData
9040NumVBatt Cell1 V-Pack2Indevolt.GetData
9042NumVBatt Cell2 V-Pack2Indevolt.GetData
9070StringBatt SN-Pack3Indevolt.GetData
9054Num%Batt SOC-Pack3Indevolt.GetData
9058NumVBatt V-Pack3Indevolt.GetData
19175NumABatt I-Pack3Indevolt.GetData
9068NumBatt Temp-Pack3Indevolt.GetData
9059NumVBatt Cell1 V-Pack3Indevolt.GetData
9061NumVBatt Cell2 V-Pack3Indevolt.GetData
9165NumBatt SN-Pack4Indevolt.GetData
9149Num%Batt SOC-Pack4Indevolt.GetData
9153NumVBatt V-Pack4Indevolt.GetData
19176NumABatt I-Pack4Indevolt.GetData
9163NumBatt Temp-Pack4Indevolt.GetData
9154NumVBatt Cell1 V-Pack4Indevolt.GetData
9156NumVBatt Cell2 V-Pack4Indevolt.GetData
9218StringBatt SN-Pack5Indevolt.GetData
9202Num%Batt SOC-Pack5Indevolt.GetData
9206NumVBatt V-Pack5Indevolt.GetData
19177NumABatt I-Pack5Indevolt.GetData
9216NumBatt Temp-Pack5Indevolt.GetData
9219NumVBatt Cell1 V-Pack5Indevolt.GetData
9222NumVBatt Cell2 V-Pack5Indevolt.GetData
PV Operating Parameters
1501NumWTotal DC Output PowerIndevolt.GetData
1632NumADC Input Current 1Indevolt.GetData
1600NumVDC Input Voltage 1Indevolt.GetData
1664NumWDC Input Power 1Indevolt.GetData
1633NumADC Input Current 2Indevolt.GetData
1601NumVDC Input Voltage 2Indevolt.GetData
1665NumWDC Input Power 2Indevolt.GetData
1634NumADC Input Current 3Indevolt.GetData
1602NumVDC Input Voltage 3Indevolt.GetData
1666NumWDC Input Power 3Indevolt.GetData
1635NumADC Input Current 4Indevolt.GetData
1603NumVDC Input Voltage 4Indevolt.GetData
1667NumWDC Input Power 4Indevolt.GetData

6.2 Control device

Example: Set working mode
  • Request

    POST http://192.168.31.213:8080/rpc/Indevolt.SetData?config={"f":16,"t":47005,"v":[4]}

  • Response

    {"result": true}
Example: Set discharging state, power and SOC
  • Request

    POST http://192.168.31.213:8080/rpc/Indevolt.SetData?config={"f":16,"t":47015,"v":[2,700,5]}

  • Response

    {"result": true}

Function: Indevolt.SetData

Parameter

ParameterTypeDescription
configObjectf: function code, 16 by default;
t: register address, see the cJSON Point column in the table below;
v: write value, see the Value column in the table below.
cJSON PointcJSON Value TypeUnitPoint DescriptionValueAPI
47005EnumMode Setting1: Self-consumed Prioritized
4: Real-time control
5: Charge/Discharge Schedule
Indevolt.SetData
47015UINTState Setting (Only available in real-time control)0: Standby
1: Charging
2: Discharging
Indevolt.SetData
47016INTWPower Setting (Only available in real-time control)MAX Charging: 50–2400
MAX Discharging: 50–2400
Indevolt.SetData
47017UINT%SOC Setting (Only available in real-time control)5-100Indevolt.SetData
1147INTWMax AC Output Power Setting50-2400Indevolt.SetData
1146INTWFeed-in Power Limit Setting50-2400Indevolt.SetData
1143UINTGrid Charging Setting0: Disable
1: Enable
Indevolt.SetData
1138INTWInverter Input Limit Setting100-2400Indevolt.SetData
1EnumLoad Setting1: Smart Plug
2: Meter
3: Key Load
4: Custom
Indevolt.SetData
7266EnumBypass Setting0: Disable
1: Enable
Indevolt.SetData
1142INT%Backup SOC SettingIndevolt.SetData
7265EnumLight Setting0: Disable
1: Enable
Indevolt.SetData
info

In real-time control mode, device charging/discharging can be controlled by simultaneously writing state, power, and SOC values.

Return value

ParameterTypeDescription
resultBooltrue: success; false: failure.

7️⃣ Sys

This class is used to obtain firmware version, including CMS (Communication Management System) information.

Example
  • Request

    GET http://192.168.31.213:8080/rpc/Sys.GetConfig

  • Response

    {
    "device": {
    "hostname": "",
    "timezone": 480,
    "type": "CMS-SF2000",
    "sn": "",
    "mac": "7C3E82EF997F",
    "fw": "T1.4.06_ROOD. 072_M4801_0000002C",
    "f_ver": "T1406.07.002C",
    "p_ver": "VOD.00.08",
    "time": "2025-12-18 09:44:57",
    "time_stamp": 1766051097,
    "run_time": 2244
    }
    }

Function: Sys.GetConfig

Return value

ParameterTypeDescription
deviceObjectSee the table below for device configuration information.

device configuration

ParameterTypeDescription
hostnameStringDevice name
timezoneNumTimezone
typeStringDevice model
snStringDevice serial number
macStringDevice MAC address
fwStringDevice firmware version
f_verStringPG2000Series CMS
p_verStringPG2000Series Pfile
timeStringCurrent time
time_stampNumCurrent timestamp (in seconds)
run_timeNumDevice runtime (in seconds)

8️⃣ FAQ

Q: HTTP request returns 401 Unauthorized.
  • Verify the username and password for Digest Authentication.
  • New/factory-reset devices only support access to the designated interface: User.SetConfig. Refer to Digest Authentication section - other APIs become accessible after successful password modification and authentication with the new password.
Q: Device fails to return IP address after broadcast command.

The OpenData API is not enabled, making this function inactive. Refer to Enable API section.