设备控制 API(第三方授权)
设备控制 API 提供对逆变器的远程控制、参数读取、策略下发和读取功能。适用第三方授权方式,使用 OAuth2.0 认证。
适用授权方式:第三方授权
与用户授权版本的区别
- 第三方授权(第三方监控平台等):使用 OAuth2.0,接口路径前缀
/api/control_device/ - 设备控制(用户授权):面向云平台用户授权,使用自定义 HMAC-SHA1 签名,接口路径前缀
/v2/api/
API 基础信息
| 项目 | 说明 |
|---|---|
| API 基础地址 | https://api-oauth2.soliscloud.com/ |
| 请求方式 | POST |
| 数据更新频率 | 5 分钟 |
认证方式
所有接口请求需在 HTTP 请求头中携带 OAuth2.0 Bearer Token:
Authorization: Bearer {access_token}第三方服务商设备控制建议
控制接口优先级
- 优先推荐 使用
/api/control_device/strategySetting接口下发指令 - 如无法满足需求,可使用
/api/control_device/control接口进行辅助控制 - 如通用数据转发方式仍无法满足需求,请将需求反馈至对接团队
逆变器寄存器通信协议
设备控制接口中的寄存器地址和指令参数,请参考以下协议文档:
- 并网逆变器:请联系销售获取
- 储能逆变器:请联系销售获取
接口概览
控制接口 — /api/control_device/control
远程控制单台逆变器设备,支持寄存器地址写入或 AT 指令透传两种方式。
限流:2 次/秒
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| inverterSn | String | 三选一 | 逆变器 SN |
| plantId | String | 三选一 | 电站编码,可从电站相关查询接口或数据转发中获取 |
| nmiCode | String | 三选一 | 澳洲发电户号(NMI),澳大利亚地区专用 |
| atCommand | String | 否 | AT 指令透传内容(与 modbusAddr 二选一) |
| modbusAddr | Number / String | 否 | 寄存器地址(与 atCommand 二选一,传此参数时需同时传 functionCode) |
| functionCode | String | 否(传 modbusAddr 时必填) | Modbus 功能码,可选值:03(读取保持寄存器)、04(读取输入寄存器)、06(写入单个寄存器),与 modbusAddr 配套使用 |
| value | Number | 否 | 寄存器写入值(modbusAddr 模式时必填) |
设备定位(三选一必填)
- inverterSn:逆变器 SN,直接指定设备
- plantId:电站编码,可从电站相关查询接口或数据转发中获取
- nmiCode:澳洲发电户号(NMI),澳大利亚地区专用
请求示例(寄存器地址模式):
curl -X POST "https://{API_OAUTH2_DOMAIN}/api/control_device/control" \
-H "Content-Type: application/json;charset=UTF-8" \
-H "Authorization: Bearer {access_token}" \
-d '{
"inverterSn": "SC2024010001",
"modbusAddr": 48,
"functionCode": "06",
"value": 190
}'请求示例(AT 指令透传模式):
curl -X POST "https://{API_OAUTH2_DOMAIN}/api/control_device/control" \
-H "Content-Type: application/json;charset=UTF-8" \
-H "Authorization: Bearer {access_token}" \
-d '{
"inverterSn": "SC2024010001",
"atCommand": "AT+CMD=..."
}'响应参数:
| 字段 | 类型 | 说明 |
|---|---|---|
| code | String | 结果代码 |
| msg | String | 结果消息 |
| time | Number | 时间戳 |
| data | Array | 控制结果列表 |
data 元素字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| msg | String | 单台设备结果消息 |
| code | String | 单台设备结果代码 |
| recv | String | 接收状态 |
| modbusAddr | Number / String | 下发的寄存器地址 |
| value | Number | 下发的寄存器值 |
响应示例:
{
"code": "0",
"msg": "success",
"time": 1688715608012,
"data": [
{
"msg": "success",
"code": "0",
"recv": "1",
"modbusAddr": 48,
"value": 190
}
]
}AT 指令读取 — /api/control_device/atRead
异步读取逆变器参数。返回 orderId 用于后续查询结果。
限流:2 次/秒
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| inverterSn | String | 三选一 | 逆变器 SN |
| plantId | String | 三选一 | 电站编码,可从电站相关查询接口或数据转发中获取 |
| nmiCode | String | 三选一 | 澳洲发电户号(NMI),澳大利亚地区专用 |
| modbusAddr | Number / String | 是 | 要读取的寄存器地址 |
| functionCode | String | 否 | Modbus 功能码,可选值:03(读取保持寄存器)、04(读取输入寄存器),与 modbusAddr 配套使用,不传默认为 03 |
设备定位(三选一必填)
- inverterSn:逆变器 SN,直接指定设备
- plantId:电站编码,可从电站相关查询接口或数据转发中获取
- nmiCode:澳洲发电户号(NMI),澳大利亚地区专用
请求示例:
curl -X POST "https://{API_OAUTH2_DOMAIN}/api/control_device/atRead" \
-H "Content-Type: application/json;charset=UTF-8" \
-H "Authorization: Bearer {access_token}" \
-d '{
"inverterSn": "SC2024010001",
"modbusAddr": 142
}'响应示例:
{
"code": "0",
"msg": "success",
"orderId": "1688715608012_769",
"data": {},
"time": 1688715608012
}注意
本接口为异步接口。返回 orderId 后,使用 /api/control_device/result 接口查询实际读取结果。若响应中未返回 orderId,说明无需调用 result 接口。
AT 指令结果 — /api/control_device/result
通过 orderId 获取 AT 指令执行结果。
限流:2 次/秒
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| orderId | String | 是 | 批量读取返回的订单 ID |
响应参数:
| 字段 | 类型 | 说明 |
|---|---|---|
| code | String | 结果代码 |
| msg | String | 结果消息 |
| data | Object | 读取结果数据 |
data 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| nmiCode | String | 采集器 SN |
| successNum | Number | 成功读取的设备数量 |
| notChangeNum | Number | 未变化的设备数量 |
| errorMsg | String | 错误消息 |
响应示例:
{
"code": "0",
"msg": "success",
"data": {
"nmiCode": "20025543400",
"successNum": 1,
"notChangeNum": 0,
"errorMsg": ""
}
}策略设置 — /api/control_device/strategySetting
批量为多个设备设置策略。
限流:10 次/秒
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| inverterSn | String | 三选一 | 逆变器 SN |
| plantId | String | 三选一 | 电站编码,可从电站相关查询接口或数据转发中获取 |
| nmiCode | String | 三选一 | 澳洲发电户号(NMI),澳大利亚地区专用 |
| controlSwitch | Number | 是 | 控制开关,0=关闭,1=开启 |
设备定位(三选一必填)
- inverterSn:逆变器 SN,直接指定设备
- plantId:电站编码,可从电站相关查询接口或数据转发中获取
- nmiCode:澳洲发电户号(NMI),澳大利亚地区专用
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sysImportLmtSwitch | Number | 否 | 系统输入功率限制开关 |
| sysImportLmtPower | Number | 否 | 系统输入功率限制值 (W) |
| sysExportLmtSwitch | Number | 否 | 系统输出功率限制开关 |
| sysExportLmtPower | Number | 否 | 系统输出功率限制值 (W) |
| actionList | Array | 否 | 策略动作列表 |
actionList 元素字段:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| actions | Number | 是 | 动作类型 |
| beginDate | String | 是 | 开始日期 |
| endDate | String | 是 | 结束日期 |
| power | Number | 否 | 功率值 (W) |
| socLowerLimit | Number | 否 | SOC 下限 |
| socUpperLimit | Number | 否 | SOC 上限 |
| pvShutdownSwitch | Number | 否 | 光伏关机开关 |
| doControlSwitch | Number | 否 | DO 控制开关 |
| allowGridCharge | Number | 否 | 允许电网充电开关 |
动作类型说明
- actions=1:电池待机
- actions=2:储能充放电
- actions=3:并网口输入/输出功率控制
- actions=5:自发自用模式
功率正数为充电,负数为放电。$NOW 表示立即执行,durationMinutes 指定持续时长(分钟)。
智慧能量策略配置示例
以下示例展示通过 strategySetting 接口下发智慧能量策略的典型场景。时间格式统一为 HH24:MM(24 小时制),功率单位为 W,功率正数表示充电、负数表示放电。
场景一:计划定时策略(全时段调度)
按固定时间区间执行多模式轮询调度,适用于日常常态化能量管理。 如果并网口的取送电功率需要进行定时修改,目前可以通过该接口的多次调用(每次调用设置不同的功率值)来实现。
{
"inverterSn": "110CA999C999999",
"controlSwitch": 1,
"sysImportLmtSwitch": 1,
"sysImportLmtPower": 8500,
"sysExportLmtSwitch": 1,
"sysExportLmtPower": 7500,
"actionList": [
{
"actions": 1,
"beginDate": "00:00",
"endDate": "06:00"
},
{
"actions": 2,
"beginDate": "06:00",
"endDate": "12:00",
"power": 3500,
"socUpperLimit": 95,
"allowGridCharge": 1
},
{
"actions": 2,
"beginDate": "12:00",
"endDate": "18:00",
"power": -2500,
"socLowerLimit": 25
},
{
"actions": 5,
"beginDate": "18:00",
"endDate": "23:59"
}
]
}字段补充:
| 字段 | 说明 |
|---|---|
| allowGridCharge | 电网补电使能:1 = 允许电网为电池充电,0 = 禁止 |
| socUpperLimit | 充电电量上限(%),达到限值停止充电 |
| socLowerLimit | 放电电量下限(%),达到限值停止放电 |
| durationMinutes | 任务持续时长(分钟),到期后恢复原有策略 |
场景二:实时控制 — 立即待机
设备即刻进入待机状态,按指定时长保持,结束后恢复原有策略。
{
"inverterSn": "110CA999C999999",
"controlSwitch": 1,
"sysImportLmtSwitch": 1,
"sysImportLmtPower": 8500,
"sysExportLmtSwitch": 1,
"sysExportLmtPower": 7500,
"actionList": [
{
"actions": 1,
"beginDate": "$NOW",
"durationMinutes": 60
}
]
}场景三:实时控制 — 立即充电
临时触发储能充电任务,即刻执行并限定运行时长。
{
"inverterSn": "110CA999C999999",
"controlSwitch": 1,
"sysImportLmtSwitch": 1,
"sysImportLmtPower": 8500,
"sysExportLmtSwitch": 1,
"sysExportLmtPower": 7500,
"actionList": [
{
"actions": 2,
"beginDate": "$NOW",
"durationMinutes": 60,
"power": 3500,
"socUpperLimit": 95,
"allowGridCharge": 1
}
]
}场景四:实时控制 — 立即放电
临时触发储能放电任务,即刻执行并限定运行时长。
{
"inverterSn": "110CA999C999999",
"controlSwitch": 1,
"sysImportLmtSwitch": 1,
"sysImportLmtPower": 8500,
"sysExportLmtSwitch": 1,
"sysExportLmtPower": 7500,
"actionList": [
{
"actions": 2,
"beginDate": "$NOW",
"durationMinutes": 60,
"power": -2500,
"socLowerLimit": 25
}
]
}场景五:策略关闭
关闭整体能量调度策略,保留并网功率限制参数,清空动作任务列表。
{
"inverterSn": "110CA999C999999",
"controlSwitch": 0,
"sysImportLmtSwitch": 1,
"sysImportLmtPower": 8500,
"sysExportLmtSwitch": 1,
"sysExportLmtPower": 7500,
"actionList": []
}通用约束规则
- 时间格式:定时时段使用
HH24:MM,取值范围00:00 ~ 23:59 $NOW:立即执行,无需等待定时,配合durationMinutes使用- 功率参数:所有功率值为整型,单位 W
- SOC 参数:取值范围
0 ~ 100,代表电池电量百分比 - 时段优先级:实时临时指令 > 定时计划策略
- 单次请求仅针对单台逆变器(按
inverterSn唯一匹配)
读取执行策略 — /api/control_device/currentStrategyGet
获取当前策略设置。
限流:10 次/秒
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| inverterSn | String | 是 | 逆变器 SN |
注意
面向云平台用户授权接口不包含设备控制 API。设备控制仅在第三方授权下支持。
错误码参考
接口返回的 code 错误码及说明请参考 错误码。
