1、简介

1.1 目的

能控云平台提供云端数据转发的通道,以便第三方平台可以同步逆变器设备的数据。本文主要介绍数据转发的方法和数据解析的格式。

1.2 缩写及定义

MQTT —— 一种基于客户端/服务器(发布/订阅)模式的轻量级消息传输协议。

JSON —— 一种轻量级的数据交换格式。

1.3 免责声明

本文档描述的内容因为版本更新,可能和实际使用有些不同。我们将会不定期更新文档,如果在使用中遇到问题,请联系我们。

2、系统框架图

逆变器 / 储能设备 Device A · B · C 数据采集器 Data Collector 能控云平台 · DMS MQTT Broker 平台自建 MQTT 服务端 topic: SUB/{deviceType}/0 第三方平台 Third-party Platform 订阅 / 推送 (QoS 1)
数据流向:设备 → 采集器 → 能控云 DMS(MQTT Broker)→ 第三方平台(按订阅主题推送,QoS 1)。

3、数据消息服务说明

3.1 概述

数据消息服务(Data Message Service,简称 DMS),是能控云平台自建的 MQTT 服务端;是一种高效、可靠、安全、便捷的消息服务。DMS 能够帮助应用开发者在他们的应用中快速集成消息能力,轻松实现设备数据的可靠转发与同步。

3.2 名称解析
名称说明
topic用于订阅和发布消息的标识
client id建立连接专属标记符,全局唯一
username建立连接需要的用户名
password建立连接需要的密码
3.3 主题订阅

第三方平台需通过 MQTT 客户端与服务端建立连接,并订阅相应的主题。连接所需的 url、topic、client id、username、password 由能控云平台提供。

主题格式说明

平台按第三方账号分配推送主题(topic),第三方账号与设备在开放平台完成绑定后,设备数据将推送至对应主题。主题规则如下:

  1. 主题以 SUB/ 为前缀,示例:SUB/{deviceType}/0;
  2. 同一账号可配置多个主题,多个主题以英文逗号分隔,平台推送时按设备类型(deviceType)自动匹配对应主题;
  3. 主题由能控云平台统一分配,第三方不可自行修改;
  4. 支持 MQTT 共享订阅:订阅 $share/{消费组名}/{主题} 时,同一消费组内的客户端轮询接收消息(每条消息只投递给组内一个客户端),不同消费组均会收到该主题推送的全量消息。
3.4 连接示例

示例通过 MQTTX 客户端与服务端进行连接,具体的连接信息需与能控云平台联系获取。

参数说明说明示例
服务器地址MQTT 服务端(DMS)地址,由能控云平台提供平台提供
端口默认 8091,支持 MQTT over TCP 及 SSL,SSL 端口以平台提供为准8091
协议版本MQTT 3.1 / 3.1.13.1.1
client id平台分配的 mqttId,全局唯一;同一 clientId 重复连接时新连接会抢占旧连接mqttId
username平台分配的 keyIdkeyId
password平台分配的 keySecretkeySecret
Keep Alive心跳保活时间(秒),建议 60;服务端按 1.5 倍 Keep Alive 判断连接超时60
Clean Session建议 true;断线重连后需重新发起订阅true
订阅 QoS平台以 QoS 1(至少一次)推送,订阅建议使用 QoS 11
MQTTX 测试步骤
  1. 新建连接,Host 填写平台提供的地址和端口,Client ID 填写平台分配的 mqttId;
  2. 勾选 User Credentials,Username 填写 keyId,Password 填写 keySecret;
  3. 点击 Connect 连接成功后,订阅平台分配的主题(多实例负载均衡可使用 $share/{消费组名}/{主题});
  4. 在平台绑定设备并等待设备上报后,即可在订阅窗口查看推送的 JSON 数据。
Java(Eclipse Paho)订阅示例
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);
        // 处理推送数据, 建议按 msgId 做幂等去重
    }
    // 其余回调方法按需实现 connectionLost / deliveryComplete / connectComplete
});
client.connect(options);
client.subscribe("<topic>", 1);

4、数据转发模型

4.1 设备基本数据(上电传输一次)
字段名必选类型说明单位
wifiSnstring采集器sn
deviceSnstring设备sn
nowTimestring传输时间
typestring传输类型 1-设备额定数据 2-设备监控数据
systemTimestamplong数据采集器系统时间戳(GMT+8)
plantTimestamplong数据采集器电站时间戳(电站时区)
topicstring当前主题
deviceTypeint设备类型编码
dataobject数据实体(数据模型)
msgIdstring消息唯一标识(UUID,32位),用于消息幂等去重
datalogVersionstring采集器软件版本号
4.2 设备监控数据(间隔传输)
字段名必选类型说明单位
wifiSnstring采集器sn
deviceSnstring设备sn
nowTimestring传输时间
typestring传输类型 1-设备额定数据 2-设备监控数据
systemTimestamplong数据采集器系统时间戳(GMT+8)
plantTimestamplong数据采集器电站时间戳(电站时区)
topicstring当前主题
deviceTypeint设备类型编码
dataobject数据实体(数据模型)
msgIdstring消息唯一标识(UUID,32位),用于消息幂等去重
datalogVersionstring采集器软件版本号
4.3 数据实体(data)字段说明

data 为数据实体,不同传输类型(type)对应不同的字段结构。以下字段基于开放平台通用数据模型(逆变器/储能类设备),不同设备类型字段可能存在差异,具体以设备实际上报数据为准。

4.3.1 设备额定数据(type=1,上电传输一次)字段表
字段名必选类型说明单位
deviceTypeInteger产品类型 0(控制器,家用) 1(控制器,路灯) 3(逆变器) 4(控逆一体机) 5(工频离网)
deviceModelString设备型号
deviceSoftwareCPU1String软件版本号1
deviceHardwareControlString控制板版本
deviceAddressStringRs485地址
modelCodeString机型编码
protocolVnStringRS485协议版本
originCodeInteger产地编号
maxCurrentFloat最大电流A
batteryVoltageFloat电池额定电压V
batteryTypeInteger蓄电池类型 0 : User define 1 : SLD 2 : FLD 3 : GEL 4: Lithinum iron phosphate x 14 5: Lithinum iron phosphate x 15 6: Lithinum iron phosphate x 16 7: Lithinum iron phosphate x 7 8: Lithinum iron phosphate x 8 9: Lithinum iron phosphate x 9 10: Ternary lithium x 7 11: Ternary lithium x 8 13: Ternary lithium x 13 14: Ternary lithium x 14
overVoltageFloat超压电压(电池充电过压保护点)V
chargingLimitVoltageFloat充电限制电压V
equalizingChargingVoltageFloat均衡充电电压V
OverChargeVoltageFloat提升充电电压V
OverChargeReturnVoltageFloat浮充充电电压V
increaseChargeReturnVoltageFloat提升充电返回电压V
overdisChargeReturnVoltageFloat过放返回电压V
underWarningVoltageFloat欠压警告电压V
overdisChargeVoltageFloat过放电压V
disChargeLimitVoltageFloat放电限制电压V
dischargeDelayTimeFloat过放延时时间S
equalizingChargeTimeFloat均衡充电时间Min
increaseChargeTimeFloat提升充电时间Min
equalizingChargeIntervalFloat均衡充电间隔D
mainsSwitchVoltageFloat市电切换电压V
swichInvVoltageFloat逆变切换电压V
balancedChargingTimeoutInteger均衡充电超时时间Min
parallelModeInteger并机模式 0:单机 1:单相并机 2:两相并机 3:两相并机120 4:两相并机180 5:三相A 6:三相B 7:三相C
outputPriorityInteger输出优先级 0:solar 1:line 2:sbu
ChargingCurrentFloat市电充电电流限制A
equalizingChargingEnableString均衡充电使能
outputVoltageFloat输出电压V
outputFrequencyFloat输出频率Hz
maxChargingCurrentFloat最大充电电流A
ACInputRangeIntegerAC输入范围 0:宽范围(APL) 1:窄范围(UPS)
energySavingModeInteger节能模式 0:禁止 1:使能
overloadAutomaticRestartInteger过载自动重启 0:禁止 1:使能
overTemperatureSutomaticRestartInteger过温自动重启 0:禁止 1:使能
chargingPriorityInteger充电优先级 0:光伏优先,仅光伏无效的时候才启动市电充电 1:市电优先,仅市电无效的时候才启动光伏充电 2:混合模式,市电和光伏同时充电,优先光伏。 3:仅光伏,市电不充电。
alarmControlInteger告警控制 0:禁止 1:使能
alarmEnableInteger输入源中断时告警使能 0:禁止 1:使能
overloadBypassEnableInteger过载旁路使能 0:禁止 1:使能
splitPhaseTransformerInteger分相变压器使能 0:禁止 1:使能
BMSEnableIntegerBMS使能 0:禁止 1:使能
BMSProtocolIntegerBMS协议
4.3.2 设备监控数据(type=2,按上报间隔传输)字段表
字段名必选类型说明单位
batElectricitySocFloat蓄电池电量SOC%
batVoltageFloat蓄电池电压V
batCurrentFloat电池电流A
solarVoltageFloat太阳能板电压V
solarCurrentFloat太阳能板电流A
solarPowerFloat太阳能板功率W
statusInteger负载状态和充电状态 0: Chgarge off 1: Quik charge 2: Const voltage charge 4: Float charge 5: Reserved 6: Li battery acitvate 7: Reserved
chargingPowerFloat充电功率W
faultCodeStrString多个故障码(逗号分割)
nowTimeStrString机器时间
machineStatusInteger机器状态 0:上电延时 1:等待状态 2:初始化 3:软启动 4:市电运行 5:逆变运行 6:逆变转市电 7:市电转逆变 8:电池激活 9:人工关机 10:故障
busVoltageFloat母线电压V
gridVoltageFloat电网电压V
gridCurrentFloat电网电流A
gridFrequencyFloat电网频率Hz
inverterVoltageFloat逆变电压V
inverterCurrentFloat逆变电流A
inverterFrequencyFloat逆变频率Hz
loadCurrentFloat负载电流A
loadActivePowerFloat负载有功功率W
loadApparentPowerFloat负载视在功率VA
mainsChargingCurrentFloat市电充电电流A
loadRateFloat负载率%
heatSinkTemAFloatPV散热器温度°C
heatSinkTemBFloat逆变散热器温度°C
heatSinkTemCFloat变压器温度°C
pvChargingCurrentFloatPV充电电流A
todayChargeBatFloat电池当天充电安时数AH
todayDischargeBatFloat电池当天放电安时数AH
todayElectricityPVFloat当天PV发电量kWh
todayUsedEnergyLoadFloat负载当天用电量kWh
totalRunningDayInteger总运行天数D
cumulateChargeHoursBatString蓄电池累计充电安时数AH
cumulateDischargeHoursBatString蓄电池累计放电安时数AH
cumulateElectricityPVStringPV累计发电量kWh
cumulateUsedChargeLoadString负载累计用电量kWh
TodayChargeMainsInteger市电当天充电电量AH
TodayConsumeChargeLoadTOMainsFloat负载当天从市电消耗电量kWh
todayWorkInverterInteger逆变当天工作时间kWh
todayWorkBypassInteger旁路当天工作时间kWh
4.4 推送机制与接入建议
  1. 推送 QoS 为 1(至少一次),网络抖动时可能收到重复消息,请以 msgId 做幂等去重;
  2. 推送频率与设备上报周期一致(常见为 1 分钟~15 分钟,取决于设备型号与配置);
  3. type=1 设备额定数据在设备上电后传输一次,type=2 设备监控数据按上报间隔持续推送;
  4. data.faultCodeStr 为设备故障码集合(多个故障码英文逗号分割),具体故障码含义请联系能控云获取对照表;
  5. 第三方服务断线重连后(Clean Session=true)需重新发起订阅,建议采用指数退避策略重连,避免频繁重连触发服务端限制。
联系我们