Files
JChargePointProtocol/jcpp-infrastructure-proto/src/main/proto/protocol.proto
三丙 58580ca11e !45 !44 comment
* !44 comment
* !39 添加下行日志打印
* !36 扩展计价领域模型
* !35 webui 初步成型
* !34 webui 初步成型
2025-09-09 08:23:59 +00:00

532 lines
16 KiB
Protocol Buffer
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 开源代码,仅供学习和交流研究使用,商用请联系三丙
* 微信mohan_88888
* 抖音:程序员三丙
* 付费课程知识星球https://t.zsxq.com/aKtXo
*/
syntax = "proto3";
package infrastructureProto;
option java_package = "sanbing.jcpp.proto.gen";
option java_outer_classname = "ProtocolProto";
service ProtocolInterface {
rpc onDownlink(stream RequestMsg) returns (stream ResponseMsg) {}
}
message RequestMsg {
int64 ts = 1;
TracerProto tracer = 2;
ConnectRequestMsg connectRequestMsg = 10;
DownlinkRequestMessage downlinkRequestMessage = 11;
}
message ResponseMsg {
TracerProto tracer = 2;
ConnectResponseMsg connectResponseMsg = 12;
DownlinkResponseMessage downlinkResponseMsg = 13;
}
message ConnectResponseMsg {
ConnectResponseCode responseCode = 1;
string errorMsg = 2;
}
message ConnectRequestMsg {
string nodeId = 1;
}
enum ConnectResponseCode {
ACCEPTED = 0;
REFUSE = 1;
}
message TracerProto {
string id = 1;
string origin = 2;
int64 ts = 3;
}
message UplinkQueueMessage {
int64 messageIdMSB = 1;
int64 messageIdLSB = 2;
int64 sessionIdMSB = 3;
int64 sessionIdLSB = 4;
string messageKey = 5;
string protocolName = 6;
int64 ts = 7;
bytes requestData = 10;
SessionCloseEventProto sessionCloseEventProto = 20;
LoginRequest loginRequest = 21;
HeartBeatRequest heartBeatRequest = 22;
VerifyPricingRequest verifyPricingRequest = 23;
QueryPricingRequest queryPricingRequest = 24;
GunRunStatusProto gunRunStatusProto = 25;
ChargingProgressProto chargingProgressProto = 26;
SetPricingResponse setPricingResponse = 27;
RemoteStartChargingResponse remoteStartChargingResponse = 28;
RemoteStopChargingResponse remoteStopChargingResponse = 29;
TransactionRecordRequest transactionRecordRequest = 30;
BmsChargingErrorProto bmsChargingErrorProto = 31;
BmsParamConfigReportProto bmsParamConfigReportProto = 33;
BmsChargingInfoProto bmsChargingInfoProto = 34;
BmsAbortProto bmsAbortProto = 35;
RestartPileResponse restartPileResponse = 36;
BmsHandshakeProto bmsHandshakeProto = 37;
OtaResponse otaResponse = 38;
GroundLockStatusProto groundLockStatusProto = 39;
OfflineCardBalanceUpdateResponse offlineCardBalanceUpdateResponse = 40;
OfflineCardSyncResponse offlineCardSyncResponse = 41;
TimeSyncResponse timeSyncResponse = 42;
BmsDemandChargerOutputProto bmsDemandChargerOutputProto = 43;
}
message DownlinkRequestMessage {
int64 messageIdMSB = 1;
int64 messageIdLSB = 2;
int64 sessionIdMSB = 3;
int64 sessionIdLSB = 4;
string protocolName = 6;
string pileCode = 7;
optional int64 requestIdMSB = 8;
optional int64 requestIdLSB = 9;
optional bytes requestData = 10;
string downlinkCmd = 20;
LoginResponse loginResponse = 21;
VerifyPricingResponse verifyPricingResponse = 22;
QueryPricingResponse queryPricingResponse = 23;
SetPricingRequest setPricingRequest = 24;
RemoteStartChargingRequest remoteStartChargingRequest = 25;
RemoteStopChargingRequest remoteStopChargingRequest = 26;
TransactionRecordResponse transactionRecordResponse = 27;
RestartPileRequest restartPileRequest = 28;
OtaRequest otaRequest = 29;
OfflineCardBalanceUpdateRequest offlineCardBalanceUpdateRequest = 30;
OfflineCardSyncRequest offlineCardSyncRequest = 31;
TimeSyncRequest timeSyncRequest = 32;
}
message DownlinkResponseMessage {
bool success = 1;
optional string error = 2;
}
message SessionCloseEventProto {
string pileCode = 2; // 充电桩编码
SessionCloseReason reason = 3; // 会话关闭原因
optional string additionalInfo = 20; // 附加信息
}
enum SessionCloseReason {
SESSION_CLOSE_UNKNOWN = 0; // 未知原因
SESSION_CLOSE_DESTRUCTION = 1; // 自然销毁(空闲超时)
SESSION_CLOSE_ON_CHANNEL_INACTIVE = 2; // 通道不活跃
SESSION_CLOSE_MANUALLY = 3; // 手动关闭
}
message LoginRequest {
string pileCode = 2;
string credential = 3;
string remoteAddress = 4;
string nodeId = 10;
string nodeHostAddress = 11;
int32 nodeRestPort = 12;
int32 nodeGrpcPort = 13;
optional string additionalInfo = 20;
}
message LoginResponse {
bool success = 1;
string pileCode = 2;
}
message HeartBeatRequest {
string pileCode = 3;
string remoteAddress = 4;
string nodeId = 10;
string nodeHostAddress = 11;
int32 nodeRestPort = 12;
int32 nodeGrpcPort = 13;
optional string additionalInfo = 20;
}
message VerifyPricingRequest {
string pileCode = 4;
int64 pricingId = 30;
optional string pricingModel = 31;
optional string additionalInfo = 20;
}
message VerifyPricingResponse {
bool success = 1;
int64 pricingId = 30;
}
message QueryPricingRequest {
string pileCode = 4;
optional string additionalInfo = 20;
}
message QueryPricingResponse {
string pileCode = 4;
int64 pricingId = 30;
PricingModelProto pricingModel = 1;
}
// 计费模型配置 - 支持三种计费方式
message PricingModelProto {
PricingModelType type = 3; // 计费类型:充电/放电
PricingModelRule rule = 4; // 计费规则:标准/峰谷/时段
// 计费配置根据rule字段确定使用哪种配置
oneof pricing_config {
StandardPricingProto standardPricing = 5; // 标准计费:固定价格
PeakValleyPricingProto peakValleyPricing = 6; // 峰谷计价:按尖峰平谷分时段
TimePeriodPricingProto timePeriodPricing = 7; // 时段计价:自定义时段价格
}
}
message PeriodProto {
int32 sn = 1;
string begin = 2;
string end = 3;
PricingModelFlag flag = 4;
}
message FlagPriceProto {
PricingModelFlag flag = 1;
string elec = 2;
string serv = 3;
}
// 标准计费配置 - 全天统一价格
message StandardPricingProto {
string elecPrice = 1; // 电费价格(元/度)
string servPrice = 2; // 服务费价格(元/度)
}
// 峰谷计价配置 - 按电网峰谷政策分时计费
message PeakValleyPricingProto {
map<int32, FlagPriceProto> flagPrice = 1; // 各时段价格映射表
repeated PeriodProto period = 2; // 时段划分配置
}
// 时段计价配置 - 运营商自定义时段计费
message TimePeriodPricingProto {
repeated TimePeriodItemProto periods = 1; // 自定义时段列表
}
// 时段计价单个时段定义
message TimePeriodItemProto {
int32 periodNo = 1; // 时段编号从1开始
string startTime = 2; // 开始时间HH:mm:ss格式
string endTime = 3; // 结束时间HH:mm:ss格式
string elecPrice = 4; // 该时段电费(元/度)
string servPrice = 5; // 该时段服务费(元/度)
optional string description = 6; // 时段名称(如"早高峰"
}
enum PricingModelType {
CHARGE = 0; // 充电费率模型
DISCHARGE = 1; // 放电费率模型
}
enum PricingModelRule {
STANDARD = 0; // 标准计费:全天统一价格
PEAK_VALLEY_PRICING = 1; // 峰谷计费:按电网峰谷政策
TIME_PERIOD_PRICING = 2; // 时段计费:运营商自定义
}
enum PricingModelFlag {
TOP = 0; // 尖峰
PEAK = 1; // 峰
FLAT = 2; // 平
VALLEY = 3; // 谷
DEEP = 4; // 深谷
}
enum GunRunStatus {
IDLE = 0; // 空闲
INSERTED = 1; // 已插枪
CHARGING = 2; // 充电中
CHARGE_COMPLETE = 3; // 充电完成
DISCHARGE_READY = 4; // 放电准备
DISCHARGING = 5; // 放电中
DISCHARGE_COMPLETE = 6; // 放电完成
RESERVED = 7; // 预约
FAULT = 8; // 故障
UNKNOWN = 9; // 未知
}
message GunRunStatusProto {
string pileCode = 4;
string gunCode = 5;
GunRunStatus GunRunStatus = 41;
repeated string faultMessages = 6;
optional string additionalInfo = 20;
}
message ChargingProgressProto {
string pileCode = 4;
string gunCode = 5;
string tradeNo = 6;
string outputVoltage = 7;
string outputCurrent = 8;
int32 soc = 9;
int32 totalChargingDurationMin = 10;
string totalChargingEnergyKWh = 11;
string totalChargingCostYuan = 12;
optional string additionalInfo = 20;
}
message SetPricingRequest {
string pileCode = 4;
int64 pricingId = 30;
PricingModelProto pricingModel = 1;
}
message SetPricingResponse {
bool success = 1;
string pileCode = 4;
int64 pricingId = 30;
}
message RemoteStartChargingRequest {
string pileCode = 4;
string gunCode = 5;
string tradeNo = 6;
string limitYuan = 7;
optional string logicalCardNo = 8; // 逻辑卡号
optional string physicalCardNo = 9; // 物理卡号
optional string parallelNo = 10; // 并充序号
optional string additionalInfo = 20;
}
message RestartPileRequest {
string pileCode = 4;
int32 type = 7;
optional string additionalInfo = 20;
}
message RemoteStartChargingResponse {
string pileCode = 4;
string gunCode = 5;
string tradeNo = 6;
bool success = 7;
string failReason = 8;
optional string additionalInfo = 20;
}
message RestartPileResponse {
string pileCode = 4;
bool success = 7;
}
message RemoteStopChargingRequest {
string pileCode = 4;
string gunCode = 5;
}
message RemoteStopChargingResponse {
string pileCode = 4;
string gunCode = 5;
bool success = 7;
string failReason = 8;
optional string additionalInfo = 20;
}
enum DetailType {
PEAK_VALLEY = 0; // 峰谷电量明细
TIME_PERIOD = 1; // 时段电量明细
}
message PeakValleyDetail {
string topEnergyKWh = 1; // 尖峰电量
string topAmountYuan = 2; // 尖峰电费
string peakEnergyKWh = 3; // 峰时电量
string peakAmountYuan = 4; // 峰时电费
string flatEnergyKWh = 5; // 平时电量
string flatAmountYuan = 6; // 平时电费
string valleyEnergyKWh = 7; // 谷时电量
string valleyAmountYuan = 8; // 谷时电费
string deepEnergyKWh = 9; // 深谷电量
string deepAmountYuan = 10; // 深谷电费
}
message TimePeriodDetail {
message PeriodItem {
int32 periodNo = 1; // 时段序号从1开始
string startTime = 2; // 开始时间,格式 HH:mm:ss
string endTime = 3; // 结束时间,格式 HH:mm:ss
string energyKWh = 4; // 该时段电量
optional string amountYuan = 5; // 该时段电费,可选
}
repeated PeriodItem periods = 1; // 时段列表
}
message TransactionDetail {
DetailType type = 1; // 明细类型
optional PeakValleyDetail peakValley = 2; // 峰谷电量明细
optional TimePeriodDetail timePeriod = 3; // 时段电量明细
}
message TransactionRecordRequest {
string pileCode = 4; // 充电桩编码
string gunCode = 5; // 枪编号
string tradeNo = 6; // 交易流水号
int64 startTs = 51; // 开始时间戳
int64 endTs = 52; // 结束时间戳
string totalEnergyKWh = 53; // 总电量(必填)
optional string totalAmountYuan = 54; // 总电费(可选)
int64 tradeTs = 55; // 交易时间戳
string stopReason = 56; // 停止原因
int64 pricingId = 57; // 计费ID
optional TransactionDetail detail = 58; // 电量电费明细
optional string additionalInfo = 20; // 附加信息
}
message BmsChargingErrorProto {
string pileCode = 4;
string gunCode = 5;
string tradeNo = 6;
optional string additionalInfo = 20;
}
message TransactionRecordResponse {
string tradeNo = 6;
bool success = 7;
optional string additionalInfo = 20;
}
message BmsParamConfigReportProto {
string pileCode = 2; // 桩编码
string gunCode = 3; // 枪编码
string tradeNo = 4; // 交易号
string maxSingleCellVoltage = 5; // BMS单体最高允许充电电压 (V)
string maxChargeCurrent = 6; // BMS最高允许充电电流 (A)
string ratedEnergy = 7; // BMS动力蓄电池标称总能量 (kWh)
string maxTotalChargeVoltage = 8; // BMS最高允许充电总电压 (V)
string maxTemperature = 9; // BMS最高允许温度 (℃)
string soc = 10; // BMS荷电状态SOC (%)
string currentBatteryVoltage = 11; // BMS当前电池电压 (V)
string pileMaxOutputVoltage = 12; // 电桩最高输出电压 (V)
string pileMinOutputVoltage = 13; // 电桩最低输出电压 (V)
string pileMaxOutputCurrent = 14; // 电桩最大输出电流 (A)
string pileMinOutputCurrent = 15; // 电桩最小输出电流 (A)
}
message BmsChargingInfoProto {
string pileCode = 4;
string gunCode = 5;
string tradeNo = 6;
optional string additionalInfo = 20;
}
message OtaRequest {
string pileCode = 1; // 桩编号
int32 pileModel = 2; // 桩型号
int32 pilePower = 3; // 桩功率
string address = 4; // 升级服务器地址
int32 port = 5; // 升级服务器端口
string username = 6; // 用户名
string password = 7; // 密码
string filePath = 8; // 文件路径
int32 executionControl = 9; // 执行控制
int32 downloadTimeout = 10; // 下载超时时间
}
message OtaResponse {
string pileCode = 1; // 桩编号
bool success = 2;
optional string errorMsg = 3;
}
message BmsAbortProto {
string pileCode = 4;
string gunCode = 5;
string tradeNo = 6;
optional string additionalInfo = 20;
}
message BmsHandshakeProto {
string pileCode = 2; // 桩编码
string gunCode = 3; // 枪编码
string tradeNo = 4; // 交易流水号
string bmsProtocolVersion = 5; // BMS通信协议版本号
int32 bmsBatteryType = 6; // BMS电池类型
int32 bmsPowerCapacity = 7; // BMS整车动力蓄电池系统额定容量
int32 bmsPowerMaxVoltage = 8; // BMS整车动力蓄电池系统额定总电压
string bmsFactory = 9; // BMS电池生产厂商名称
int32 bmsSerialNo = 10; // BMS电池组序号
int32 bmsCreateYear = 11; // BMS电池组生产日期年
int32 bmsCreateMonth = 12; // BMS电池组生产日期月
int32 bmsCreateDay = 13; // BMS电池组生产日期日
int32 bmsChargeCount = 14; // BMS电池组充电次数
int32 bmsPropertyRightLabel = 15; // BMS电池组产权标识
string carVinCode = 16; // 车辆识别码(VIN)
string bmsSoftwareVersion = 17; // BMS软件版本号
optional string additionalInfo = 20; // 附加信息
}
message GroundLockStatusProto {
string pileCode = 2; // 桩编号
string gunCode = 3; // 枪号
int32 lockStatus = 4; // 车位锁状态
int32 parkStatus = 5; // 车位状态
int32 lockBattery = 6; // 地锁电量状态 (百分比值0~100)
int32 alarmStatus = 7; // 报警状态
int32 reserved = 8; // 预留位
optional string additionalInfo = 20; // 附加信息
}
message OfflineCardBalanceUpdateRequest {
string pileCode = 1; // 充电桩编码
string gunCode = 2; // 枪编号
string cardNo = 3; // 物理卡号
string limitYuan = 4; // 余额
}
message OfflineCardBalanceUpdateResponse {
string pileCode = 1; // 充电桩编码
string cardNo = 2; // 物理卡号
bool success = 3;
optional string errorMsg = 4;
}
message OfflineCardSyncRequest {
string pileCode = 1; // 充电桩编码
int32 total = 2; // 下发卡个数
repeated CardInfo cardInfo = 3; // 卡号集合
}
message CardInfo {
string cardNo = 1; // 物理卡号
string logicCardNo = 2; // 逻辑卡号
}
message OfflineCardSyncResponse {
string pileCode = 1; // 充电桩编码
bool success = 3;
optional string errorMsg = 4;
}
message TimeSyncRequest {
string pileCode = 1;
string time = 2;
}
message TimeSyncResponse {
string pileCode = 1;
string time = 2;
}
message BmsDemandChargerOutputProto {
string pileCode = 4;
string gunCode = 5;
string tradeNo = 6;
optional string additionalInfo = 20;
}