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)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub enum GenericStatusEnum {
14 Accepted,
15 Rejected,
16}
17#[cfg(feature = "alloc")]
18#[derive(Debug, Clone, PartialEq, Eq)]
20#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
21pub struct StatusInfo<CustomDataType = crate::NoCustomData> {
22 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
24 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
25 pub additional_info: Option<alloc::string::String>,
26 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
27 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
28 pub custom_data: Option<CustomDataType>,
29 #[cfg_attr(feature = "serde", serde(rename = "reasonCode"))]
31 pub reason_code: heapless::String<20usize>,
32}
33#[cfg(not(feature = "alloc"))]
34#[derive(Debug, Clone, PartialEq, Eq)]
36#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
37pub struct StatusInfo<
38 CustomDataType = crate::NoCustomData,
39 const STATUS_INFO_ADDITIONAL_INFO_CAP: usize = 1024usize,
40> {
41 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
43 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
44 pub additional_info: Option<heapless::String<STATUS_INFO_ADDITIONAL_INFO_CAP>>,
45 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
46 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
47 pub custom_data: Option<CustomDataType>,
48 #[cfg_attr(feature = "serde", serde(rename = "reasonCode"))]
50 pub reason_code: heapless::String<20usize>,
51}
52#[derive(Debug, Clone, PartialEq, Eq)]
53#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
54pub struct PeriodicEventStreamParams<CustomDataType = crate::NoCustomData> {
55 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
56 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
57 pub custom_data: Option<CustomDataType>,
58 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
60 pub interval: Option<i64>,
61 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
63 pub values: Option<i64>,
64}
65#[derive(Debug, Clone, PartialEq, Eq)]
67#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
68pub struct AdditionalInfo<CustomDataType = crate::NoCustomData> {
69 #[cfg_attr(feature = "serde", serde(rename = "additionalIdToken"))]
71 pub additional_id_token: heapless::String<255usize>,
72 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
73 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
74 pub custom_data: Option<CustomDataType>,
75 pub r#type: heapless::String<50usize>,
77}
78#[cfg(feature = "alloc")]
79#[derive(Debug, Clone, PartialEq, Eq)]
81#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
82pub struct IdToken<CustomDataType = crate::NoCustomData> {
83 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
84 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
85 pub additional_info: Option<alloc::vec::Vec<AdditionalInfo<CustomDataType>>>,
86 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
87 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
88 pub custom_data: Option<CustomDataType>,
89 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
91 pub id_token: heapless::String<255usize>,
92 pub r#type: heapless::String<20usize>,
94}
95#[cfg(not(feature = "alloc"))]
96#[derive(Debug, Clone, PartialEq, Eq)]
98#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
99pub struct IdToken<
100 CustomDataType = crate::NoCustomData,
101 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 8usize,
102> {
103 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
104 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
105 pub additional_info: Option<
106 heapless::Vec<AdditionalInfo<CustomDataType>, ID_TOKEN_ADDITIONAL_INFO_CAP>,
107 >,
108 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
109 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
110 pub custom_data: Option<CustomDataType>,
111 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
113 pub id_token: heapless::String<255usize>,
114 pub r#type: heapless::String<20usize>,
116}
117#[derive(Debug, Clone, PartialEq, Eq)]
119#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
120pub enum HashAlgorithmEnum {
121 SHA256,
122 SHA384,
123 SHA512,
124}
125#[cfg(feature = "alloc")]
126#[derive(Debug, Clone, PartialEq, Eq)]
128#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
129pub struct OCSPRequestData<CustomDataType = crate::NoCustomData> {
130 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
131 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
132 pub custom_data: Option<CustomDataType>,
133 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
134 pub hash_algorithm: HashAlgorithmEnum,
135 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
139 pub issuer_key_hash: heapless::String<128usize>,
140 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
145 pub issuer_name_hash: heapless::String<128usize>,
146 #[cfg_attr(feature = "serde", serde(rename = "responderURL"))]
148 pub responder_u_r_l: alloc::string::String,
149 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
153 pub serial_number: heapless::String<40usize>,
154}
155#[cfg(not(feature = "alloc"))]
156#[derive(Debug, Clone, PartialEq, Eq)]
158#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
159pub struct OCSPRequestData<
160 CustomDataType = crate::NoCustomData,
161 const O_C_S_P_REQUEST_DATA_RESPONDER_U_R_L_CAP: usize = 1024usize,
162> {
163 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
164 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
165 pub custom_data: Option<CustomDataType>,
166 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
167 pub hash_algorithm: HashAlgorithmEnum,
168 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
172 pub issuer_key_hash: heapless::String<128usize>,
173 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
178 pub issuer_name_hash: heapless::String<128usize>,
179 #[cfg_attr(feature = "serde", serde(rename = "responderURL"))]
181 pub responder_u_r_l: heapless::String<O_C_S_P_REQUEST_DATA_RESPONDER_U_R_L_CAP>,
182 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
186 pub serial_number: heapless::String<40usize>,
187}
188#[derive(Debug, Clone, PartialEq, Eq)]
189#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
190pub enum EnergyTransferModeEnum {
191 #[cfg_attr(feature = "serde", serde(rename = "AC_single_phase"))]
192 ACsinglephase,
193 #[cfg_attr(feature = "serde", serde(rename = "AC_two_phase"))]
194 ACtwophase,
195 #[cfg_attr(feature = "serde", serde(rename = "AC_three_phase"))]
196 ACthreephase,
197 DC,
198 #[cfg_attr(feature = "serde", serde(rename = "AC_BPT"))]
199 ACBPT,
200 #[cfg_attr(feature = "serde", serde(rename = "AC_BPT_DER"))]
201 ACBPTDER,
202 #[cfg_attr(feature = "serde", serde(rename = "AC_DER"))]
203 ACDER,
204 #[cfg_attr(feature = "serde", serde(rename = "DC_BPT"))]
205 DCBPT,
206 #[cfg_attr(feature = "serde", serde(rename = "DC_ACDP"))]
207 DCACDP,
208 #[cfg_attr(feature = "serde", serde(rename = "DC_ACDP_BPT"))]
209 DCACDPBPT,
210 WPT,
211}
212#[derive(Debug, Clone, PartialEq, Eq)]
216#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
217pub enum AuthorizeCertificateStatusEnum {
218 Accepted,
219 SignatureError,
220 CertificateExpired,
221 CertificateRevoked,
222 NoCertificateAvailable,
223 CertChainError,
224 ContractCancelled,
225}
226#[derive(Debug, Clone, PartialEq, Eq)]
228#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
229pub enum MessageFormatEnum {
230 ASCII,
231 HTML,
232 URI,
233 UTF8,
234 QRCODE,
235}
236#[cfg(feature = "alloc")]
237#[derive(Debug, Clone, PartialEq, Eq)]
239#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
240pub struct MessageContent<CustomDataType = crate::NoCustomData> {
241 pub content: alloc::string::String,
245 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
246 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
247 pub custom_data: Option<CustomDataType>,
248 pub format: MessageFormatEnum,
249 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
251 pub language: Option<heapless::String<8usize>>,
252}
253#[cfg(not(feature = "alloc"))]
254#[derive(Debug, Clone, PartialEq, Eq)]
256#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
257pub struct MessageContent<
258 CustomDataType = crate::NoCustomData,
259 const MESSAGE_CONTENT_CONTENT_CAP: usize = 1024usize,
260> {
261 pub content: heapless::String<MESSAGE_CONTENT_CONTENT_CAP>,
265 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
266 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
267 pub custom_data: Option<CustomDataType>,
268 pub format: MessageFormatEnum,
269 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
271 pub language: Option<heapless::String<8usize>>,
272}
273#[derive(Debug, Clone, PartialEq, Eq)]
275#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
276pub enum AuthorizationStatusEnum {
277 Accepted,
278 Blocked,
279 ConcurrentTx,
280 Expired,
281 Invalid,
282 NoCredit,
283 NotAllowedTypeEVSE,
284 NotAtThisLocation,
285 NotAtThisTime,
286 Unknown,
287}
288#[cfg(feature = "alloc")]
289#[derive(Debug, Clone, PartialEq, Eq)]
292#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
293pub struct IdTokenInfo<CustomDataType = crate::NoCustomData> {
294 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
296 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
297 pub cache_expiry_date_time: Option<crate::OcppTimestamp>,
298 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
300 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
301 pub charging_priority: Option<i64>,
302 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
303 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
304 pub custom_data: Option<CustomDataType>,
305 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
307 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
308 pub evse_id: Option<alloc::vec::Vec<i64>>,
309 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
310 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
311 pub group_id_token: Option<IdToken<CustomDataType>>,
312 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
314 pub language1: Option<heapless::String<8usize>>,
315 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
317 pub language2: Option<heapless::String<8usize>>,
318 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
319 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
320 pub personal_message: Option<MessageContent<CustomDataType>>,
321 pub status: AuthorizationStatusEnum,
322}
323#[cfg(not(feature = "alloc"))]
324#[derive(Debug, Clone, PartialEq, Eq)]
327#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
328pub struct IdTokenInfo<
329 CustomDataType = crate::NoCustomData,
330 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 8usize,
331 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 8usize,
332 const MESSAGE_CONTENT_CONTENT_CAP: usize = 1024usize,
333> {
334 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
336 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
337 pub cache_expiry_date_time: Option<crate::OcppTimestamp>,
338 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
340 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
341 pub charging_priority: Option<i64>,
342 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
343 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
344 pub custom_data: Option<CustomDataType>,
345 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
347 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
348 pub evse_id: Option<heapless::Vec<i64, ID_TOKEN_INFO_EVSE_ID_CAP>>,
349 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
350 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
351 pub group_id_token: Option<IdToken<CustomDataType, ID_TOKEN_ADDITIONAL_INFO_CAP>>,
352 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
354 pub language1: Option<heapless::String<8usize>>,
355 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
357 pub language2: Option<heapless::String<8usize>>,
358 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
359 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
360 pub personal_message: Option<
361 MessageContent<CustomDataType, MESSAGE_CONTENT_CONTENT_CAP>,
362 >,
363 pub status: AuthorizationStatusEnum,
364}
365#[derive(Debug, Clone, PartialEq, Eq)]
366#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
367pub enum DayOfWeekEnum {
368 Monday,
369 Tuesday,
370 Wednesday,
371 Thursday,
372 Friday,
373 Saturday,
374 Sunday,
375}
376#[derive(Debug, Clone, PartialEq, Eq)]
378#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
379pub enum EvseKindEnum {
380 AC,
381 DC,
382}
383#[derive(Debug, Clone, PartialEq)]
394#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
395pub struct TariffConditions<CustomDataType = crate::NoCustomData> {
396 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
397 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
398 pub custom_data: Option<CustomDataType>,
399 #[cfg_attr(feature = "serde", serde(rename = "dayOfWeek"))]
401 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
402 pub day_of_week: Option<heapless::Vec<DayOfWeekEnum, 7usize>>,
403 #[cfg_attr(feature = "serde", serde(rename = "endTimeOfDay"))]
407 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
408 pub end_time_of_day: Option<crate::OcppTimeOfDay>,
409 #[cfg_attr(feature = "serde", serde(rename = "evseKind"))]
410 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
411 pub evse_kind: Option<EvseKindEnum>,
412 #[cfg_attr(feature = "serde", serde(rename = "maxChargingTime"))]
416 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
417 pub max_charging_time: Option<i64>,
418 #[cfg_attr(feature = "serde", serde(rename = "maxCurrent"))]
422 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
423 pub max_current: Option<f64>,
424 #[cfg_attr(feature = "serde", serde(rename = "maxEnergy"))]
427 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
428 pub max_energy: Option<f64>,
429 #[cfg_attr(feature = "serde", serde(rename = "maxIdleTime"))]
433 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
434 pub max_idle_time: Option<i64>,
435 #[cfg_attr(feature = "serde", serde(rename = "maxPower"))]
440 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
441 pub max_power: Option<f64>,
442 #[cfg_attr(feature = "serde", serde(rename = "maxTime"))]
446 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
447 pub max_time: Option<i64>,
448 #[cfg_attr(feature = "serde", serde(rename = "minChargingTime"))]
452 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
453 pub min_charging_time: Option<i64>,
454 #[cfg_attr(feature = "serde", serde(rename = "minCurrent"))]
458 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
459 pub min_current: Option<f64>,
460 #[cfg_attr(feature = "serde", serde(rename = "minEnergy"))]
463 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
464 pub min_energy: Option<f64>,
465 #[cfg_attr(feature = "serde", serde(rename = "minIdleTime"))]
469 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
470 pub min_idle_time: Option<i64>,
471 #[cfg_attr(feature = "serde", serde(rename = "minPower"))]
476 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
477 pub min_power: Option<f64>,
478 #[cfg_attr(feature = "serde", serde(rename = "minTime"))]
482 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
483 pub min_time: Option<i64>,
484 #[cfg_attr(feature = "serde", serde(rename = "startTimeOfDay"))]
489 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
490 pub start_time_of_day: Option<crate::OcppTimeOfDay>,
491 #[cfg_attr(feature = "serde", serde(rename = "validFromDate"))]
497 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
498 pub valid_from_date: Option<crate::OcppDate>,
499 #[cfg_attr(feature = "serde", serde(rename = "validToDate"))]
502 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
503 pub valid_to_date: Option<crate::OcppDate>,
504}
505#[derive(Debug, Clone, PartialEq)]
507#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
508pub struct TariffTimePrice<CustomDataType = crate::NoCustomData> {
509 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
510 pub conditions: Option<TariffConditions<CustomDataType>>,
511 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
512 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
513 pub custom_data: Option<CustomDataType>,
514 #[cfg_attr(feature = "serde", serde(rename = "priceMinute"))]
516 pub price_minute: f64,
517}
518#[derive(Debug, Clone, PartialEq)]
520#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
521pub struct TaxRate<CustomDataType = crate::NoCustomData> {
522 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
523 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
524 pub custom_data: Option<CustomDataType>,
525 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
530 pub stack: Option<i64>,
531 pub tax: f64,
533 pub r#type: heapless::String<20usize>,
535}
536#[cfg(feature = "alloc")]
537#[derive(Debug, Clone, PartialEq)]
539#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
540pub struct TariffTime<CustomDataType = crate::NoCustomData> {
541 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
542 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
543 pub custom_data: Option<CustomDataType>,
544 pub prices: alloc::vec::Vec<TariffTimePrice<CustomDataType>>,
545 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
546 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
547 pub tax_rates: Option<heapless::Vec<TaxRate<CustomDataType>, 5usize>>,
548}
549#[cfg(not(feature = "alloc"))]
550#[derive(Debug, Clone, PartialEq)]
552#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
553pub struct TariffTime<
554 CustomDataType = crate::NoCustomData,
555 const TARIFF_TIME_PRICES_CAP: usize = 8usize,
556> {
557 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
558 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
559 pub custom_data: Option<CustomDataType>,
560 pub prices: heapless::Vec<TariffTimePrice<CustomDataType>, TARIFF_TIME_PRICES_CAP>,
561 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
562 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
563 pub tax_rates: Option<heapless::Vec<TaxRate<CustomDataType>, 5usize>>,
564}
565#[derive(Debug, Clone, PartialEq)]
567#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
568pub struct TariffEnergyPrice<CustomDataType = crate::NoCustomData> {
569 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
570 pub conditions: Option<TariffConditions<CustomDataType>>,
571 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
572 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
573 pub custom_data: Option<CustomDataType>,
574 #[cfg_attr(feature = "serde", serde(rename = "priceKwh"))]
576 pub price_kwh: f64,
577}
578#[cfg(feature = "alloc")]
579#[derive(Debug, Clone, PartialEq)]
581#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
582pub struct TariffEnergy<CustomDataType = crate::NoCustomData> {
583 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
584 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
585 pub custom_data: Option<CustomDataType>,
586 pub prices: alloc::vec::Vec<TariffEnergyPrice<CustomDataType>>,
587 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
588 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
589 pub tax_rates: Option<heapless::Vec<TaxRate<CustomDataType>, 5usize>>,
590}
591#[cfg(not(feature = "alloc"))]
592#[derive(Debug, Clone, PartialEq)]
594#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
595pub struct TariffEnergy<
596 CustomDataType = crate::NoCustomData,
597 const TARIFF_ENERGY_PRICES_CAP: usize = 8usize,
598> {
599 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
600 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
601 pub custom_data: Option<CustomDataType>,
602 pub prices: heapless::Vec<
603 TariffEnergyPrice<CustomDataType>,
604 TARIFF_ENERGY_PRICES_CAP,
605 >,
606 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
607 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
608 pub tax_rates: Option<heapless::Vec<TaxRate<CustomDataType>, 5usize>>,
609}
610#[derive(Debug, Clone, PartialEq, Eq)]
617#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
618pub struct TariffConditionsFixed<CustomDataType = crate::NoCustomData> {
619 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
620 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
621 pub custom_data: Option<CustomDataType>,
622 #[cfg_attr(feature = "serde", serde(rename = "dayOfWeek"))]
624 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
625 pub day_of_week: Option<heapless::Vec<DayOfWeekEnum, 7usize>>,
626 #[cfg_attr(feature = "serde", serde(rename = "endTimeOfDay"))]
630 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
631 pub end_time_of_day: Option<crate::OcppTimeOfDay>,
632 #[cfg_attr(feature = "serde", serde(rename = "evseKind"))]
633 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
634 pub evse_kind: Option<EvseKindEnum>,
635 #[cfg_attr(feature = "serde", serde(rename = "paymentBrand"))]
638 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
639 pub payment_brand: Option<heapless::String<20usize>>,
640 #[cfg_attr(feature = "serde", serde(rename = "paymentRecognition"))]
643 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
644 pub payment_recognition: Option<heapless::String<20usize>>,
645 #[cfg_attr(feature = "serde", serde(rename = "startTimeOfDay"))]
650 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
651 pub start_time_of_day: Option<crate::OcppTimeOfDay>,
652 #[cfg_attr(feature = "serde", serde(rename = "validFromDate"))]
658 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
659 pub valid_from_date: Option<crate::OcppDate>,
660 #[cfg_attr(feature = "serde", serde(rename = "validToDate"))]
663 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
664 pub valid_to_date: Option<crate::OcppDate>,
665}
666#[derive(Debug, Clone, PartialEq)]
668#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
669pub struct TariffFixedPrice<CustomDataType = crate::NoCustomData> {
670 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
671 pub conditions: Option<TariffConditionsFixed<CustomDataType>>,
672 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
673 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
674 pub custom_data: Option<CustomDataType>,
675 #[cfg_attr(feature = "serde", serde(rename = "priceFixed"))]
677 pub price_fixed: f64,
678}
679#[cfg(feature = "alloc")]
680#[derive(Debug, Clone, PartialEq)]
681#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
682pub struct TariffFixed<CustomDataType = crate::NoCustomData> {
683 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
684 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
685 pub custom_data: Option<CustomDataType>,
686 pub prices: alloc::vec::Vec<TariffFixedPrice<CustomDataType>>,
687 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
688 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
689 pub tax_rates: Option<heapless::Vec<TaxRate<CustomDataType>, 5usize>>,
690}
691#[cfg(not(feature = "alloc"))]
692#[derive(Debug, Clone, PartialEq)]
693#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
694pub struct TariffFixed<
695 CustomDataType = crate::NoCustomData,
696 const TARIFF_FIXED_PRICES_CAP: usize = 8usize,
697> {
698 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
699 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
700 pub custom_data: Option<CustomDataType>,
701 pub prices: heapless::Vec<TariffFixedPrice<CustomDataType>, TARIFF_FIXED_PRICES_CAP>,
702 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
703 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
704 pub tax_rates: Option<heapless::Vec<TaxRate<CustomDataType>, 5usize>>,
705}
706#[derive(Debug, Clone, PartialEq)]
708#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
709pub struct Price<CustomDataType = crate::NoCustomData> {
710 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
711 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
712 pub custom_data: Option<CustomDataType>,
713 #[cfg_attr(feature = "serde", serde(rename = "exclTax"))]
715 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
716 pub excl_tax: Option<f64>,
717 #[cfg_attr(feature = "serde", serde(rename = "inclTax"))]
719 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
720 pub incl_tax: Option<f64>,
721 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
722 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
723 pub tax_rates: Option<heapless::Vec<TaxRate<CustomDataType>, 5usize>>,
724}
725#[cfg(feature = "alloc")]
726#[derive(Debug, Clone, PartialEq)]
737#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
738pub struct Tariff<CustomDataType = crate::NoCustomData> {
739 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
740 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
741 pub charging_time: Option<TariffTime<CustomDataType>>,
742 pub currency: heapless::String<3usize>,
744 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
745 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
746 pub custom_data: Option<CustomDataType>,
747 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
748 pub description: Option<heapless::Vec<MessageContent<CustomDataType>, 10usize>>,
749 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
750 pub energy: Option<TariffEnergy<CustomDataType>>,
751 #[cfg_attr(feature = "serde", serde(rename = "fixedFee"))]
752 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
753 pub fixed_fee: Option<TariffFixed<CustomDataType>>,
754 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
755 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
756 pub idle_time: Option<TariffTime<CustomDataType>>,
757 #[cfg_attr(feature = "serde", serde(rename = "maxCost"))]
758 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
759 pub max_cost: Option<Price<CustomDataType>>,
760 #[cfg_attr(feature = "serde", serde(rename = "minCost"))]
761 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
762 pub min_cost: Option<Price<CustomDataType>>,
763 #[cfg_attr(feature = "serde", serde(rename = "reservationFixed"))]
764 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
765 pub reservation_fixed: Option<TariffFixed<CustomDataType>>,
766 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
767 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
768 pub reservation_time: Option<TariffTime<CustomDataType>>,
769 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
771 pub tariff_id: heapless::String<60usize>,
772 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
774 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
775 pub valid_from: Option<crate::OcppTimestamp>,
776}
777#[cfg(not(feature = "alloc"))]
778#[derive(Debug, Clone, PartialEq)]
789#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
790pub struct Tariff<
791 CustomDataType = crate::NoCustomData,
792 const TARIFF_TIME_PRICES_CAP: usize = 8usize,
793 const MESSAGE_CONTENT_CONTENT_CAP: usize = 1024usize,
794 const TARIFF_ENERGY_PRICES_CAP: usize = 8usize,
795 const TARIFF_FIXED_PRICES_CAP: usize = 8usize,
796> {
797 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
798 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
799 pub charging_time: Option<TariffTime<CustomDataType, TARIFF_TIME_PRICES_CAP>>,
800 pub currency: heapless::String<3usize>,
802 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
803 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
804 pub custom_data: Option<CustomDataType>,
805 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
806 pub description: Option<
807 heapless::Vec<
808 MessageContent<CustomDataType, MESSAGE_CONTENT_CONTENT_CAP>,
809 10usize,
810 >,
811 >,
812 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
813 pub energy: Option<TariffEnergy<CustomDataType, TARIFF_ENERGY_PRICES_CAP>>,
814 #[cfg_attr(feature = "serde", serde(rename = "fixedFee"))]
815 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
816 pub fixed_fee: Option<TariffFixed<CustomDataType, TARIFF_FIXED_PRICES_CAP>>,
817 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
818 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
819 pub idle_time: Option<TariffTime<CustomDataType, TARIFF_TIME_PRICES_CAP>>,
820 #[cfg_attr(feature = "serde", serde(rename = "maxCost"))]
821 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
822 pub max_cost: Option<Price<CustomDataType>>,
823 #[cfg_attr(feature = "serde", serde(rename = "minCost"))]
824 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
825 pub min_cost: Option<Price<CustomDataType>>,
826 #[cfg_attr(feature = "serde", serde(rename = "reservationFixed"))]
827 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
828 pub reservation_fixed: Option<TariffFixed<CustomDataType, TARIFF_FIXED_PRICES_CAP>>,
829 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
830 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
831 pub reservation_time: Option<TariffTime<CustomDataType, TARIFF_TIME_PRICES_CAP>>,
832 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
834 pub tariff_id: heapless::String<60usize>,
835 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
837 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
838 pub valid_from: Option<crate::OcppTimestamp>,
839}
840#[derive(Debug, Clone, PartialEq)]
841#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
842pub struct BatteryData<CustomDataType = crate::NoCustomData> {
843 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
844 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
845 pub custom_data: Option<CustomDataType>,
846 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
848 pub evse_id: i64,
849 #[cfg_attr(feature = "serde", serde(rename = "productionDate"))]
851 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
852 pub production_date: Option<crate::OcppTimestamp>,
853 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
855 pub serial_number: heapless::String<50usize>,
856 #[cfg_attr(feature = "serde", serde(rename = "soC"))]
858 pub so_c: f64,
859 #[cfg_attr(feature = "serde", serde(rename = "soH"))]
861 pub so_h: f64,
862 #[cfg_attr(feature = "serde", serde(rename = "vendorInfo"))]
864 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
865 pub vendor_info: Option<heapless::String<500usize>>,
866}
867#[derive(Debug, Clone, PartialEq, Eq)]
869#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
870pub enum BatterySwapEventEnum {
871 BatteryIn,
872 BatteryOut,
873 BatteryOutTimeout,
874}
875#[derive(Debug, Clone, PartialEq, Eq)]
877#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
878pub struct Modem<CustomDataType = crate::NoCustomData> {
879 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
880 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
881 pub custom_data: Option<CustomDataType>,
882 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
884 pub iccid: Option<heapless::String<20usize>>,
885 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
887 pub imsi: Option<heapless::String<20usize>>,
888}
889#[derive(Debug, Clone, PartialEq, Eq)]
891#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
892pub struct ChargingStation<CustomDataType = crate::NoCustomData> {
893 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
894 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
895 pub custom_data: Option<CustomDataType>,
896 #[cfg_attr(feature = "serde", serde(rename = "firmwareVersion"))]
898 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
899 pub firmware_version: Option<heapless::String<50usize>>,
900 pub model: heapless::String<20usize>,
902 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
903 pub modem: Option<Modem<CustomDataType>>,
904 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
906 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
907 pub serial_number: Option<heapless::String<25usize>>,
908 #[cfg_attr(feature = "serde", serde(rename = "vendorName"))]
910 pub vendor_name: heapless::String<50usize>,
911}
912#[derive(Debug, Clone, PartialEq, Eq)]
914#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
915pub enum BootReasonEnum {
916 ApplicationReset,
917 FirmwareUpdate,
918 LocalReset,
919 PowerUp,
920 RemoteReset,
921 ScheduledReset,
922 Triggered,
923 Unknown,
924 Watchdog,
925}
926#[derive(Debug, Clone, PartialEq, Eq)]
929#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
930pub enum RegistrationStatusEnum {
931 Accepted,
932 Pending,
933 Rejected,
934}
935#[derive(Debug, Clone, PartialEq, Eq)]
937#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
938pub enum CancelReservationStatusEnum {
939 Accepted,
940 Rejected,
941}
942#[derive(Debug, Clone, PartialEq, Eq)]
944#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
945pub enum CertificateSigningUseEnum {
946 ChargingStationCertificate,
947 V2GCertificate,
948 V2G20Certificate,
949}
950#[derive(Debug, Clone, PartialEq, Eq)]
952#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
953pub enum CertificateSignedStatusEnum {
954 Accepted,
955 Rejected,
956}
957#[derive(Debug, Clone, PartialEq, Eq)]
959#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
960pub struct EVSE<CustomDataType = crate::NoCustomData> {
961 #[cfg_attr(feature = "serde", serde(rename = "connectorId"))]
963 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
964 pub connector_id: Option<i64>,
965 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
966 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
967 pub custom_data: Option<CustomDataType>,
968 pub id: i64,
970}
971#[derive(Debug, Clone, PartialEq, Eq)]
973#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
974pub enum OperationalStatusEnum {
975 Inoperative,
976 Operative,
977}
978#[derive(Debug, Clone, PartialEq, Eq)]
980#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
981pub enum ChangeAvailabilityStatusEnum {
982 Accepted,
983 Rejected,
984 Scheduled,
985}
986#[derive(Debug, Clone, PartialEq, Eq)]
988#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
989pub enum TariffChangeStatusEnum {
990 Accepted,
991 Rejected,
992 TooManyElements,
993 ConditionNotSupported,
994 TxNotFound,
995 NoCurrencyChange,
996}
997#[derive(Debug, Clone, PartialEq, Eq)]
999#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1000pub enum ClearCacheStatusEnum {
1001 Accepted,
1002 Rejected,
1003}
1004#[derive(Debug, Clone, PartialEq, Eq)]
1006#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1007pub enum ChargingProfilePurposeEnum {
1008 ChargingStationExternalConstraints,
1009 ChargingStationMaxProfile,
1010 TxDefaultProfile,
1011 TxProfile,
1012 PriorityCharging,
1013 LocalGeneration,
1014}
1015#[derive(Debug, Clone, PartialEq, Eq)]
1017#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1018pub struct ClearChargingProfile<CustomDataType = crate::NoCustomData> {
1019 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
1020 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1021 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
1022 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1023 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1024 pub custom_data: Option<CustomDataType>,
1025 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1027 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1028 pub evse_id: Option<i64>,
1029 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
1031 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1032 pub stack_level: Option<i64>,
1033}
1034#[derive(Debug, Clone, PartialEq, Eq)]
1036#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1037pub enum ClearChargingProfileStatusEnum {
1038 Accepted,
1039 Unknown,
1040}
1041#[derive(Debug, Clone, PartialEq, Eq)]
1043#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1044pub enum DERControlEnum {
1045 EnterService,
1046 FreqDroop,
1047 FreqWatt,
1048 FixedPFAbsorb,
1049 FixedPFInject,
1050 FixedVar,
1051 Gradients,
1052 HFMustTrip,
1053 HFMayTrip,
1054 HVMustTrip,
1055 HVMomCess,
1056 HVMayTrip,
1057 LimitMaxDischarge,
1058 LFMustTrip,
1059 LVMustTrip,
1060 LVMomCess,
1061 LVMayTrip,
1062 PowerMonitoringMustTrip,
1063 VoltVar,
1064 VoltWatt,
1065 WattPF,
1066 WattVar,
1067}
1068#[derive(Debug, Clone, PartialEq, Eq)]
1070#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1071pub enum DERControlStatusEnum {
1072 Accepted,
1073 Rejected,
1074 NotSupported,
1075 NotFound,
1076}
1077#[derive(Debug, Clone, PartialEq, Eq)]
1079#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1080pub enum ClearMessageStatusEnum {
1081 Accepted,
1082 Unknown,
1083 Rejected,
1084}
1085#[derive(Debug, Clone, PartialEq, Eq)]
1086#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1087pub enum TariffClearStatusEnum {
1088 Accepted,
1089 Rejected,
1090 NoTariff,
1091}
1092#[cfg(feature = "alloc")]
1093#[derive(Debug, Clone, PartialEq, Eq)]
1094#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1095pub struct ClearTariffsResult<CustomDataType = crate::NoCustomData> {
1096 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1097 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1098 pub custom_data: Option<CustomDataType>,
1099 pub status: TariffClearStatusEnum,
1100 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
1101 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1102 pub status_info: Option<StatusInfo<CustomDataType>>,
1103 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
1105 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1106 pub tariff_id: Option<heapless::String<60usize>>,
1107}
1108#[cfg(not(feature = "alloc"))]
1109#[derive(Debug, Clone, PartialEq, Eq)]
1110#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1111pub struct ClearTariffsResult<
1112 CustomDataType = crate::NoCustomData,
1113 const STATUS_INFO_ADDITIONAL_INFO_CAP: usize = 1024usize,
1114> {
1115 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1116 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1117 pub custom_data: Option<CustomDataType>,
1118 pub status: TariffClearStatusEnum,
1119 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
1120 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1121 pub status_info: Option<StatusInfo<CustomDataType, STATUS_INFO_ADDITIONAL_INFO_CAP>>,
1122 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
1124 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1125 pub tariff_id: Option<heapless::String<60usize>>,
1126}
1127#[derive(Debug, Clone, PartialEq, Eq)]
1129#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1130pub enum ClearMonitoringStatusEnum {
1131 Accepted,
1132 Rejected,
1133 NotFound,
1134}
1135#[cfg(feature = "alloc")]
1136#[derive(Debug, Clone, PartialEq, Eq)]
1137#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1138pub struct ClearMonitoringResult<CustomDataType = crate::NoCustomData> {
1139 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1140 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1141 pub custom_data: Option<CustomDataType>,
1142 pub id: i64,
1144 pub status: ClearMonitoringStatusEnum,
1145 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
1146 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1147 pub status_info: Option<StatusInfo<CustomDataType>>,
1148}
1149#[cfg(not(feature = "alloc"))]
1150#[derive(Debug, Clone, PartialEq, Eq)]
1151#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1152pub struct ClearMonitoringResult<
1153 CustomDataType = crate::NoCustomData,
1154 const STATUS_INFO_ADDITIONAL_INFO_CAP: usize = 1024usize,
1155> {
1156 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1157 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1158 pub custom_data: Option<CustomDataType>,
1159 pub id: i64,
1161 pub status: ClearMonitoringStatusEnum,
1162 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
1163 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1164 pub status_info: Option<StatusInfo<CustomDataType, STATUS_INFO_ADDITIONAL_INFO_CAP>>,
1165}
1166#[derive(Debug, Clone, PartialEq, Eq)]
1167#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1168pub struct CertificateHashData<CustomDataType = crate::NoCustomData> {
1169 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1170 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1171 pub custom_data: Option<CustomDataType>,
1172 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
1173 pub hash_algorithm: HashAlgorithmEnum,
1174 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
1178 pub issuer_key_hash: heapless::String<128usize>,
1179 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
1184 pub issuer_name_hash: heapless::String<128usize>,
1185 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
1189 pub serial_number: heapless::String<40usize>,
1190}
1191#[derive(Debug, Clone, PartialEq, Eq)]
1193#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1194pub enum CustomerInformationStatusEnum {
1195 Accepted,
1196 Rejected,
1197 Invalid,
1198}
1199#[derive(Debug, Clone, PartialEq, Eq)]
1201#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1202pub enum DataTransferStatusEnum {
1203 Accepted,
1204 Rejected,
1205 UnknownMessageId,
1206 UnknownVendorId,
1207}
1208#[derive(Debug, Clone, PartialEq, Eq)]
1210#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1211pub enum DeleteCertificateStatusEnum {
1212 Accepted,
1213 Failed,
1214 NotFound,
1215}
1216#[derive(Debug, Clone, PartialEq, Eq)]
1218#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1219pub enum FirmwareStatusEnum {
1220 Downloaded,
1221 DownloadFailed,
1222 Downloading,
1223 DownloadScheduled,
1224 DownloadPaused,
1225 Idle,
1226 InstallationFailed,
1227 Installing,
1228 Installed,
1229 InstallRebooting,
1230 InstallScheduled,
1231 InstallVerificationFailed,
1232 InvalidSignature,
1233 SignatureVerified,
1234}
1235#[derive(Debug, Clone, PartialEq, Eq)]
1237#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1238pub enum CertificateActionEnum {
1239 Install,
1240 Update,
1241}
1242#[derive(Debug, Clone, PartialEq, Eq)]
1244#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1245pub enum Iso15118EVCertificateStatusEnum {
1246 Accepted,
1247 Failed,
1248}
1249#[derive(Debug, Clone, PartialEq, Eq)]
1251#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1252pub enum ReportBaseEnum {
1253 ConfigurationInventory,
1254 FullInventory,
1255 SummaryInventory,
1256}
1257#[derive(Debug, Clone, PartialEq, Eq)]
1259#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1260pub enum GenericDeviceModelStatusEnum {
1261 Accepted,
1262 Rejected,
1263 NotSupported,
1264 EmptyResultSet,
1265}
1266#[derive(Debug, Clone, PartialEq, Eq)]
1268#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1269pub enum CertificateStatusSourceEnum {
1270 CRL,
1271 OCSP,
1272}
1273#[cfg(feature = "alloc")]
1274#[derive(Debug, Clone, PartialEq, Eq)]
1276#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1277pub struct CertificateStatusRequestInfo<CustomDataType = crate::NoCustomData> {
1278 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1279 pub certificate_hash_data: CertificateHashData<CustomDataType>,
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<CustomDataType>,
1283 pub source: CertificateStatusSourceEnum,
1284 pub urls: heapless::Vec<alloc::string::String, 5usize>,
1286}
1287#[cfg(not(feature = "alloc"))]
1288#[derive(Debug, Clone, PartialEq, Eq)]
1290#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1291pub struct CertificateStatusRequestInfo<
1292 CustomDataType = crate::NoCustomData,
1293 const CERTIFICATE_STATUS_REQUEST_INFO_URLS_ITEM_CAP: usize = 1024usize,
1294> {
1295 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1296 pub certificate_hash_data: CertificateHashData<CustomDataType>,
1297 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1298 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1299 pub custom_data: Option<CustomDataType>,
1300 pub source: CertificateStatusSourceEnum,
1301 pub urls: heapless::Vec<
1303 heapless::String<CERTIFICATE_STATUS_REQUEST_INFO_URLS_ITEM_CAP>,
1304 5usize,
1305 >,
1306}
1307#[derive(Debug, Clone, PartialEq, Eq)]
1309#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1310pub enum CertificateStatusEnum {
1311 Good,
1312 Revoked,
1313 Unknown,
1314 Failed,
1315}
1316#[derive(Debug, Clone, PartialEq, Eq)]
1318#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1319pub struct CertificateStatus<CustomDataType = crate::NoCustomData> {
1320 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1321 pub certificate_hash_data: CertificateHashData<CustomDataType>,
1322 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1323 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1324 pub custom_data: Option<CustomDataType>,
1325 #[cfg_attr(feature = "serde", serde(rename = "nextUpdate"))]
1326 pub next_update: crate::OcppTimestamp,
1327 pub source: CertificateStatusSourceEnum,
1328 pub status: CertificateStatusEnum,
1329}
1330#[derive(Debug, Clone, PartialEq, Eq)]
1332#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1333pub enum GetCertificateStatusEnum {
1334 Accepted,
1335 Failed,
1336}
1337#[cfg(feature = "alloc")]
1338#[derive(Debug, Clone, PartialEq, Eq)]
1340#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1341pub struct ChargingProfileCriterion<CustomDataType = crate::NoCustomData> {
1342 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
1344 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1345 pub charging_limit_source: Option<heapless::Vec<heapless::String<20usize>, 4usize>>,
1346 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
1348 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1349 pub charging_profile_id: Option<alloc::vec::Vec<i64>>,
1350 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
1351 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1352 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
1353 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1354 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1355 pub custom_data: Option<CustomDataType>,
1356 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
1358 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1359 pub stack_level: Option<i64>,
1360}
1361#[cfg(not(feature = "alloc"))]
1362#[derive(Debug, Clone, PartialEq, Eq)]
1364#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1365pub struct ChargingProfileCriterion<
1366 CustomDataType = crate::NoCustomData,
1367 const CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP: usize = 8usize,
1368> {
1369 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
1371 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1372 pub charging_limit_source: Option<heapless::Vec<heapless::String<20usize>, 4usize>>,
1373 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
1375 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1376 pub charging_profile_id: Option<
1377 heapless::Vec<i64, CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP>,
1378 >,
1379 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
1380 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1381 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
1382 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1383 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1384 pub custom_data: Option<CustomDataType>,
1385 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
1387 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1388 pub stack_level: Option<i64>,
1389}
1390#[derive(Debug, Clone, PartialEq, Eq)]
1392#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1393pub enum GetChargingProfileStatusEnum {
1394 Accepted,
1395 NoProfiles,
1396}
1397#[derive(Debug, Clone, PartialEq, Eq)]
1399#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1400pub enum ChargingRateUnitEnum {
1401 W,
1402 A,
1403}
1404#[derive(Debug, Clone, PartialEq, Eq)]
1406#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1407pub enum OperationModeEnum {
1408 Idle,
1409 ChargingOnly,
1410 CentralSetpoint,
1411 ExternalSetpoint,
1412 ExternalLimits,
1413 CentralFrequency,
1414 LocalFrequency,
1415 LocalLoadBalancing,
1416}
1417#[derive(Debug, Clone, PartialEq)]
1419#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1420pub struct V2XFreqWattPoint<CustomDataType = crate::NoCustomData> {
1421 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1422 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1423 pub custom_data: Option<CustomDataType>,
1424 pub frequency: f64,
1426 pub power: f64,
1428}
1429#[derive(Debug, Clone, PartialEq)]
1431#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1432pub struct V2XSignalWattPoint<CustomDataType = crate::NoCustomData> {
1433 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1434 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1435 pub custom_data: Option<CustomDataType>,
1436 pub power: f64,
1438 pub signal: i64,
1440}
1441#[cfg(feature = "alloc")]
1442#[derive(Debug, Clone, PartialEq)]
1444#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1445pub struct ChargingSchedulePeriod<CustomDataType = crate::NoCustomData> {
1446 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1447 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1448 pub custom_data: Option<CustomDataType>,
1449 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit"))]
1452 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1453 pub discharge_limit: Option<f64>,
1454 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L2"))]
1456 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1457 pub discharge_limit_l2: Option<f64>,
1458 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L3"))]
1460 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1461 pub discharge_limit_l3: Option<f64>,
1462 #[cfg_attr(feature = "serde", serde(rename = "evseSleep"))]
1464 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1465 pub evse_sleep: Option<bool>,
1466 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1471 pub limit: Option<f64>,
1472 #[cfg_attr(feature = "serde", serde(rename = "limit_L2"))]
1474 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1475 pub limit_l2: Option<f64>,
1476 #[cfg_attr(feature = "serde", serde(rename = "limit_L3"))]
1478 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1479 pub limit_l3: Option<f64>,
1480 #[cfg_attr(feature = "serde", serde(rename = "numberPhases"))]
1484 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1485 pub number_phases: Option<i64>,
1486 #[cfg_attr(feature = "serde", serde(rename = "operationMode"))]
1487 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1488 pub operation_mode: Option<OperationModeEnum>,
1489 #[cfg_attr(feature = "serde", serde(rename = "phaseToUse"))]
1491 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1492 pub phase_to_use: Option<i64>,
1493 #[cfg_attr(feature = "serde", serde(rename = "preconditioningRequest"))]
1495 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1496 pub preconditioning_request: Option<bool>,
1497 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1501 pub setpoint: Option<f64>,
1502 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive"))]
1505 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1506 pub setpoint_reactive: Option<f64>,
1507 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L2"))]
1509 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1510 pub setpoint_reactive_l2: Option<f64>,
1511 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L3"))]
1513 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1514 pub setpoint_reactive_l3: Option<f64>,
1515 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L2"))]
1517 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1518 pub setpoint_l2: Option<f64>,
1519 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L3"))]
1521 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1522 pub setpoint_l3: Option<f64>,
1523 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
1525 pub start_period: i64,
1526 #[cfg_attr(feature = "serde", serde(rename = "v2xBaseline"))]
1528 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1529 pub v2x_baseline: Option<f64>,
1530 #[cfg_attr(feature = "serde", serde(rename = "v2xFreqWattCurve"))]
1531 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1532 pub v2x_freq_watt_curve: Option<alloc::vec::Vec<V2XFreqWattPoint<CustomDataType>>>,
1533 #[cfg_attr(feature = "serde", serde(rename = "v2xSignalWattCurve"))]
1534 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1535 pub v2x_signal_watt_curve: Option<
1536 alloc::vec::Vec<V2XSignalWattPoint<CustomDataType>>,
1537 >,
1538}
1539#[cfg(not(feature = "alloc"))]
1540#[derive(Debug, Clone, PartialEq)]
1542#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1543pub struct ChargingSchedulePeriod<
1544 CustomDataType = crate::NoCustomData,
1545 const CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP: usize = 8usize,
1546 const CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP: usize = 8usize,
1547> {
1548 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1549 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1550 pub custom_data: Option<CustomDataType>,
1551 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit"))]
1554 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1555 pub discharge_limit: Option<f64>,
1556 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L2"))]
1558 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1559 pub discharge_limit_l2: Option<f64>,
1560 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L3"))]
1562 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1563 pub discharge_limit_l3: Option<f64>,
1564 #[cfg_attr(feature = "serde", serde(rename = "evseSleep"))]
1566 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1567 pub evse_sleep: Option<bool>,
1568 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1573 pub limit: Option<f64>,
1574 #[cfg_attr(feature = "serde", serde(rename = "limit_L2"))]
1576 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1577 pub limit_l2: Option<f64>,
1578 #[cfg_attr(feature = "serde", serde(rename = "limit_L3"))]
1580 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1581 pub limit_l3: Option<f64>,
1582 #[cfg_attr(feature = "serde", serde(rename = "numberPhases"))]
1586 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1587 pub number_phases: Option<i64>,
1588 #[cfg_attr(feature = "serde", serde(rename = "operationMode"))]
1589 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1590 pub operation_mode: Option<OperationModeEnum>,
1591 #[cfg_attr(feature = "serde", serde(rename = "phaseToUse"))]
1593 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1594 pub phase_to_use: Option<i64>,
1595 #[cfg_attr(feature = "serde", serde(rename = "preconditioningRequest"))]
1597 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1598 pub preconditioning_request: Option<bool>,
1599 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1603 pub setpoint: Option<f64>,
1604 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive"))]
1607 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1608 pub setpoint_reactive: Option<f64>,
1609 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L2"))]
1611 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1612 pub setpoint_reactive_l2: Option<f64>,
1613 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L3"))]
1615 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1616 pub setpoint_reactive_l3: Option<f64>,
1617 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L2"))]
1619 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1620 pub setpoint_l2: Option<f64>,
1621 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L3"))]
1623 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1624 pub setpoint_l3: Option<f64>,
1625 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
1627 pub start_period: i64,
1628 #[cfg_attr(feature = "serde", serde(rename = "v2xBaseline"))]
1630 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1631 pub v2x_baseline: Option<f64>,
1632 #[cfg_attr(feature = "serde", serde(rename = "v2xFreqWattCurve"))]
1633 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1634 pub v2x_freq_watt_curve: Option<
1635 heapless::Vec<
1636 V2XFreqWattPoint<CustomDataType>,
1637 CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP,
1638 >,
1639 >,
1640 #[cfg_attr(feature = "serde", serde(rename = "v2xSignalWattCurve"))]
1641 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1642 pub v2x_signal_watt_curve: Option<
1643 heapless::Vec<
1644 V2XSignalWattPoint<CustomDataType>,
1645 CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP,
1646 >,
1647 >,
1648}
1649#[cfg(feature = "alloc")]
1650#[derive(Debug, Clone, PartialEq)]
1651#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1652pub struct CompositeSchedule<CustomDataType = crate::NoCustomData> {
1653 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1654 pub charging_rate_unit: ChargingRateUnitEnum,
1655 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1656 pub charging_schedule_period: alloc::vec::Vec<
1657 ChargingSchedulePeriod<CustomDataType>,
1658 >,
1659 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1660 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1661 pub custom_data: Option<CustomDataType>,
1662 pub duration: i64,
1663 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1664 pub evse_id: i64,
1665 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
1666 pub schedule_start: crate::OcppTimestamp,
1667}
1668#[cfg(not(feature = "alloc"))]
1669#[derive(Debug, Clone, PartialEq)]
1670#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1671pub struct CompositeSchedule<
1672 CustomDataType = crate::NoCustomData,
1673 const COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 8usize,
1674 const CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP: usize = 8usize,
1675 const CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP: usize = 8usize,
1676> {
1677 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1678 pub charging_rate_unit: ChargingRateUnitEnum,
1679 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1680 pub charging_schedule_period: heapless::Vec<
1681 ChargingSchedulePeriod<
1682 CustomDataType,
1683 CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP,
1684 CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP,
1685 >,
1686 COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
1687 >,
1688 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1689 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1690 pub custom_data: Option<CustomDataType>,
1691 pub duration: i64,
1692 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1693 pub evse_id: i64,
1694 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
1695 pub schedule_start: crate::OcppTimestamp,
1696}
1697#[derive(Debug, Clone, PartialEq, Eq)]
1699#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1700pub enum MessagePriorityEnum {
1701 AlwaysFront,
1702 InFront,
1703 NormalCycle,
1704}
1705#[derive(Debug, Clone, PartialEq, Eq)]
1707#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1708pub enum MessageStateEnum {
1709 Charging,
1710 Faulted,
1711 Idle,
1712 Unavailable,
1713 Suspended,
1714 Discharging,
1715}
1716#[derive(Debug, Clone, PartialEq, Eq)]
1718#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1719pub enum GetDisplayMessagesStatusEnum {
1720 Accepted,
1721 Unknown,
1722}
1723#[derive(Debug, Clone, PartialEq, Eq)]
1724#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1725pub enum GetCertificateIdUseEnum {
1726 V2GRootCertificate,
1727 MORootCertificate,
1728 CSMSRootCertificate,
1729 V2GCertificateChain,
1730 ManufacturerRootCertificate,
1731 OEMRootCertificate,
1732}
1733#[derive(Debug, Clone, PartialEq, Eq)]
1734#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1735pub struct CertificateHashDataChain<CustomDataType = crate::NoCustomData> {
1736 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1737 pub certificate_hash_data: CertificateHashData<CustomDataType>,
1738 #[cfg_attr(feature = "serde", serde(rename = "certificateType"))]
1739 pub certificate_type: GetCertificateIdUseEnum,
1740 #[cfg_attr(feature = "serde", serde(rename = "childCertificateHashData"))]
1741 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1742 pub child_certificate_hash_data: Option<
1743 heapless::Vec<CertificateHashData<CustomDataType>, 4usize>,
1744 >,
1745 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1746 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1747 pub custom_data: Option<CustomDataType>,
1748}
1749#[derive(Debug, Clone, PartialEq, Eq)]
1751#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1752pub enum GetInstalledCertificateStatusEnum {
1753 Accepted,
1754 NotFound,
1755}
1756#[cfg(feature = "alloc")]
1757#[derive(Debug, Clone, PartialEq, Eq)]
1759#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1760pub struct LogParameters<CustomDataType = crate::NoCustomData> {
1761 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1762 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1763 pub custom_data: Option<CustomDataType>,
1764 #[cfg_attr(feature = "serde", serde(rename = "latestTimestamp"))]
1766 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1767 pub latest_timestamp: Option<crate::OcppTimestamp>,
1768 #[cfg_attr(feature = "serde", serde(rename = "oldestTimestamp"))]
1770 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1771 pub oldest_timestamp: Option<crate::OcppTimestamp>,
1772 #[cfg_attr(feature = "serde", serde(rename = "remoteLocation"))]
1774 pub remote_location: alloc::string::String,
1775}
1776#[cfg(not(feature = "alloc"))]
1777#[derive(Debug, Clone, PartialEq, Eq)]
1779#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1780pub struct LogParameters<
1781 CustomDataType = crate::NoCustomData,
1782 const LOG_PARAMETERS_REMOTE_LOCATION_CAP: usize = 1024usize,
1783> {
1784 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1785 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1786 pub custom_data: Option<CustomDataType>,
1787 #[cfg_attr(feature = "serde", serde(rename = "latestTimestamp"))]
1789 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1790 pub latest_timestamp: Option<crate::OcppTimestamp>,
1791 #[cfg_attr(feature = "serde", serde(rename = "oldestTimestamp"))]
1793 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1794 pub oldest_timestamp: Option<crate::OcppTimestamp>,
1795 #[cfg_attr(feature = "serde", serde(rename = "remoteLocation"))]
1797 pub remote_location: heapless::String<LOG_PARAMETERS_REMOTE_LOCATION_CAP>,
1798}
1799#[derive(Debug, Clone, PartialEq, Eq)]
1802#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1803pub enum LogEnum {
1804 DiagnosticsLog,
1805 SecurityLog,
1806 DataCollectorLog,
1807}
1808#[derive(Debug, Clone, PartialEq, Eq)]
1810#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1811pub enum LogStatusEnum {
1812 Accepted,
1813 Rejected,
1814 AcceptedCanceled,
1815}
1816#[derive(Debug, Clone, PartialEq, Eq)]
1818#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1819pub struct Component<CustomDataType = crate::NoCustomData> {
1820 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1821 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1822 pub custom_data: Option<CustomDataType>,
1823 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1824 pub evse: Option<EVSE<CustomDataType>>,
1825 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1827 pub instance: Option<heapless::String<50usize>>,
1828 pub name: heapless::String<50usize>,
1830}
1831#[derive(Debug, Clone, PartialEq, Eq)]
1833#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1834pub struct Variable<CustomDataType = crate::NoCustomData> {
1835 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1836 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1837 pub custom_data: Option<CustomDataType>,
1838 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1840 pub instance: Option<heapless::String<50usize>>,
1841 pub name: heapless::String<50usize>,
1843}
1844#[derive(Debug, Clone, PartialEq, Eq)]
1846#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1847pub struct ComponentVariable<CustomDataType = crate::NoCustomData> {
1848 pub component: Component<CustomDataType>,
1849 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1850 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1851 pub custom_data: Option<CustomDataType>,
1852 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1853 pub variable: Option<Variable<CustomDataType>>,
1854}
1855#[derive(Debug, Clone, PartialEq, Eq)]
1856#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1857pub enum MonitoringCriterionEnum {
1858 ThresholdMonitoring,
1859 DeltaMonitoring,
1860 PeriodicMonitoring,
1861}
1862#[derive(Debug, Clone, PartialEq, Eq)]
1863#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1864pub struct ConstantStreamData<CustomDataType = crate::NoCustomData> {
1865 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1866 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1867 pub custom_data: Option<CustomDataType>,
1868 pub id: i64,
1870 pub params: PeriodicEventStreamParams<CustomDataType>,
1871 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
1873 pub variable_monitoring_id: i64,
1874}
1875#[derive(Debug, Clone, PartialEq, Eq)]
1876#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1877pub enum ComponentCriterionEnum {
1878 Active,
1879 Available,
1880 Enabled,
1881 Problem,
1882}
1883#[derive(Debug, Clone, PartialEq, Eq)]
1885#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1886pub enum TariffGetStatusEnum {
1887 Accepted,
1888 Rejected,
1889 NoTariff,
1890}
1891#[derive(Debug, Clone, PartialEq, Eq)]
1893#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1894pub enum TariffKindEnum {
1895 DefaultTariff,
1896 DriverTariff,
1897}
1898#[cfg(feature = "alloc")]
1899#[derive(Debug, Clone, PartialEq, Eq)]
1901#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1902pub struct TariffAssignment<CustomDataType = crate::NoCustomData> {
1903 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1904 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1905 pub custom_data: Option<CustomDataType>,
1906 #[cfg_attr(feature = "serde", serde(rename = "evseIds"))]
1907 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1908 pub evse_ids: Option<alloc::vec::Vec<i64>>,
1909 #[cfg_attr(feature = "serde", serde(rename = "idTokens"))]
1911 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1912 pub id_tokens: Option<alloc::vec::Vec<heapless::String<255usize>>>,
1913 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
1915 pub tariff_id: heapless::String<60usize>,
1916 #[cfg_attr(feature = "serde", serde(rename = "tariffKind"))]
1917 pub tariff_kind: TariffKindEnum,
1918 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
1920 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1921 pub valid_from: Option<crate::OcppTimestamp>,
1922}
1923#[cfg(not(feature = "alloc"))]
1924#[derive(Debug, Clone, PartialEq, Eq)]
1926#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1927pub struct TariffAssignment<
1928 CustomDataType = crate::NoCustomData,
1929 const TARIFF_ASSIGNMENT_EVSE_IDS_CAP: usize = 8usize,
1930 const TARIFF_ASSIGNMENT_ID_TOKENS_CAP: usize = 8usize,
1931> {
1932 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1933 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1934 pub custom_data: Option<CustomDataType>,
1935 #[cfg_attr(feature = "serde", serde(rename = "evseIds"))]
1936 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1937 pub evse_ids: Option<heapless::Vec<i64, TARIFF_ASSIGNMENT_EVSE_IDS_CAP>>,
1938 #[cfg_attr(feature = "serde", serde(rename = "idTokens"))]
1940 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1941 pub id_tokens: Option<
1942 heapless::Vec<heapless::String<255usize>, TARIFF_ASSIGNMENT_ID_TOKENS_CAP>,
1943 >,
1944 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
1946 pub tariff_id: heapless::String<60usize>,
1947 #[cfg_attr(feature = "serde", serde(rename = "tariffKind"))]
1948 pub tariff_kind: TariffKindEnum,
1949 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
1951 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1952 pub valid_from: Option<crate::OcppTimestamp>,
1953}
1954#[derive(Debug, Clone, PartialEq, Eq)]
1956#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1957pub enum AttributeEnum {
1958 Actual,
1959 Target,
1960 MinSet,
1961 MaxSet,
1962}
1963#[derive(Debug, Clone, PartialEq, Eq)]
1965#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1966pub struct GetVariableData<CustomDataType = crate::NoCustomData> {
1967 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
1968 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1969 pub attribute_type: Option<AttributeEnum>,
1970 pub component: Component<CustomDataType>,
1971 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1972 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1973 pub custom_data: Option<CustomDataType>,
1974 pub variable: Variable<CustomDataType>,
1975}
1976#[derive(Debug, Clone, PartialEq, Eq)]
1977#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1978pub enum GetVariableStatusEnum {
1979 Accepted,
1980 Rejected,
1981 UnknownComponent,
1982 UnknownVariable,
1983 NotSupportedAttributeType,
1984}
1985#[cfg(feature = "alloc")]
1986#[derive(Debug, Clone, PartialEq, Eq)]
1988#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1989pub struct GetVariableResult<CustomDataType = crate::NoCustomData> {
1990 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
1991 pub attribute_status: GetVariableStatusEnum,
1992 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
1993 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1994 pub attribute_status_info: Option<StatusInfo<CustomDataType>>,
1995 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
1996 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1997 pub attribute_type: Option<AttributeEnum>,
1998 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
2002 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2003 pub attribute_value: Option<alloc::string::String>,
2004 pub component: Component<CustomDataType>,
2005 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2006 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2007 pub custom_data: Option<CustomDataType>,
2008 pub variable: Variable<CustomDataType>,
2009}
2010#[cfg(not(feature = "alloc"))]
2011#[derive(Debug, Clone, PartialEq, Eq)]
2013#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2014pub struct GetVariableResult<
2015 CustomDataType = crate::NoCustomData,
2016 const STATUS_INFO_ADDITIONAL_INFO_CAP: usize = 1024usize,
2017 const GET_VARIABLE_RESULT_ATTRIBUTE_VALUE_CAP: usize = 1024usize,
2018> {
2019 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
2020 pub attribute_status: GetVariableStatusEnum,
2021 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
2022 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2023 pub attribute_status_info: Option<
2024 StatusInfo<CustomDataType, STATUS_INFO_ADDITIONAL_INFO_CAP>,
2025 >,
2026 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2027 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2028 pub attribute_type: Option<AttributeEnum>,
2029 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
2033 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2034 pub attribute_value: Option<
2035 heapless::String<GET_VARIABLE_RESULT_ATTRIBUTE_VALUE_CAP>,
2036 >,
2037 pub component: Component<CustomDataType>,
2038 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2039 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2040 pub custom_data: Option<CustomDataType>,
2041 pub variable: Variable<CustomDataType>,
2042}
2043#[derive(Debug, Clone, PartialEq, Eq)]
2045#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2046pub enum InstallCertificateUseEnum {
2047 V2GRootCertificate,
2048 MORootCertificate,
2049 ManufacturerRootCertificate,
2050 CSMSRootCertificate,
2051 OEMRootCertificate,
2052}
2053#[derive(Debug, Clone, PartialEq, Eq)]
2055#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2056pub enum InstallCertificateStatusEnum {
2057 Accepted,
2058 Rejected,
2059 Failed,
2060}
2061#[derive(Debug, Clone, PartialEq, Eq)]
2063#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2064pub enum UploadLogStatusEnum {
2065 BadMessage,
2066 Idle,
2067 NotSupportedOperation,
2068 PermissionDenied,
2069 Uploaded,
2070 UploadFailure,
2071 Uploading,
2072 AcceptedCanceled,
2073}
2074#[derive(Debug, Clone, PartialEq, Eq)]
2076#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2077pub enum ReadingContextEnum {
2078 #[cfg_attr(feature = "serde", serde(rename = "Interruption.Begin"))]
2079 InterruptionBegin,
2080 #[cfg_attr(feature = "serde", serde(rename = "Interruption.End"))]
2081 InterruptionEnd,
2082 Other,
2083 #[cfg_attr(feature = "serde", serde(rename = "Sample.Clock"))]
2084 SampleClock,
2085 #[cfg_attr(feature = "serde", serde(rename = "Sample.Periodic"))]
2086 SamplePeriodic,
2087 #[cfg_attr(feature = "serde", serde(rename = "Transaction.Begin"))]
2088 TransactionBegin,
2089 #[cfg_attr(feature = "serde", serde(rename = "Transaction.End"))]
2090 TransactionEnd,
2091 Trigger,
2092}
2093#[derive(Debug, Clone, PartialEq, Eq)]
2095#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2096pub enum LocationEnum {
2097 Body,
2098 Cable,
2099 EV,
2100 Inlet,
2101 Outlet,
2102 Upstream,
2103}
2104#[derive(Debug, Clone, PartialEq, Eq)]
2106#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2107pub enum MeasurandEnum {
2108 #[cfg_attr(feature = "serde", serde(rename = "Current.Export"))]
2109 CurrentExport,
2110 #[cfg_attr(feature = "serde", serde(rename = "Current.Export.Offered"))]
2111 CurrentExportOffered,
2112 #[cfg_attr(feature = "serde", serde(rename = "Current.Export.Minimum"))]
2113 CurrentExportMinimum,
2114 #[cfg_attr(feature = "serde", serde(rename = "Current.Import"))]
2115 CurrentImport,
2116 #[cfg_attr(feature = "serde", serde(rename = "Current.Import.Offered"))]
2117 CurrentImportOffered,
2118 #[cfg_attr(feature = "serde", serde(rename = "Current.Import.Minimum"))]
2119 CurrentImportMinimum,
2120 #[cfg_attr(feature = "serde", serde(rename = "Current.Offered"))]
2121 CurrentOffered,
2122 #[cfg_attr(feature = "serde", serde(rename = "Display.PresentSOC"))]
2123 DisplayPresentSOC,
2124 #[cfg_attr(feature = "serde", serde(rename = "Display.MinimumSOC"))]
2125 DisplayMinimumSOC,
2126 #[cfg_attr(feature = "serde", serde(rename = "Display.TargetSOC"))]
2127 DisplayTargetSOC,
2128 #[cfg_attr(feature = "serde", serde(rename = "Display.MaximumSOC"))]
2129 DisplayMaximumSOC,
2130 #[cfg_attr(feature = "serde", serde(rename = "Display.RemainingTimeToMinimumSOC"))]
2131 DisplayRemainingTimeToMinimumSOC,
2132 #[cfg_attr(feature = "serde", serde(rename = "Display.RemainingTimeToTargetSOC"))]
2133 DisplayRemainingTimeToTargetSOC,
2134 #[cfg_attr(feature = "serde", serde(rename = "Display.RemainingTimeToMaximumSOC"))]
2135 DisplayRemainingTimeToMaximumSOC,
2136 #[cfg_attr(feature = "serde", serde(rename = "Display.ChargingComplete"))]
2137 DisplayChargingComplete,
2138 #[cfg_attr(feature = "serde", serde(rename = "Display.BatteryEnergyCapacity"))]
2139 DisplayBatteryEnergyCapacity,
2140 #[cfg_attr(feature = "serde", serde(rename = "Display.InletHot"))]
2141 DisplayInletHot,
2142 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Interval"))]
2143 EnergyActiveExportInterval,
2144 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Register"))]
2145 EnergyActiveExportRegister,
2146 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Interval"))]
2147 EnergyActiveImportInterval,
2148 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Register"))]
2149 EnergyActiveImportRegister,
2150 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.CableLoss"))]
2151 EnergyActiveImportCableLoss,
2152 #[cfg_attr(
2153 feature = "serde",
2154 serde(rename = "Energy.Active.Import.LocalGeneration.Register")
2155 )]
2156 EnergyActiveImportLocalGenerationRegister,
2157 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Net"))]
2158 EnergyActiveNet,
2159 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Setpoint.Interval"))]
2160 EnergyActiveSetpointInterval,
2161 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Export"))]
2162 EnergyApparentExport,
2163 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Import"))]
2164 EnergyApparentImport,
2165 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Net"))]
2166 EnergyApparentNet,
2167 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Interval"))]
2168 EnergyReactiveExportInterval,
2169 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Register"))]
2170 EnergyReactiveExportRegister,
2171 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Interval"))]
2172 EnergyReactiveImportInterval,
2173 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Register"))]
2174 EnergyReactiveImportRegister,
2175 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Net"))]
2176 EnergyReactiveNet,
2177 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Target"))]
2178 EnergyRequestTarget,
2179 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Minimum"))]
2180 EnergyRequestMinimum,
2181 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Maximum"))]
2182 EnergyRequestMaximum,
2183 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Minimum.V2X"))]
2184 EnergyRequestMinimumV2X,
2185 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Maximum.V2X"))]
2186 EnergyRequestMaximumV2X,
2187 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Bulk"))]
2188 EnergyRequestBulk,
2189 Frequency,
2190 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Export"))]
2191 PowerActiveExport,
2192 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Import"))]
2193 PowerActiveImport,
2194 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Setpoint"))]
2195 PowerActiveSetpoint,
2196 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Residual"))]
2197 PowerActiveResidual,
2198 #[cfg_attr(feature = "serde", serde(rename = "Power.Export.Minimum"))]
2199 PowerExportMinimum,
2200 #[cfg_attr(feature = "serde", serde(rename = "Power.Export.Offered"))]
2201 PowerExportOffered,
2202 #[cfg_attr(feature = "serde", serde(rename = "Power.Factor"))]
2203 PowerFactor,
2204 #[cfg_attr(feature = "serde", serde(rename = "Power.Import.Offered"))]
2205 PowerImportOffered,
2206 #[cfg_attr(feature = "serde", serde(rename = "Power.Import.Minimum"))]
2207 PowerImportMinimum,
2208 #[cfg_attr(feature = "serde", serde(rename = "Power.Offered"))]
2209 PowerOffered,
2210 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Export"))]
2211 PowerReactiveExport,
2212 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Import"))]
2213 PowerReactiveImport,
2214 SoC,
2215 Voltage,
2216 #[cfg_attr(feature = "serde", serde(rename = "Voltage.Minimum"))]
2217 VoltageMinimum,
2218 #[cfg_attr(feature = "serde", serde(rename = "Voltage.Maximum"))]
2219 VoltageMaximum,
2220}
2221#[derive(Debug, Clone, PartialEq, Eq)]
2223#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2224pub enum PhaseEnum {
2225 L1,
2226 L2,
2227 L3,
2228 N,
2229 #[cfg_attr(feature = "serde", serde(rename = "L1-N"))]
2230 L1N,
2231 #[cfg_attr(feature = "serde", serde(rename = "L2-N"))]
2232 L2N,
2233 #[cfg_attr(feature = "serde", serde(rename = "L3-N"))]
2234 L3N,
2235 #[cfg_attr(feature = "serde", serde(rename = "L1-L2"))]
2236 L1L2,
2237 #[cfg_attr(feature = "serde", serde(rename = "L2-L3"))]
2238 L2L3,
2239 #[cfg_attr(feature = "serde", serde(rename = "L3-L1"))]
2240 L3L1,
2241}
2242#[cfg(feature = "alloc")]
2243#[derive(Debug, Clone, PartialEq, Eq)]
2245#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2246pub struct SignedMeterValue<CustomDataType = crate::NoCustomData> {
2247 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2248 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2249 pub custom_data: Option<CustomDataType>,
2250 #[cfg_attr(feature = "serde", serde(rename = "encodingMethod"))]
2252 pub encoding_method: heapless::String<50usize>,
2253 #[cfg_attr(feature = "serde", serde(rename = "publicKey"))]
2255 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2256 pub public_key: Option<alloc::string::String>,
2257 #[cfg_attr(feature = "serde", serde(rename = "signedMeterData"))]
2259 pub signed_meter_data: alloc::string::String,
2260 #[cfg_attr(feature = "serde", serde(rename = "signingMethod"))]
2262 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2263 pub signing_method: Option<heapless::String<50usize>>,
2264}
2265#[cfg(not(feature = "alloc"))]
2266#[derive(Debug, Clone, PartialEq, Eq)]
2268#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2269pub struct SignedMeterValue<
2270 CustomDataType = crate::NoCustomData,
2271 const SIGNED_METER_VALUE_PUBLIC_KEY_CAP: usize = 1024usize,
2272 const SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP: usize = 1024usize,
2273> {
2274 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2275 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2276 pub custom_data: Option<CustomDataType>,
2277 #[cfg_attr(feature = "serde", serde(rename = "encodingMethod"))]
2279 pub encoding_method: heapless::String<50usize>,
2280 #[cfg_attr(feature = "serde", serde(rename = "publicKey"))]
2282 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2283 pub public_key: Option<heapless::String<SIGNED_METER_VALUE_PUBLIC_KEY_CAP>>,
2284 #[cfg_attr(feature = "serde", serde(rename = "signedMeterData"))]
2286 pub signed_meter_data: heapless::String<SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP>,
2287 #[cfg_attr(feature = "serde", serde(rename = "signingMethod"))]
2289 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2290 pub signing_method: Option<heapless::String<50usize>>,
2291}
2292#[derive(Debug, Clone, PartialEq, Eq)]
2294#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2295pub struct UnitOfMeasure<CustomDataType = crate::NoCustomData> {
2296 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2297 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2298 pub custom_data: Option<CustomDataType>,
2299 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2302 pub multiplier: Option<i64>,
2303 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2307 pub unit: Option<heapless::String<20usize>>,
2308}
2309#[cfg(feature = "alloc")]
2310#[derive(Debug, Clone, PartialEq)]
2314#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2315pub struct SampledValue<CustomDataType = crate::NoCustomData> {
2316 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2317 pub context: Option<ReadingContextEnum>,
2318 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2319 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2320 pub custom_data: Option<CustomDataType>,
2321 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2322 pub location: Option<LocationEnum>,
2323 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2324 pub measurand: Option<MeasurandEnum>,
2325 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2326 pub phase: Option<PhaseEnum>,
2327 #[cfg_attr(feature = "serde", serde(rename = "signedMeterValue"))]
2328 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2329 pub signed_meter_value: Option<SignedMeterValue<CustomDataType>>,
2330 #[cfg_attr(feature = "serde", serde(rename = "unitOfMeasure"))]
2331 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2332 pub unit_of_measure: Option<UnitOfMeasure<CustomDataType>>,
2333 pub value: f64,
2335}
2336#[cfg(not(feature = "alloc"))]
2337#[derive(Debug, Clone, PartialEq)]
2341#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2342pub struct SampledValue<
2343 CustomDataType = crate::NoCustomData,
2344 const SIGNED_METER_VALUE_PUBLIC_KEY_CAP: usize = 1024usize,
2345 const SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP: usize = 1024usize,
2346> {
2347 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2348 pub context: Option<ReadingContextEnum>,
2349 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2350 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2351 pub custom_data: Option<CustomDataType>,
2352 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2353 pub location: Option<LocationEnum>,
2354 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2355 pub measurand: Option<MeasurandEnum>,
2356 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2357 pub phase: Option<PhaseEnum>,
2358 #[cfg_attr(feature = "serde", serde(rename = "signedMeterValue"))]
2359 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2360 pub signed_meter_value: Option<
2361 SignedMeterValue<
2362 CustomDataType,
2363 SIGNED_METER_VALUE_PUBLIC_KEY_CAP,
2364 SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP,
2365 >,
2366 >,
2367 #[cfg_attr(feature = "serde", serde(rename = "unitOfMeasure"))]
2368 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2369 pub unit_of_measure: Option<UnitOfMeasure<CustomDataType>>,
2370 pub value: f64,
2372}
2373#[cfg(feature = "alloc")]
2374#[derive(Debug, Clone, PartialEq)]
2376#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2377pub struct MeterValue<CustomDataType = crate::NoCustomData> {
2378 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2379 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2380 pub custom_data: Option<CustomDataType>,
2381 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
2382 pub sampled_value: alloc::vec::Vec<SampledValue<CustomDataType>>,
2383 pub timestamp: crate::OcppTimestamp,
2385}
2386#[cfg(not(feature = "alloc"))]
2387#[derive(Debug, Clone, PartialEq)]
2389#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2390pub struct MeterValue<
2391 CustomDataType = crate::NoCustomData,
2392 const METER_VALUE_SAMPLED_VALUE_CAP: usize = 8usize,
2393 const SIGNED_METER_VALUE_PUBLIC_KEY_CAP: usize = 1024usize,
2394 const SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP: usize = 1024usize,
2395> {
2396 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2397 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2398 pub custom_data: Option<CustomDataType>,
2399 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
2400 pub sampled_value: heapless::Vec<
2401 SampledValue<
2402 CustomDataType,
2403 SIGNED_METER_VALUE_PUBLIC_KEY_CAP,
2404 SIGNED_METER_VALUE_SIGNED_METER_DATA_CAP,
2405 >,
2406 METER_VALUE_SAMPLED_VALUE_CAP,
2407 >,
2408 pub timestamp: crate::OcppTimestamp,
2410}
2411#[derive(Debug, Clone, PartialEq, Eq)]
2412#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2413pub enum NotifyAllowedEnergyTransferStatusEnum {
2414 Accepted,
2415 Rejected,
2416}
2417#[derive(Debug, Clone, PartialEq, Eq)]
2418#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2419pub struct ChargingLimit<CustomDataType = crate::NoCustomData> {
2420 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
2422 pub charging_limit_source: heapless::String<20usize>,
2423 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2424 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2425 pub custom_data: Option<CustomDataType>,
2426 #[cfg_attr(feature = "serde", serde(rename = "isGridCritical"))]
2428 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2429 pub is_grid_critical: Option<bool>,
2430 #[cfg_attr(feature = "serde", serde(rename = "isLocalGeneration"))]
2432 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2433 pub is_local_generation: Option<bool>,
2434}
2435#[derive(Debug, Clone, PartialEq, Eq)]
2437#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2438pub struct RationalNumber<CustomDataType = crate::NoCustomData> {
2439 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2440 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2441 pub custom_data: Option<CustomDataType>,
2442 pub exponent: i64,
2444 pub value: i64,
2446}
2447#[derive(Debug, Clone, PartialEq, Eq)]
2449#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2450pub struct AdditionalSelectedServices<CustomDataType = crate::NoCustomData> {
2451 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2452 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2453 pub custom_data: Option<CustomDataType>,
2454 #[cfg_attr(feature = "serde", serde(rename = "serviceFee"))]
2455 pub service_fee: RationalNumber<CustomDataType>,
2456 #[cfg_attr(feature = "serde", serde(rename = "serviceName"))]
2458 pub service_name: heapless::String<80usize>,
2459}
2460#[derive(Debug, Clone, PartialEq, Eq)]
2462#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2463pub struct OverstayRule<CustomDataType = crate::NoCustomData> {
2464 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2465 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2466 pub custom_data: Option<CustomDataType>,
2467 #[cfg_attr(feature = "serde", serde(rename = "overstayFee"))]
2468 pub overstay_fee: RationalNumber<CustomDataType>,
2469 #[cfg_attr(feature = "serde", serde(rename = "overstayFeePeriod"))]
2471 pub overstay_fee_period: i64,
2472 #[cfg_attr(feature = "serde", serde(rename = "overstayRuleDescription"))]
2474 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2475 pub overstay_rule_description: Option<heapless::String<32usize>>,
2476 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
2478 pub start_time: i64,
2479}
2480#[derive(Debug, Clone, PartialEq, Eq)]
2482#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2483pub struct OverstayRuleList<CustomDataType = crate::NoCustomData> {
2484 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2485 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2486 pub custom_data: Option<CustomDataType>,
2487 #[cfg_attr(feature = "serde", serde(rename = "overstayPowerThreshold"))]
2488 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2489 pub overstay_power_threshold: Option<RationalNumber<CustomDataType>>,
2490 #[cfg_attr(feature = "serde", serde(rename = "overstayRule"))]
2491 pub overstay_rule: heapless::Vec<OverstayRule<CustomDataType>, 5usize>,
2492 #[cfg_attr(feature = "serde", serde(rename = "overstayTimeThreshold"))]
2494 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2495 pub overstay_time_threshold: Option<i64>,
2496}
2497#[derive(Debug, Clone, PartialEq, Eq)]
2499#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2500pub struct PriceRule<CustomDataType = crate::NoCustomData> {
2501 #[cfg_attr(feature = "serde", serde(rename = "carbonDioxideEmission"))]
2503 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2504 pub carbon_dioxide_emission: Option<i64>,
2505 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2506 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2507 pub custom_data: Option<CustomDataType>,
2508 #[cfg_attr(feature = "serde", serde(rename = "energyFee"))]
2509 pub energy_fee: RationalNumber<CustomDataType>,
2510 #[cfg_attr(feature = "serde", serde(rename = "parkingFee"))]
2511 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2512 pub parking_fee: Option<RationalNumber<CustomDataType>>,
2513 #[cfg_attr(feature = "serde", serde(rename = "parkingFeePeriod"))]
2516 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2517 pub parking_fee_period: Option<i64>,
2518 #[cfg_attr(feature = "serde", serde(rename = "powerRangeStart"))]
2519 pub power_range_start: RationalNumber<CustomDataType>,
2520 #[cfg_attr(feature = "serde", serde(rename = "renewableGenerationPercentage"))]
2522 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2523 pub renewable_generation_percentage: Option<i64>,
2524}
2525#[derive(Debug, Clone, PartialEq, Eq)]
2527#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2528pub struct PriceRuleStack<CustomDataType = crate::NoCustomData> {
2529 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2530 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2531 pub custom_data: Option<CustomDataType>,
2532 pub duration: i64,
2534 #[cfg_attr(feature = "serde", serde(rename = "priceRule"))]
2535 pub price_rule: heapless::Vec<PriceRule<CustomDataType>, 8usize>,
2536}
2537#[derive(Debug, Clone, PartialEq, Eq)]
2539#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2540pub struct TaxRule<CustomDataType = crate::NoCustomData> {
2541 #[cfg_attr(feature = "serde", serde(rename = "appliesToEnergyFee"))]
2543 pub applies_to_energy_fee: bool,
2544 #[cfg_attr(feature = "serde", serde(rename = "appliesToMinimumMaximumCost"))]
2546 pub applies_to_minimum_maximum_cost: bool,
2547 #[cfg_attr(feature = "serde", serde(rename = "appliesToOverstayFee"))]
2549 pub applies_to_overstay_fee: bool,
2550 #[cfg_attr(feature = "serde", serde(rename = "appliesToParkingFee"))]
2552 pub applies_to_parking_fee: bool,
2553 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2554 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2555 pub custom_data: Option<CustomDataType>,
2556 #[cfg_attr(feature = "serde", serde(rename = "taxIncludedInPrice"))]
2558 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2559 pub tax_included_in_price: Option<bool>,
2560 #[cfg_attr(feature = "serde", serde(rename = "taxRate"))]
2561 pub tax_rate: RationalNumber<CustomDataType>,
2562 #[cfg_attr(feature = "serde", serde(rename = "taxRuleID"))]
2564 pub tax_rule_i_d: i64,
2565 #[cfg_attr(feature = "serde", serde(rename = "taxRuleName"))]
2567 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2568 pub tax_rule_name: Option<heapless::String<100usize>>,
2569}
2570#[cfg(feature = "alloc")]
2571#[derive(Debug, Clone, PartialEq, Eq)]
2575#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2576pub struct AbsolutePriceSchedule<CustomDataType = crate::NoCustomData> {
2577 #[cfg_attr(feature = "serde", serde(rename = "additionalSelectedServices"))]
2578 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2579 pub additional_selected_services: Option<
2580 heapless::Vec<AdditionalSelectedServices<CustomDataType>, 5usize>,
2581 >,
2582 pub currency: heapless::String<3usize>,
2584 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2585 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2586 pub custom_data: Option<CustomDataType>,
2587 pub language: heapless::String<8usize>,
2589 #[cfg_attr(feature = "serde", serde(rename = "maximumCost"))]
2590 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2591 pub maximum_cost: Option<RationalNumber<CustomDataType>>,
2592 #[cfg_attr(feature = "serde", serde(rename = "minimumCost"))]
2593 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2594 pub minimum_cost: Option<RationalNumber<CustomDataType>>,
2595 #[cfg_attr(feature = "serde", serde(rename = "overstayRuleList"))]
2596 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2597 pub overstay_rule_list: Option<OverstayRuleList<CustomDataType>>,
2598 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
2600 pub price_algorithm: alloc::string::String,
2601 #[cfg_attr(feature = "serde", serde(rename = "priceRuleStacks"))]
2602 pub price_rule_stacks: alloc::vec::Vec<PriceRuleStack<CustomDataType>>,
2603 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2605 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2606 pub price_schedule_description: Option<heapless::String<160usize>>,
2607 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleID"))]
2609 pub price_schedule_i_d: i64,
2610 #[cfg_attr(feature = "serde", serde(rename = "taxRules"))]
2611 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2612 pub tax_rules: Option<heapless::Vec<TaxRule<CustomDataType>, 10usize>>,
2613 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2615 pub time_anchor: crate::OcppTimestamp,
2616}
2617#[cfg(not(feature = "alloc"))]
2618#[derive(Debug, Clone, PartialEq, Eq)]
2622#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2623pub struct AbsolutePriceSchedule<
2624 CustomDataType = crate::NoCustomData,
2625 const ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP: usize = 1024usize,
2626 const ABSOLUTE_PRICE_SCHEDULE_PRICE_RULE_STACKS_CAP: usize = 8usize,
2627> {
2628 #[cfg_attr(feature = "serde", serde(rename = "additionalSelectedServices"))]
2629 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2630 pub additional_selected_services: Option<
2631 heapless::Vec<AdditionalSelectedServices<CustomDataType>, 5usize>,
2632 >,
2633 pub currency: heapless::String<3usize>,
2635 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2636 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2637 pub custom_data: Option<CustomDataType>,
2638 pub language: heapless::String<8usize>,
2640 #[cfg_attr(feature = "serde", serde(rename = "maximumCost"))]
2641 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2642 pub maximum_cost: Option<RationalNumber<CustomDataType>>,
2643 #[cfg_attr(feature = "serde", serde(rename = "minimumCost"))]
2644 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2645 pub minimum_cost: Option<RationalNumber<CustomDataType>>,
2646 #[cfg_attr(feature = "serde", serde(rename = "overstayRuleList"))]
2647 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2648 pub overstay_rule_list: Option<OverstayRuleList<CustomDataType>>,
2649 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
2651 pub price_algorithm: heapless::String<ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP>,
2652 #[cfg_attr(feature = "serde", serde(rename = "priceRuleStacks"))]
2653 pub price_rule_stacks: heapless::Vec<
2654 PriceRuleStack<CustomDataType>,
2655 ABSOLUTE_PRICE_SCHEDULE_PRICE_RULE_STACKS_CAP,
2656 >,
2657 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2659 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2660 pub price_schedule_description: Option<heapless::String<160usize>>,
2661 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleID"))]
2663 pub price_schedule_i_d: i64,
2664 #[cfg_attr(feature = "serde", serde(rename = "taxRules"))]
2665 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2666 pub tax_rules: Option<heapless::Vec<TaxRule<CustomDataType>, 10usize>>,
2667 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2669 pub time_anchor: crate::OcppTimestamp,
2670}
2671#[derive(Debug, Clone, PartialEq)]
2672#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2673pub struct LimitAtSoC<CustomDataType = crate::NoCustomData> {
2674 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2675 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2676 pub custom_data: Option<CustomDataType>,
2677 pub limit: f64,
2680 pub soc: i64,
2682}
2683#[derive(Debug, Clone, PartialEq, Eq)]
2685#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2686pub struct PriceLevelScheduleEntry<CustomDataType = crate::NoCustomData> {
2687 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2688 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2689 pub custom_data: Option<CustomDataType>,
2690 pub duration: i64,
2692 #[cfg_attr(feature = "serde", serde(rename = "priceLevel"))]
2694 pub price_level: i64,
2695}
2696#[cfg(feature = "alloc")]
2697#[derive(Debug, Clone, PartialEq, Eq)]
2699#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2700pub struct PriceLevelSchedule<CustomDataType = crate::NoCustomData> {
2701 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2702 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2703 pub custom_data: Option<CustomDataType>,
2704 #[cfg_attr(feature = "serde", serde(rename = "numberOfPriceLevels"))]
2706 pub number_of_price_levels: i64,
2707 #[cfg_attr(feature = "serde", serde(rename = "priceLevelScheduleEntries"))]
2708 pub price_level_schedule_entries: alloc::vec::Vec<
2709 PriceLevelScheduleEntry<CustomDataType>,
2710 >,
2711 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2713 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2714 pub price_schedule_description: Option<heapless::String<32usize>>,
2715 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleId"))]
2717 pub price_schedule_id: i64,
2718 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2720 pub time_anchor: crate::OcppTimestamp,
2721}
2722#[cfg(not(feature = "alloc"))]
2723#[derive(Debug, Clone, PartialEq, Eq)]
2725#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2726pub struct PriceLevelSchedule<
2727 CustomDataType = crate::NoCustomData,
2728 const PRICE_LEVEL_SCHEDULE_PRICE_LEVEL_SCHEDULE_ENTRIES_CAP: usize = 8usize,
2729> {
2730 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2731 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2732 pub custom_data: Option<CustomDataType>,
2733 #[cfg_attr(feature = "serde", serde(rename = "numberOfPriceLevels"))]
2735 pub number_of_price_levels: i64,
2736 #[cfg_attr(feature = "serde", serde(rename = "priceLevelScheduleEntries"))]
2737 pub price_level_schedule_entries: heapless::Vec<
2738 PriceLevelScheduleEntry<CustomDataType>,
2739 PRICE_LEVEL_SCHEDULE_PRICE_LEVEL_SCHEDULE_ENTRIES_CAP,
2740 >,
2741 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2743 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2744 pub price_schedule_description: Option<heapless::String<32usize>>,
2745 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleId"))]
2747 pub price_schedule_id: i64,
2748 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2750 pub time_anchor: crate::OcppTimestamp,
2751}
2752#[derive(Debug, Clone, PartialEq, Eq)]
2754#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2755pub enum CostKindEnum {
2756 CarbonDioxideEmission,
2757 RelativePricePercentage,
2758 RenewableGenerationPercentage,
2759}
2760#[derive(Debug, Clone, PartialEq, Eq)]
2761#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2762pub struct Cost<CustomDataType = crate::NoCustomData> {
2763 pub amount: i64,
2765 #[cfg_attr(feature = "serde", serde(rename = "amountMultiplier"))]
2767 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2768 pub amount_multiplier: Option<i64>,
2769 #[cfg_attr(feature = "serde", serde(rename = "costKind"))]
2770 pub cost_kind: CostKindEnum,
2771 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2772 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2773 pub custom_data: Option<CustomDataType>,
2774}
2775#[derive(Debug, Clone, PartialEq)]
2776#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2777pub struct ConsumptionCost<CustomDataType = crate::NoCustomData> {
2778 pub cost: heapless::Vec<Cost<CustomDataType>, 3usize>,
2779 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2780 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2781 pub custom_data: Option<CustomDataType>,
2782 #[cfg_attr(feature = "serde", serde(rename = "startValue"))]
2784 pub start_value: f64,
2785}
2786#[derive(Debug, Clone, PartialEq, Eq)]
2787#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2788pub struct RelativeTimeInterval<CustomDataType = crate::NoCustomData> {
2789 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2790 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2791 pub custom_data: Option<CustomDataType>,
2792 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2794 pub duration: Option<i64>,
2795 pub start: i64,
2797}
2798#[derive(Debug, Clone, PartialEq)]
2799#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2800pub struct SalesTariffEntry<CustomDataType = crate::NoCustomData> {
2801 #[cfg_attr(feature = "serde", serde(rename = "consumptionCost"))]
2802 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2803 pub consumption_cost: Option<heapless::Vec<ConsumptionCost<CustomDataType>, 3usize>>,
2804 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2805 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2806 pub custom_data: Option<CustomDataType>,
2807 #[cfg_attr(feature = "serde", serde(rename = "ePriceLevel"))]
2809 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2810 pub e_price_level: Option<i64>,
2811 #[cfg_attr(feature = "serde", serde(rename = "relativeTimeInterval"))]
2812 pub relative_time_interval: RelativeTimeInterval<CustomDataType>,
2813}
2814#[cfg(feature = "alloc")]
2815#[derive(Debug, Clone, PartialEq)]
2818#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2819pub struct SalesTariff<CustomDataType = crate::NoCustomData> {
2820 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2821 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2822 pub custom_data: Option<CustomDataType>,
2823 pub id: i64,
2825 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
2827 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2828 pub num_e_price_levels: Option<i64>,
2829 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
2831 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2832 pub sales_tariff_description: Option<heapless::String<32usize>>,
2833 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
2834 pub sales_tariff_entry: alloc::vec::Vec<SalesTariffEntry<CustomDataType>>,
2835}
2836#[cfg(not(feature = "alloc"))]
2837#[derive(Debug, Clone, PartialEq)]
2840#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2841pub struct SalesTariff<
2842 CustomDataType = crate::NoCustomData,
2843 const SALES_TARIFF_SALES_TARIFF_ENTRY_CAP: usize = 8usize,
2844> {
2845 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2846 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2847 pub custom_data: Option<CustomDataType>,
2848 pub id: i64,
2850 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
2852 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2853 pub num_e_price_levels: Option<i64>,
2854 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
2856 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2857 pub sales_tariff_description: Option<heapless::String<32usize>>,
2858 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
2859 pub sales_tariff_entry: heapless::Vec<
2860 SalesTariffEntry<CustomDataType>,
2861 SALES_TARIFF_SALES_TARIFF_ENTRY_CAP,
2862 >,
2863}
2864#[cfg(feature = "alloc")]
2865#[derive(Debug, Clone, PartialEq)]
2870#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2871pub struct ChargingSchedule<CustomDataType = crate::NoCustomData> {
2872 #[cfg_attr(feature = "serde", serde(rename = "absolutePriceSchedule"))]
2873 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2874 pub absolute_price_schedule: Option<AbsolutePriceSchedule<CustomDataType>>,
2875 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
2876 pub charging_rate_unit: ChargingRateUnitEnum,
2877 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
2878 pub charging_schedule_period: alloc::vec::Vec<
2879 ChargingSchedulePeriod<CustomDataType>,
2880 >,
2881 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2882 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2883 pub custom_data: Option<CustomDataType>,
2884 #[cfg_attr(feature = "serde", serde(rename = "digestValue"))]
2886 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2887 pub digest_value: Option<heapless::String<88usize>>,
2888 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2890 pub duration: Option<i64>,
2891 pub id: i64,
2892 #[cfg_attr(feature = "serde", serde(rename = "limitAtSoC"))]
2893 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2894 pub limit_at_so_c: Option<LimitAtSoC<CustomDataType>>,
2895 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
2897 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2898 pub min_charging_rate: Option<f64>,
2899 #[cfg_attr(feature = "serde", serde(rename = "powerTolerance"))]
2901 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2902 pub power_tolerance: Option<f64>,
2903 #[cfg_attr(feature = "serde", serde(rename = "priceLevelSchedule"))]
2904 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2905 pub price_level_schedule: Option<PriceLevelSchedule<CustomDataType>>,
2906 #[cfg_attr(feature = "serde", serde(rename = "randomizedDelay"))]
2908 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2909 pub randomized_delay: Option<i64>,
2910 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
2911 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2912 pub sales_tariff: Option<SalesTariff<CustomDataType>>,
2913 #[cfg_attr(feature = "serde", serde(rename = "signatureId"))]
2915 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2916 pub signature_id: Option<i64>,
2917 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
2919 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2920 pub start_schedule: Option<crate::OcppTimestamp>,
2921 #[cfg_attr(feature = "serde", serde(rename = "useLocalTime"))]
2924 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2925 pub use_local_time: Option<bool>,
2926}
2927#[cfg(not(feature = "alloc"))]
2928#[derive(Debug, Clone, PartialEq)]
2933#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2934pub struct ChargingSchedule<
2935 CustomDataType = crate::NoCustomData,
2936 const ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP: usize = 1024usize,
2937 const ABSOLUTE_PRICE_SCHEDULE_PRICE_RULE_STACKS_CAP: usize = 8usize,
2938 const CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 8usize,
2939 const CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP: usize = 8usize,
2940 const CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP: usize = 8usize,
2941 const PRICE_LEVEL_SCHEDULE_PRICE_LEVEL_SCHEDULE_ENTRIES_CAP: usize = 8usize,
2942 const SALES_TARIFF_SALES_TARIFF_ENTRY_CAP: usize = 8usize,
2943> {
2944 #[cfg_attr(feature = "serde", serde(rename = "absolutePriceSchedule"))]
2945 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2946 pub absolute_price_schedule: Option<
2947 AbsolutePriceSchedule<
2948 CustomDataType,
2949 ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP,
2950 ABSOLUTE_PRICE_SCHEDULE_PRICE_RULE_STACKS_CAP,
2951 >,
2952 >,
2953 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
2954 pub charging_rate_unit: ChargingRateUnitEnum,
2955 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
2956 pub charging_schedule_period: heapless::Vec<
2957 ChargingSchedulePeriod<
2958 CustomDataType,
2959 CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP,
2960 CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP,
2961 >,
2962 CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
2963 >,
2964 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2965 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2966 pub custom_data: Option<CustomDataType>,
2967 #[cfg_attr(feature = "serde", serde(rename = "digestValue"))]
2969 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2970 pub digest_value: Option<heapless::String<88usize>>,
2971 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2973 pub duration: Option<i64>,
2974 pub id: i64,
2975 #[cfg_attr(feature = "serde", serde(rename = "limitAtSoC"))]
2976 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2977 pub limit_at_so_c: Option<LimitAtSoC<CustomDataType>>,
2978 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
2980 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2981 pub min_charging_rate: Option<f64>,
2982 #[cfg_attr(feature = "serde", serde(rename = "powerTolerance"))]
2984 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2985 pub power_tolerance: Option<f64>,
2986 #[cfg_attr(feature = "serde", serde(rename = "priceLevelSchedule"))]
2987 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2988 pub price_level_schedule: Option<
2989 PriceLevelSchedule<
2990 CustomDataType,
2991 PRICE_LEVEL_SCHEDULE_PRICE_LEVEL_SCHEDULE_ENTRIES_CAP,
2992 >,
2993 >,
2994 #[cfg_attr(feature = "serde", serde(rename = "randomizedDelay"))]
2996 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2997 pub randomized_delay: Option<i64>,
2998 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
2999 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3000 pub sales_tariff: Option<
3001 SalesTariff<CustomDataType, SALES_TARIFF_SALES_TARIFF_ENTRY_CAP>,
3002 >,
3003 #[cfg_attr(feature = "serde", serde(rename = "signatureId"))]
3005 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3006 pub signature_id: Option<i64>,
3007 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
3009 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3010 pub start_schedule: Option<crate::OcppTimestamp>,
3011 #[cfg_attr(feature = "serde", serde(rename = "useLocalTime"))]
3014 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3015 pub use_local_time: Option<bool>,
3016}
3017#[derive(Debug, Clone, PartialEq, Eq)]
3019#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3020pub enum GridEventFaultEnum {
3021 CurrentImbalance,
3022 LocalEmergency,
3023 LowInputPower,
3024 OverCurrent,
3025 OverFrequency,
3026 OverVoltage,
3027 PhaseRotation,
3028 RemoteEmergency,
3029 UnderFrequency,
3030 UnderVoltage,
3031 VoltageImbalance,
3032}
3033#[cfg(feature = "alloc")]
3034#[derive(Debug, Clone, PartialEq, Eq)]
3036#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3037pub struct MessageInfo<CustomDataType = crate::NoCustomData> {
3038 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3039 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3040 pub custom_data: Option<CustomDataType>,
3041 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3042 pub display: Option<Component<CustomDataType>>,
3043 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
3045 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3046 pub end_date_time: Option<crate::OcppTimestamp>,
3047 pub id: i64,
3049 pub message: MessageContent<CustomDataType>,
3050 #[cfg_attr(feature = "serde", serde(rename = "messageExtra"))]
3051 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3052 pub message_extra: Option<heapless::Vec<MessageContent<CustomDataType>, 4usize>>,
3053 pub priority: MessagePriorityEnum,
3054 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
3056 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3057 pub start_date_time: Option<crate::OcppTimestamp>,
3058 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3059 pub state: Option<MessageStateEnum>,
3060 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
3064 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3065 pub transaction_id: Option<heapless::String<36usize>>,
3066}
3067#[cfg(not(feature = "alloc"))]
3068#[derive(Debug, Clone, PartialEq, Eq)]
3070#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3071pub struct MessageInfo<
3072 CustomDataType = crate::NoCustomData,
3073 const MESSAGE_CONTENT_CONTENT_CAP: usize = 1024usize,
3074> {
3075 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3076 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3077 pub custom_data: Option<CustomDataType>,
3078 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3079 pub display: Option<Component<CustomDataType>>,
3080 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
3082 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3083 pub end_date_time: Option<crate::OcppTimestamp>,
3084 pub id: i64,
3086 pub message: MessageContent<CustomDataType, MESSAGE_CONTENT_CONTENT_CAP>,
3087 #[cfg_attr(feature = "serde", serde(rename = "messageExtra"))]
3088 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3089 pub message_extra: Option<
3090 heapless::Vec<
3091 MessageContent<CustomDataType, MESSAGE_CONTENT_CONTENT_CAP>,
3092 4usize,
3093 >,
3094 >,
3095 pub priority: MessagePriorityEnum,
3096 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
3098 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3099 pub start_date_time: Option<crate::OcppTimestamp>,
3100 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3101 pub state: Option<MessageStateEnum>,
3102 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
3106 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3107 pub transaction_id: Option<heapless::String<36usize>>,
3108}
3109#[derive(Debug, Clone, PartialEq)]
3111#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3112pub struct ACChargingParameters<CustomDataType = crate::NoCustomData> {
3113 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3114 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3115 pub custom_data: Option<CustomDataType>,
3116 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
3121 pub energy_amount: f64,
3122 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
3126 pub ev_max_current: f64,
3127 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
3131 pub ev_max_voltage: f64,
3132 #[cfg_attr(feature = "serde", serde(rename = "evMinCurrent"))]
3136 pub ev_min_current: f64,
3137}
3138#[derive(Debug, Clone, PartialEq, Eq)]
3142#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3143pub enum ControlModeEnum {
3144 ScheduledControl,
3145 DynamicControl,
3146}
3147#[derive(Debug, Clone, PartialEq)]
3149#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3150pub struct DCChargingParameters<CustomDataType = crate::NoCustomData> {
3151 #[cfg_attr(feature = "serde", serde(rename = "bulkSoC"))]
3155 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3156 pub bulk_so_c: Option<i64>,
3157 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3158 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3159 pub custom_data: Option<CustomDataType>,
3160 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
3164 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3165 pub energy_amount: Option<f64>,
3166 #[cfg_attr(feature = "serde", serde(rename = "evEnergyCapacity"))]
3170 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3171 pub ev_energy_capacity: Option<f64>,
3172 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
3176 pub ev_max_current: f64,
3177 #[cfg_attr(feature = "serde", serde(rename = "evMaxPower"))]
3181 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3182 pub ev_max_power: Option<f64>,
3183 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
3187 pub ev_max_voltage: f64,
3188 #[cfg_attr(feature = "serde", serde(rename = "fullSoC"))]
3192 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3193 pub full_so_c: Option<i64>,
3194 #[cfg_attr(feature = "serde", serde(rename = "stateOfCharge"))]
3198 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3199 pub state_of_charge: Option<i64>,
3200}
3201#[derive(Debug, Clone, PartialEq, Eq)]
3202#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3203pub enum IslandingDetectionEnum {
3204 NoAntiIslandingSupport,
3205 RoCoF,
3206 #[cfg_attr(feature = "serde", serde(rename = "UVP_OVP"))]
3207 UVPOVP,
3208 #[cfg_attr(feature = "serde", serde(rename = "UFP_OFP"))]
3209 UFPOFP,
3210 VoltageVectorShift,
3211 ZeroCrossingDetection,
3212 OtherPassive,
3213 ImpedanceMeasurement,
3214 ImpedanceAtFrequency,
3215 SlipModeFrequencyShift,
3216 SandiaFrequencyShift,
3217 SandiaVoltageShift,
3218 FrequencyJump,
3219 RCLQFactor,
3220 OtherActive,
3221}
3222#[cfg(feature = "alloc")]
3223#[derive(Debug, Clone, PartialEq)]
3232#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3233pub struct DERChargingParameters<CustomDataType = crate::NoCustomData> {
3234 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3235 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3236 pub custom_data: Option<CustomDataType>,
3237 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel1DCInjection"))]
3240 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3241 pub ev_duration_level1_d_c_injection: Option<f64>,
3242 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel2DCInjection"))]
3245 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3246 pub ev_duration_level2_d_c_injection: Option<f64>,
3247 #[cfg_attr(feature = "serde", serde(rename = "evInverterHwVersion"))]
3250 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3251 pub ev_inverter_hw_version: Option<heapless::String<50usize>>,
3252 #[cfg_attr(feature = "serde", serde(rename = "evInverterManufacturer"))]
3255 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3256 pub ev_inverter_manufacturer: Option<heapless::String<50usize>>,
3257 #[cfg_attr(feature = "serde", serde(rename = "evInverterModel"))]
3260 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3261 pub ev_inverter_model: Option<heapless::String<50usize>>,
3262 #[cfg_attr(feature = "serde", serde(rename = "evInverterSerialNumber"))]
3265 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3266 pub ev_inverter_serial_number: Option<heapless::String<50usize>>,
3267 #[cfg_attr(feature = "serde", serde(rename = "evInverterSwVersion"))]
3270 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3271 pub ev_inverter_sw_version: Option<heapless::String<50usize>>,
3272 #[cfg_attr(feature = "serde", serde(rename = "evIslandingDetectionMethod"))]
3275 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3276 pub ev_islanding_detection_method: Option<alloc::vec::Vec<IslandingDetectionEnum>>,
3277 #[cfg_attr(feature = "serde", serde(rename = "evIslandingTripTime"))]
3280 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3281 pub ev_islanding_trip_time: Option<f64>,
3282 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel1DCInjection"))]
3285 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3286 pub ev_maximum_level1_d_c_injection: Option<f64>,
3287 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel2DCInjection"))]
3290 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3291 pub ev_maximum_level2_d_c_injection: Option<f64>,
3292 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedMaxDischargePower"))]
3297 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3298 pub ev_over_excited_max_discharge_power: Option<f64>,
3299 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedPowerFactor"))]
3303 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3304 pub ev_over_excited_power_factor: Option<f64>,
3305 #[cfg_attr(feature = "serde", serde(rename = "evReactiveSusceptance"))]
3308 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3309 pub ev_reactive_susceptance: Option<f64>,
3310 #[cfg_attr(
3313 feature = "serde",
3314 serde(rename = "evSessionTotalDischargeEnergyAvailable")
3315 )]
3316 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3317 pub ev_session_total_discharge_energy_available: Option<f64>,
3318 #[cfg_attr(feature = "serde", serde(rename = "evSupportedDERControl"))]
3321 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3322 pub ev_supported_d_e_r_control: Option<alloc::vec::Vec<DERControlEnum>>,
3323 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedMaxDischargePower"))]
3329 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3330 pub ev_under_excited_max_discharge_power: Option<f64>,
3331 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedPowerFactor"))]
3335 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3336 pub ev_under_excited_power_factor: Option<f64>,
3337 #[cfg_attr(feature = "serde", serde(rename = "maxApparentPower"))]
3341 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3342 pub max_apparent_power: Option<f64>,
3343 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower"))]
3349 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3350 pub max_charge_apparent_power: Option<f64>,
3351 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L2"))]
3355 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3356 pub max_charge_apparent_power_l2: Option<f64>,
3357 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L3"))]
3361 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3362 pub max_charge_apparent_power_l3: Option<f64>,
3363 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower"))]
3369 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3370 pub max_charge_reactive_power: Option<f64>,
3371 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L2"))]
3375 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3376 pub max_charge_reactive_power_l2: Option<f64>,
3377 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L3"))]
3381 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3382 pub max_charge_reactive_power_l3: Option<f64>,
3383 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower"))]
3389 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3390 pub max_discharge_apparent_power: Option<f64>,
3391 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L2"))]
3395 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3396 pub max_discharge_apparent_power_l2: Option<f64>,
3397 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L3"))]
3401 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3402 pub max_discharge_apparent_power_l3: Option<f64>,
3403 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower"))]
3409 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3410 pub max_discharge_reactive_power: Option<f64>,
3411 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L2"))]
3415 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3416 pub max_discharge_reactive_power_l2: Option<f64>,
3417 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L3"))]
3421 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3422 pub max_discharge_reactive_power_l3: Option<f64>,
3423 #[cfg_attr(feature = "serde", serde(rename = "maxNominalVoltage"))]
3426 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3427 pub max_nominal_voltage: Option<f64>,
3428 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower"))]
3433 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3434 pub min_charge_reactive_power: Option<f64>,
3435 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L2"))]
3438 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3439 pub min_charge_reactive_power_l2: Option<f64>,
3440 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L3"))]
3443 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3444 pub min_charge_reactive_power_l3: Option<f64>,
3445 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower"))]
3450 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3451 pub min_discharge_reactive_power: Option<f64>,
3452 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L2"))]
3455 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3456 pub min_discharge_reactive_power_l2: Option<f64>,
3457 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L3"))]
3460 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3461 pub min_discharge_reactive_power_l3: Option<f64>,
3462 #[cfg_attr(feature = "serde", serde(rename = "minNominalVoltage"))]
3465 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3466 pub min_nominal_voltage: Option<f64>,
3467 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltage"))]
3470 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3471 pub nominal_voltage: Option<f64>,
3472 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltageOffset"))]
3475 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3476 pub nominal_voltage_offset: Option<f64>,
3477}
3478#[cfg(not(feature = "alloc"))]
3479#[derive(Debug, Clone, PartialEq)]
3488#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3489pub struct DERChargingParameters<
3490 CustomDataType = crate::NoCustomData,
3491 const D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP: usize = 8usize,
3492 const D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP: usize = 8usize,
3493> {
3494 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3495 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3496 pub custom_data: Option<CustomDataType>,
3497 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel1DCInjection"))]
3500 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3501 pub ev_duration_level1_d_c_injection: Option<f64>,
3502 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel2DCInjection"))]
3505 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3506 pub ev_duration_level2_d_c_injection: Option<f64>,
3507 #[cfg_attr(feature = "serde", serde(rename = "evInverterHwVersion"))]
3510 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3511 pub ev_inverter_hw_version: Option<heapless::String<50usize>>,
3512 #[cfg_attr(feature = "serde", serde(rename = "evInverterManufacturer"))]
3515 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3516 pub ev_inverter_manufacturer: Option<heapless::String<50usize>>,
3517 #[cfg_attr(feature = "serde", serde(rename = "evInverterModel"))]
3520 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3521 pub ev_inverter_model: Option<heapless::String<50usize>>,
3522 #[cfg_attr(feature = "serde", serde(rename = "evInverterSerialNumber"))]
3525 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3526 pub ev_inverter_serial_number: Option<heapless::String<50usize>>,
3527 #[cfg_attr(feature = "serde", serde(rename = "evInverterSwVersion"))]
3530 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3531 pub ev_inverter_sw_version: Option<heapless::String<50usize>>,
3532 #[cfg_attr(feature = "serde", serde(rename = "evIslandingDetectionMethod"))]
3535 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3536 pub ev_islanding_detection_method: Option<
3537 heapless::Vec<
3538 IslandingDetectionEnum,
3539 D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP,
3540 >,
3541 >,
3542 #[cfg_attr(feature = "serde", serde(rename = "evIslandingTripTime"))]
3545 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3546 pub ev_islanding_trip_time: Option<f64>,
3547 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel1DCInjection"))]
3550 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3551 pub ev_maximum_level1_d_c_injection: Option<f64>,
3552 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel2DCInjection"))]
3555 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3556 pub ev_maximum_level2_d_c_injection: Option<f64>,
3557 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedMaxDischargePower"))]
3562 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3563 pub ev_over_excited_max_discharge_power: Option<f64>,
3564 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedPowerFactor"))]
3568 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3569 pub ev_over_excited_power_factor: Option<f64>,
3570 #[cfg_attr(feature = "serde", serde(rename = "evReactiveSusceptance"))]
3573 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3574 pub ev_reactive_susceptance: Option<f64>,
3575 #[cfg_attr(
3578 feature = "serde",
3579 serde(rename = "evSessionTotalDischargeEnergyAvailable")
3580 )]
3581 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3582 pub ev_session_total_discharge_energy_available: Option<f64>,
3583 #[cfg_attr(feature = "serde", serde(rename = "evSupportedDERControl"))]
3586 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3587 pub ev_supported_d_e_r_control: Option<
3588 heapless::Vec<
3589 DERControlEnum,
3590 D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP,
3591 >,
3592 >,
3593 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedMaxDischargePower"))]
3599 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3600 pub ev_under_excited_max_discharge_power: Option<f64>,
3601 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedPowerFactor"))]
3605 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3606 pub ev_under_excited_power_factor: Option<f64>,
3607 #[cfg_attr(feature = "serde", serde(rename = "maxApparentPower"))]
3611 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3612 pub max_apparent_power: Option<f64>,
3613 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower"))]
3619 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3620 pub max_charge_apparent_power: Option<f64>,
3621 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L2"))]
3625 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3626 pub max_charge_apparent_power_l2: Option<f64>,
3627 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L3"))]
3631 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3632 pub max_charge_apparent_power_l3: Option<f64>,
3633 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower"))]
3639 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3640 pub max_charge_reactive_power: Option<f64>,
3641 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L2"))]
3645 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3646 pub max_charge_reactive_power_l2: Option<f64>,
3647 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L3"))]
3651 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3652 pub max_charge_reactive_power_l3: Option<f64>,
3653 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower"))]
3659 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3660 pub max_discharge_apparent_power: Option<f64>,
3661 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L2"))]
3665 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3666 pub max_discharge_apparent_power_l2: Option<f64>,
3667 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L3"))]
3671 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3672 pub max_discharge_apparent_power_l3: Option<f64>,
3673 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower"))]
3679 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3680 pub max_discharge_reactive_power: Option<f64>,
3681 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L2"))]
3685 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3686 pub max_discharge_reactive_power_l2: Option<f64>,
3687 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L3"))]
3691 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3692 pub max_discharge_reactive_power_l3: Option<f64>,
3693 #[cfg_attr(feature = "serde", serde(rename = "maxNominalVoltage"))]
3696 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3697 pub max_nominal_voltage: Option<f64>,
3698 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower"))]
3703 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3704 pub min_charge_reactive_power: Option<f64>,
3705 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L2"))]
3708 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3709 pub min_charge_reactive_power_l2: Option<f64>,
3710 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L3"))]
3713 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3714 pub min_charge_reactive_power_l3: Option<f64>,
3715 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower"))]
3720 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3721 pub min_discharge_reactive_power: Option<f64>,
3722 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L2"))]
3725 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3726 pub min_discharge_reactive_power_l2: Option<f64>,
3727 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L3"))]
3730 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3731 pub min_discharge_reactive_power_l3: Option<f64>,
3732 #[cfg_attr(feature = "serde", serde(rename = "minNominalVoltage"))]
3735 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3736 pub min_nominal_voltage: Option<f64>,
3737 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltage"))]
3740 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3741 pub nominal_voltage: Option<f64>,
3742 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltageOffset"))]
3745 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3746 pub nominal_voltage_offset: Option<f64>,
3747}
3748#[derive(Debug, Clone, PartialEq)]
3750#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3751pub struct EVPriceRule<CustomDataType = crate::NoCustomData> {
3752 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3753 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3754 pub custom_data: Option<CustomDataType>,
3755 #[cfg_attr(feature = "serde", serde(rename = "energyFee"))]
3757 pub energy_fee: f64,
3758 #[cfg_attr(feature = "serde", serde(rename = "powerRangeStart"))]
3760 pub power_range_start: f64,
3761}
3762#[derive(Debug, Clone, PartialEq)]
3764#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3765pub struct EVAbsolutePriceScheduleEntry<CustomDataType = crate::NoCustomData> {
3766 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3767 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3768 pub custom_data: Option<CustomDataType>,
3769 pub duration: i64,
3771 #[cfg_attr(feature = "serde", serde(rename = "evPriceRule"))]
3772 pub ev_price_rule: heapless::Vec<EVPriceRule<CustomDataType>, 8usize>,
3773}
3774#[cfg(feature = "alloc")]
3775#[derive(Debug, Clone, PartialEq)]
3777#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3778pub struct EVAbsolutePriceSchedule<CustomDataType = crate::NoCustomData> {
3779 pub currency: heapless::String<3usize>,
3781 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3782 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3783 pub custom_data: Option<CustomDataType>,
3784 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceScheduleEntries"))]
3785 pub ev_absolute_price_schedule_entries: alloc::vec::Vec<
3786 EVAbsolutePriceScheduleEntry<CustomDataType>,
3787 >,
3788 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
3790 pub price_algorithm: alloc::string::String,
3791 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3793 pub time_anchor: crate::OcppTimestamp,
3794}
3795#[cfg(not(feature = "alloc"))]
3796#[derive(Debug, Clone, PartialEq)]
3798#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3799pub struct EVAbsolutePriceSchedule<
3800 CustomDataType = crate::NoCustomData,
3801 const E_V_ABSOLUTE_PRICE_SCHEDULE_EV_ABSOLUTE_PRICE_SCHEDULE_ENTRIES_CAP: usize = 8usize,
3802 const E_V_ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP: usize = 1024usize,
3803> {
3804 pub currency: heapless::String<3usize>,
3806 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3807 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3808 pub custom_data: Option<CustomDataType>,
3809 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceScheduleEntries"))]
3810 pub ev_absolute_price_schedule_entries: heapless::Vec<
3811 EVAbsolutePriceScheduleEntry<CustomDataType>,
3812 E_V_ABSOLUTE_PRICE_SCHEDULE_EV_ABSOLUTE_PRICE_SCHEDULE_ENTRIES_CAP,
3813 >,
3814 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
3816 pub price_algorithm: heapless::String<
3817 E_V_ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP,
3818 >,
3819 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3821 pub time_anchor: crate::OcppTimestamp,
3822}
3823#[derive(Debug, Clone, PartialEq)]
3825#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3826pub struct EVPowerScheduleEntry<CustomDataType = crate::NoCustomData> {
3827 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3828 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3829 pub custom_data: Option<CustomDataType>,
3830 pub duration: i64,
3832 pub power: f64,
3834}
3835#[cfg(feature = "alloc")]
3836#[derive(Debug, Clone, PartialEq)]
3838#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3839pub struct EVPowerSchedule<CustomDataType = crate::NoCustomData> {
3840 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3841 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3842 pub custom_data: Option<CustomDataType>,
3843 #[cfg_attr(feature = "serde", serde(rename = "evPowerScheduleEntries"))]
3844 pub ev_power_schedule_entries: alloc::vec::Vec<EVPowerScheduleEntry<CustomDataType>>,
3845 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3847 pub time_anchor: crate::OcppTimestamp,
3848}
3849#[cfg(not(feature = "alloc"))]
3850#[derive(Debug, Clone, PartialEq)]
3852#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3853pub struct EVPowerSchedule<
3854 CustomDataType = crate::NoCustomData,
3855 const E_V_POWER_SCHEDULE_EV_POWER_SCHEDULE_ENTRIES_CAP: usize = 8usize,
3856> {
3857 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3858 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3859 pub custom_data: Option<CustomDataType>,
3860 #[cfg_attr(feature = "serde", serde(rename = "evPowerScheduleEntries"))]
3861 pub ev_power_schedule_entries: heapless::Vec<
3862 EVPowerScheduleEntry<CustomDataType>,
3863 E_V_POWER_SCHEDULE_EV_POWER_SCHEDULE_ENTRIES_CAP,
3864 >,
3865 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3867 pub time_anchor: crate::OcppTimestamp,
3868}
3869#[cfg(feature = "alloc")]
3870#[derive(Debug, Clone, PartialEq)]
3872#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3873pub struct EVEnergyOffer<CustomDataType = crate::NoCustomData> {
3874 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3875 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3876 pub custom_data: Option<CustomDataType>,
3877 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceSchedule"))]
3878 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3879 pub ev_absolute_price_schedule: Option<EVAbsolutePriceSchedule<CustomDataType>>,
3880 #[cfg_attr(feature = "serde", serde(rename = "evPowerSchedule"))]
3881 pub ev_power_schedule: EVPowerSchedule<CustomDataType>,
3882}
3883#[cfg(not(feature = "alloc"))]
3884#[derive(Debug, Clone, PartialEq)]
3886#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3887pub struct EVEnergyOffer<
3888 CustomDataType = crate::NoCustomData,
3889 const E_V_ABSOLUTE_PRICE_SCHEDULE_EV_ABSOLUTE_PRICE_SCHEDULE_ENTRIES_CAP: usize = 8usize,
3890 const E_V_ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP: usize = 1024usize,
3891 const E_V_POWER_SCHEDULE_EV_POWER_SCHEDULE_ENTRIES_CAP: usize = 8usize,
3892> {
3893 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3894 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3895 pub custom_data: Option<CustomDataType>,
3896 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceSchedule"))]
3897 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3898 pub ev_absolute_price_schedule: Option<
3899 EVAbsolutePriceSchedule<
3900 CustomDataType,
3901 E_V_ABSOLUTE_PRICE_SCHEDULE_EV_ABSOLUTE_PRICE_SCHEDULE_ENTRIES_CAP,
3902 E_V_ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP,
3903 >,
3904 >,
3905 #[cfg_attr(feature = "serde", serde(rename = "evPowerSchedule"))]
3906 pub ev_power_schedule: EVPowerSchedule<
3907 CustomDataType,
3908 E_V_POWER_SCHEDULE_EV_POWER_SCHEDULE_ENTRIES_CAP,
3909 >,
3910}
3911#[derive(Debug, Clone, PartialEq, Eq)]
3916#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3917pub enum MobilityNeedsModeEnum {
3918 EVCC,
3919 #[cfg_attr(feature = "serde", serde(rename = "EVCC_SECC"))]
3920 EVCCSECC,
3921}
3922#[derive(Debug, Clone, PartialEq)]
3925#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3926pub struct V2XChargingParameters<CustomDataType = crate::NoCustomData> {
3927 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3928 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3929 pub custom_data: Option<CustomDataType>,
3930 #[cfg_attr(feature = "serde", serde(rename = "evMaxEnergyRequest"))]
3934 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3935 pub ev_max_energy_request: Option<f64>,
3936 #[cfg_attr(feature = "serde", serde(rename = "evMaxV2XEnergyRequest"))]
3941 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3942 pub ev_max_v2_x_energy_request: Option<f64>,
3943 #[cfg_attr(feature = "serde", serde(rename = "evMinEnergyRequest"))]
3947 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3948 pub ev_min_energy_request: Option<f64>,
3949 #[cfg_attr(feature = "serde", serde(rename = "evMinV2XEnergyRequest"))]
3954 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3955 pub ev_min_v2_x_energy_request: Option<f64>,
3956 #[cfg_attr(feature = "serde", serde(rename = "evTargetEnergyRequest"))]
3960 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3961 pub ev_target_energy_request: Option<f64>,
3962 #[cfg_attr(feature = "serde", serde(rename = "maxChargeCurrent"))]
3966 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3967 pub max_charge_current: Option<f64>,
3968 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower"))]
3976 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3977 pub max_charge_power: Option<f64>,
3978 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower_L2"))]
3982 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3983 pub max_charge_power_l2: Option<f64>,
3984 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower_L3"))]
3988 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3989 pub max_charge_power_l3: Option<f64>,
3990 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeCurrent"))]
3994 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3995 pub max_discharge_current: Option<f64>,
3996 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower"))]
4001 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4002 pub max_discharge_power: Option<f64>,
4003 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower_L2"))]
4007 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4008 pub max_discharge_power_l2: Option<f64>,
4009 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower_L3"))]
4013 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4014 pub max_discharge_power_l3: Option<f64>,
4015 #[cfg_attr(feature = "serde", serde(rename = "maxVoltage"))]
4019 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4020 pub max_voltage: Option<f64>,
4021 #[cfg_attr(feature = "serde", serde(rename = "minChargeCurrent"))]
4025 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4026 pub min_charge_current: Option<f64>,
4027 #[cfg_attr(feature = "serde", serde(rename = "minChargePower"))]
4032 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4033 pub min_charge_power: Option<f64>,
4034 #[cfg_attr(feature = "serde", serde(rename = "minChargePower_L2"))]
4038 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4039 pub min_charge_power_l2: Option<f64>,
4040 #[cfg_attr(feature = "serde", serde(rename = "minChargePower_L3"))]
4044 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4045 pub min_charge_power_l3: Option<f64>,
4046 #[cfg_attr(feature = "serde", serde(rename = "minDischargeCurrent"))]
4050 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4051 pub min_discharge_current: Option<f64>,
4052 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower"))]
4060 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4061 pub min_discharge_power: Option<f64>,
4062 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower_L2"))]
4066 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4067 pub min_discharge_power_l2: Option<f64>,
4068 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower_L3"))]
4072 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4073 pub min_discharge_power_l3: Option<f64>,
4074 #[cfg_attr(feature = "serde", serde(rename = "minVoltage"))]
4078 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4079 pub min_voltage: Option<f64>,
4080 #[cfg_attr(feature = "serde", serde(rename = "targetSoC"))]
4084 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4085 pub target_so_c: Option<i64>,
4086}
4087#[cfg(feature = "alloc")]
4088#[derive(Debug, Clone, PartialEq)]
4089#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4090pub struct ChargingNeeds<CustomDataType = crate::NoCustomData> {
4091 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
4092 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4093 pub ac_charging_parameters: Option<ACChargingParameters<CustomDataType>>,
4094 #[cfg_attr(feature = "serde", serde(rename = "availableEnergyTransfer"))]
4096 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4097 pub available_energy_transfer: Option<alloc::vec::Vec<EnergyTransferModeEnum>>,
4098 #[cfg_attr(feature = "serde", serde(rename = "controlMode"))]
4099 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4100 pub control_mode: Option<ControlModeEnum>,
4101 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4102 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4103 pub custom_data: Option<CustomDataType>,
4104 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
4105 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4106 pub dc_charging_parameters: Option<DCChargingParameters<CustomDataType>>,
4107 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
4111 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4112 pub departure_time: Option<crate::OcppTimestamp>,
4113 #[cfg_attr(feature = "serde", serde(rename = "derChargingParameters"))]
4114 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4115 pub der_charging_parameters: Option<DERChargingParameters<CustomDataType>>,
4116 #[cfg_attr(feature = "serde", serde(rename = "evEnergyOffer"))]
4117 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4118 pub ev_energy_offer: Option<EVEnergyOffer<CustomDataType>>,
4119 #[cfg_attr(feature = "serde", serde(rename = "mobilityNeedsMode"))]
4120 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4121 pub mobility_needs_mode: Option<MobilityNeedsModeEnum>,
4122 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
4123 pub requested_energy_transfer: EnergyTransferModeEnum,
4124 #[cfg_attr(feature = "serde", serde(rename = "v2xChargingParameters"))]
4125 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4126 pub v2x_charging_parameters: Option<V2XChargingParameters<CustomDataType>>,
4127}
4128#[cfg(not(feature = "alloc"))]
4129#[derive(Debug, Clone, PartialEq)]
4130#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4131pub struct ChargingNeeds<
4132 CustomDataType = crate::NoCustomData,
4133 const CHARGING_NEEDS_AVAILABLE_ENERGY_TRANSFER_CAP: usize = 8usize,
4134 const D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP: usize = 8usize,
4135 const D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP: usize = 8usize,
4136 const E_V_ABSOLUTE_PRICE_SCHEDULE_EV_ABSOLUTE_PRICE_SCHEDULE_ENTRIES_CAP: usize = 8usize,
4137 const E_V_ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP: usize = 1024usize,
4138 const E_V_POWER_SCHEDULE_EV_POWER_SCHEDULE_ENTRIES_CAP: usize = 8usize,
4139> {
4140 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
4141 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4142 pub ac_charging_parameters: Option<ACChargingParameters<CustomDataType>>,
4143 #[cfg_attr(feature = "serde", serde(rename = "availableEnergyTransfer"))]
4145 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4146 pub available_energy_transfer: Option<
4147 heapless::Vec<
4148 EnergyTransferModeEnum,
4149 CHARGING_NEEDS_AVAILABLE_ENERGY_TRANSFER_CAP,
4150 >,
4151 >,
4152 #[cfg_attr(feature = "serde", serde(rename = "controlMode"))]
4153 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4154 pub control_mode: Option<ControlModeEnum>,
4155 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4156 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4157 pub custom_data: Option<CustomDataType>,
4158 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
4159 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4160 pub dc_charging_parameters: Option<DCChargingParameters<CustomDataType>>,
4161 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
4165 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4166 pub departure_time: Option<crate::OcppTimestamp>,
4167 #[cfg_attr(feature = "serde", serde(rename = "derChargingParameters"))]
4168 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4169 pub der_charging_parameters: Option<
4170 DERChargingParameters<
4171 CustomDataType,
4172 D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP,
4173 D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP,
4174 >,
4175 >,
4176 #[cfg_attr(feature = "serde", serde(rename = "evEnergyOffer"))]
4177 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4178 pub ev_energy_offer: Option<
4179 EVEnergyOffer<
4180 CustomDataType,
4181 E_V_ABSOLUTE_PRICE_SCHEDULE_EV_ABSOLUTE_PRICE_SCHEDULE_ENTRIES_CAP,
4182 E_V_ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP,
4183 E_V_POWER_SCHEDULE_EV_POWER_SCHEDULE_ENTRIES_CAP,
4184 >,
4185 >,
4186 #[cfg_attr(feature = "serde", serde(rename = "mobilityNeedsMode"))]
4187 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4188 pub mobility_needs_mode: Option<MobilityNeedsModeEnum>,
4189 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
4190 pub requested_energy_transfer: EnergyTransferModeEnum,
4191 #[cfg_attr(feature = "serde", serde(rename = "v2xChargingParameters"))]
4192 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4193 pub v2x_charging_parameters: Option<V2XChargingParameters<CustomDataType>>,
4194}
4195#[derive(Debug, Clone, PartialEq, Eq)]
4197#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4198pub enum NotifyEVChargingNeedsStatusEnum {
4199 Accepted,
4200 Rejected,
4201 Processing,
4202 NoChargingProfile,
4203}
4204#[derive(Debug, Clone, PartialEq, Eq)]
4206#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4207pub enum EventNotificationEnum {
4208 HardWiredNotification,
4209 HardWiredMonitor,
4210 PreconfiguredMonitor,
4211 CustomMonitor,
4212}
4213#[derive(Debug, Clone, PartialEq, Eq)]
4215#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4216pub enum EventTriggerEnum {
4217 Alerting,
4218 Delta,
4219 Periodic,
4220}
4221#[cfg(feature = "alloc")]
4222#[derive(Debug, Clone, PartialEq, Eq)]
4224#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4225pub struct EventData<CustomDataType = crate::NoCustomData> {
4226 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
4230 pub actual_value: alloc::string::String,
4231 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4233 pub cause: Option<i64>,
4234 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4236 pub cleared: Option<bool>,
4237 pub component: Component<CustomDataType>,
4238 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4239 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4240 pub custom_data: Option<CustomDataType>,
4241 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
4243 pub event_id: i64,
4244 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4245 pub event_notification_type: EventNotificationEnum,
4246 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4248 pub severity: Option<i64>,
4249 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
4251 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4252 pub tech_code: Option<heapless::String<50usize>>,
4253 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
4255 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4256 pub tech_info: Option<heapless::String<500usize>>,
4257 pub timestamp: crate::OcppTimestamp,
4259 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4261 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4262 pub transaction_id: Option<heapless::String<36usize>>,
4263 pub trigger: EventTriggerEnum,
4264 pub variable: Variable<CustomDataType>,
4265 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
4267 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4268 pub variable_monitoring_id: Option<i64>,
4269}
4270#[cfg(not(feature = "alloc"))]
4271#[derive(Debug, Clone, PartialEq, Eq)]
4273#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4274pub struct EventData<
4275 CustomDataType = crate::NoCustomData,
4276 const EVENT_DATA_ACTUAL_VALUE_CAP: usize = 1024usize,
4277> {
4278 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
4282 pub actual_value: heapless::String<EVENT_DATA_ACTUAL_VALUE_CAP>,
4283 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4285 pub cause: Option<i64>,
4286 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4288 pub cleared: Option<bool>,
4289 pub component: Component<CustomDataType>,
4290 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4291 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4292 pub custom_data: Option<CustomDataType>,
4293 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
4295 pub event_id: i64,
4296 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4297 pub event_notification_type: EventNotificationEnum,
4298 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4300 pub severity: Option<i64>,
4301 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
4303 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4304 pub tech_code: Option<heapless::String<50usize>>,
4305 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
4307 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4308 pub tech_info: Option<heapless::String<500usize>>,
4309 pub timestamp: crate::OcppTimestamp,
4311 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4313 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4314 pub transaction_id: Option<heapless::String<36usize>>,
4315 pub trigger: EventTriggerEnum,
4316 pub variable: Variable<CustomDataType>,
4317 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
4319 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4320 pub variable_monitoring_id: Option<i64>,
4321}
4322#[derive(Debug, Clone, PartialEq, Eq)]
4324#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4325pub enum MonitorEnum {
4326 UpperThreshold,
4327 LowerThreshold,
4328 Delta,
4329 Periodic,
4330 PeriodicClockAligned,
4331 TargetDelta,
4332 TargetDeltaRelative,
4333}
4334#[derive(Debug, Clone, PartialEq)]
4336#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4337pub struct VariableMonitoring<CustomDataType = crate::NoCustomData> {
4338 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4339 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4340 pub custom_data: Option<CustomDataType>,
4341 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4342 pub event_notification_type: EventNotificationEnum,
4343 pub id: i64,
4345 pub severity: i64,
4369 pub transaction: bool,
4371 pub r#type: MonitorEnum,
4372 pub value: f64,
4375}
4376#[cfg(feature = "alloc")]
4377#[derive(Debug, Clone, PartialEq)]
4379#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4380pub struct MonitoringData<CustomDataType = crate::NoCustomData> {
4381 pub component: Component<CustomDataType>,
4382 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4383 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4384 pub custom_data: Option<CustomDataType>,
4385 pub variable: Variable<CustomDataType>,
4386 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
4387 pub variable_monitoring: alloc::vec::Vec<VariableMonitoring<CustomDataType>>,
4388}
4389#[cfg(not(feature = "alloc"))]
4390#[derive(Debug, Clone, PartialEq)]
4392#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4393pub struct MonitoringData<
4394 CustomDataType = crate::NoCustomData,
4395 const MONITORING_DATA_VARIABLE_MONITORING_CAP: usize = 8usize,
4396> {
4397 pub component: Component<CustomDataType>,
4398 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4399 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4400 pub custom_data: Option<CustomDataType>,
4401 pub variable: Variable<CustomDataType>,
4402 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
4403 pub variable_monitoring: heapless::Vec<
4404 VariableMonitoring<CustomDataType>,
4405 MONITORING_DATA_VARIABLE_MONITORING_CAP,
4406 >,
4407}
4408#[cfg(feature = "alloc")]
4409#[derive(Debug, Clone, PartialEq)]
4410#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4411pub struct StreamDataElement<CustomDataType = crate::NoCustomData> {
4412 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4413 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4414 pub custom_data: Option<CustomDataType>,
4415 pub t: f64,
4417 pub v: alloc::string::String,
4418}
4419#[cfg(not(feature = "alloc"))]
4420#[derive(Debug, Clone, PartialEq)]
4421#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4422pub struct StreamDataElement<
4423 CustomDataType = crate::NoCustomData,
4424 const STREAM_DATA_ELEMENT_V_CAP: usize = 1024usize,
4425> {
4426 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4427 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4428 pub custom_data: Option<CustomDataType>,
4429 pub t: f64,
4431 pub v: heapless::String<STREAM_DATA_ELEMENT_V_CAP>,
4432}
4433#[derive(Debug, Clone, PartialEq, Eq)]
4435#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4436pub enum MutabilityEnum {
4437 ReadOnly,
4438 WriteOnly,
4439 ReadWrite,
4440}
4441#[cfg(feature = "alloc")]
4442#[derive(Debug, Clone, PartialEq, Eq)]
4444#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4445pub struct VariableAttribute<CustomDataType = crate::NoCustomData> {
4446 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4448 pub constant: Option<bool>,
4449 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4450 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4451 pub custom_data: Option<CustomDataType>,
4452 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4453 pub mutability: Option<MutabilityEnum>,
4454 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4456 pub persistent: Option<bool>,
4457 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4458 pub r#type: Option<AttributeEnum>,
4459 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4463 pub value: Option<alloc::string::String>,
4464}
4465#[cfg(not(feature = "alloc"))]
4466#[derive(Debug, Clone, PartialEq, Eq)]
4468#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4469pub struct VariableAttribute<
4470 CustomDataType = crate::NoCustomData,
4471 const VARIABLE_ATTRIBUTE_VALUE_CAP: usize = 1024usize,
4472> {
4473 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4475 pub constant: Option<bool>,
4476 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4477 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4478 pub custom_data: Option<CustomDataType>,
4479 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4480 pub mutability: Option<MutabilityEnum>,
4481 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4483 pub persistent: Option<bool>,
4484 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4485 pub r#type: Option<AttributeEnum>,
4486 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4490 pub value: Option<heapless::String<VARIABLE_ATTRIBUTE_VALUE_CAP>>,
4491}
4492#[derive(Debug, Clone, PartialEq, Eq)]
4494#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4495pub enum DataEnum {
4496 #[cfg_attr(feature = "serde", serde(rename = "string"))]
4497 String,
4498 #[cfg_attr(feature = "serde", serde(rename = "decimal"))]
4499 Decimal,
4500 #[cfg_attr(feature = "serde", serde(rename = "integer"))]
4501 Integer,
4502 #[cfg_attr(feature = "serde", serde(rename = "dateTime"))]
4503 DateTime,
4504 #[cfg_attr(feature = "serde", serde(rename = "boolean"))]
4505 Boolean,
4506 OptionList,
4507 SequenceList,
4508 MemberList,
4509}
4510#[cfg(feature = "alloc")]
4511#[derive(Debug, Clone, PartialEq)]
4513#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4514pub struct VariableCharacteristics<CustomDataType = crate::NoCustomData> {
4515 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4516 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4517 pub custom_data: Option<CustomDataType>,
4518 #[cfg_attr(feature = "serde", serde(rename = "dataType"))]
4519 pub data_type: DataEnum,
4520 #[cfg_attr(feature = "serde", serde(rename = "maxElements"))]
4522 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4523 pub max_elements: Option<i64>,
4524 #[cfg_attr(feature = "serde", serde(rename = "maxLimit"))]
4526 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4527 pub max_limit: Option<f64>,
4528 #[cfg_attr(feature = "serde", serde(rename = "minLimit"))]
4530 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4531 pub min_limit: Option<f64>,
4532 #[cfg_attr(feature = "serde", serde(rename = "supportsMonitoring"))]
4534 pub supports_monitoring: bool,
4535 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4537 pub unit: Option<heapless::String<16usize>>,
4538 #[cfg_attr(feature = "serde", serde(rename = "valuesList"))]
4552 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4553 pub values_list: Option<alloc::string::String>,
4554}
4555#[cfg(not(feature = "alloc"))]
4556#[derive(Debug, Clone, PartialEq)]
4558#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4559pub struct VariableCharacteristics<
4560 CustomDataType = crate::NoCustomData,
4561 const VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP: usize = 1000usize,
4562> {
4563 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4564 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4565 pub custom_data: Option<CustomDataType>,
4566 #[cfg_attr(feature = "serde", serde(rename = "dataType"))]
4567 pub data_type: DataEnum,
4568 #[cfg_attr(feature = "serde", serde(rename = "maxElements"))]
4570 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4571 pub max_elements: Option<i64>,
4572 #[cfg_attr(feature = "serde", serde(rename = "maxLimit"))]
4574 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4575 pub max_limit: Option<f64>,
4576 #[cfg_attr(feature = "serde", serde(rename = "minLimit"))]
4578 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4579 pub min_limit: Option<f64>,
4580 #[cfg_attr(feature = "serde", serde(rename = "supportsMonitoring"))]
4582 pub supports_monitoring: bool,
4583 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4585 pub unit: Option<heapless::String<16usize>>,
4586 #[cfg_attr(feature = "serde", serde(rename = "valuesList"))]
4600 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4601 pub values_list: Option<heapless::String<VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP>>,
4602}
4603#[cfg(feature = "alloc")]
4604#[derive(Debug, Clone, PartialEq)]
4606#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4607pub struct ReportData<CustomDataType = crate::NoCustomData> {
4608 pub component: Component<CustomDataType>,
4609 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4610 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4611 pub custom_data: Option<CustomDataType>,
4612 pub variable: Variable<CustomDataType>,
4613 #[cfg_attr(feature = "serde", serde(rename = "variableAttribute"))]
4614 pub variable_attribute: heapless::Vec<VariableAttribute<CustomDataType>, 4usize>,
4615 #[cfg_attr(feature = "serde", serde(rename = "variableCharacteristics"))]
4616 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4617 pub variable_characteristics: Option<VariableCharacteristics<CustomDataType>>,
4618}
4619#[cfg(not(feature = "alloc"))]
4620#[derive(Debug, Clone, PartialEq)]
4622#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4623pub struct ReportData<
4624 CustomDataType = crate::NoCustomData,
4625 const VARIABLE_ATTRIBUTE_VALUE_CAP: usize = 1024usize,
4626 const VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP: usize = 1000usize,
4627> {
4628 pub component: Component<CustomDataType>,
4629 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4630 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4631 pub custom_data: Option<CustomDataType>,
4632 pub variable: Variable<CustomDataType>,
4633 #[cfg_attr(feature = "serde", serde(rename = "variableAttribute"))]
4634 pub variable_attribute: heapless::Vec<
4635 VariableAttribute<CustomDataType, VARIABLE_ATTRIBUTE_VALUE_CAP>,
4636 4usize,
4637 >,
4638 #[cfg_attr(feature = "serde", serde(rename = "variableCharacteristics"))]
4639 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4640 pub variable_characteristics: Option<
4641 VariableCharacteristics<CustomDataType, VARIABLE_CHARACTERISTICS_VALUES_LIST_CAP>,
4642 >,
4643}
4644#[derive(Debug, Clone, PartialEq, Eq)]
4646#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4647pub enum PaymentStatusEnum {
4648 Settled,
4649 Canceled,
4650 Rejected,
4651 Failed,
4652}
4653#[derive(Debug, Clone, PartialEq, Eq)]
4655#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4656pub struct Address<CustomDataType = crate::NoCustomData> {
4657 pub address1: heapless::String<100usize>,
4659 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4661 pub address2: Option<heapless::String<100usize>>,
4662 pub city: heapless::String<100usize>,
4664 pub country: heapless::String<50usize>,
4666 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4667 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4668 pub custom_data: Option<CustomDataType>,
4669 pub name: heapless::String<50usize>,
4671 #[cfg_attr(feature = "serde", serde(rename = "postalCode"))]
4673 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4674 pub postal_code: Option<heapless::String<20usize>>,
4675}
4676#[derive(Debug, Clone, PartialEq, Eq)]
4679#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4680pub enum PublishFirmwareStatusEnum {
4681 Idle,
4682 DownloadScheduled,
4683 Downloading,
4684 Downloaded,
4685 Published,
4686 DownloadFailed,
4687 DownloadPaused,
4688 InvalidChecksum,
4689 ChecksumVerified,
4690 PublishFailed,
4691}
4692#[derive(Debug, Clone, PartialEq)]
4694#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4695pub struct ChargingScheduleUpdate<CustomDataType = crate::NoCustomData> {
4696 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4697 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4698 pub custom_data: Option<CustomDataType>,
4699 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit"))]
4702 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4703 pub discharge_limit: Option<f64>,
4704 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L2"))]
4706 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4707 pub discharge_limit_l2: Option<f64>,
4708 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L3"))]
4710 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4711 pub discharge_limit_l3: Option<f64>,
4712 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4717 pub limit: Option<f64>,
4718 #[cfg_attr(feature = "serde", serde(rename = "limit_L2"))]
4720 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4721 pub limit_l2: Option<f64>,
4722 #[cfg_attr(feature = "serde", serde(rename = "limit_L3"))]
4724 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4725 pub limit_l3: Option<f64>,
4726 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4730 pub setpoint: Option<f64>,
4731 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive"))]
4734 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4735 pub setpoint_reactive: Option<f64>,
4736 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L2"))]
4738 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4739 pub setpoint_reactive_l2: Option<f64>,
4740 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L3"))]
4742 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4743 pub setpoint_reactive_l3: Option<f64>,
4744 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L2"))]
4746 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4747 pub setpoint_l2: Option<f64>,
4748 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L3"))]
4750 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4751 pub setpoint_l3: Option<f64>,
4752}
4753#[derive(Debug, Clone, PartialEq, Eq)]
4755#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4756pub enum ChargingProfileStatusEnum {
4757 Accepted,
4758 Rejected,
4759}
4760#[derive(Debug, Clone, PartialEq, Eq)]
4762#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4763pub enum ChargingProfileKindEnum {
4764 Absolute,
4765 Recurring,
4766 Relative,
4767 Dynamic,
4768}
4769#[derive(Debug, Clone, PartialEq, Eq)]
4771#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4772pub enum RecurrencyKindEnum {
4773 Daily,
4774 Weekly,
4775}
4776#[cfg(feature = "alloc")]
4777#[derive(Debug, Clone, PartialEq)]
4781#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4782pub struct ChargingProfile<CustomDataType = crate::NoCustomData> {
4783 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
4784 pub charging_profile_kind: ChargingProfileKindEnum,
4785 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
4786 pub charging_profile_purpose: ChargingProfilePurposeEnum,
4787 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
4788 pub charging_schedule: heapless::Vec<ChargingSchedule<CustomDataType>, 3usize>,
4789 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4790 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4791 pub custom_data: Option<CustomDataType>,
4792 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateInterval"))]
4796 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4797 pub dyn_update_interval: Option<i64>,
4798 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateTime"))]
4801 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4802 pub dyn_update_time: Option<crate::OcppTimestamp>,
4803 pub id: i64,
4805 #[cfg_attr(feature = "serde", serde(rename = "invalidAfterOfflineDuration"))]
4808 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4809 pub invalid_after_offline_duration: Option<bool>,
4810 #[cfg_attr(feature = "serde", serde(rename = "maxOfflineDuration"))]
4814 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4815 pub max_offline_duration: Option<i64>,
4816 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleSignature"))]
4819 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4820 pub price_schedule_signature: Option<heapless::String<256usize>>,
4821 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
4822 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4823 pub recurrency_kind: Option<RecurrencyKindEnum>,
4824 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
4826 pub stack_level: i64,
4827 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4829 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4830 pub transaction_id: Option<heapless::String<36usize>>,
4831 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
4833 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4834 pub valid_from: Option<crate::OcppTimestamp>,
4835 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
4837 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4838 pub valid_to: Option<crate::OcppTimestamp>,
4839}
4840#[cfg(not(feature = "alloc"))]
4841#[derive(Debug, Clone, PartialEq)]
4845#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4846pub struct ChargingProfile<
4847 CustomDataType = crate::NoCustomData,
4848 const ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP: usize = 1024usize,
4849 const ABSOLUTE_PRICE_SCHEDULE_PRICE_RULE_STACKS_CAP: usize = 8usize,
4850 const CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 8usize,
4851 const CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP: usize = 8usize,
4852 const CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP: usize = 8usize,
4853 const PRICE_LEVEL_SCHEDULE_PRICE_LEVEL_SCHEDULE_ENTRIES_CAP: usize = 8usize,
4854 const SALES_TARIFF_SALES_TARIFF_ENTRY_CAP: usize = 8usize,
4855> {
4856 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
4857 pub charging_profile_kind: ChargingProfileKindEnum,
4858 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
4859 pub charging_profile_purpose: ChargingProfilePurposeEnum,
4860 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
4861 pub charging_schedule: heapless::Vec<
4862 ChargingSchedule<
4863 CustomDataType,
4864 ABSOLUTE_PRICE_SCHEDULE_PRICE_ALGORITHM_CAP,
4865 ABSOLUTE_PRICE_SCHEDULE_PRICE_RULE_STACKS_CAP,
4866 CHARGING_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
4867 CHARGING_SCHEDULE_PERIOD_V2X_FREQ_WATT_CURVE_CAP,
4868 CHARGING_SCHEDULE_PERIOD_V2X_SIGNAL_WATT_CURVE_CAP,
4869 PRICE_LEVEL_SCHEDULE_PRICE_LEVEL_SCHEDULE_ENTRIES_CAP,
4870 SALES_TARIFF_SALES_TARIFF_ENTRY_CAP,
4871 >,
4872 3usize,
4873 >,
4874 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4875 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4876 pub custom_data: Option<CustomDataType>,
4877 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateInterval"))]
4881 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4882 pub dyn_update_interval: Option<i64>,
4883 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateTime"))]
4886 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4887 pub dyn_update_time: Option<crate::OcppTimestamp>,
4888 pub id: i64,
4890 #[cfg_attr(feature = "serde", serde(rename = "invalidAfterOfflineDuration"))]
4893 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4894 pub invalid_after_offline_duration: Option<bool>,
4895 #[cfg_attr(feature = "serde", serde(rename = "maxOfflineDuration"))]
4899 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4900 pub max_offline_duration: Option<i64>,
4901 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleSignature"))]
4904 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4905 pub price_schedule_signature: Option<heapless::String<256usize>>,
4906 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
4907 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4908 pub recurrency_kind: Option<RecurrencyKindEnum>,
4909 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
4911 pub stack_level: i64,
4912 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4914 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4915 pub transaction_id: Option<heapless::String<36usize>>,
4916 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
4918 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4919 pub valid_from: Option<crate::OcppTimestamp>,
4920 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
4922 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4923 pub valid_to: Option<crate::OcppTimestamp>,
4924}
4925#[derive(Debug, Clone, PartialEq)]
4926#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4927pub struct DERCurvePoints<CustomDataType = crate::NoCustomData> {
4928 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4929 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4930 pub custom_data: Option<CustomDataType>,
4931 pub x: f64,
4933 pub y: f64,
4935}
4936#[derive(Debug, Clone, PartialEq)]
4937#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4938pub struct Hysteresis<CustomDataType = crate::NoCustomData> {
4939 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4940 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4941 pub custom_data: Option<CustomDataType>,
4942 #[cfg_attr(feature = "serde", serde(rename = "hysteresisDelay"))]
4944 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4945 pub hysteresis_delay: Option<f64>,
4946 #[cfg_attr(feature = "serde", serde(rename = "hysteresisGradient"))]
4948 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4949 pub hysteresis_gradient: Option<f64>,
4950 #[cfg_attr(feature = "serde", serde(rename = "hysteresisHigh"))]
4952 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4953 pub hysteresis_high: Option<f64>,
4954 #[cfg_attr(feature = "serde", serde(rename = "hysteresisLow"))]
4956 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4957 pub hysteresis_low: Option<f64>,
4958}
4959#[derive(Debug, Clone, PartialEq)]
4960#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4961pub struct ReactivePowerParams<CustomDataType = crate::NoCustomData> {
4962 #[cfg_attr(feature = "serde", serde(rename = "autonomousVRefEnable"))]
4964 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4965 pub autonomous_v_ref_enable: Option<bool>,
4966 #[cfg_attr(feature = "serde", serde(rename = "autonomousVRefTimeConstant"))]
4968 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4969 pub autonomous_v_ref_time_constant: Option<f64>,
4970 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4971 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4972 pub custom_data: Option<CustomDataType>,
4973 #[cfg_attr(feature = "serde", serde(rename = "vRef"))]
4975 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4976 pub v_ref: Option<f64>,
4977}
4978#[derive(Debug, Clone, PartialEq, Eq)]
4980#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4981pub enum PowerDuringCessationEnum {
4982 Active,
4983 Reactive,
4984}
4985#[derive(Debug, Clone, PartialEq)]
4986#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4987pub struct VoltageParams<CustomDataType = crate::NoCustomData> {
4988 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4989 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4990 pub custom_data: Option<CustomDataType>,
4991 #[cfg_attr(feature = "serde", serde(rename = "hv10MinMeanTripDelay"))]
4995 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4996 pub hv10_min_mean_trip_delay: Option<f64>,
4997 #[cfg_attr(feature = "serde", serde(rename = "hv10MinMeanValue"))]
5003 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5004 pub hv10_min_mean_value: Option<f64>,
5005 #[cfg_attr(feature = "serde", serde(rename = "powerDuringCessation"))]
5006 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5007 pub power_during_cessation: Option<PowerDuringCessationEnum>,
5008}
5009#[derive(Debug, Clone, PartialEq, Eq)]
5011#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5012pub enum DERUnitEnum {
5013 #[cfg_attr(feature = "serde", serde(rename = "Not_Applicable"))]
5014 NotApplicable,
5015 PctMaxW,
5016 PctMaxVar,
5017 PctWAvail,
5018 PctVarAvail,
5019 PctEffectiveV,
5020}
5021#[derive(Debug, Clone, PartialEq)]
5022#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5023pub struct DERCurve<CustomDataType = crate::NoCustomData> {
5024 #[cfg_attr(feature = "serde", serde(rename = "curveData"))]
5025 pub curve_data: heapless::Vec<DERCurvePoints<CustomDataType>, 10usize>,
5026 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5027 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5028 pub custom_data: Option<CustomDataType>,
5029 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5031 pub duration: Option<f64>,
5032 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5033 pub hysteresis: Option<Hysteresis<CustomDataType>>,
5034 pub priority: i64,
5036 #[cfg_attr(feature = "serde", serde(rename = "reactivePowerParams"))]
5037 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5038 pub reactive_power_params: Option<ReactivePowerParams<CustomDataType>>,
5039 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
5041 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5042 pub response_time: Option<f64>,
5043 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5045 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5046 pub start_time: Option<crate::OcppTimestamp>,
5047 #[cfg_attr(feature = "serde", serde(rename = "voltageParams"))]
5048 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5049 pub voltage_params: Option<VoltageParams<CustomDataType>>,
5050 #[cfg_attr(feature = "serde", serde(rename = "yUnit"))]
5051 pub y_unit: DERUnitEnum,
5052}
5053#[derive(Debug, Clone, PartialEq)]
5054#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5055pub struct DERCurveGet<CustomDataType = crate::NoCustomData> {
5056 pub curve: DERCurve<CustomDataType>,
5057 #[cfg_attr(feature = "serde", serde(rename = "curveType"))]
5058 pub curve_type: DERControlEnum,
5059 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5060 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5061 pub custom_data: Option<CustomDataType>,
5062 pub id: heapless::String<36usize>,
5064 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5066 pub is_default: bool,
5067 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5069 pub is_superseded: bool,
5070}
5071#[derive(Debug, Clone, PartialEq)]
5072#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5073pub struct EnterService<CustomDataType = crate::NoCustomData> {
5074 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5075 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5076 pub custom_data: Option<CustomDataType>,
5077 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5079 pub delay: Option<f64>,
5080 #[cfg_attr(feature = "serde", serde(rename = "highFreq"))]
5082 pub high_freq: f64,
5083 #[cfg_attr(feature = "serde", serde(rename = "highVoltage"))]
5085 pub high_voltage: f64,
5086 #[cfg_attr(feature = "serde", serde(rename = "lowFreq"))]
5088 pub low_freq: f64,
5089 #[cfg_attr(feature = "serde", serde(rename = "lowVoltage"))]
5091 pub low_voltage: f64,
5092 pub priority: i64,
5094 #[cfg_attr(feature = "serde", serde(rename = "rampRate"))]
5096 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5097 pub ramp_rate: Option<f64>,
5098 #[cfg_attr(feature = "serde", serde(rename = "randomDelay"))]
5100 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5101 pub random_delay: Option<f64>,
5102}
5103#[derive(Debug, Clone, PartialEq)]
5104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5105pub struct EnterServiceGet<CustomDataType = crate::NoCustomData> {
5106 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5107 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5108 pub custom_data: Option<CustomDataType>,
5109 #[cfg_attr(feature = "serde", serde(rename = "enterService"))]
5110 pub enter_service: EnterService<CustomDataType>,
5111 pub id: heapless::String<36usize>,
5113}
5114#[derive(Debug, Clone, PartialEq)]
5115#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5116pub struct FixedPF<CustomDataType = crate::NoCustomData> {
5117 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5118 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5119 pub custom_data: Option<CustomDataType>,
5120 pub displacement: f64,
5122 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5124 pub duration: Option<f64>,
5125 pub excitation: bool,
5127 pub priority: i64,
5129 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5131 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5132 pub start_time: Option<crate::OcppTimestamp>,
5133}
5134#[derive(Debug, Clone, PartialEq)]
5135#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5136pub struct FixedPFGet<CustomDataType = crate::NoCustomData> {
5137 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5138 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5139 pub custom_data: Option<CustomDataType>,
5140 #[cfg_attr(feature = "serde", serde(rename = "fixedPF"))]
5141 pub fixed_p_f: FixedPF<CustomDataType>,
5142 pub id: heapless::String<36usize>,
5144 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5146 pub is_default: bool,
5147 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5149 pub is_superseded: bool,
5150}
5151#[derive(Debug, Clone, PartialEq)]
5152#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5153pub struct FixedVar<CustomDataType = crate::NoCustomData> {
5154 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5155 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5156 pub custom_data: Option<CustomDataType>,
5157 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5159 pub duration: Option<f64>,
5160 pub priority: i64,
5162 pub setpoint: f64,
5166 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5168 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5169 pub start_time: Option<crate::OcppTimestamp>,
5170 pub unit: DERUnitEnum,
5171}
5172#[derive(Debug, Clone, PartialEq)]
5173#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5174pub struct FixedVarGet<CustomDataType = crate::NoCustomData> {
5175 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5176 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5177 pub custom_data: Option<CustomDataType>,
5178 #[cfg_attr(feature = "serde", serde(rename = "fixedVar"))]
5179 pub fixed_var: FixedVar<CustomDataType>,
5180 pub id: heapless::String<36usize>,
5182 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5184 pub is_default: bool,
5185 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5187 pub is_superseded: bool,
5188}
5189#[derive(Debug, Clone, PartialEq)]
5190#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5191pub struct FreqDroop<CustomDataType = crate::NoCustomData> {
5192 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5193 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5194 pub custom_data: Option<CustomDataType>,
5195 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5197 pub duration: Option<f64>,
5198 #[cfg_attr(feature = "serde", serde(rename = "overDroop"))]
5200 pub over_droop: f64,
5201 #[cfg_attr(feature = "serde", serde(rename = "overFreq"))]
5203 pub over_freq: f64,
5204 pub priority: i64,
5206 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
5208 pub response_time: f64,
5209 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5211 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5212 pub start_time: Option<crate::OcppTimestamp>,
5213 #[cfg_attr(feature = "serde", serde(rename = "underDroop"))]
5215 pub under_droop: f64,
5216 #[cfg_attr(feature = "serde", serde(rename = "underFreq"))]
5218 pub under_freq: f64,
5219}
5220#[derive(Debug, Clone, PartialEq)]
5221#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5222pub struct FreqDroopGet<CustomDataType = crate::NoCustomData> {
5223 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5224 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5225 pub custom_data: Option<CustomDataType>,
5226 #[cfg_attr(feature = "serde", serde(rename = "freqDroop"))]
5227 pub freq_droop: FreqDroop<CustomDataType>,
5228 pub id: heapless::String<36usize>,
5230 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5232 pub is_default: bool,
5233 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5235 pub is_superseded: bool,
5236}
5237#[derive(Debug, Clone, PartialEq)]
5238#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5239pub struct Gradient<CustomDataType = crate::NoCustomData> {
5240 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5241 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5242 pub custom_data: Option<CustomDataType>,
5243 pub gradient: f64,
5245 pub priority: i64,
5247 #[cfg_attr(feature = "serde", serde(rename = "softGradient"))]
5249 pub soft_gradient: f64,
5250}
5251#[derive(Debug, Clone, PartialEq)]
5252#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5253pub struct GradientGet<CustomDataType = crate::NoCustomData> {
5254 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5255 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5256 pub custom_data: Option<CustomDataType>,
5257 pub gradient: Gradient<CustomDataType>,
5258 pub id: heapless::String<36usize>,
5260}
5261#[derive(Debug, Clone, PartialEq)]
5262#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5263pub struct LimitMaxDischarge<CustomDataType = crate::NoCustomData> {
5264 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5265 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5266 pub custom_data: Option<CustomDataType>,
5267 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5269 pub duration: Option<f64>,
5270 #[cfg_attr(feature = "serde", serde(rename = "pctMaxDischargePower"))]
5274 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5275 pub pct_max_discharge_power: Option<f64>,
5276 #[cfg_attr(feature = "serde", serde(rename = "powerMonitoringMustTrip"))]
5277 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5278 pub power_monitoring_must_trip: Option<DERCurve<CustomDataType>>,
5279 pub priority: i64,
5281 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5283 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5284 pub start_time: Option<crate::OcppTimestamp>,
5285}
5286#[derive(Debug, Clone, PartialEq)]
5287#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5288pub struct LimitMaxDischargeGet<CustomDataType = crate::NoCustomData> {
5289 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5290 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5291 pub custom_data: Option<CustomDataType>,
5292 pub id: heapless::String<36usize>,
5294 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5296 pub is_default: bool,
5297 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5299 pub is_superseded: bool,
5300 #[cfg_attr(feature = "serde", serde(rename = "limitMaxDischarge"))]
5301 pub limit_max_discharge: LimitMaxDischarge<CustomDataType>,
5302}
5303#[derive(Debug, Clone, PartialEq, Eq)]
5305#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5306pub enum RequestStartStopStatusEnum {
5307 Accepted,
5308 Rejected,
5309}
5310#[derive(Debug, Clone, PartialEq, Eq)]
5312#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5313pub enum ReservationUpdateStatusEnum {
5314 Expired,
5315 Removed,
5316 NoTransaction,
5317}
5318#[derive(Debug, Clone, PartialEq, Eq)]
5320#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5321pub enum ReserveNowStatusEnum {
5322 Accepted,
5323 Faulted,
5324 Occupied,
5325 Rejected,
5326 Unavailable,
5327}
5328#[derive(Debug, Clone, PartialEq, Eq)]
5330#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5331pub enum ResetEnum {
5332 Immediate,
5333 OnIdle,
5334 ImmediateAndResume,
5335}
5336#[derive(Debug, Clone, PartialEq, Eq)]
5338#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5339pub enum ResetStatusEnum {
5340 Accepted,
5341 Rejected,
5342 Scheduled,
5343}
5344#[cfg(feature = "alloc")]
5345#[derive(Debug, Clone, PartialEq, Eq)]
5347#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5348pub struct AuthorizationData<CustomDataType = crate::NoCustomData> {
5349 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5350 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5351 pub custom_data: Option<CustomDataType>,
5352 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
5353 pub id_token: IdToken<CustomDataType>,
5354 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
5355 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5356 pub id_token_info: Option<IdTokenInfo<CustomDataType>>,
5357}
5358#[cfg(not(feature = "alloc"))]
5359#[derive(Debug, Clone, PartialEq, Eq)]
5361#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5362pub struct AuthorizationData<
5363 CustomDataType = crate::NoCustomData,
5364 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 8usize,
5365 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 8usize,
5366 const MESSAGE_CONTENT_CONTENT_CAP: usize = 1024usize,
5367> {
5368 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5369 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5370 pub custom_data: Option<CustomDataType>,
5371 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
5372 pub id_token: IdToken<CustomDataType, ID_TOKEN_ADDITIONAL_INFO_CAP>,
5373 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
5374 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5375 pub id_token_info: Option<
5376 IdTokenInfo<
5377 CustomDataType,
5378 ID_TOKEN_INFO_EVSE_ID_CAP,
5379 ID_TOKEN_ADDITIONAL_INFO_CAP,
5380 MESSAGE_CONTENT_CONTENT_CAP,
5381 >,
5382 >,
5383}
5384#[derive(Debug, Clone, PartialEq, Eq)]
5386#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5387pub enum UpdateEnum {
5388 Differential,
5389 Full,
5390}
5391#[derive(Debug, Clone, PartialEq, Eq)]
5393#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5394pub enum SendLocalListStatusEnum {
5395 Accepted,
5396 Failed,
5397 VersionMismatch,
5398}
5399#[derive(Debug, Clone, PartialEq, Eq)]
5400#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5401pub enum TariffSetStatusEnum {
5402 Accepted,
5403 Rejected,
5404 TooManyElements,
5405 ConditionNotSupported,
5406 DuplicateTariffId,
5407}
5408#[derive(Debug, Clone, PartialEq, Eq)]
5410#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5411pub enum DisplayMessageStatusEnum {
5412 Accepted,
5413 NotSupportedMessageFormat,
5414 Rejected,
5415 NotSupportedPriority,
5416 NotSupportedState,
5417 UnknownTransaction,
5418 LanguageNotSupported,
5419}
5420#[derive(Debug, Clone, PartialEq, Eq)]
5422#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5423pub enum MonitoringBaseEnum {
5424 All,
5425 FactoryDefault,
5426 HardWiredOnly,
5427}
5428#[derive(Debug, Clone, PartialEq, Eq)]
5430#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5431pub enum APNAuthenticationEnum {
5432 PAP,
5433 CHAP,
5434 NONE,
5435 AUTO,
5436}
5437#[cfg(feature = "alloc")]
5438#[derive(Debug, Clone, PartialEq, Eq)]
5442#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5443pub struct APN<CustomDataType = crate::NoCustomData> {
5444 pub apn: alloc::string::String,
5446 #[cfg_attr(feature = "serde", serde(rename = "apnAuthentication"))]
5447 pub apn_authentication: APNAuthenticationEnum,
5448 #[cfg_attr(feature = "serde", serde(rename = "apnPassword"))]
5450 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5451 pub apn_password: Option<heapless::String<64usize>>,
5452 #[cfg_attr(feature = "serde", serde(rename = "apnUserName"))]
5454 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5455 pub apn_user_name: Option<heapless::String<50usize>>,
5456 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5457 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5458 pub custom_data: Option<CustomDataType>,
5459 #[cfg_attr(feature = "serde", serde(rename = "preferredNetwork"))]
5461 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5462 pub preferred_network: Option<heapless::String<6usize>>,
5463 #[cfg_attr(feature = "serde", serde(rename = "simPin"))]
5465 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5466 pub sim_pin: Option<i64>,
5467 #[cfg_attr(feature = "serde", serde(rename = "useOnlyPreferredNetwork"))]
5470 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5471 pub use_only_preferred_network: Option<bool>,
5472}
5473#[cfg(not(feature = "alloc"))]
5474#[derive(Debug, Clone, PartialEq, Eq)]
5478#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5479pub struct APN<
5480 CustomDataType = crate::NoCustomData,
5481 const A_P_N_APN_CAP: usize = 1024usize,
5482> {
5483 pub apn: heapless::String<A_P_N_APN_CAP>,
5485 #[cfg_attr(feature = "serde", serde(rename = "apnAuthentication"))]
5486 pub apn_authentication: APNAuthenticationEnum,
5487 #[cfg_attr(feature = "serde", serde(rename = "apnPassword"))]
5489 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5490 pub apn_password: Option<heapless::String<64usize>>,
5491 #[cfg_attr(feature = "serde", serde(rename = "apnUserName"))]
5493 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5494 pub apn_user_name: Option<heapless::String<50usize>>,
5495 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5496 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5497 pub custom_data: Option<CustomDataType>,
5498 #[cfg_attr(feature = "serde", serde(rename = "preferredNetwork"))]
5500 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5501 pub preferred_network: Option<heapless::String<6usize>>,
5502 #[cfg_attr(feature = "serde", serde(rename = "simPin"))]
5504 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5505 pub sim_pin: Option<i64>,
5506 #[cfg_attr(feature = "serde", serde(rename = "useOnlyPreferredNetwork"))]
5509 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5510 pub use_only_preferred_network: Option<bool>,
5511}
5512#[derive(Debug, Clone, PartialEq, Eq)]
5514#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5515pub enum OCPPInterfaceEnum {
5516 Wired0,
5517 Wired1,
5518 Wired2,
5519 Wired3,
5520 Wireless0,
5521 Wireless1,
5522 Wireless2,
5523 Wireless3,
5524 Any,
5525}
5526#[derive(Debug, Clone, PartialEq, Eq)]
5528#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5529pub enum OCPPTransportEnum {
5530 SOAP,
5531 JSON,
5532}
5533#[derive(Debug, Clone, PartialEq, Eq)]
5535#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5536pub enum OCPPVersionEnum {
5537 OCPP12,
5538 OCPP15,
5539 OCPP16,
5540 OCPP20,
5541 OCPP201,
5542 OCPP21,
5543}
5544#[derive(Debug, Clone, PartialEq, Eq)]
5546#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5547pub enum VPNEnum {
5548 IKEv2,
5549 IPSec,
5550 L2TP,
5551 PPTP,
5552}
5553#[cfg(feature = "alloc")]
5554#[derive(Debug, Clone, PartialEq, Eq)]
5556#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5557pub struct VPN<CustomDataType = crate::NoCustomData> {
5558 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5559 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5560 pub custom_data: Option<CustomDataType>,
5561 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5563 pub group: Option<heapless::String<50usize>>,
5564 pub key: heapless::String<255usize>,
5566 pub password: heapless::String<64usize>,
5568 pub server: alloc::string::String,
5570 pub r#type: VPNEnum,
5571 pub user: heapless::String<50usize>,
5573}
5574#[cfg(not(feature = "alloc"))]
5575#[derive(Debug, Clone, PartialEq, Eq)]
5577#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5578pub struct VPN<
5579 CustomDataType = crate::NoCustomData,
5580 const V_P_N_SERVER_CAP: usize = 1024usize,
5581> {
5582 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5583 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5584 pub custom_data: Option<CustomDataType>,
5585 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5587 pub group: Option<heapless::String<50usize>>,
5588 pub key: heapless::String<255usize>,
5590 pub password: heapless::String<64usize>,
5592 pub server: heapless::String<V_P_N_SERVER_CAP>,
5594 pub r#type: VPNEnum,
5595 pub user: heapless::String<50usize>,
5597}
5598#[cfg(feature = "alloc")]
5599#[derive(Debug, Clone, PartialEq, Eq)]
5601#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5602pub struct NetworkConnectionProfile<CustomDataType = crate::NoCustomData> {
5603 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5604 pub apn: Option<APN<CustomDataType>>,
5605 #[cfg_attr(feature = "serde", serde(rename = "basicAuthPassword"))]
5607 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5608 pub basic_auth_password: Option<heapless::String<64usize>>,
5609 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5610 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5611 pub custom_data: Option<CustomDataType>,
5612 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5614 pub identity: Option<heapless::String<48usize>>,
5615 #[cfg_attr(feature = "serde", serde(rename = "messageTimeout"))]
5619 pub message_timeout: i64,
5620 #[cfg_attr(feature = "serde", serde(rename = "ocppCsmsUrl"))]
5623 pub ocpp_csms_url: alloc::string::String,
5624 #[cfg_attr(feature = "serde", serde(rename = "ocppInterface"))]
5625 pub ocpp_interface: OCPPInterfaceEnum,
5626 #[cfg_attr(feature = "serde", serde(rename = "ocppTransport"))]
5627 pub ocpp_transport: OCPPTransportEnum,
5628 #[cfg_attr(feature = "serde", serde(rename = "ocppVersion"))]
5629 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5630 pub ocpp_version: Option<OCPPVersionEnum>,
5631 #[cfg_attr(feature = "serde", serde(rename = "securityProfile"))]
5633 pub security_profile: i64,
5634 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5635 pub vpn: Option<VPN<CustomDataType>>,
5636}
5637#[cfg(not(feature = "alloc"))]
5638#[derive(Debug, Clone, PartialEq, Eq)]
5640#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5641pub struct NetworkConnectionProfile<
5642 CustomDataType = crate::NoCustomData,
5643 const A_P_N_APN_CAP: usize = 1024usize,
5644 const NETWORK_CONNECTION_PROFILE_OCPP_CSMS_URL_CAP: usize = 1024usize,
5645 const V_P_N_SERVER_CAP: usize = 1024usize,
5646> {
5647 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5648 pub apn: Option<APN<CustomDataType, A_P_N_APN_CAP>>,
5649 #[cfg_attr(feature = "serde", serde(rename = "basicAuthPassword"))]
5651 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5652 pub basic_auth_password: Option<heapless::String<64usize>>,
5653 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5654 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5655 pub custom_data: Option<CustomDataType>,
5656 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5658 pub identity: Option<heapless::String<48usize>>,
5659 #[cfg_attr(feature = "serde", serde(rename = "messageTimeout"))]
5663 pub message_timeout: i64,
5664 #[cfg_attr(feature = "serde", serde(rename = "ocppCsmsUrl"))]
5667 pub ocpp_csms_url: heapless::String<NETWORK_CONNECTION_PROFILE_OCPP_CSMS_URL_CAP>,
5668 #[cfg_attr(feature = "serde", serde(rename = "ocppInterface"))]
5669 pub ocpp_interface: OCPPInterfaceEnum,
5670 #[cfg_attr(feature = "serde", serde(rename = "ocppTransport"))]
5671 pub ocpp_transport: OCPPTransportEnum,
5672 #[cfg_attr(feature = "serde", serde(rename = "ocppVersion"))]
5673 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5674 pub ocpp_version: Option<OCPPVersionEnum>,
5675 #[cfg_attr(feature = "serde", serde(rename = "securityProfile"))]
5677 pub security_profile: i64,
5678 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5679 pub vpn: Option<VPN<CustomDataType, V_P_N_SERVER_CAP>>,
5680}
5681#[derive(Debug, Clone, PartialEq, Eq)]
5683#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5684pub enum SetNetworkProfileStatusEnum {
5685 Accepted,
5686 Rejected,
5687 Failed,
5688}
5689#[derive(Debug, Clone, PartialEq)]
5691#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5692pub struct SetMonitoringData<CustomDataType = crate::NoCustomData> {
5693 pub component: Component<CustomDataType>,
5694 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5695 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5696 pub custom_data: Option<CustomDataType>,
5697 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5699 pub id: Option<i64>,
5700 #[cfg_attr(feature = "serde", serde(rename = "periodicEventStream"))]
5701 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5702 pub periodic_event_stream: Option<PeriodicEventStreamParams<CustomDataType>>,
5703 pub severity: i64,
5727 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5729 pub transaction: Option<bool>,
5730 pub r#type: MonitorEnum,
5731 pub value: f64,
5734 pub variable: Variable<CustomDataType>,
5735}
5736#[derive(Debug, Clone, PartialEq, Eq)]
5738#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5739pub enum SetMonitoringStatusEnum {
5740 Accepted,
5741 UnknownComponent,
5742 UnknownVariable,
5743 UnsupportedMonitorType,
5744 Rejected,
5745 Duplicate,
5746}
5747#[cfg(feature = "alloc")]
5748#[derive(Debug, Clone, PartialEq, Eq)]
5750#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5751pub struct SetMonitoringResult<CustomDataType = crate::NoCustomData> {
5752 pub component: Component<CustomDataType>,
5753 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5754 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5755 pub custom_data: Option<CustomDataType>,
5756 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5758 pub id: Option<i64>,
5759 pub severity: i64,
5783 pub status: SetMonitoringStatusEnum,
5784 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
5785 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5786 pub status_info: Option<StatusInfo<CustomDataType>>,
5787 pub r#type: MonitorEnum,
5788 pub variable: Variable<CustomDataType>,
5789}
5790#[cfg(not(feature = "alloc"))]
5791#[derive(Debug, Clone, PartialEq, Eq)]
5793#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5794pub struct SetMonitoringResult<
5795 CustomDataType = crate::NoCustomData,
5796 const STATUS_INFO_ADDITIONAL_INFO_CAP: usize = 1024usize,
5797> {
5798 pub component: Component<CustomDataType>,
5799 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5800 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5801 pub custom_data: Option<CustomDataType>,
5802 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5804 pub id: Option<i64>,
5805 pub severity: i64,
5829 pub status: SetMonitoringStatusEnum,
5830 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
5831 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5832 pub status_info: Option<StatusInfo<CustomDataType, STATUS_INFO_ADDITIONAL_INFO_CAP>>,
5833 pub r#type: MonitorEnum,
5834 pub variable: Variable<CustomDataType>,
5835}
5836#[cfg(feature = "alloc")]
5837#[derive(Debug, Clone, PartialEq, Eq)]
5838#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5839pub struct SetVariableData<CustomDataType = crate::NoCustomData> {
5840 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5841 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5842 pub attribute_type: Option<AttributeEnum>,
5843 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
5848 pub attribute_value: alloc::string::String,
5849 pub component: Component<CustomDataType>,
5850 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5851 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5852 pub custom_data: Option<CustomDataType>,
5853 pub variable: Variable<CustomDataType>,
5854}
5855#[cfg(not(feature = "alloc"))]
5856#[derive(Debug, Clone, PartialEq, Eq)]
5857#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5858pub struct SetVariableData<
5859 CustomDataType = crate::NoCustomData,
5860 const SET_VARIABLE_DATA_ATTRIBUTE_VALUE_CAP: usize = 1024usize,
5861> {
5862 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5863 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5864 pub attribute_type: Option<AttributeEnum>,
5865 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
5870 pub attribute_value: heapless::String<SET_VARIABLE_DATA_ATTRIBUTE_VALUE_CAP>,
5871 pub component: Component<CustomDataType>,
5872 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5873 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5874 pub custom_data: Option<CustomDataType>,
5875 pub variable: Variable<CustomDataType>,
5876}
5877#[derive(Debug, Clone, PartialEq, Eq)]
5879#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5880pub enum SetVariableStatusEnum {
5881 Accepted,
5882 Rejected,
5883 UnknownComponent,
5884 UnknownVariable,
5885 NotSupportedAttributeType,
5886 RebootRequired,
5887}
5888#[cfg(feature = "alloc")]
5889#[derive(Debug, Clone, PartialEq, Eq)]
5890#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5891pub struct SetVariableResult<CustomDataType = crate::NoCustomData> {
5892 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
5893 pub attribute_status: SetVariableStatusEnum,
5894 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
5895 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5896 pub attribute_status_info: Option<StatusInfo<CustomDataType>>,
5897 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5898 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5899 pub attribute_type: Option<AttributeEnum>,
5900 pub component: Component<CustomDataType>,
5901 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5902 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5903 pub custom_data: Option<CustomDataType>,
5904 pub variable: Variable<CustomDataType>,
5905}
5906#[cfg(not(feature = "alloc"))]
5907#[derive(Debug, Clone, PartialEq, Eq)]
5908#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5909pub struct SetVariableResult<
5910 CustomDataType = crate::NoCustomData,
5911 const STATUS_INFO_ADDITIONAL_INFO_CAP: usize = 1024usize,
5912> {
5913 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
5914 pub attribute_status: SetVariableStatusEnum,
5915 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
5916 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5917 pub attribute_status_info: Option<
5918 StatusInfo<CustomDataType, STATUS_INFO_ADDITIONAL_INFO_CAP>,
5919 >,
5920 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5921 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5922 pub attribute_type: Option<AttributeEnum>,
5923 pub component: Component<CustomDataType>,
5924 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5925 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5926 pub custom_data: Option<CustomDataType>,
5927 pub variable: Variable<CustomDataType>,
5928}
5929#[derive(Debug, Clone, PartialEq, Eq)]
5931#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5932pub enum ConnectorStatusEnum {
5933 Available,
5934 Occupied,
5935 Reserved,
5936 Unavailable,
5937 Faulted,
5938}
5939#[derive(Debug, Clone, PartialEq, Eq)]
5941#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5942pub enum CostDimensionEnum {
5943 Energy,
5944 MaxCurrent,
5945 MinCurrent,
5946 MaxPower,
5947 MinPower,
5948 IdleTIme,
5949 ChargingTime,
5950}
5951#[derive(Debug, Clone, PartialEq)]
5953#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5954pub struct CostDimension<CustomDataType = crate::NoCustomData> {
5955 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5956 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5957 pub custom_data: Option<CustomDataType>,
5958 pub r#type: CostDimensionEnum,
5959 pub volume: f64,
5961}
5962#[cfg(feature = "alloc")]
5963#[derive(Debug, Clone, PartialEq)]
5965#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5966pub struct ChargingPeriod<CustomDataType = crate::NoCustomData> {
5967 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5968 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5969 pub custom_data: Option<CustomDataType>,
5970 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5971 pub dimensions: Option<alloc::vec::Vec<CostDimension<CustomDataType>>>,
5972 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
5974 pub start_period: crate::OcppTimestamp,
5975 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
5977 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5978 pub tariff_id: Option<heapless::String<60usize>>,
5979}
5980#[cfg(not(feature = "alloc"))]
5981#[derive(Debug, Clone, PartialEq)]
5983#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5984pub struct ChargingPeriod<
5985 CustomDataType = crate::NoCustomData,
5986 const CHARGING_PERIOD_DIMENSIONS_CAP: usize = 8usize,
5987> {
5988 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5989 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5990 pub custom_data: Option<CustomDataType>,
5991 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5992 pub dimensions: Option<
5993 heapless::Vec<CostDimension<CustomDataType>, CHARGING_PERIOD_DIMENSIONS_CAP>,
5994 >,
5995 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
5997 pub start_period: crate::OcppTimestamp,
5998 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
6000 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6001 pub tariff_id: Option<heapless::String<60usize>>,
6002}
6003#[derive(Debug, Clone, PartialEq)]
6005#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6006pub struct TotalPrice<CustomDataType = crate::NoCustomData> {
6007 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6008 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6009 pub custom_data: Option<CustomDataType>,
6010 #[cfg_attr(feature = "serde", serde(rename = "exclTax"))]
6012 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6013 pub excl_tax: Option<f64>,
6014 #[cfg_attr(feature = "serde", serde(rename = "inclTax"))]
6016 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6017 pub incl_tax: Option<f64>,
6018}
6019#[derive(Debug, Clone, PartialEq, Eq)]
6021#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6022pub enum TariffCostEnum {
6023 NormalCost,
6024 MinCost,
6025 MaxCost,
6026}
6027#[derive(Debug, Clone, PartialEq)]
6029#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6030pub struct TotalCost<CustomDataType = crate::NoCustomData> {
6031 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
6032 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6033 pub charging_time: Option<Price<CustomDataType>>,
6034 pub currency: heapless::String<3usize>,
6036 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6037 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6038 pub custom_data: Option<CustomDataType>,
6039 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6040 pub energy: Option<Price<CustomDataType>>,
6041 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6042 pub fixed: Option<Price<CustomDataType>>,
6043 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
6044 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6045 pub idle_time: Option<Price<CustomDataType>>,
6046 #[cfg_attr(feature = "serde", serde(rename = "reservationFixed"))]
6047 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6048 pub reservation_fixed: Option<Price<CustomDataType>>,
6049 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
6050 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6051 pub reservation_time: Option<Price<CustomDataType>>,
6052 pub total: TotalPrice<CustomDataType>,
6053 #[cfg_attr(feature = "serde", serde(rename = "typeOfCost"))]
6054 pub type_of_cost: TariffCostEnum,
6055}
6056#[derive(Debug, Clone, PartialEq)]
6058#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6059pub struct TotalUsage<CustomDataType = crate::NoCustomData> {
6060 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
6062 pub charging_time: i64,
6063 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6064 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6065 pub custom_data: Option<CustomDataType>,
6066 pub energy: f64,
6067 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
6069 pub idle_time: i64,
6070 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
6072 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6073 pub reservation_time: Option<i64>,
6074}
6075#[cfg(feature = "alloc")]
6076#[derive(Debug, Clone, PartialEq)]
6080#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6081pub struct CostDetails<CustomDataType = crate::NoCustomData> {
6082 #[cfg_attr(feature = "serde", serde(rename = "chargingPeriods"))]
6083 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6084 pub charging_periods: Option<alloc::vec::Vec<ChargingPeriod<CustomDataType>>>,
6085 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6086 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6087 pub custom_data: Option<CustomDataType>,
6088 #[cfg_attr(feature = "serde", serde(rename = "failureReason"))]
6090 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6091 pub failure_reason: Option<heapless::String<500usize>>,
6092 #[cfg_attr(feature = "serde", serde(rename = "failureToCalculate"))]
6094 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6095 pub failure_to_calculate: Option<bool>,
6096 #[cfg_attr(feature = "serde", serde(rename = "totalCost"))]
6097 pub total_cost: TotalCost<CustomDataType>,
6098 #[cfg_attr(feature = "serde", serde(rename = "totalUsage"))]
6099 pub total_usage: TotalUsage<CustomDataType>,
6100}
6101#[cfg(not(feature = "alloc"))]
6102#[derive(Debug, Clone, PartialEq)]
6106#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6107pub struct CostDetails<
6108 CustomDataType = crate::NoCustomData,
6109 const COST_DETAILS_CHARGING_PERIODS_CAP: usize = 8usize,
6110 const CHARGING_PERIOD_DIMENSIONS_CAP: usize = 8usize,
6111> {
6112 #[cfg_attr(feature = "serde", serde(rename = "chargingPeriods"))]
6113 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6114 pub charging_periods: Option<
6115 heapless::Vec<
6116 ChargingPeriod<CustomDataType, CHARGING_PERIOD_DIMENSIONS_CAP>,
6117 COST_DETAILS_CHARGING_PERIODS_CAP,
6118 >,
6119 >,
6120 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6121 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6122 pub custom_data: Option<CustomDataType>,
6123 #[cfg_attr(feature = "serde", serde(rename = "failureReason"))]
6125 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6126 pub failure_reason: Option<heapless::String<500usize>>,
6127 #[cfg_attr(feature = "serde", serde(rename = "failureToCalculate"))]
6129 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6130 pub failure_to_calculate: Option<bool>,
6131 #[cfg_attr(feature = "serde", serde(rename = "totalCost"))]
6132 pub total_cost: TotalCost<CustomDataType>,
6133 #[cfg_attr(feature = "serde", serde(rename = "totalUsage"))]
6134 pub total_usage: TotalUsage<CustomDataType>,
6135}
6136#[derive(Debug, Clone, PartialEq, Eq)]
6139#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6140pub enum TransactionEventEnum {
6141 Ended,
6142 Started,
6143 Updated,
6144}
6145#[derive(Debug, Clone, PartialEq, Eq)]
6147#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6148pub enum PreconditioningStatusEnum {
6149 Unknown,
6150 Ready,
6151 NotReady,
6152 Preconditioning,
6153}
6154#[derive(Debug, Clone, PartialEq, Eq)]
6157#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6158pub enum ChargingStateEnum {
6159 EVConnected,
6160 Charging,
6161 SuspendedEV,
6162 SuspendedEVSE,
6163 Idle,
6164}
6165#[derive(Debug, Clone, PartialEq, Eq)]
6168#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6169pub enum ReasonEnum {
6170 DeAuthorized,
6171 EmergencyStop,
6172 EnergyLimitReached,
6173 EVDisconnected,
6174 GroundFault,
6175 ImmediateReset,
6176 MasterPass,
6177 Local,
6178 LocalOutOfCredit,
6179 Other,
6180 OvercurrentFault,
6181 PowerLoss,
6182 PowerQuality,
6183 Reboot,
6184 Remote,
6185 SOCLimitReached,
6186 StoppedByEV,
6187 TimeLimitReached,
6188 Timeout,
6189 ReqEnergyTransferRejected,
6190}
6191#[derive(Debug, Clone, PartialEq)]
6193#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6194pub struct TransactionLimit<CustomDataType = crate::NoCustomData> {
6195 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6196 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6197 pub custom_data: Option<CustomDataType>,
6198 #[cfg_attr(feature = "serde", serde(rename = "maxCost"))]
6200 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6201 pub max_cost: Option<f64>,
6202 #[cfg_attr(feature = "serde", serde(rename = "maxEnergy"))]
6204 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6205 pub max_energy: Option<f64>,
6206 #[cfg_attr(feature = "serde", serde(rename = "maxSoC"))]
6208 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6209 pub max_so_c: Option<i64>,
6210 #[cfg_attr(feature = "serde", serde(rename = "maxTime"))]
6212 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6213 pub max_time: Option<i64>,
6214}
6215#[derive(Debug, Clone, PartialEq)]
6216#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6217pub struct Transaction<CustomDataType = crate::NoCustomData> {
6218 #[cfg_attr(feature = "serde", serde(rename = "chargingState"))]
6219 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6220 pub charging_state: Option<ChargingStateEnum>,
6221 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6222 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6223 pub custom_data: Option<CustomDataType>,
6224 #[cfg_attr(feature = "serde", serde(rename = "operationMode"))]
6225 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6226 pub operation_mode: Option<OperationModeEnum>,
6227 #[cfg_attr(feature = "serde", serde(rename = "remoteStartId"))]
6229 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6230 pub remote_start_id: Option<i64>,
6231 #[cfg_attr(feature = "serde", serde(rename = "stoppedReason"))]
6232 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6233 pub stopped_reason: Option<ReasonEnum>,
6234 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
6236 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6237 pub tariff_id: Option<heapless::String<60usize>>,
6238 #[cfg_attr(feature = "serde", serde(rename = "timeSpentCharging"))]
6240 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6241 pub time_spent_charging: Option<i64>,
6242 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
6244 pub transaction_id: heapless::String<36usize>,
6245 #[cfg_attr(feature = "serde", serde(rename = "transactionLimit"))]
6246 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6247 pub transaction_limit: Option<TransactionLimit<CustomDataType>>,
6248}
6249#[derive(Debug, Clone, PartialEq, Eq)]
6251#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6252pub enum TriggerReasonEnum {
6253 AbnormalCondition,
6254 Authorized,
6255 CablePluggedIn,
6256 ChargingRateChanged,
6257 ChargingStateChanged,
6258 CostLimitReached,
6259 Deauthorized,
6260 EnergyLimitReached,
6261 EVCommunicationLost,
6262 EVConnectTimeout,
6263 EVDeparted,
6264 EVDetected,
6265 LimitSet,
6266 MeterValueClock,
6267 MeterValuePeriodic,
6268 OperationModeChanged,
6269 RemoteStart,
6270 RemoteStop,
6271 ResetCommand,
6272 RunningCost,
6273 SignedDataReceived,
6274 SoCLimitReached,
6275 StopAuthorized,
6276 TariffChanged,
6277 TariffNotAccepted,
6278 TimeLimitReached,
6279 Trigger,
6280 TxResumed,
6281 UnlockCommand,
6282}
6283#[derive(Debug, Clone, PartialEq, Eq)]
6285#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6286pub enum MessageTriggerEnum {
6287 BootNotification,
6288 LogStatusNotification,
6289 FirmwareStatusNotification,
6290 Heartbeat,
6291 MeterValues,
6292 SignChargingStationCertificate,
6293 SignV2GCertificate,
6294 SignV2G20Certificate,
6295 StatusNotification,
6296 TransactionEvent,
6297 SignCombinedCertificate,
6298 PublishFirmwareStatusNotification,
6299 CustomTrigger,
6300}
6301#[derive(Debug, Clone, PartialEq, Eq)]
6303#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6304pub enum TriggerMessageStatusEnum {
6305 Accepted,
6306 Rejected,
6307 NotImplemented,
6308}
6309#[derive(Debug, Clone, PartialEq, Eq)]
6311#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6312pub enum UnlockStatusEnum {
6313 Unlocked,
6314 UnlockFailed,
6315 OngoingAuthorizedTransaction,
6316 UnknownConnector,
6317}
6318#[derive(Debug, Clone, PartialEq, Eq)]
6320#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6321pub enum UnpublishFirmwareStatusEnum {
6322 DownloadOngoing,
6323 NoFirmware,
6324 Unpublished,
6325}
6326#[cfg(feature = "alloc")]
6327#[derive(Debug, Clone, PartialEq, Eq)]
6329#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6330pub struct Firmware<CustomDataType = crate::NoCustomData> {
6331 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6332 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6333 pub custom_data: Option<CustomDataType>,
6334 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
6336 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6337 pub install_date_time: Option<crate::OcppTimestamp>,
6338 pub location: alloc::string::String,
6340 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
6342 pub retrieve_date_time: crate::OcppTimestamp,
6343 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6345 pub signature: Option<alloc::string::String>,
6346 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
6349 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6350 pub signing_certificate: Option<alloc::string::String>,
6351}
6352#[cfg(not(feature = "alloc"))]
6353#[derive(Debug, Clone, PartialEq, Eq)]
6355#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6356pub struct Firmware<
6357 CustomDataType = crate::NoCustomData,
6358 const FIRMWARE_LOCATION_CAP: usize = 1024usize,
6359 const FIRMWARE_SIGNATURE_CAP: usize = 800usize,
6360 const FIRMWARE_SIGNING_CERTIFICATE_CAP: usize = 1024usize,
6361> {
6362 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6363 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6364 pub custom_data: Option<CustomDataType>,
6365 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
6367 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6368 pub install_date_time: Option<crate::OcppTimestamp>,
6369 pub location: heapless::String<FIRMWARE_LOCATION_CAP>,
6371 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
6373 pub retrieve_date_time: crate::OcppTimestamp,
6374 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6376 pub signature: Option<heapless::String<FIRMWARE_SIGNATURE_CAP>>,
6377 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
6380 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6381 pub signing_certificate: Option<heapless::String<FIRMWARE_SIGNING_CERTIFICATE_CAP>>,
6382}
6383#[derive(Debug, Clone, PartialEq, Eq)]
6385#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6386pub enum UpdateFirmwareStatusEnum {
6387 Accepted,
6388 Rejected,
6389 AcceptedCanceled,
6390 InvalidCertificate,
6391 RevokedCertificate,
6392}
6393#[derive(Debug, Clone, PartialEq, Eq)]
6395#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6396pub enum PriorityChargingStatusEnum {
6397 Accepted,
6398 Rejected,
6399 NoProfile,
6400}