OCPP_1.6_JSON_Specification中⽂Open Charge Point Protocol JSON 1.6, OCPP-J 1.6 Specification
⽬录
1. 简介 (4)
1.1. 本⽂件的⽬的 (4)
1.2. ⽬标观众 (4)
1.3. OCPP-S and OCPP-J (4)
1.4. 协议 (4)
1.5. 定义及缩写 (5)
1.6. ⽂献 (6)
2. 效益与问题 (7)
3. 连接 (7)
3.1. 客户端请求 (7)
3.1.1. 连接URL (7)
3.1.2. OCPP 版本 (8)
3.1.3. ⼀个开放的HTTP请求的例⼦ (9)
3.2. 服务器响应 (9)
3.3. 更多信息 (10)
4. RPC框架 (10)
4.1. 介绍 (10)
4.1.1. Synchronicity 同步性 (11)
4.1.2. 字符编码 (11)
4.1.3.消息类型 (11)
4.2. ⽤于不同消息类型的消息结构 (12)
4.2.1. CALL (12)
json检查4.2.2. CallResult (13)
4.2.3. CallError (14)
5.连接 (17)
5.1. 压缩 (17)
5.2. 数据的完整性 (17)
5.3. WebSocket Ping与OCPP的Heartbeat (17)
5.4. 重新连接 (18)
5.5. ⽹络节点的层次结构 (18)
6. 安全 (18)
6.1. Network-level security ⽹络级安全 (18)
6.2. OCPP-J over TLS (18)
6.2.1. 加密 (19)
6.2.2. 充电点认证 (19)
6.2.3. 它的安全性和不安全性 (23)
6.2.4. 适⽤于OCPP-S (23)
7. 配置 (24)
1.简介
1.1.本⽂件的⽬的
本⽂档的⽬的是向读者提供创建正确信息所需的信息。
JSON实现互操作的开放充电协议(OCPP-J)。我们将试图解释什么是强制性的,什么是好的做法和不
应该做的,根据我们⾃⼰的经验。毫⽆疑问误解或含糊不清仍然存在,但通过本⽂件,我们的⽬的是尽可能防⽌他们。
1.2.⽬标观众
本⽂件的⽬的是为开发⼈员希望了解⼀个和/或实现OCPP JSON正确互操作⽅式。在服务器上实现Web服务的基本知识假定嵌⼊式设备。
1.3.OCPP-S and OCPP-J
随着介绍OCPP 1.6,有两种不同味道的OCPP下基于SOAP协议实现,有可能使⽤更紧凑的JSON替代⽅案。为了避免混乱,在通信的类型实现我们建议使⽤不同的后缀j和s表⽰JSON 或SOAP。⼀般来说,OCPP-J表⽰JSON和OCPP-S来表⽰SOAP。特定版本的术语将OCPP1.6J 或OCPP1.2S。如果没有后缀规定是OCPP1.2或1.5,那么必须实现SOAP。从版本1.6来看,这不再是隐式的并应该永远清楚。如果⼀个系统同时⽀持JSON和SOAP变量,则此版本则被认为是好的标签OCPP1.6JS ⽽不是OCPP1.6。
本⽂档介绍了OCPP-J,如果想了解OCPP-S请查看⽂档:[ OCPP_IMP_S ]
1.4.协议
本⽂件中的“必须”、“不得”、“必要”、“应当”、“不应该”“建议”、“可能”和“可选”等关键词应将被解释如在[ RFC2119 ]所描述的⼀样。
1.5.定义及缩写
1.6.⽂献
2.效益与问题
Web Socket协议在【RFC6455】⾥有定义。早期的草案⼯作实现Web-Socket规范的存在,但OCPP-J实现使⽤在[ RFC6455]描述的协议。
注意,WebSocket TCP之上的定义⾃⼰的消息结构。在TCP级别,通过WebSocket发送的数据,被包裹在⼀个WebSocket帧头。使⽤框架时,这是完全透明的。然⽽对于⼀个嵌⼊式系统⼯作时,WebSocket图书馆不可⽤并且她/他必须依据
[RFC6455] 正确地框架信息。
3.连接
⽤OCPP-J连接⼀个充电点和⼀个中央系统,中央系统扮演⼀个WebSocket服务器,充电点扮演WebSocket客户端。
3.1.客户端请求
建⽴⼀个连接,充电点启动⼀个WebSocket连接如在[ RFC6455 ] 第4节“所描述的:开场握⼿”。
OCPP-J在URL和WebSocket⼦协议施加额外的约束,在下⾯的4.1.1和4.1.2这两个部分会详细介绍。
3.1.1.连接URL
为了启动⼀个WebSocket连接,充电点需要⼀个URL([ RFC3986 ])连接。这个URL从此被称为“连接URL”。这个连接URL 是特定于充电点的。充电点的连接URL包含充电点⾝份使中枢系统知道充电点属于哪⼀个WebSocket连接。
⽀持OCPP-J的中央系统必须⾄少提供⼀个OCPP-J端点URL,从该点电荷应该得到它的URL 连接。这OCPP-J端点URL可以是任何以“ws”或“wss”⽅案URL。充电点如何获得OCPP-J 端点URL不是本⽂档的范围。
为了得到连接URL,充电点通过添加到路径“/”,然后识别唯⼀地充电点串来修改OCPP-J 端点URL(U + 002f固相线)。这种
独特的标识字符串必须成编码如在[RFC3986 ] 描述中⼀样有必要。
例1:⾝份为”CP001”的⼀个点电荷连接到⼀个中央系统OCPP-J端点
URL”ws://www.doczj/doc/bed14fa1ed3a87c24028915f804d2b160a4e8651.html /ocpp”这会给出下⾯的连接URL:ws://www.doczj/doc/bed14fa1ed3a87c24028915f804d2b160a4e8651.html /ocpp/CP001
例2:⾝份为“RDAM123”的⼀个点电荷连接到⼀个中央系统OCPP-J端点URL
wss://www.doczj/doc/bed14fa1ed3a87c24028915f804d2b160a4e8651.html /ocppj”这将给以下⽹址:
wss://www.doczj/doc/bed14fa1ed3a87c24028915f804d2b160a4e8651.html /ocppj/RDAM%20123
3.1.2.OCPP 版本
精确的OCPP版必须在SEC- WebSocket协议字段指定。这应该是下列值之⼀:
表1:OCPP版本
版本Websocket ⼦协议名称
1.2 OCPP1.2
1.5 OCPP1.5
1.6 OCPP1.6
2.0 OCPP2.0
对于OCPP1.2,1.5和2.0是官⽅WebSocket⼦协议名称的值。他们本⾝注册在因特⽹编号管理局。
注意:OCPP1.2和1.5在列表中。由于WebSocket解决⽅案中的JSON是独⽴的实际消息内容,所以也可⽤于旧版本OCP。请记住,在这些情况下,实现还应该保持对基于SOAP的解决⽅案的⽀持,以便互操作。
将OCPP版包含在OCPP-J端点URL字符串的⼀部分是很好的实践。如果你运⾏⼀个Web服务,可以在同⼀个OCPP-J端点URL处理多个OCPP版本,这是没有必要的课程。
3.1.3.⼀个开放的HTTP请求的例⼦
以下是⼀个OCPP-J连接握⼿的开放HTTP请求的例⼦:
GET /webServices/ocpp/CP3211 HTTP/1.1
Host: www.doczj/doc/bed14fa1ed3a87c24028915f804d2b160a4e8651.html :33033
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: ocpp1.6, ocpp1.5
Sec-WebSocket-Version: 13
⿊体部分是在每⼀个WebSocket握⼿请求时会出现,其他部分都是具体的例⼦。
在这个例⼦中,中央系统的OCPP-J端点URL
是"ws://www.doczj/doc/bed14fa1ed3a87c24028915f804d2b160a4e8651.html :33033/webSe
rvices/ocpp"。充电点的唯⼀标识符”CP3211”,因此请求路径为"webServices/ocpp/CP3211"。
根据sec- WebSocket 协议报头,充电点在这⾥显⽰,它可以使⽤OCPP1.6J和OCPP1.5J,更偏向于前者。
在这个例⼦中,另⼀头是HTTP和WebSocket协议的⼀部分,与那些实施OCPP-J除第三⽅WebSocket库之外⽆关。这些标题的作⽤在[RFC2616] 和[RFC6455]中有解释。
3.2.服务器响应
在接收充电点的要求,中央系统与响应完成握⼿如在[RFC6455] 描述。