1#[derive(Debug, Clone, PartialEq, Eq)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct CustomData {
8 #[cfg_attr(feature = "serde", serde(rename = "vendorId"))]
9 pub vendor_id: heapless::String<255usize>,
10}
11#[derive(Debug, Clone, PartialEq, Eq)]
13#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
14pub struct AdditionalInfo {
15 #[cfg_attr(feature = "serde", serde(rename = "additionalIdToken"))]
17 pub additional_id_token: heapless::String<36usize>,
18 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
19 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
20 pub custom_data: Option<CustomData>,
21 pub r#type: heapless::String<50usize>,
23}
24#[derive(Debug, Clone, PartialEq, Eq)]
26#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
27pub enum IdTokenEnum {
28 Central,
29 #[cfg_attr(feature = "serde", serde(rename = "eMAID"))]
30 EMAID,
31 ISO14443,
32 ISO15693,
33 KeyCode,
34 Local,
35 MacAddress,
36 NoAuthorization,
37}
38#[cfg(feature = "alloc")]
39#[derive(Debug, Clone, PartialEq, Eq)]
41#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
42pub struct IdToken {
43 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
44 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
45 pub additional_info: Option<alloc::vec::Vec<AdditionalInfo>>,
46 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
47 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
48 pub custom_data: Option<CustomData>,
49 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
51 pub id_token: heapless::String<36usize>,
52 pub r#type: IdTokenEnum,
53}
54#[cfg(not(feature = "alloc"))]
55#[derive(Debug, Clone, PartialEq, Eq)]
57#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
58pub struct IdToken<const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 16usize> {
59 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
60 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
61 pub additional_info: Option<
62 heapless::Vec<AdditionalInfo, ID_TOKEN_ADDITIONAL_INFO_CAP>,
63 >,
64 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
65 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
66 pub custom_data: Option<CustomData>,
67 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
69 pub id_token: heapless::String<36usize>,
70 pub r#type: IdTokenEnum,
71}
72#[derive(Debug, Clone, PartialEq, Eq)]
74#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
75pub enum HashAlgorithmEnum {
76 SHA256,
77 SHA384,
78 SHA512,
79}
80#[derive(Debug, Clone, PartialEq, Eq)]
81#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
82pub struct OCSPRequestData {
83 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
84 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
85 pub custom_data: Option<CustomData>,
86 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
87 pub hash_algorithm: HashAlgorithmEnum,
88 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
90 pub issuer_key_hash: heapless::String<128usize>,
91 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
93 pub issuer_name_hash: heapless::String<128usize>,
94 #[cfg_attr(feature = "serde", serde(rename = "responderURL"))]
96 pub responder_u_r_l: heapless::String<512usize>,
97 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
99 pub serial_number: heapless::String<40usize>,
100}
101#[derive(Debug, Clone, PartialEq, Eq)]
105#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
106pub enum AuthorizeCertificateStatusEnum {
107 Accepted,
108 SignatureError,
109 CertificateExpired,
110 CertificateRevoked,
111 NoCertificateAvailable,
112 CertChainError,
113 ContractCancelled,
114}
115#[derive(Debug, Clone, PartialEq, Eq)]
119#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
120pub enum MessageFormatEnum {
121 ASCII,
122 HTML,
123 URI,
124 UTF8,
125}
126#[derive(Debug, Clone, PartialEq, Eq)]
130#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
131pub struct MessageContent {
132 pub content: heapless::String<512usize>,
136 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
137 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
138 pub custom_data: Option<CustomData>,
139 pub format: MessageFormatEnum,
140 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
144 pub language: Option<heapless::String<8usize>>,
145}
146#[derive(Debug, Clone, PartialEq, Eq)]
150#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
151pub enum AuthorizationStatusEnum {
152 Accepted,
153 Blocked,
154 ConcurrentTx,
155 Expired,
156 Invalid,
157 NoCredit,
158 NotAllowedTypeEVSE,
159 NotAtThisLocation,
160 NotAtThisTime,
161 Unknown,
162}
163#[cfg(feature = "alloc")]
164#[derive(Debug, Clone, PartialEq, Eq)]
169#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
170pub struct IdTokenInfo {
171 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
175 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
176 pub cache_expiry_date_time: Option<alloc::string::String>,
177 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
179 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
180 pub charging_priority: Option<i64>,
181 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
182 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
183 pub custom_data: Option<CustomData>,
184 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
186 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
187 pub evse_id: Option<alloc::vec::Vec<i64>>,
188 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
189 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
190 pub group_id_token: Option<IdToken>,
191 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
195 pub language1: Option<heapless::String<8usize>>,
196 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
200 pub language2: Option<heapless::String<8usize>>,
201 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
202 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
203 pub personal_message: Option<MessageContent>,
204 pub status: AuthorizationStatusEnum,
205}
206#[cfg(not(feature = "alloc"))]
207#[derive(Debug, Clone, PartialEq, Eq)]
212#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
213pub struct IdTokenInfo<
214 const ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP: usize = 1024usize,
215 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 16usize,
216 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 16usize,
217> {
218 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
222 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
223 pub cache_expiry_date_time: Option<
224 heapless::String<ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP>,
225 >,
226 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
228 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
229 pub charging_priority: Option<i64>,
230 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
231 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
232 pub custom_data: Option<CustomData>,
233 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
235 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
236 pub evse_id: Option<heapless::Vec<i64, ID_TOKEN_INFO_EVSE_ID_CAP>>,
237 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
238 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
239 pub group_id_token: Option<IdToken<ID_TOKEN_ADDITIONAL_INFO_CAP>>,
240 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
244 pub language1: Option<heapless::String<8usize>>,
245 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
249 pub language2: Option<heapless::String<8usize>>,
250 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
251 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
252 pub personal_message: Option<MessageContent>,
253 pub status: AuthorizationStatusEnum,
254}
255#[derive(Debug, Clone, PartialEq, Eq)]
259#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
260pub struct Modem {
261 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
262 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
263 pub custom_data: Option<CustomData>,
264 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
268 pub iccid: Option<heapless::String<20usize>>,
269 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
273 pub imsi: Option<heapless::String<20usize>>,
274}
275#[derive(Debug, Clone, PartialEq, Eq)]
279#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
280pub struct ChargingStation {
281 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
282 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
283 pub custom_data: Option<CustomData>,
284 #[cfg_attr(feature = "serde", serde(rename = "firmwareVersion"))]
286 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
287 pub firmware_version: Option<heapless::String<50usize>>,
288 pub model: heapless::String<20usize>,
292 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
293 pub modem: Option<Modem>,
294 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
298 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
299 pub serial_number: Option<heapless::String<25usize>>,
300 #[cfg_attr(feature = "serde", serde(rename = "vendorName"))]
302 pub vendor_name: heapless::String<50usize>,
303}
304#[derive(Debug, Clone, PartialEq, Eq)]
306#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
307pub enum BootReasonEnum {
308 ApplicationReset,
309 FirmwareUpdate,
310 LocalReset,
311 PowerUp,
312 RemoteReset,
313 ScheduledReset,
314 Triggered,
315 Unknown,
316 Watchdog,
317}
318#[derive(Debug, Clone, PartialEq, Eq)]
321#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
322pub enum RegistrationStatusEnum {
323 Accepted,
324 Pending,
325 Rejected,
326}
327#[derive(Debug, Clone, PartialEq, Eq)]
329#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
330pub struct StatusInfo {
331 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
333 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
334 pub additional_info: Option<heapless::String<512usize>>,
335 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
336 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
337 pub custom_data: Option<CustomData>,
338 #[cfg_attr(feature = "serde", serde(rename = "reasonCode"))]
340 pub reason_code: heapless::String<20usize>,
341}
342#[derive(Debug, Clone, PartialEq, Eq)]
344#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
345pub enum CancelReservationStatusEnum {
346 Accepted,
347 Rejected,
348}
349#[derive(Debug, Clone, PartialEq, Eq)]
351#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
352pub enum CertificateSigningUseEnum {
353 ChargingStationCertificate,
354 V2GCertificate,
355}
356#[derive(Debug, Clone, PartialEq, Eq)]
358#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
359pub enum CertificateSignedStatusEnum {
360 Accepted,
361 Rejected,
362}
363#[derive(Debug, Clone, PartialEq, Eq)]
367#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
368pub struct EVSE {
369 #[cfg_attr(feature = "serde", serde(rename = "connectorId"))]
371 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
372 pub connector_id: Option<i64>,
373 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
374 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
375 pub custom_data: Option<CustomData>,
376 pub id: i64,
380}
381#[derive(Debug, Clone, PartialEq, Eq)]
383#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
384pub enum OperationalStatusEnum {
385 Inoperative,
386 Operative,
387}
388#[derive(Debug, Clone, PartialEq, Eq)]
390#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
391pub enum ChangeAvailabilityStatusEnum {
392 Accepted,
393 Rejected,
394 Scheduled,
395}
396#[derive(Debug, Clone, PartialEq, Eq)]
398#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
399pub enum ClearCacheStatusEnum {
400 Accepted,
401 Rejected,
402}
403#[derive(Debug, Clone, PartialEq, Eq)]
407#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
408pub enum ChargingProfilePurposeEnum {
409 ChargingStationExternalConstraints,
410 ChargingStationMaxProfile,
411 TxDefaultProfile,
412 TxProfile,
413}
414#[derive(Debug, Clone, PartialEq, Eq)]
418#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
419pub struct ClearChargingProfile {
420 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
421 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
422 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
423 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
424 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
425 pub custom_data: Option<CustomData>,
426 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
430 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
431 pub evse_id: Option<i64>,
432 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
436 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
437 pub stack_level: Option<i64>,
438}
439#[derive(Debug, Clone, PartialEq, Eq)]
441#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
442pub enum ClearChargingProfileStatusEnum {
443 Accepted,
444 Unknown,
445}
446#[derive(Debug, Clone, PartialEq, Eq)]
448#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
449pub enum ClearMessageStatusEnum {
450 Accepted,
451 Unknown,
452}
453#[derive(Debug, Clone, PartialEq, Eq)]
455#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
456pub enum ClearMonitoringStatusEnum {
457 Accepted,
458 Rejected,
459 NotFound,
460}
461#[derive(Debug, Clone, PartialEq, Eq)]
462#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
463pub struct ClearMonitoringResult {
464 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
465 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
466 pub custom_data: Option<CustomData>,
467 pub id: i64,
469 pub status: ClearMonitoringStatusEnum,
470 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
471 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
472 pub status_info: Option<StatusInfo>,
473}
474#[derive(Debug, Clone, PartialEq, Eq)]
476#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
477pub enum ChargingLimitSourceEnum {
478 EMS,
479 Other,
480 SO,
481 CSO,
482}
483#[derive(Debug, Clone, PartialEq, Eq)]
484#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
485pub struct CertificateHashData {
486 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
487 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
488 pub custom_data: Option<CustomData>,
489 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
490 pub hash_algorithm: HashAlgorithmEnum,
491 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
493 pub issuer_key_hash: heapless::String<128usize>,
494 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
496 pub issuer_name_hash: heapless::String<128usize>,
497 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
499 pub serial_number: heapless::String<40usize>,
500}
501#[derive(Debug, Clone, PartialEq, Eq)]
503#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
504pub enum CustomerInformationStatusEnum {
505 Accepted,
506 Rejected,
507 Invalid,
508}
509#[derive(Debug, Clone, PartialEq, Eq)]
511#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
512pub enum DataTransferStatusEnum {
513 Accepted,
514 Rejected,
515 UnknownMessageId,
516 UnknownVendorId,
517}
518#[derive(Debug, Clone, PartialEq, Eq)]
520#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
521pub enum DeleteCertificateStatusEnum {
522 Accepted,
523 Failed,
524 NotFound,
525}
526#[derive(Debug, Clone, PartialEq, Eq)]
528#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
529pub enum FirmwareStatusEnum {
530 Downloaded,
531 DownloadFailed,
532 Downloading,
533 DownloadScheduled,
534 DownloadPaused,
535 Idle,
536 InstallationFailed,
537 Installing,
538 Installed,
539 InstallRebooting,
540 InstallScheduled,
541 InstallVerificationFailed,
542 InvalidSignature,
543 SignatureVerified,
544}
545#[derive(Debug, Clone, PartialEq, Eq)]
547#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
548pub enum CertificateActionEnum {
549 Install,
550 Update,
551}
552#[derive(Debug, Clone, PartialEq, Eq)]
554#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
555pub enum Iso15118EVCertificateStatusEnum {
556 Accepted,
557 Failed,
558}
559#[derive(Debug, Clone, PartialEq, Eq)]
561#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
562pub enum ReportBaseEnum {
563 ConfigurationInventory,
564 FullInventory,
565 SummaryInventory,
566}
567#[derive(Debug, Clone, PartialEq, Eq)]
569#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
570pub enum GenericDeviceModelStatusEnum {
571 Accepted,
572 Rejected,
573 NotSupported,
574 EmptyResultSet,
575}
576#[derive(Debug, Clone, PartialEq, Eq)]
578#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
579pub enum GetCertificateStatusEnum {
580 Accepted,
581 Failed,
582}
583#[cfg(feature = "alloc")]
584#[derive(Debug, Clone, PartialEq, Eq)]
588#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
589pub struct ChargingProfileCriterion {
590 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
592 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
593 pub charging_limit_source: Option<heapless::Vec<ChargingLimitSourceEnum, 4usize>>,
594 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
596 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
597 pub charging_profile_id: Option<alloc::vec::Vec<i64>>,
598 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
599 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
600 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
601 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
602 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
603 pub custom_data: Option<CustomData>,
604 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
608 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
609 pub stack_level: Option<i64>,
610}
611#[cfg(not(feature = "alloc"))]
612#[derive(Debug, Clone, PartialEq, Eq)]
616#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
617pub struct ChargingProfileCriterion<
618 const CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP: usize = 16usize,
619> {
620 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
622 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
623 pub charging_limit_source: Option<heapless::Vec<ChargingLimitSourceEnum, 4usize>>,
624 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
626 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
627 pub charging_profile_id: Option<
628 heapless::Vec<i64, CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP>,
629 >,
630 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
631 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
632 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
633 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
634 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
635 pub custom_data: Option<CustomData>,
636 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
640 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
641 pub stack_level: Option<i64>,
642}
643#[derive(Debug, Clone, PartialEq, Eq)]
645#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
646pub enum GetChargingProfileStatusEnum {
647 Accepted,
648 NoProfiles,
649}
650#[derive(Debug, Clone, PartialEq, Eq)]
652#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
653pub enum ChargingRateUnitEnum {
654 W,
655 A,
656}
657#[derive(Debug, Clone, PartialEq)]
661#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
662pub struct ChargingSchedulePeriod {
663 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
664 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
665 pub custom_data: Option<CustomData>,
666 pub limit: f64,
670 #[cfg_attr(feature = "serde", serde(rename = "numberPhases"))]
674 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
675 pub number_phases: Option<i64>,
676 #[cfg_attr(feature = "serde", serde(rename = "phaseToUse"))]
678 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
679 pub phase_to_use: Option<i64>,
680 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
684 pub start_period: i64,
685}
686#[cfg(feature = "alloc")]
687#[derive(Debug, Clone, PartialEq)]
690#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
691pub struct CompositeSchedule {
692 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
693 pub charging_rate_unit: ChargingRateUnitEnum,
694 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
695 pub charging_schedule_period: alloc::vec::Vec<ChargingSchedulePeriod>,
696 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
697 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
698 pub custom_data: Option<CustomData>,
699 pub duration: i64,
701 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
706 pub evse_id: i64,
707 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
711 pub schedule_start: alloc::string::String,
712}
713#[cfg(not(feature = "alloc"))]
714#[derive(Debug, Clone, PartialEq)]
717#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
718pub struct CompositeSchedule<
719 const COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 16usize,
720 const COMPOSITE_SCHEDULE_SCHEDULE_START_CAP: usize = 1024usize,
721> {
722 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
723 pub charging_rate_unit: ChargingRateUnitEnum,
724 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
725 pub charging_schedule_period: heapless::Vec<
726 ChargingSchedulePeriod,
727 COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
728 >,
729 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
730 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
731 pub custom_data: Option<CustomData>,
732 pub duration: i64,
734 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
739 pub evse_id: i64,
740 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
744 pub schedule_start: heapless::String<COMPOSITE_SCHEDULE_SCHEDULE_START_CAP>,
745}
746#[derive(Debug, Clone, PartialEq, Eq)]
749#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
750pub enum GenericStatusEnum {
751 Accepted,
752 Rejected,
753}
754#[derive(Debug, Clone, PartialEq, Eq)]
756#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
757pub enum MessagePriorityEnum {
758 AlwaysFront,
759 InFront,
760 NormalCycle,
761}
762#[derive(Debug, Clone, PartialEq, Eq)]
764#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
765pub enum MessageStateEnum {
766 Charging,
767 Faulted,
768 Idle,
769 Unavailable,
770}
771#[derive(Debug, Clone, PartialEq, Eq)]
773#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
774pub enum GetDisplayMessagesStatusEnum {
775 Accepted,
776 Unknown,
777}
778#[derive(Debug, Clone, PartialEq, Eq)]
779#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
780pub enum GetCertificateIdUseEnum {
781 V2GRootCertificate,
782 MORootCertificate,
783 CSMSRootCertificate,
784 V2GCertificateChain,
785 ManufacturerRootCertificate,
786}
787#[derive(Debug, Clone, PartialEq, Eq)]
788#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
789pub struct CertificateHashDataChain {
790 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
791 pub certificate_hash_data: CertificateHashData,
792 #[cfg_attr(feature = "serde", serde(rename = "certificateType"))]
793 pub certificate_type: GetCertificateIdUseEnum,
794 #[cfg_attr(feature = "serde", serde(rename = "childCertificateHashData"))]
795 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
796 pub child_certificate_hash_data: Option<heapless::Vec<CertificateHashData, 4usize>>,
797 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
798 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
799 pub custom_data: Option<CustomData>,
800}
801#[derive(Debug, Clone, PartialEq, Eq)]
803#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
804pub enum GetInstalledCertificateStatusEnum {
805 Accepted,
806 NotFound,
807}
808#[cfg(feature = "alloc")]
809#[derive(Debug, Clone, PartialEq, Eq)]
813#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
814pub struct LogParameters {
815 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
816 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
817 pub custom_data: Option<CustomData>,
818 #[cfg_attr(feature = "serde", serde(rename = "latestTimestamp"))]
822 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
823 pub latest_timestamp: Option<alloc::string::String>,
824 #[cfg_attr(feature = "serde", serde(rename = "oldestTimestamp"))]
828 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
829 pub oldest_timestamp: Option<alloc::string::String>,
830 #[cfg_attr(feature = "serde", serde(rename = "remoteLocation"))]
834 pub remote_location: heapless::String<512usize>,
835}
836#[cfg(not(feature = "alloc"))]
837#[derive(Debug, Clone, PartialEq, Eq)]
841#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
842pub struct LogParameters<
843 const LOG_PARAMETERS_LATEST_TIMESTAMP_CAP: usize = 1024usize,
844 const LOG_PARAMETERS_OLDEST_TIMESTAMP_CAP: usize = 1024usize,
845> {
846 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
847 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
848 pub custom_data: Option<CustomData>,
849 #[cfg_attr(feature = "serde", serde(rename = "latestTimestamp"))]
853 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
854 pub latest_timestamp: Option<heapless::String<LOG_PARAMETERS_LATEST_TIMESTAMP_CAP>>,
855 #[cfg_attr(feature = "serde", serde(rename = "oldestTimestamp"))]
859 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
860 pub oldest_timestamp: Option<heapless::String<LOG_PARAMETERS_OLDEST_TIMESTAMP_CAP>>,
861 #[cfg_attr(feature = "serde", serde(rename = "remoteLocation"))]
865 pub remote_location: heapless::String<512usize>,
866}
867#[derive(Debug, Clone, PartialEq, Eq)]
870#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
871pub enum LogEnum {
872 DiagnosticsLog,
873 SecurityLog,
874}
875#[derive(Debug, Clone, PartialEq, Eq)]
877#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
878pub enum LogStatusEnum {
879 Accepted,
880 Rejected,
881 AcceptedCanceled,
882}
883#[derive(Debug, Clone, PartialEq, Eq)]
885#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
886pub struct Component {
887 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
888 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
889 pub custom_data: Option<CustomData>,
890 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
891 pub evse: Option<EVSE>,
892 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
894 pub instance: Option<heapless::String<50usize>>,
895 pub name: heapless::String<50usize>,
897}
898#[derive(Debug, Clone, PartialEq, Eq)]
900#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
901pub struct Variable {
902 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
903 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
904 pub custom_data: Option<CustomData>,
905 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
907 pub instance: Option<heapless::String<50usize>>,
908 pub name: heapless::String<50usize>,
910}
911#[derive(Debug, Clone, PartialEq, Eq)]
913#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
914pub struct ComponentVariable {
915 pub component: Component,
916 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
917 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
918 pub custom_data: Option<CustomData>,
919 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
920 pub variable: Option<Variable>,
921}
922#[derive(Debug, Clone, PartialEq, Eq)]
923#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
924pub enum MonitoringCriterionEnum {
925 ThresholdMonitoring,
926 DeltaMonitoring,
927 PeriodicMonitoring,
928}
929#[derive(Debug, Clone, PartialEq, Eq)]
930#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
931pub enum ComponentCriterionEnum {
932 Active,
933 Available,
934 Enabled,
935 Problem,
936}
937#[derive(Debug, Clone, PartialEq, Eq)]
939#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
940pub enum AttributeEnum {
941 Actual,
942 Target,
943 MinSet,
944 MaxSet,
945}
946#[derive(Debug, Clone, PartialEq, Eq)]
948#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
949pub struct GetVariableData {
950 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
951 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
952 pub attribute_type: Option<AttributeEnum>,
953 pub component: Component,
954 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
955 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
956 pub custom_data: Option<CustomData>,
957 pub variable: Variable,
958}
959#[derive(Debug, Clone, PartialEq, Eq)]
961#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
962pub enum GetVariableStatusEnum {
963 Accepted,
964 Rejected,
965 UnknownComponent,
966 UnknownVariable,
967 NotSupportedAttributeType,
968}
969#[derive(Debug, Clone, PartialEq, Eq)]
971#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
972pub struct GetVariableResult {
973 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
974 pub attribute_status: GetVariableStatusEnum,
975 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
976 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
977 pub attribute_status_info: Option<StatusInfo>,
978 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
979 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
980 pub attribute_type: Option<AttributeEnum>,
981 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
985 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
986 pub attribute_value: Option<heapless::String<2500usize>>,
987 pub component: Component,
988 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
989 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
990 pub custom_data: Option<CustomData>,
991 pub variable: Variable,
992}
993#[derive(Debug, Clone, PartialEq, Eq)]
995#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
996pub enum InstallCertificateUseEnum {
997 V2GRootCertificate,
998 MORootCertificate,
999 CSMSRootCertificate,
1000 ManufacturerRootCertificate,
1001}
1002#[derive(Debug, Clone, PartialEq, Eq)]
1004#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1005pub enum InstallCertificateStatusEnum {
1006 Accepted,
1007 Rejected,
1008 Failed,
1009}
1010#[derive(Debug, Clone, PartialEq, Eq)]
1012#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1013pub enum UploadLogStatusEnum {
1014 BadMessage,
1015 Idle,
1016 NotSupportedOperation,
1017 PermissionDenied,
1018 Uploaded,
1019 UploadFailure,
1020 Uploading,
1021 AcceptedCanceled,
1022}
1023#[derive(Debug, Clone, PartialEq, Eq)]
1027#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1028pub enum ReadingContextEnum {
1029 #[cfg_attr(feature = "serde", serde(rename = "Interruption.Begin"))]
1030 InterruptionBegin,
1031 #[cfg_attr(feature = "serde", serde(rename = "Interruption.End"))]
1032 InterruptionEnd,
1033 Other,
1034 #[cfg_attr(feature = "serde", serde(rename = "Sample.Clock"))]
1035 SampleClock,
1036 #[cfg_attr(feature = "serde", serde(rename = "Sample.Periodic"))]
1037 SamplePeriodic,
1038 #[cfg_attr(feature = "serde", serde(rename = "Transaction.Begin"))]
1039 TransactionBegin,
1040 #[cfg_attr(feature = "serde", serde(rename = "Transaction.End"))]
1041 TransactionEnd,
1042 Trigger,
1043}
1044#[derive(Debug, Clone, PartialEq, Eq)]
1048#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1049pub enum LocationEnum {
1050 Body,
1051 Cable,
1052 EV,
1053 Inlet,
1054 Outlet,
1055}
1056#[derive(Debug, Clone, PartialEq, Eq)]
1060#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1061pub enum MeasurandEnum {
1062 #[cfg_attr(feature = "serde", serde(rename = "Current.Export"))]
1063 CurrentExport,
1064 #[cfg_attr(feature = "serde", serde(rename = "Current.Import"))]
1065 CurrentImport,
1066 #[cfg_attr(feature = "serde", serde(rename = "Current.Offered"))]
1067 CurrentOffered,
1068 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Register"))]
1069 EnergyActiveExportRegister,
1070 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Register"))]
1071 EnergyActiveImportRegister,
1072 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Register"))]
1073 EnergyReactiveExportRegister,
1074 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Register"))]
1075 EnergyReactiveImportRegister,
1076 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Interval"))]
1077 EnergyActiveExportInterval,
1078 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Interval"))]
1079 EnergyActiveImportInterval,
1080 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Net"))]
1081 EnergyActiveNet,
1082 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Interval"))]
1083 EnergyReactiveExportInterval,
1084 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Interval"))]
1085 EnergyReactiveImportInterval,
1086 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Net"))]
1087 EnergyReactiveNet,
1088 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Net"))]
1089 EnergyApparentNet,
1090 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Import"))]
1091 EnergyApparentImport,
1092 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Export"))]
1093 EnergyApparentExport,
1094 Frequency,
1095 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Export"))]
1096 PowerActiveExport,
1097 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Import"))]
1098 PowerActiveImport,
1099 #[cfg_attr(feature = "serde", serde(rename = "Power.Factor"))]
1100 PowerFactor,
1101 #[cfg_attr(feature = "serde", serde(rename = "Power.Offered"))]
1102 PowerOffered,
1103 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Export"))]
1104 PowerReactiveExport,
1105 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Import"))]
1106 PowerReactiveImport,
1107 SoC,
1108 Voltage,
1109}
1110#[derive(Debug, Clone, PartialEq, Eq)]
1114#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1115pub enum PhaseEnum {
1116 L1,
1117 L2,
1118 L3,
1119 N,
1120 #[cfg_attr(feature = "serde", serde(rename = "L1-N"))]
1121 L1N,
1122 #[cfg_attr(feature = "serde", serde(rename = "L2-N"))]
1123 L2N,
1124 #[cfg_attr(feature = "serde", serde(rename = "L3-N"))]
1125 L3N,
1126 #[cfg_attr(feature = "serde", serde(rename = "L1-L2"))]
1127 L1L2,
1128 #[cfg_attr(feature = "serde", serde(rename = "L2-L3"))]
1129 L2L3,
1130 #[cfg_attr(feature = "serde", serde(rename = "L3-L1"))]
1131 L3L1,
1132}
1133#[derive(Debug, Clone, PartialEq, Eq)]
1135#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1136pub struct SignedMeterValue {
1137 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1138 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1139 pub custom_data: Option<CustomData>,
1140 #[cfg_attr(feature = "serde", serde(rename = "encodingMethod"))]
1142 pub encoding_method: heapless::String<50usize>,
1143 #[cfg_attr(feature = "serde", serde(rename = "publicKey"))]
1145 pub public_key: heapless::String<2500usize>,
1146 #[cfg_attr(feature = "serde", serde(rename = "signedMeterData"))]
1148 pub signed_meter_data: heapless::String<2500usize>,
1149 #[cfg_attr(feature = "serde", serde(rename = "signingMethod"))]
1151 pub signing_method: heapless::String<50usize>,
1152}
1153#[derive(Debug, Clone, PartialEq, Eq)]
1155#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1156pub struct UnitOfMeasure {
1157 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1158 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1159 pub custom_data: Option<CustomData>,
1160 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1162 pub multiplier: Option<i64>,
1163 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1167 pub unit: Option<heapless::String<20usize>>,
1168}
1169#[derive(Debug, Clone, PartialEq)]
1175#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1176pub struct SampledValue {
1177 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1178 pub context: Option<ReadingContextEnum>,
1179 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1180 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1181 pub custom_data: Option<CustomData>,
1182 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1183 pub location: Option<LocationEnum>,
1184 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1185 pub measurand: Option<MeasurandEnum>,
1186 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1187 pub phase: Option<PhaseEnum>,
1188 #[cfg_attr(feature = "serde", serde(rename = "signedMeterValue"))]
1189 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1190 pub signed_meter_value: Option<SignedMeterValue>,
1191 #[cfg_attr(feature = "serde", serde(rename = "unitOfMeasure"))]
1192 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1193 pub unit_of_measure: Option<UnitOfMeasure>,
1194 pub value: f64,
1198}
1199#[cfg(feature = "alloc")]
1200#[derive(Debug, Clone, PartialEq)]
1204#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1205pub struct MeterValue {
1206 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1207 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1208 pub custom_data: Option<CustomData>,
1209 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
1210 pub sampled_value: alloc::vec::Vec<SampledValue>,
1211 pub timestamp: alloc::string::String,
1215}
1216#[cfg(not(feature = "alloc"))]
1217#[derive(Debug, Clone, PartialEq)]
1221#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1222pub struct MeterValue<
1223 const METER_VALUE_SAMPLED_VALUE_CAP: usize = 16usize,
1224 const METER_VALUE_TIMESTAMP_CAP: usize = 1024usize,
1225> {
1226 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1227 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1228 pub custom_data: Option<CustomData>,
1229 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
1230 pub sampled_value: heapless::Vec<SampledValue, METER_VALUE_SAMPLED_VALUE_CAP>,
1231 pub timestamp: heapless::String<METER_VALUE_TIMESTAMP_CAP>,
1235}
1236#[derive(Debug, Clone, PartialEq, Eq)]
1239#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1240pub struct ChargingLimit {
1241 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
1242 pub charging_limit_source: ChargingLimitSourceEnum,
1243 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1244 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1245 pub custom_data: Option<CustomData>,
1246 #[cfg_attr(feature = "serde", serde(rename = "isGridCritical"))]
1250 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1251 pub is_grid_critical: Option<bool>,
1252}
1253#[derive(Debug, Clone, PartialEq, Eq)]
1257#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1258pub enum CostKindEnum {
1259 CarbonDioxideEmission,
1260 RelativePricePercentage,
1261 RenewableGenerationPercentage,
1262}
1263#[derive(Debug, Clone, PartialEq, Eq)]
1266#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1267pub struct Cost {
1268 pub amount: i64,
1272 #[cfg_attr(feature = "serde", serde(rename = "amountMultiplier"))]
1276 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1277 pub amount_multiplier: Option<i64>,
1278 #[cfg_attr(feature = "serde", serde(rename = "costKind"))]
1279 pub cost_kind: CostKindEnum,
1280 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1281 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1282 pub custom_data: Option<CustomData>,
1283}
1284#[derive(Debug, Clone, PartialEq)]
1287#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1288pub struct ConsumptionCost {
1289 pub cost: heapless::Vec<Cost, 3usize>,
1290 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1291 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1292 pub custom_data: Option<CustomData>,
1293 #[cfg_attr(feature = "serde", serde(rename = "startValue"))]
1297 pub start_value: f64,
1298}
1299#[derive(Debug, Clone, PartialEq, Eq)]
1302#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1303pub struct RelativeTimeInterval {
1304 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1305 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1306 pub custom_data: Option<CustomData>,
1307 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1311 pub duration: Option<i64>,
1312 pub start: i64,
1316}
1317#[derive(Debug, Clone, PartialEq)]
1320#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1321pub struct SalesTariffEntry {
1322 #[cfg_attr(feature = "serde", serde(rename = "consumptionCost"))]
1323 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1324 pub consumption_cost: Option<heapless::Vec<ConsumptionCost, 3usize>>,
1325 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1326 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1327 pub custom_data: Option<CustomData>,
1328 #[cfg_attr(feature = "serde", serde(rename = "ePriceLevel"))]
1332 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1333 pub e_price_level: Option<i64>,
1334 #[cfg_attr(feature = "serde", serde(rename = "relativeTimeInterval"))]
1335 pub relative_time_interval: RelativeTimeInterval,
1336}
1337#[derive(Debug, Clone, PartialEq)]
1341#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1342pub struct SalesTariff {
1343 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1344 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1345 pub custom_data: Option<CustomData>,
1346 pub id: i64,
1350 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
1354 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1355 pub num_e_price_levels: Option<i64>,
1356 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
1360 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1361 pub sales_tariff_description: Option<heapless::String<32usize>>,
1362 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
1363 pub sales_tariff_entry: heapless::Vec<SalesTariffEntry, 1024usize>,
1364}
1365#[cfg(feature = "alloc")]
1366#[derive(Debug, Clone, PartialEq)]
1370#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1371pub struct ChargingSchedule {
1372 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1373 pub charging_rate_unit: ChargingRateUnitEnum,
1374 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1375 pub charging_schedule_period: heapless::Vec<ChargingSchedulePeriod, 1024usize>,
1376 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1377 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1378 pub custom_data: Option<CustomData>,
1379 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1383 pub duration: Option<i64>,
1384 pub id: i64,
1386 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
1390 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1391 pub min_charging_rate: Option<f64>,
1392 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
1393 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1394 pub sales_tariff: Option<SalesTariff>,
1395 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
1399 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1400 pub start_schedule: Option<alloc::string::String>,
1401}
1402#[cfg(not(feature = "alloc"))]
1403#[derive(Debug, Clone, PartialEq)]
1407#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1408pub struct ChargingSchedule<
1409 const CHARGING_SCHEDULE_START_SCHEDULE_CAP: usize = 1024usize,
1410> {
1411 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1412 pub charging_rate_unit: ChargingRateUnitEnum,
1413 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1414 pub charging_schedule_period: heapless::Vec<ChargingSchedulePeriod, 1024usize>,
1415 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1416 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1417 pub custom_data: Option<CustomData>,
1418 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1422 pub duration: Option<i64>,
1423 pub id: i64,
1425 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
1429 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1430 pub min_charging_rate: Option<f64>,
1431 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
1432 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1433 pub sales_tariff: Option<SalesTariff>,
1434 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
1438 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1439 pub start_schedule: Option<heapless::String<CHARGING_SCHEDULE_START_SCHEDULE_CAP>>,
1440}
1441#[cfg(feature = "alloc")]
1442#[derive(Debug, Clone, PartialEq, Eq)]
1446#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1447pub struct MessageInfo {
1448 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1449 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1450 pub custom_data: Option<CustomData>,
1451 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1452 pub display: Option<Component>,
1453 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
1457 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1458 pub end_date_time: Option<alloc::string::String>,
1459 pub id: i64,
1463 pub message: MessageContent,
1464 pub priority: MessagePriorityEnum,
1465 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
1469 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1470 pub start_date_time: Option<alloc::string::String>,
1471 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1472 pub state: Option<MessageStateEnum>,
1473 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
1477 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1478 pub transaction_id: Option<heapless::String<36usize>>,
1479}
1480#[cfg(not(feature = "alloc"))]
1481#[derive(Debug, Clone, PartialEq, Eq)]
1485#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1486pub struct MessageInfo<
1487 const MESSAGE_INFO_END_DATE_TIME_CAP: usize = 1024usize,
1488 const MESSAGE_INFO_START_DATE_TIME_CAP: usize = 1024usize,
1489> {
1490 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1491 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1492 pub custom_data: Option<CustomData>,
1493 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1494 pub display: Option<Component>,
1495 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
1499 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1500 pub end_date_time: Option<heapless::String<MESSAGE_INFO_END_DATE_TIME_CAP>>,
1501 pub id: i64,
1505 pub message: MessageContent,
1506 pub priority: MessagePriorityEnum,
1507 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
1511 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1512 pub start_date_time: Option<heapless::String<MESSAGE_INFO_START_DATE_TIME_CAP>>,
1513 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1514 pub state: Option<MessageStateEnum>,
1515 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
1519 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1520 pub transaction_id: Option<heapless::String<36usize>>,
1521}
1522#[derive(Debug, Clone, PartialEq, Eq)]
1526#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1527pub struct ACChargingParameters {
1528 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1529 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1530 pub custom_data: Option<CustomData>,
1531 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
1535 pub energy_amount: i64,
1536 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
1540 pub ev_max_current: i64,
1541 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
1545 pub ev_max_voltage: i64,
1546 #[cfg_attr(feature = "serde", serde(rename = "evMinCurrent"))]
1550 pub ev_min_current: i64,
1551}
1552#[derive(Debug, Clone, PartialEq, Eq)]
1556#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1557pub struct DCChargingParameters {
1558 #[cfg_attr(feature = "serde", serde(rename = "bulkSoC"))]
1562 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1563 pub bulk_so_c: Option<i64>,
1564 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1565 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1566 pub custom_data: Option<CustomData>,
1567 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
1571 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1572 pub energy_amount: Option<i64>,
1573 #[cfg_attr(feature = "serde", serde(rename = "evEnergyCapacity"))]
1577 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1578 pub ev_energy_capacity: Option<i64>,
1579 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
1583 pub ev_max_current: i64,
1584 #[cfg_attr(feature = "serde", serde(rename = "evMaxPower"))]
1588 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1589 pub ev_max_power: Option<i64>,
1590 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
1594 pub ev_max_voltage: i64,
1595 #[cfg_attr(feature = "serde", serde(rename = "fullSoC"))]
1599 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1600 pub full_so_c: Option<i64>,
1601 #[cfg_attr(feature = "serde", serde(rename = "stateOfCharge"))]
1605 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1606 pub state_of_charge: Option<i64>,
1607}
1608#[derive(Debug, Clone, PartialEq, Eq)]
1612#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1613pub enum EnergyTransferModeEnum {
1614 DC,
1615 #[cfg_attr(feature = "serde", serde(rename = "AC_single_phase"))]
1616 ACsinglephase,
1617 #[cfg_attr(feature = "serde", serde(rename = "AC_two_phase"))]
1618 ACtwophase,
1619 #[cfg_attr(feature = "serde", serde(rename = "AC_three_phase"))]
1620 ACthreephase,
1621}
1622#[cfg(feature = "alloc")]
1623#[derive(Debug, Clone, PartialEq, Eq)]
1626#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1627pub struct ChargingNeeds {
1628 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
1629 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1630 pub ac_charging_parameters: Option<ACChargingParameters>,
1631 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1632 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1633 pub custom_data: Option<CustomData>,
1634 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
1635 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1636 pub dc_charging_parameters: Option<DCChargingParameters>,
1637 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
1641 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1642 pub departure_time: Option<alloc::string::String>,
1643 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
1644 pub requested_energy_transfer: EnergyTransferModeEnum,
1645}
1646#[cfg(not(feature = "alloc"))]
1647#[derive(Debug, Clone, PartialEq, Eq)]
1650#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1651pub struct ChargingNeeds<const CHARGING_NEEDS_DEPARTURE_TIME_CAP: usize = 1024usize> {
1652 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
1653 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1654 pub ac_charging_parameters: Option<ACChargingParameters>,
1655 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1656 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1657 pub custom_data: Option<CustomData>,
1658 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
1659 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1660 pub dc_charging_parameters: Option<DCChargingParameters>,
1661 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
1665 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1666 pub departure_time: Option<heapless::String<CHARGING_NEEDS_DEPARTURE_TIME_CAP>>,
1667 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
1668 pub requested_energy_transfer: EnergyTransferModeEnum,
1669}
1670#[derive(Debug, Clone, PartialEq, Eq)]
1672#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1673pub enum NotifyEVChargingNeedsStatusEnum {
1674 Accepted,
1675 Rejected,
1676 Processing,
1677}
1678#[derive(Debug, Clone, PartialEq, Eq)]
1680#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1681pub enum EventNotificationEnum {
1682 HardWiredNotification,
1683 HardWiredMonitor,
1684 PreconfiguredMonitor,
1685 CustomMonitor,
1686}
1687#[derive(Debug, Clone, PartialEq, Eq)]
1689#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1690pub enum EventTriggerEnum {
1691 Alerting,
1692 Delta,
1693 Periodic,
1694}
1695#[cfg(feature = "alloc")]
1696#[derive(Debug, Clone, PartialEq, Eq)]
1698#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1699pub struct EventData {
1700 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
1704 pub actual_value: heapless::String<2500usize>,
1705 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1707 pub cause: Option<i64>,
1708 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1710 pub cleared: Option<bool>,
1711 pub component: Component,
1712 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1713 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1714 pub custom_data: Option<CustomData>,
1715 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
1717 pub event_id: i64,
1718 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
1719 pub event_notification_type: EventNotificationEnum,
1720 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
1722 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1723 pub tech_code: Option<heapless::String<50usize>>,
1724 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
1726 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1727 pub tech_info: Option<heapless::String<500usize>>,
1728 pub timestamp: alloc::string::String,
1730 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
1732 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1733 pub transaction_id: Option<heapless::String<36usize>>,
1734 pub trigger: EventTriggerEnum,
1735 pub variable: Variable,
1736 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
1738 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1739 pub variable_monitoring_id: Option<i64>,
1740}
1741#[cfg(not(feature = "alloc"))]
1742#[derive(Debug, Clone, PartialEq, Eq)]
1744#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1745pub struct EventData<const EVENT_DATA_TIMESTAMP_CAP: usize = 1024usize> {
1746 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
1750 pub actual_value: heapless::String<2500usize>,
1751 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1753 pub cause: Option<i64>,
1754 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1756 pub cleared: Option<bool>,
1757 pub component: Component,
1758 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1759 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1760 pub custom_data: Option<CustomData>,
1761 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
1763 pub event_id: i64,
1764 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
1765 pub event_notification_type: EventNotificationEnum,
1766 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
1768 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1769 pub tech_code: Option<heapless::String<50usize>>,
1770 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
1772 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1773 pub tech_info: Option<heapless::String<500usize>>,
1774 pub timestamp: heapless::String<EVENT_DATA_TIMESTAMP_CAP>,
1776 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
1778 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1779 pub transaction_id: Option<heapless::String<36usize>>,
1780 pub trigger: EventTriggerEnum,
1781 pub variable: Variable,
1782 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
1784 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1785 pub variable_monitoring_id: Option<i64>,
1786}
1787#[derive(Debug, Clone, PartialEq, Eq)]
1789#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1790pub enum MonitorEnum {
1791 UpperThreshold,
1792 LowerThreshold,
1793 Delta,
1794 Periodic,
1795 PeriodicClockAligned,
1796}
1797#[derive(Debug, Clone, PartialEq)]
1799#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1800pub struct VariableMonitoring {
1801 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1802 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1803 pub custom_data: Option<CustomData>,
1804 pub id: i64,
1806 pub severity: i64,
1830 pub transaction: bool,
1832 pub r#type: MonitorEnum,
1833 pub value: f64,
1836}
1837#[cfg(feature = "alloc")]
1838#[derive(Debug, Clone, PartialEq)]
1840#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1841pub struct MonitoringData {
1842 pub component: Component,
1843 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1844 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1845 pub custom_data: Option<CustomData>,
1846 pub variable: Variable,
1847 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
1848 pub variable_monitoring: alloc::vec::Vec<VariableMonitoring>,
1849}
1850#[cfg(not(feature = "alloc"))]
1851#[derive(Debug, Clone, PartialEq)]
1853#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1854pub struct MonitoringData<
1855 const MONITORING_DATA_VARIABLE_MONITORING_CAP: usize = 16usize,
1856> {
1857 pub component: Component,
1858 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1859 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1860 pub custom_data: Option<CustomData>,
1861 pub variable: Variable,
1862 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
1863 pub variable_monitoring: heapless::Vec<
1864 VariableMonitoring,
1865 MONITORING_DATA_VARIABLE_MONITORING_CAP,
1866 >,
1867}
1868#[derive(Debug, Clone, PartialEq, Eq)]
1870#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1871pub enum MutabilityEnum {
1872 ReadOnly,
1873 WriteOnly,
1874 ReadWrite,
1875}
1876#[derive(Debug, Clone, PartialEq, Eq)]
1878#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1879pub struct VariableAttribute {
1880 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1882 pub constant: Option<bool>,
1883 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1884 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1885 pub custom_data: Option<CustomData>,
1886 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1887 pub mutability: Option<MutabilityEnum>,
1888 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1890 pub persistent: Option<bool>,
1891 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1892 pub r#type: Option<AttributeEnum>,
1893 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1897 pub value: Option<heapless::String<2500usize>>,
1898}
1899#[derive(Debug, Clone, PartialEq, Eq)]
1901#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1902pub enum DataEnum {
1903 #[cfg_attr(feature = "serde", serde(rename = "string"))]
1904 String,
1905 #[cfg_attr(feature = "serde", serde(rename = "decimal"))]
1906 Decimal,
1907 #[cfg_attr(feature = "serde", serde(rename = "integer"))]
1908 Integer,
1909 #[cfg_attr(feature = "serde", serde(rename = "dateTime"))]
1910 DateTime,
1911 #[cfg_attr(feature = "serde", serde(rename = "boolean"))]
1912 Boolean,
1913 OptionList,
1914 SequenceList,
1915 MemberList,
1916}
1917#[derive(Debug, Clone, PartialEq)]
1919#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1920pub struct VariableCharacteristics {
1921 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1922 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1923 pub custom_data: Option<CustomData>,
1924 #[cfg_attr(feature = "serde", serde(rename = "dataType"))]
1925 pub data_type: DataEnum,
1926 #[cfg_attr(feature = "serde", serde(rename = "maxLimit"))]
1928 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1929 pub max_limit: Option<f64>,
1930 #[cfg_attr(feature = "serde", serde(rename = "minLimit"))]
1932 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1933 pub min_limit: Option<f64>,
1934 #[cfg_attr(feature = "serde", serde(rename = "supportsMonitoring"))]
1936 pub supports_monitoring: bool,
1937 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1939 pub unit: Option<heapless::String<16usize>>,
1940 #[cfg_attr(feature = "serde", serde(rename = "valuesList"))]
1952 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1953 pub values_list: Option<heapless::String<1000usize>>,
1954}
1955#[derive(Debug, Clone, PartialEq)]
1957#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1958pub struct ReportData {
1959 pub component: Component,
1960 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1961 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1962 pub custom_data: Option<CustomData>,
1963 pub variable: Variable,
1964 #[cfg_attr(feature = "serde", serde(rename = "variableAttribute"))]
1965 pub variable_attribute: heapless::Vec<VariableAttribute, 4usize>,
1966 #[cfg_attr(feature = "serde", serde(rename = "variableCharacteristics"))]
1967 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1968 pub variable_characteristics: Option<VariableCharacteristics>,
1969}
1970#[derive(Debug, Clone, PartialEq, Eq)]
1973#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1974pub enum PublishFirmwareStatusEnum {
1975 Idle,
1976 DownloadScheduled,
1977 Downloading,
1978 Downloaded,
1979 Published,
1980 DownloadFailed,
1981 DownloadPaused,
1982 InvalidChecksum,
1983 ChecksumVerified,
1984 PublishFailed,
1985}
1986#[derive(Debug, Clone, PartialEq, Eq)]
1990#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1991pub enum ChargingProfileKindEnum {
1992 Absolute,
1993 Recurring,
1994 Relative,
1995}
1996#[derive(Debug, Clone, PartialEq, Eq)]
2000#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2001pub enum RecurrencyKindEnum {
2002 Daily,
2003 Weekly,
2004}
2005#[cfg(feature = "alloc")]
2006#[derive(Debug, Clone, PartialEq)]
2010#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2011pub struct ChargingProfile {
2012 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
2013 pub charging_profile_kind: ChargingProfileKindEnum,
2014 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
2015 pub charging_profile_purpose: ChargingProfilePurposeEnum,
2016 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
2017 pub charging_schedule: heapless::Vec<ChargingSchedule, 3usize>,
2018 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2019 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2020 pub custom_data: Option<CustomData>,
2021 pub id: i64,
2025 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
2026 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2027 pub recurrency_kind: Option<RecurrencyKindEnum>,
2028 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
2032 pub stack_level: i64,
2033 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
2035 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2036 pub transaction_id: Option<heapless::String<36usize>>,
2037 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
2041 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2042 pub valid_from: Option<alloc::string::String>,
2043 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
2047 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2048 pub valid_to: Option<alloc::string::String>,
2049}
2050#[cfg(not(feature = "alloc"))]
2051#[derive(Debug, Clone, PartialEq)]
2055#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2056pub struct ChargingProfile<
2057 const CHARGING_SCHEDULE_START_SCHEDULE_CAP: usize = 1024usize,
2058 const CHARGING_PROFILE_VALID_FROM_CAP: usize = 1024usize,
2059 const CHARGING_PROFILE_VALID_TO_CAP: usize = 1024usize,
2060> {
2061 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
2062 pub charging_profile_kind: ChargingProfileKindEnum,
2063 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
2064 pub charging_profile_purpose: ChargingProfilePurposeEnum,
2065 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
2066 pub charging_schedule: heapless::Vec<
2067 ChargingSchedule<CHARGING_SCHEDULE_START_SCHEDULE_CAP>,
2068 3usize,
2069 >,
2070 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2071 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2072 pub custom_data: Option<CustomData>,
2073 pub id: i64,
2077 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
2078 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2079 pub recurrency_kind: Option<RecurrencyKindEnum>,
2080 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
2084 pub stack_level: i64,
2085 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
2087 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2088 pub transaction_id: Option<heapless::String<36usize>>,
2089 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
2093 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2094 pub valid_from: Option<heapless::String<CHARGING_PROFILE_VALID_FROM_CAP>>,
2095 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
2099 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2100 pub valid_to: Option<heapless::String<CHARGING_PROFILE_VALID_TO_CAP>>,
2101}
2102#[derive(Debug, Clone, PartialEq, Eq)]
2104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2105pub enum RequestStartStopStatusEnum {
2106 Accepted,
2107 Rejected,
2108}
2109#[derive(Debug, Clone, PartialEq, Eq)]
2111#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2112pub enum ReservationUpdateStatusEnum {
2113 Expired,
2114 Removed,
2115}
2116#[derive(Debug, Clone, PartialEq, Eq)]
2118#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2119pub enum ConnectorEnum {
2120 #[cfg_attr(feature = "serde", serde(rename = "cCCS1"))]
2121 CCCS1,
2122 #[cfg_attr(feature = "serde", serde(rename = "cCCS2"))]
2123 CCCS2,
2124 #[cfg_attr(feature = "serde", serde(rename = "cG105"))]
2125 CG105,
2126 #[cfg_attr(feature = "serde", serde(rename = "cTesla"))]
2127 CTesla,
2128 #[cfg_attr(feature = "serde", serde(rename = "cType1"))]
2129 CType1,
2130 #[cfg_attr(feature = "serde", serde(rename = "cType2"))]
2131 CType2,
2132 #[cfg_attr(feature = "serde", serde(rename = "s309-1P-16A"))]
2133 S3091P16A,
2134 #[cfg_attr(feature = "serde", serde(rename = "s309-1P-32A"))]
2135 S3091P32A,
2136 #[cfg_attr(feature = "serde", serde(rename = "s309-3P-16A"))]
2137 S3093P16A,
2138 #[cfg_attr(feature = "serde", serde(rename = "s309-3P-32A"))]
2139 S3093P32A,
2140 #[cfg_attr(feature = "serde", serde(rename = "sBS1361"))]
2141 SBS1361,
2142 #[cfg_attr(feature = "serde", serde(rename = "sCEE-7-7"))]
2143 SCEE77,
2144 #[cfg_attr(feature = "serde", serde(rename = "sType2"))]
2145 SType2,
2146 #[cfg_attr(feature = "serde", serde(rename = "sType3"))]
2147 SType3,
2148 Other1PhMax16A,
2149 Other1PhOver16A,
2150 Other3Ph,
2151 Pan,
2152 #[cfg_attr(feature = "serde", serde(rename = "wInductive"))]
2153 WInductive,
2154 #[cfg_attr(feature = "serde", serde(rename = "wResonant"))]
2155 WResonant,
2156 Undetermined,
2157 Unknown,
2158}
2159#[derive(Debug, Clone, PartialEq, Eq)]
2161#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2162pub enum ReserveNowStatusEnum {
2163 Accepted,
2164 Faulted,
2165 Occupied,
2166 Rejected,
2167 Unavailable,
2168}
2169#[derive(Debug, Clone, PartialEq, Eq)]
2171#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2172pub enum ResetEnum {
2173 Immediate,
2174 OnIdle,
2175}
2176#[derive(Debug, Clone, PartialEq, Eq)]
2178#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2179pub enum ResetStatusEnum {
2180 Accepted,
2181 Rejected,
2182 Scheduled,
2183}
2184#[cfg(feature = "alloc")]
2185#[derive(Debug, Clone, PartialEq, Eq)]
2187#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2188pub struct AuthorizationData {
2189 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2190 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2191 pub custom_data: Option<CustomData>,
2192 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
2193 pub id_token: IdToken,
2194 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
2195 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2196 pub id_token_info: Option<IdTokenInfo>,
2197}
2198#[cfg(not(feature = "alloc"))]
2199#[derive(Debug, Clone, PartialEq, Eq)]
2201#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2202pub struct AuthorizationData<
2203 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 16usize,
2204 const ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP: usize = 1024usize,
2205 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 16usize,
2206> {
2207 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2208 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2209 pub custom_data: Option<CustomData>,
2210 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
2211 pub id_token: IdToken<ID_TOKEN_ADDITIONAL_INFO_CAP>,
2212 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
2213 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2214 pub id_token_info: Option<
2215 IdTokenInfo<
2216 ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP,
2217 ID_TOKEN_INFO_EVSE_ID_CAP,
2218 ID_TOKEN_ADDITIONAL_INFO_CAP,
2219 >,
2220 >,
2221}
2222#[derive(Debug, Clone, PartialEq, Eq)]
2224#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2225pub enum UpdateEnum {
2226 Differential,
2227 Full,
2228}
2229#[derive(Debug, Clone, PartialEq, Eq)]
2231#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2232pub enum SendLocalListStatusEnum {
2233 Accepted,
2234 Failed,
2235 VersionMismatch,
2236}
2237#[derive(Debug, Clone, PartialEq, Eq)]
2239#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2240pub enum ChargingProfileStatusEnum {
2241 Accepted,
2242 Rejected,
2243}
2244#[derive(Debug, Clone, PartialEq, Eq)]
2246#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2247pub enum DisplayMessageStatusEnum {
2248 Accepted,
2249 NotSupportedMessageFormat,
2250 Rejected,
2251 NotSupportedPriority,
2252 NotSupportedState,
2253 UnknownTransaction,
2254}
2255#[derive(Debug, Clone, PartialEq, Eq)]
2257#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2258pub enum MonitoringBaseEnum {
2259 All,
2260 FactoryDefault,
2261 HardWiredOnly,
2262}
2263#[derive(Debug, Clone, PartialEq, Eq)]
2267#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2268pub enum APNAuthenticationEnum {
2269 CHAP,
2270 NONE,
2271 PAP,
2272 AUTO,
2273}
2274#[derive(Debug, Clone, PartialEq, Eq)]
2280#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2281pub struct APN {
2282 pub apn: heapless::String<512usize>,
2286 #[cfg_attr(feature = "serde", serde(rename = "apnAuthentication"))]
2287 pub apn_authentication: APNAuthenticationEnum,
2288 #[cfg_attr(feature = "serde", serde(rename = "apnPassword"))]
2292 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2293 pub apn_password: Option<heapless::String<20usize>>,
2294 #[cfg_attr(feature = "serde", serde(rename = "apnUserName"))]
2298 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2299 pub apn_user_name: Option<heapless::String<20usize>>,
2300 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2301 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2302 pub custom_data: Option<CustomData>,
2303 #[cfg_attr(feature = "serde", serde(rename = "preferredNetwork"))]
2307 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2308 pub preferred_network: Option<heapless::String<6usize>>,
2309 #[cfg_attr(feature = "serde", serde(rename = "simPin"))]
2313 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2314 pub sim_pin: Option<i64>,
2315 #[cfg_attr(feature = "serde", serde(rename = "useOnlyPreferredNetwork"))]
2320 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2321 pub use_only_preferred_network: Option<bool>,
2322}
2323#[derive(Debug, Clone, PartialEq, Eq)]
2325#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2326pub enum OCPPInterfaceEnum {
2327 Wired0,
2328 Wired1,
2329 Wired2,
2330 Wired3,
2331 Wireless0,
2332 Wireless1,
2333 Wireless2,
2334 Wireless3,
2335}
2336#[derive(Debug, Clone, PartialEq, Eq)]
2340#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2341pub enum OCPPTransportEnum {
2342 JSON,
2343 SOAP,
2344}
2345#[derive(Debug, Clone, PartialEq, Eq)]
2349#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2350pub enum OCPPVersionEnum {
2351 OCPP12,
2352 OCPP15,
2353 OCPP16,
2354 OCPP20,
2355}
2356#[derive(Debug, Clone, PartialEq, Eq)]
2360#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2361pub enum VPNEnum {
2362 IKEv2,
2363 IPSec,
2364 L2TP,
2365 PPTP,
2366}
2367#[derive(Debug, Clone, PartialEq, Eq)]
2371#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2372pub struct VPN {
2373 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2374 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2375 pub custom_data: Option<CustomData>,
2376 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2380 pub group: Option<heapless::String<20usize>>,
2381 pub key: heapless::String<255usize>,
2385 pub password: heapless::String<20usize>,
2389 pub server: heapless::String<512usize>,
2393 pub r#type: VPNEnum,
2394 pub user: heapless::String<20usize>,
2398}
2399#[derive(Debug, Clone, PartialEq, Eq)]
2403#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2404pub struct NetworkConnectionProfile {
2405 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2406 pub apn: Option<APN>,
2407 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2408 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2409 pub custom_data: Option<CustomData>,
2410 #[cfg_attr(feature = "serde", serde(rename = "messageTimeout"))]
2414 pub message_timeout: i64,
2415 #[cfg_attr(feature = "serde", serde(rename = "ocppCsmsUrl"))]
2419 pub ocpp_csms_url: heapless::String<512usize>,
2420 #[cfg_attr(feature = "serde", serde(rename = "ocppInterface"))]
2421 pub ocpp_interface: OCPPInterfaceEnum,
2422 #[cfg_attr(feature = "serde", serde(rename = "ocppTransport"))]
2423 pub ocpp_transport: OCPPTransportEnum,
2424 #[cfg_attr(feature = "serde", serde(rename = "ocppVersion"))]
2425 pub ocpp_version: OCPPVersionEnum,
2426 #[cfg_attr(feature = "serde", serde(rename = "securityProfile"))]
2428 pub security_profile: i64,
2429 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2430 pub vpn: Option<VPN>,
2431}
2432#[derive(Debug, Clone, PartialEq, Eq)]
2434#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2435pub enum SetNetworkProfileStatusEnum {
2436 Accepted,
2437 Rejected,
2438 Failed,
2439}
2440#[derive(Debug, Clone, PartialEq)]
2442#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2443pub struct SetMonitoringData {
2444 pub component: Component,
2445 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2446 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2447 pub custom_data: Option<CustomData>,
2448 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2450 pub id: Option<i64>,
2451 pub severity: i64,
2475 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2477 pub transaction: Option<bool>,
2478 pub r#type: MonitorEnum,
2479 pub value: f64,
2482 pub variable: Variable,
2483}
2484#[derive(Debug, Clone, PartialEq, Eq)]
2486#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2487pub enum SetMonitoringStatusEnum {
2488 Accepted,
2489 UnknownComponent,
2490 UnknownVariable,
2491 UnsupportedMonitorType,
2492 Rejected,
2493 Duplicate,
2494}
2495#[derive(Debug, Clone, PartialEq, Eq)]
2497#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2498pub struct SetMonitoringResult {
2499 pub component: Component,
2500 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2501 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2502 pub custom_data: Option<CustomData>,
2503 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2505 pub id: Option<i64>,
2506 pub severity: i64,
2530 pub status: SetMonitoringStatusEnum,
2531 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
2532 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2533 pub status_info: Option<StatusInfo>,
2534 pub r#type: MonitorEnum,
2535 pub variable: Variable,
2536}
2537#[derive(Debug, Clone, PartialEq, Eq)]
2538#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2539pub struct SetVariableData {
2540 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2541 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2542 pub attribute_type: Option<AttributeEnum>,
2543 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
2547 pub attribute_value: heapless::String<1000usize>,
2548 pub component: Component,
2549 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2550 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2551 pub custom_data: Option<CustomData>,
2552 pub variable: Variable,
2553}
2554#[derive(Debug, Clone, PartialEq, Eq)]
2556#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2557pub enum SetVariableStatusEnum {
2558 Accepted,
2559 Rejected,
2560 UnknownComponent,
2561 UnknownVariable,
2562 NotSupportedAttributeType,
2563 RebootRequired,
2564}
2565#[derive(Debug, Clone, PartialEq, Eq)]
2566#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2567pub struct SetVariableResult {
2568 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
2569 pub attribute_status: SetVariableStatusEnum,
2570 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
2571 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2572 pub attribute_status_info: Option<StatusInfo>,
2573 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2574 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2575 pub attribute_type: Option<AttributeEnum>,
2576 pub component: Component,
2577 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2578 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2579 pub custom_data: Option<CustomData>,
2580 pub variable: Variable,
2581}
2582#[derive(Debug, Clone, PartialEq, Eq)]
2584#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2585pub enum ConnectorStatusEnum {
2586 Available,
2587 Occupied,
2588 Reserved,
2589 Unavailable,
2590 Faulted,
2591}
2592#[derive(Debug, Clone, PartialEq, Eq)]
2595#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2596pub enum TransactionEventEnum {
2597 Ended,
2598 Started,
2599 Updated,
2600}
2601#[derive(Debug, Clone, PartialEq, Eq)]
2606#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2607pub enum ChargingStateEnum {
2608 Charging,
2609 EVConnected,
2610 SuspendedEV,
2611 SuspendedEVSE,
2612 Idle,
2613}
2614#[derive(Debug, Clone, PartialEq, Eq)]
2618#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2619pub enum ReasonEnum {
2620 DeAuthorized,
2621 EmergencyStop,
2622 EnergyLimitReached,
2623 EVDisconnected,
2624 GroundFault,
2625 ImmediateReset,
2626 Local,
2627 LocalOutOfCredit,
2628 MasterPass,
2629 Other,
2630 OvercurrentFault,
2631 PowerLoss,
2632 PowerQuality,
2633 Reboot,
2634 Remote,
2635 SOCLimitReached,
2636 StoppedByEV,
2637 TimeLimitReached,
2638 Timeout,
2639}
2640#[derive(Debug, Clone, PartialEq, Eq)]
2643#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2644pub struct Transaction {
2645 #[cfg_attr(feature = "serde", serde(rename = "chargingState"))]
2646 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2647 pub charging_state: Option<ChargingStateEnum>,
2648 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2649 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2650 pub custom_data: Option<CustomData>,
2651 #[cfg_attr(feature = "serde", serde(rename = "remoteStartId"))]
2653 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2654 pub remote_start_id: Option<i64>,
2655 #[cfg_attr(feature = "serde", serde(rename = "stoppedReason"))]
2656 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2657 pub stopped_reason: Option<ReasonEnum>,
2658 #[cfg_attr(feature = "serde", serde(rename = "timeSpentCharging"))]
2662 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2663 pub time_spent_charging: Option<i64>,
2664 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
2666 pub transaction_id: heapless::String<36usize>,
2667}
2668#[derive(Debug, Clone, PartialEq, Eq)]
2670#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2671pub enum TriggerReasonEnum {
2672 Authorized,
2673 CablePluggedIn,
2674 ChargingRateChanged,
2675 ChargingStateChanged,
2676 Deauthorized,
2677 EnergyLimitReached,
2678 EVCommunicationLost,
2679 EVConnectTimeout,
2680 MeterValueClock,
2681 MeterValuePeriodic,
2682 TimeLimitReached,
2683 Trigger,
2684 UnlockCommand,
2685 StopAuthorized,
2686 EVDeparted,
2687 EVDetected,
2688 RemoteStop,
2689 RemoteStart,
2690 AbnormalCondition,
2691 SignedDataReceived,
2692 ResetCommand,
2693}
2694#[derive(Debug, Clone, PartialEq, Eq)]
2696#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2697pub enum MessageTriggerEnum {
2698 BootNotification,
2699 LogStatusNotification,
2700 FirmwareStatusNotification,
2701 Heartbeat,
2702 MeterValues,
2703 SignChargingStationCertificate,
2704 SignV2GCertificate,
2705 StatusNotification,
2706 TransactionEvent,
2707 SignCombinedCertificate,
2708 PublishFirmwareStatusNotification,
2709}
2710#[derive(Debug, Clone, PartialEq, Eq)]
2712#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2713pub enum TriggerMessageStatusEnum {
2714 Accepted,
2715 Rejected,
2716 NotImplemented,
2717}
2718#[derive(Debug, Clone, PartialEq, Eq)]
2720#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2721pub enum UnlockStatusEnum {
2722 Unlocked,
2723 UnlockFailed,
2724 OngoingAuthorizedTransaction,
2725 UnknownConnector,
2726}
2727#[derive(Debug, Clone, PartialEq, Eq)]
2729#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2730pub enum UnpublishFirmwareStatusEnum {
2731 DownloadOngoing,
2732 NoFirmware,
2733 Unpublished,
2734}
2735#[cfg(feature = "alloc")]
2736#[derive(Debug, Clone, PartialEq, Eq)]
2740#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2741pub struct Firmware {
2742 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2743 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2744 pub custom_data: Option<CustomData>,
2745 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
2749 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2750 pub install_date_time: Option<alloc::string::String>,
2751 pub location: heapless::String<512usize>,
2755 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
2759 pub retrieve_date_time: alloc::string::String,
2760 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2764 pub signature: Option<heapless::String<800usize>>,
2765 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
2768 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2769 pub signing_certificate: Option<heapless::String<5500usize>>,
2770}
2771#[cfg(not(feature = "alloc"))]
2772#[derive(Debug, Clone, PartialEq, Eq)]
2776#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2777pub struct Firmware<
2778 const FIRMWARE_INSTALL_DATE_TIME_CAP: usize = 1024usize,
2779 const FIRMWARE_RETRIEVE_DATE_TIME_CAP: usize = 1024usize,
2780> {
2781 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2782 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2783 pub custom_data: Option<CustomData>,
2784 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
2788 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2789 pub install_date_time: Option<heapless::String<FIRMWARE_INSTALL_DATE_TIME_CAP>>,
2790 pub location: heapless::String<512usize>,
2794 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
2798 pub retrieve_date_time: heapless::String<FIRMWARE_RETRIEVE_DATE_TIME_CAP>,
2799 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2803 pub signature: Option<heapless::String<800usize>>,
2804 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
2807 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2808 pub signing_certificate: Option<heapless::String<5500usize>>,
2809}
2810#[derive(Debug, Clone, PartialEq, Eq)]
2812#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2813pub enum UpdateFirmwareStatusEnum {
2814 Accepted,
2815 Rejected,
2816 AcceptedCanceled,
2817 InvalidCertificate,
2818 RevokedCertificate,
2819}