OCPP1.6协议
目录
导言
功能简介
本地授权列表
类型
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 代码
导言
功能简介
本地授权列表
类型
IdToken
IdTagInfo
授权状态
协议指令
1、授权
1.1 说明
如 本地授权列表 所述,充电点可在不涉及中央系统的情况下在本地授权标识符。如果用户提交的 idTag 不在本地
1.2 Authorize.req
它包含充电点发送到中央系统的 Authorize.req PDU 的字段定义。
1.3 Authorize.conf
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 returnData=new ReturnData();
try {
// 根据ip查询对应的设备
String equSql="select * from jk_equ where ip='"+ip+"' order by communication_time desc ";
Record equRecord=Db.findFirst(equSql);
if(null!=equRecord){
// [2,"m3MxfgtUXBR1QoyY","Authorize",{"idTag":"43AA3CA6"}]
JSONObject idTagObj=JSONObject.parseObject(data);
// 卡号 43AA3CA6
String idTag=idTagObj.getString("idTag");
IdTagInfo info=new IdTagInfo();
info.setStatus("Accepted");
// 时间推迟 60分钟
Date endDate=DateUtil.getAfterMinute(new Date(),60);
String utcStr=DateUtil.localToUTC(endDate);
info.setExpiryDate(utcStr);
List resultList=new ArrayList();
resultList.add(Integer.parseInt(msgType)+1);
resultList.add(msgId);
AuthorizeConfig authorizeConfig=new AuthorizeConfig();
authorizeConfig.setIdTagInfo(info);
resultList.add(authorizeConfig);
returnData.setResult(true);
log.info("刷卡返回信息:{}",JSON.toJSONString(resultList));
String json=new 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 说明
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 returnData=new ReturnData();
try {
equHex=equHex.replaceAll("/","");
BootNotificationReq req=JSON.parseObject(data,BootNotificationReq.class);
String chargePointSerialNumber=req.getChargePointSerialNumber();//充电桩编号
log.info("sn的Hex{}",chargePointSerialNumber);
String states="Accepted";// 默认拒绝
BootNotificationConf conf=new BootNotificationConf();
String utcDateStr=DateUtil.localToUTC(new Date());
conf.setCurrentTime(utcDateStr); //过期时间
conf.setInterval(30);
conf.setStatus(states);
List resultList=new 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;
}
相关文章:
OCPP1.6协议
目录 导言 功能简介 本地授权列表 类型 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…...
【数据存储:小端模式和大端模式】
一、引言 在计算机科学中,数据存储模式是指如何将数据存储在计算机内存中的方式。小端模式和大端模式是两种主要的字节序方式,它们决定了字节在内存中的排列顺序。这种字节顺序的选择对于跨平台编程和数据传输至关重要。在这篇博客中,我们将…...
【git】gitlab安装、备份
gitlab官网 官网:官网 中文官网:中文官网 作为一个英文不好的程序员,所以我都去中文网站去看了。下面也是带着大家去走走 安装gitlab 我不想写具体的安装方法,直接去逛网看下面是我的截图。步骤非常详细。 安装文档地址&…...
C51--基本认知
单片机基本认知: 1、什么是单片机 单片机是一种集成电路芯片。 把具有数据处理能力的中央处理器 CPU、随机存储器RAM、只读存储器ROM。 多种 I / O 口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器…...
centos7 安装 mysql 8.0
文章目录 环境介绍一、安装前准备 1.卸载MariaDB 1.1 查看是否安装mariadb1.2 卸载1.3 检查是否卸载干净 2.检查依赖 2.1 查看是否安装libaio2.2 查看是否安装numactl 二、安装MySQL 1.下载资源包 1.1 官网下载1.2 wget下载 2.解压3.重命名4.创建存储数据文件5.设置用户组并赋…...
Vue15 计算属性VS监视属性(侦听属性)
计算属性VS监视属性(侦听属性) computed和watch之间的区别: 1.computed能完成的功能,watch都可以完成。 2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。 两个重要的小…...
快速全面掌握数据库系统核心知识点
快速全面掌握数据库系统核心知识点 一、数据库系统二、三级模式-两层映射三、三级模式-视图四、数据库设计过程五、E-R模型六、关系代数七、规范化理论八、函数依赖九、规范化理论-键十、规范化理论-求候选键十一、规范化理论-范式十二、规范化理论-第一范式十三、规范化理论-第…...
学习笔记 | 音视频 | 推流项目框架及细节
推流项目: 跑起来项目,再调,创造问题,注意项目跑起来包括哪些步骤 前期准备:环境的配置 依赖库要交叉编译,编译还需注意依赖的库对应的头文件(注意是绝对路径还是相对路径) Rv1126_lib、arm_libx264、arm_libx265、arm_libsrt、arm32_ffmpeg_srt、arm_openssl Ubuntu搭…...
拓扑几何学
目录 一,欧拉定理 1,平面图论图 2,单连通多面体 3,一般多面体 一,欧拉定理 1,平面图论图 在一个联通无向图中,点数-边数面数 1 如: 7-126 1 如果把最外面的五边形外面也算…...
1.12.C++项目:仿muduo库实现并发服务器之LoopThreadPool模块的设计
文章目录 一、LoopThreadPool模块二、实现思想(一)功能(二)意义(三)功能设计 三、代码 一、LoopThreadPool模块 1.线程数量可配置(0或多个) 2. 对所有的线程进行管理,其…...
SpringBoot介绍
一、什么是SpringBoot 在使用传统的Spring去做Java EE(Java Enterprise Edition)开发中,大量的 XML 文件存在于项目之中,导致JavaEE项目变得慢慢笨重起来,繁琐的配置和整合第三方框架的配置,导致了开发和部…...
2022最新版-李宏毅机器学习深度学习课程-P17 卷积神经网络CNN
一、CNN 用于图像分类 需要图片大小统一 彩色图像分为R G B 三层,展平后首尾相接 值代表着颜色的强度 图像识别中不需要全连接的,参数太多了 观测1:通过判断多个小局部图像就能判断出图片标签 感受野的定义 简化1 感受野可以重叠ÿ…...
微博清理僵尸粉
1.选择chrome或者firefox浏览器 2.登陆微博账号 3.chrome右键点检查,选择console firefox右键点检查,选择控制台 4.粘贴下面代码到console或者控制台并且回车 let removeTargetFans false; /*是否删除符合条件的粉丝,默认关闭*/let dee…...
创建React Native的第一个hello world工程
创建React Native的第一个hello world工程 需要安装好node、npm环境 如果之前没有安装过react-native-cli脚手架的,可以按照下述步骤直接安装。如果已经安装过的,但是在使用这个脚手架初始化工程的时候遇到下述报错的话 cli.init(root, projectname);…...
基础课3——自然语言处理的应用
自然语言处理是一种将人类语言转换为机器语言,以实现人机交互的技术。应用非常广泛,例如: 人机交互:自然语言处理技术可以应用于人机交互,让机器能够理解和运用人类语言,从而实现更加智能化的交互体验。 机…...
理解 Git 的三个工作区:工作区、暂存区和版本库
文章目录 创建 Git 本地仓库配置Git认识⼯作区、暂存区、版本库添加⽂件--场景查看 .git ⽂件添加⽂件--场景⼆ 创建 Git 本地仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。创建⼀个 Gi…...
web前端基础训练-----创建用户反馈表单
1,实验代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>用户反馈表单</title></head><body><form><fieldset><h1>用户反馈</h1><hr/><h4>亲爱的用…...
Scrum 敏捷管理流程图及敏捷管理工具
敏捷开发中的Scrum流程通常可以用一个简单的流程图来表示,以便更清晰地展示Scrum框架的各个阶段和活动。以下是一个常见的Scrum流程图示例: 转自:Leangoo.com 免费敏捷工具 这个流程图涵盖了Scrum框架的主要阶段和活动,其中包括…...
Android Handler/Looper视角看UI线程的原理
概述 Handler/Looper机制是android系统非重要且基础的机制,即使在rtos或者linux操作系统上开发应用框架时,也经常借鉴这个机制。通过该机制机制可以让一个线程循环处理事件,事件处理逻辑即在Handler的handleMessge种。本文建议android8.1源码…...
【网络】网络入门
网络入门 一、网络发展二、网络协议初识1、认识"协议"2、协议分层3、OSI七层模型4、TCP/IP五层(或四层)模型 三、网络传输基本流程1、同局域网的两台主机通信2、跨网络的两台主机通信 四、网络中的地址管理1、IP地址2、认识MAC地址 一、网络发展 独立模式:…...
GO-实现简单文本格式 文本字体颜色、大小、突出
毫无疑问GO的生态就是一坨大便。老子英文水平小学啊。 实现简单文本格式 文本字体颜色、大小、突出显示等。 创建要给docx文件容器【我估算的】 doc : document.New() defer doc.Close() doc.SaveToFile("simple.docx") 把容器保存为文件 设置标题 创建自然段…...
铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)
视频以及图片修复技术是一项具有挑战性的AI视觉任务,它涉及在视频或者图片序列中填补缺失或损坏的区域,同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来,两种突出的方案在视频修复中崭露头角&…...
latex,不带行号的algorithm
\usepackage{algorithm,algorithmic}\begin{algorithm} \caption{The Example Algorithm} \label{alg123} \begin{algorithmic} \STATE{\textbf{Input:} ...} \STATE{\textbf{Output:} ...} \IF{...} \STATE{...} \ENDIF \RETURN{...} \end{algorithmic} \end{algorithm}...
RocketMQ高性能核心原理与源码架构剖析
文章目录 一、源码环境搭建主要功能模块源码启动服务启动nameServer启动Broker发送消息消费消息 二、源码热身阶段NameServer的启动过程关注重点源码重点 Broker服务启动过程关注重点源码重点 Netty服务注册框架关注重点源码重点关于RocketMQ的同步结果推送与异步结果推送 Brok…...
MATLAB中zp2tf函数用法
目录 语法 说明 示例 质点弹簧系统的传递函数 zp2tf函数的功能是将零极点增益滤波器参数转换为传递函数形式。。 语法 [b,a] zp2tf(z,p,k) 说明 [b, a] zp2tf(z, p, k) 将一个分解的传递函数表示方式转换。 将单输入/多输出(SIMO)系统的多输出…...
解决:uniapp项目中调用小程序的chooseAddress() API失效
目录 问题描述 解决方案 问题描述 使用 Hbuilder X 编辑器和 uni-app 框架开发小程序项目,在调用小程序提供的 uni.chooseAddress() API实现选择收货地址的功能时,点击选择收货地址没有反应,获取不到用户收货地址,API失效了 …...
2023 项目组总结(待完善)
2023 项目组总结 目录概述需求: 设计思路实现思路分析1.JA项目2.XC项目3.XL 项目4.tydic 项目 总结 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better re…...
Chrome浏览器 键盘快捷键整理
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 〇、前言一、常用快捷键二、分类型快捷键表(…...
【JAVA】集合与背后的逻辑框架,包装类,List,Map,Set,静态内部类
❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 collectionCollection创建collection使用泛型collection方法 Map 接口Map的存储结构HashMap和Tr…...
mac电脑版数字图像处理软件:ACDSee Photo Studio 9最新 for Mac
ACDSee Photo Studio 9是一款由ACD Systems开发的功能强大的照片管理和编辑软件,专为Mac用户提供一站式解决方案,方便用户轻松浏览、管理和编辑照片。该软件提供了许多实用的工具和功能,包括高效的导入和排序工具、强大的编辑工具、智能组织和…...
贵阳专用网站建设/郑州网站建设制作
文章目录Key is stored in legacy trusted.gpg keyring (/etc/apt/truste和apt update | upgrade; apt-key相关的配置文件都在目录/etc/apt下,共有以下内容:方法一:没成功,而且我的系统上显示采用的是第二种方式,没有用…...
用dz做网站怎么设置数据库/贴吧引流推广
代理模式 和 装饰器十分类似, 以如下图解释说明区别。 装饰者在之前介绍装饰模式的时候就说明了它是在被装饰者的功能基础上,附加新的功能,而且被装饰者的接口必定会被调用的情况下才选用装饰模式来解决问题; 而代理者是先判断是否需要执行被…...
网站建设横条/网站页面关键词优化
概述首先同步下项目概况:上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇)。这篇文章咱们分享:路由中间件 - Jaeger 链路追踪(实战篇)。说实话,这篇文章确实让大家久等了&#…...
成都市网站建设公司/网络营销的盈利模式
参数传递:将主程序变量传递给子例程形式参数传递类型值传:子例程中参数变量的值的改变,不影响外部程序实际变量的值. DATA:A TYPE I VALUE 3,B TYPE I VALUE 6,C TYPE I. WRITE:A,A,B,B,C,C. PERFORM ADD USING A B CHANGING C. WRITE:/ SY-…...
爱网度假/网站排名优化软件
旧的时间字符串-->simpledataformat1.parse(该字符串) 获得date类型 -->simpledataformat2.format(date) simpledateformat1的pattern的格式和旧的字符串相同,simpledateformat2的pattern格式和希望的相同。 比如 旧的字符串格式为 yyyy-MM-dd,希望…...