!29 云快充主动对时设置0x56、对时应答0x55

* 删除错误代码
* 修改冲突编号
* Merge branch 'master' into Feat_TimeSync
* 修改冲突编号
* Merge branch 'master' into Feat_TimeSync
* 云快充对时设置
* 云快充对时设置
This commit is contained in:
发财
2025-08-25 09:26:26 +00:00
committed by 三丙
parent 1019f6e1c9
commit aff00424f0
10 changed files with 169 additions and 3 deletions

View File

@@ -117,4 +117,11 @@
#### 成功
`68 0d 19 00 00 43 20 23 12 12 00 00 10 01 00 38 83`
#### 失败
`68 0d 19 00 00 43 20 23 12 12 00 00 10 00 01 f8 d3`
`68 0d 19 00 00 43 20 23 12 12 00 00 10 00 01 f8 d3`
---
#### 0x56 对时设置
`68 12 01 00 00 56 20 23 12 12 00 00 10 E0 2E 0C 0C 15 08 19 E8 36`
#### 0x55 对时设置应答
`68 12 01 00 00 55 20 23 12 12 00 00 10 E0 2E 0C 0C 15 08 19 AB 37`

View File

@@ -45,6 +45,8 @@ public enum YunKuaiChongDownlinkCmdEnum {
OFFLINE_CARD_SYNC_REQUEST(0x44),
SYNC_TIME_REQUEST(0x56),
;
private final Integer cmd;

View File

@@ -0,0 +1,44 @@
package sanbing.jcpp.protocol.yunkuaichong.v150.cmd;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.extern.slf4j.Slf4j;
import sanbing.jcpp.infrastructure.util.codec.CP56Time2aUtil;
import sanbing.jcpp.proto.gen.ProtocolProto;
import sanbing.jcpp.protocol.ProtocolContext;
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
import sanbing.jcpp.protocol.listener.tcp.enums.SequenceNumberLength;
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe;
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage;
import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd;
import java.time.LocalDateTime;
import static sanbing.jcpp.protocol.yunkuaichong.enums.YunKuaiChongDownlinkCmdEnum.SYNC_TIME;
/**
* 云快充1.5.0对时设置
*
* @author 发财
* @since 1.0.0
*/
@Slf4j
@YunKuaiChongCmd(0x56)
public class YunKuaiChongV150TimeSyncDLCmd extends YunKuaiChongDownlinkCmdExe {
@Override
public void execute(TcpSession tcpSession, YunKuaiChongDwonlinkMessage yunKuaiChongDwonlinkMessage, ProtocolContext ctx) {
log.info("云快充1.5.0对时设置");
if (!yunKuaiChongDwonlinkMessage.getMsg().hasTimeSyncRequest()) {
return;
}
ProtocolProto.TimeSyncRequest timeSyncRequest = yunKuaiChongDwonlinkMessage.getMsg().getTimeSyncRequest();
String pileCode = timeSyncRequest.getPileCode();
String time = timeSyncRequest.getTime();
ByteBuf syncTimeMsgBody = Unpooled.buffer(14);
syncTimeMsgBody.writeBytes(encodePileCode(pileCode));
syncTimeMsgBody.writeBytes(CP56Time2aUtil.encode(DateUtil.parseLocalDateTime(time)));
encodeAndWriteFlush(SYNC_TIME, syncTimeMsgBody, tcpSession);
}
}

View File

@@ -0,0 +1,50 @@
package sanbing.jcpp.protocol.yunkuaichong.v150.cmd;
import cn.hutool.core.date.DateUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.extern.slf4j.Slf4j;
import sanbing.jcpp.infrastructure.util.codec.BCDUtil;
import sanbing.jcpp.infrastructure.util.codec.CP56Time2aUtil;
import sanbing.jcpp.proto.gen.ProtocolProto;
import sanbing.jcpp.protocol.ProtocolContext;
import sanbing.jcpp.protocol.listener.tcp.TcpSession;
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDownlinkCmdExe;
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongDwonlinkMessage;
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkCmdExe;
import sanbing.jcpp.protocol.yunkuaichong.YunKuaiChongUplinkMessage;
import sanbing.jcpp.protocol.yunkuaichong.annotation.YunKuaiChongCmd;
import java.time.LocalDateTime;
/**
* 云快充1.5.0 对时结果
*
* @author 发财
* @since 1.0.0
*/
@Slf4j
@YunKuaiChongCmd(0x55)
public class YunKuaiChongV150TimeSyncResultULCmd extends YunKuaiChongUplinkCmdExe {
@Override
public void execute(TcpSession tcpSession, YunKuaiChongUplinkMessage yunKuaiChongUplinkMessage, ProtocolContext ctx) {
log.info("{} 云快充1.5.0 对时结果", tcpSession);
ByteBuf byteBuf = Unpooled.wrappedBuffer(yunKuaiChongUplinkMessage.getMsgBody());
byte[] pileCodeBytes = new byte[7];
byteBuf.readBytes(pileCodeBytes);
String pileCode = BCDUtil.toString(pileCodeBytes);
byte[] timeBytes = new byte[7];
byteBuf.readBytes(timeBytes);
LocalDateTime dateTime = CP56Time2aUtil.decode(timeBytes);
String time = DateUtil.formatLocalDateTime(dateTime);
ProtocolProto.TimeSyncResponse timeSyncResponse = ProtocolProto.TimeSyncResponse.newBuilder()
.setPileCode(pileCode)
.setTime(time)
.build();
ProtocolProto.UplinkQueueMessage uplinkQueueMessage = uplinkMessageBuilder(pileCode, tcpSession, yunKuaiChongUplinkMessage)
.setTimeSyncResponse(timeSyncResponse)
.build();
tcpSession.getForwarder().sendMessage(uplinkQueueMessage);
}
}