9个版本
0.1.12 | 2024年8月10日 |
---|---|
0.1.11 | 2024年8月8日 |
0.1.4 | 2024年7月4日 |
#317 in 数据结构
每月638次下载
125KB
2K SLoC
OCPP-RS
OCPP-RS是一个Rust库,用于在Rust中实现Open Charge Point Protocol (OCPP)。
目前支持OCPP 1.6。
- OCPP 1.6协议的完整实现
- 目前Rust中OCPP 1.6的最完整实现
- 包含电池,检查数据包的解析(解析(to_message)序列化(from_message))
- 受python ocpp库启发
使用方法
在Cargo.toml中,添加以下依赖项
[dependencies]
ocpp-rs = "0.1"
特殊之处
由于原始的OCPP 1.6协议不包含用于CallResult
的类型字段,在解析CallResult
lt时,需要处理JSON负载不明确时的特殊案例,如空对象,例如:{}
,这些可能会被序列化为EmptyResponse
而不是您所等待的变体,例如GetConfiguration
。
查看此文件了解如何正确处理CallResults
:example
示例
从客户端接收负载
use ocpp_rs::v16::parse::{self, Message};
use ocpp_rs::v16::call::{Action, Call};
// Example incoming message
let incoming_text = "[2, \"19223201\", \"BootNotification\", { \"chargePointVendor\": \"VendorX\", \"chargePointModel\": \"SingleSocketCharger\" }]";
let incoming_message = parse::to_message(incoming_text);
if let Ok(Message::Call(call)) = incoming_message {
match call.payload {
Action::BootNotification(boot_notification) => {
// Do something with boot_notification
},
_ => {
// Handle other actions
}
}
}
向客户端发送负载
use ocpp_rs::v16::call::StartTransaction;
use ocpp_rs::v16::call_result::{self, CallResult, ResultPayload};
use ocpp_rs::v16::data_types::IdTagInfo;
use ocpp_rs::v16::enums::ChargePointStatus;
use ocpp_rs::v16::parse::Message;
let response = Message::CallResult(CallResult::new(
"1234".to_string(),
ResultPayload::StartTransaction(call_result::StartTransaction {
transaction_id: 0,
id_tag_info: IdTagInfo {
status: ocpp_rs::v16::enums::ParsedGenericStatus::Accepted,
expiry_date: None,
parent_id_tag: None,
},
}),
));
依赖关系
~1.7–2.8MB
~53K SLoC