怎么用ps做简单网站,网站推广优势,百度seo软件是做什么的,军用棉被门网站建设目录
导言
功能简介
本地授权列表
类型
IdToken
IdTagInfo
授权状态
协议指令
1、授权
1.1 说明
1.2 Authorize.req
1.3 Authorize.conf
1.4 JSON格式
1.5 代码
2、启动通知
2.1 说明
2.2 BootNotification.req
2.3 BootNotification.conf
2.4 JSON格式
2…目录
导言
功能简介
本地授权列表
类型
IdToken
IdTagInfo
授权状态
协议指令
1、授权
1.1 说明
1.2 Authorize.req
1.3 Authorize.conf
1.4 JSON格式
1.5 代码
2、启动通知
2.1 说明
2.2 BootNotification.req
2.3 BootNotification.conf
2.4 JSON格式
2.5 代码 导言 这是 OCPP 1.6 版的规范。 OCPP 是一种标准的开放式协议用于充电站与中央系统之间的通信可适用于任何类型的充电技术。 OCPP 1.6 引入了适应市场的新功能智能充电、通过 Websockets 使用 JSON 的 OCPP、更好的诊断可能性 原因 、更多的充电点 状态 和 触发信息 TriggerMessage 。OCPP 1.6 以 OCPP 1.5 为基础增加了一些新功能和大量 文字上的改进、说明并修正了所有已知的模糊之处。由于改进和新增功能OCPP 1 . 6 与 OCPP 1.5 并不向后兼容 。 有关变更的完整列表请参阅 OCPP 1.6 中的新 功能。 一些基本概念将在本介绍性章节的以下部分进行解释。各章 由充电桩启动的操作 和 由中央系统启动 的操作描述 了协议支持的操作。确切的信息及其参数将在本章中详细说明 信息 和数据类型在 数据类型 一章中进行了描述 类型 。定义的配置密钥在 标准配置密钥名称和参数 一章中描述 标准配置键名称和值 。 随着 OCPP 1.6 版本的推出OCPP 有了两种不同的版本除了基于 SOAP 的实现外还有可能使用更为简洁的 JSON 版本。为避免在交流中混淆实现类型我们建议使用不同的后缀 -J 和 -S 来表示 JSON 或 SOAP。一般来说 OCPP-J 表示 JSONOCPP-S 表示 SOAP。 为了支持不同的版本OCPP 标准分为多个文件。基础文档您正在阅读的文档包含技术协议规范。 OCPP SOAP 规范》OCPP SOAP Specification 包含实现 OCPP-S 所需的实施规范。对于 OCPP-J必须使用 OCPP JSON 规范。 为提高中央系统与充电桩之间的互操作性建议满足 OCPP 1.6 合规性测试 文件中的要求。 功能简介 在 OCPP 1.6 中功能和相关信息按 配置文件 分组。根据所需功能实施者可选择实施以下一个或多个配置文件。 客户可使用这些配置文件来确定 OCPP 1.6 产品是否具备其业务所需的功能。合规性测试将根据配置文件测试产品 是否符合 OCPP 1.6 规范。 必 须 执行核心配置文件。其他配置文件为可选配置文件。 在执行核心、固件管理、本地验证列表管理和预订配置文件时将涵盖源自 OCPP 1.5 [OCPP1. 5 ] 的所有功能。 下表显示了所有信息在其配置文件中的分组情况 本地授权列表 类型 IdToken 包含用于授权的标识符。这是一个不区分大小写的字符串。在今后的版本中它可能会成为 一个复杂类型以支持 多种形式的标识符。 IdTagInfo 包含有关标识符的状态信息。它在授权、开始交易和停止交易响应中返回。 如果没有给出 expiryDate则状态没有结束日期。 授权状态 枚举 Authorize.req 响应中的状态。 协议指令 1、授权 1.1 说明 在电动汽车车主开始或停止充电之前充电桩必须授权操作。充电点只能在授权后才能提供能量。停止交易时 只有当用于停止交易的标识符与开始交易的标识符不同时充电桩才会发送 Authorize.req 消息。 Authorize.req 应仅用于授权标识符收费。 如 本地授权列表 所述充电点可在不涉及中央系统的情况下在本地授权标识符。如果用户提交的 idTag 不在本地 授权列表或授权缓存中则充电点应向中央系统发送 Authorize.req PDU 请求授权。如果 idTag 存在于本地授权 列表或授权缓存中则充电点可以向中央系统发送 Authorize.req PDU。 收到 Authorize.req PDU 后中心系统应回应一个 Authorize.conf PDU。此响应 PDU 应表明中心系统是否接受 idTag。如果中心系统 接受 idTag那么响应 PDU 可以包括 parentIdTag 并且必须包括 表示接受或拒绝原因的 授权 状态值。 如果 Charge Point 已实施了授权缓存那么在收到 Authorize.conf PDU 后如果 idTag 不在 本地授权列表 中 Charge Point 应按照 授权 缓存中所述用响应中的 IdTagInfo 值更新缓存条目 1.2 Authorize.req 它包含充电点发送到中央系统的 Authorize.req PDU 的字段定义。 1.3 Authorize.conf 它包含中央系统为响应 Authorize.req PDU 而向充电点发送的 Authorize. conf PDU 的字段定义。 1.4 JSON格式 【SEND】♂[2,yiBSjMizbzFWUcmz,Authorize,{idTag:F3F7C00B}] 【RECV】♀[3,yiBSjMizbzFWUcmz,{idTagInfo:{status:Accepted}}] 1.5 代码 逻辑处理 /** * 授权 * param data * param msgId * param msgType * param * param * return */ public ReturnData Authorize(String data,String msgId, String msgType,String ip,String action,String body){ // 桩子 发起的充电都要走授权 ReturnData returnDatanew ReturnData(); try { // 根据ip查询对应的设备 String equSqlselect * from jk_equ where ipip order by communication_time desc ; Record equRecordDb.findFirst(equSql); if(null!equRecord){ // [2,m3MxfgtUXBR1QoyY,Authorize,{idTag:43AA3CA6}] JSONObject idTagObjJSONObject.parseObject(data); // 卡号 43AA3CA6String idTagidTagObj.getString(idTag);IdTagInfo infonew IdTagInfo();info.setStatus(Accepted); // 时间推迟 60分钟 Date endDateDateUtil.getAfterMinute(new Date(),60); String utcStrDateUtil.localToUTC(endDate); info.setExpiryDate(utcStr); List resultListnew ArrayList(); resultList.add(Integer.parseInt(msgType)1); resultList.add(msgId);AuthorizeConfig authorizeConfignew AuthorizeConfig(); authorizeConfig.setIdTagInfo(info); resultList.add(authorizeConfig); returnData.setResult(true); log.info(刷卡返回信息{},JSON.toJSONString(resultList)); String jsonnew ObjectMapper().writeValueAsString(resultList); returnData.setData(json); }else{ log.error(收到充电点反馈并且开启事务异常:设备不在线); returnData.setMsg(设备不在线); returnData.setResult(false); } }catch (Exception e){ log.error(收到充电点反馈并且开启事务异常,e); returnData.setResult(false); } return returnData; } 实体类 1、IdTagInfo import lombok.Data; /** * * 授权token回复详细信息 */ Data public class IdTagInfo { // Accepted 允许使用可充电的标识符 // Blocked 标识符已被阻止。不允许充电。 // Expired 标识符已过期。不允许充电。 // Invalid 标识符未知。不允许充电。 // ConcurrentTx 标识符已涉及到另一个事务中并且不允许有多个事务。仅与StartTransaction.req相关。 private String status; // 这其中包含idTag应该从授权缓存中删除的日期。 private String expiryDate; //private IdToken idToken;//父级标识符。 } 2、AuthorizeConfig import lombok.Data; /** * 授权配置 */ Data public class AuthorizeConfig { private IdTagInfo idTagInfo; } 2、启动通知 2.1 说明 其中包含中央系统为响应 BootNotification. req PDU 而向充电点发送的 BootNotification. conf PDU 的字段定义。 启动后充电点应向中央系统发出请求提供有关其配置的信息如版本、供应商等。中央系统应作出回应 表明是否接受该充电点。 每次启动或重启时充电点都应发送 BootNotification.req PDU。在物理开机/重启和成功完成 BootNotification 中央系统返回 接受 或 等待 之间充电点不得向中央系统发送任何其他请求。这包括缓存的 充电点中仍然存在的信息。 当中央系统以 已接受 Accepted 状态回复 BootNotification.conf 时充电点 将 根据回复 PDU 中的时间间隔调整心 跳间隔建议将其内部时钟与提供的中央系统当前时间同步。如果中央系统返回的不是 接受 则间隔字段的值表 示发送下一个启动通知请求 前的最短等待时间 。如果时间间隔值为零则充电点自 行 选择等待时间间隔以避免中心系统收到大量请求。除非有 TriggerMessage.req 请求否则充电点不应提前发送 BootNotification.req 。 如果中央系统返回 拒绝 状态充电点不得向中央系统发送任何 OCPP 报文直到上述重试间隔时间结束。在此时间间隔内中央系统可能无法再联系到充电点。例如充电点可以关闭其通信通道或关闭其通信硬件。中央系统也可以 关闭通信通道例如释放系统资源。 在拒绝 期间充电点不得响应任何由中央系统发起的信息。 中央系统也可以返回一个 待定 注册状态以表明它希望在中央系统接受该充电点之前检索或设置充电点的某些 信息。如果中央系统返回 等待 状态充电点或中央系统都不应关闭通信通道。中央系统可发送请求信息从充电点获取信息或更改其配置。充电点应响应这些信息。除非中央系统发出 TriggerMessage.req 请求否则充电点不得向中央系统发送请求信息。 在 待处理 状态下不允许使用以下由中央系统发起的报文 RemoteStartTransaction.req 和 RemoteStopTransaction.req。 2.2 BootNotification.req 中文图 英文图 2.3 BootNotification.conf 中文图 英文图 2.4 JSON格式 [2,\e3ba4698-d64b-447e-81f5-0bf0e09700eb\,\BootNotification\,{\chargePointVendor\:\\,\chargePointModel\:\\,\chargePointSerialNumber\:\\,\chargeBoxSerialNumber\:\\,\firmwareVersion\:\\,\iccid\:\\,\imsi\:\\,\meterType\:\\,\meterSerialNumber\:\\}] [3, e3ba4698-d64b-447e-81f5-0bf0e09700eb, {status: Accepted, interval: 30, currentTime: 2023-10-10T03:37:53Z}] 2.5 代码 1.逻辑处理 /** * 设备启动通知 * param data * param msgId * param msgType * param action * param ip * return */ public ReturnData BootNotification(String data,String msgId,String msgType,String action,String ip,String body){ ReturnData returnDatanew ReturnData(); try { equHexequHex.replaceAll(/,);BootNotificationReq reqJSON.parseObject(data,BootNotificationReq.class);String chargePointSerialNumberreq.getChargePointSerialNumber();//充电桩编号 log.info(sn的Hex{},chargePointSerialNumber);String statesAccepted;// 默认拒绝BootNotificationConf confnew BootNotificationConf(); String utcDateStrDateUtil.localToUTC(new Date());conf.setCurrentTime(utcDateStr); //过期时间 conf.setInterval(30); conf.setStatus(states); List resultListnew ArrayList();resultList.add(Integer.parseInt(msgType)1); resultList.add(msgId); resultList.add(conf);String json new ObjectMapper().writeValueAsString(resultList); //用此方法转为json字符串 returnData.setData(json); returnData.setResult(true); }catch (Exception e){ log.error(启动通知异常,e); returnData.setResult(false); } return returnData; } 2. BootNotificationReq import lombok.Data; /** * 启动通知req */ Data public class BootNotificationReq { //可选。它包含一个值用来标识充电点内的充电箱的序列号。已弃用 //将在未来的版本中被删除private String chargeBoxSerialNumber; //需要。这包含一个标识字符点模型的值。private String chargePointModel;//充电桩模型 //可选。这其中包含一个标识充电点序列号的值。private String chargePointSerialNumber; //需要。这包含一个标识特征点的供应商的值private String chargePointVendor; //可选。这其中包含了充电点的固件版本private String firmwareVersion; //可选。其中包含调制解调器SIM卡的ICCID。private String iccid; //可选。其中包含调制解调器SIM卡的IMSI。private String imsi; //可选。其中包含充电点的主电表的序列号。private String meterSerialNumber; //可选。这包含了充电点的主电表的类型。private String meterType; } 3. BootNotificationConf import lombok.Data; /** * 启动通知回复 */ Data public class BootNotificationConf { // Accepted 充电点已被中央系统接受。 //Pending 中央系统还没有准备好接受充电点。中央系统可以发送信息来检索信息或准备充电点。 // Rejected 中央系统不接受充电点。当中央系统不知道充电点id时可能会发生这种情况以上翻译结果来自有道神经网络翻译YNMT· 通用场景private String status; //需要。这包含了中央系统的当前时间。private String currentTime; //需要。当接受注册状态时它包含以秒为单位的心跳间隔。如果中央系统返回的不 //是“接受”则间隔字段的值表示发送下一个引导通知请求之前的最小等待时间private Integer interval; }