#ocpp #oca #charger #ocpp16 #eletric-vehicle

ocpp_rs

Open Charge Point Protocol (OCPP)协议在Rust中的实现

9个版本

0.1.12 2024年8月10日
0.1.11 2024年8月8日
0.1.4 2024年7月4日

#317 in 数据结构

Download history 130/week @ 2024-07-01 8/week @ 2024-07-08 221/week @ 2024-07-29 374/week @ 2024-08-05 43/week @ 2024-08-12

每月638次下载

MIT授权

125KB
2K SLoC

OCPP-RS

OCPP-RS是一个Rust库,用于在Rust中实现Open Charge Point Protocol (OCPP)。

目前支持OCPP 1.6。

文档

使用方法

在Cargo.toml中,添加以下依赖项

[dependencies]
ocpp-rs = "0.1"

特殊之处

由于原始的OCPP 1.6协议不包含用于CallResult的类型字段,在解析CallResultlt时,需要处理JSON负载不明确时的特殊案例,如空对象,例如:{},这些可能会被序列化为EmptyResponse而不是您所等待的变体,例如GetConfiguration

查看此文件了解如何正确处理CallResultsexample

示例

从客户端接收负载

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