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#[derive(Debug, Clone, PartialEq, Eq)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
20pub struct StatusInfo {
21 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
23 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
24 pub additional_info: Option<heapless::String<1024usize>>,
25 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
26 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
27 pub custom_data: Option<CustomData>,
28 #[cfg_attr(feature = "serde", serde(rename = "reasonCode"))]
30 pub reason_code: heapless::String<20usize>,
31}
32#[derive(Debug, Clone, PartialEq, Eq)]
33#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
34pub struct PeriodicEventStreamParams {
35 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
36 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
37 pub custom_data: Option<CustomData>,
38 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
40 pub interval: Option<i64>,
41 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
43 pub values: Option<i64>,
44}
45#[derive(Debug, Clone, PartialEq, Eq)]
47#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
48pub struct AdditionalInfo {
49 #[cfg_attr(feature = "serde", serde(rename = "additionalIdToken"))]
51 pub additional_id_token: heapless::String<255usize>,
52 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
53 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
54 pub custom_data: Option<CustomData>,
55 pub r#type: heapless::String<50usize>,
57}
58#[cfg(feature = "alloc")]
59#[derive(Debug, Clone, PartialEq, Eq)]
61#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
62pub struct IdToken {
63 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
64 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
65 pub additional_info: Option<alloc::vec::Vec<AdditionalInfo>>,
66 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
67 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
68 pub custom_data: Option<CustomData>,
69 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
71 pub id_token: heapless::String<255usize>,
72 pub r#type: heapless::String<20usize>,
74}
75#[cfg(not(feature = "alloc"))]
76#[derive(Debug, Clone, PartialEq, Eq)]
78#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
79pub struct IdToken<const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 16usize> {
80 #[cfg_attr(feature = "serde", serde(rename = "additionalInfo"))]
81 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
82 pub additional_info: Option<
83 heapless::Vec<AdditionalInfo, ID_TOKEN_ADDITIONAL_INFO_CAP>,
84 >,
85 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
86 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
87 pub custom_data: Option<CustomData>,
88 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
90 pub id_token: heapless::String<255usize>,
91 pub r#type: heapless::String<20usize>,
93}
94#[derive(Debug, Clone, PartialEq, Eq)]
96#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
97pub enum HashAlgorithmEnum {
98 SHA256,
99 SHA384,
100 SHA512,
101}
102#[derive(Debug, Clone, PartialEq, Eq)]
104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
105pub struct OCSPRequestData {
106 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
107 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
108 pub custom_data: Option<CustomData>,
109 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
110 pub hash_algorithm: HashAlgorithmEnum,
111 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
115 pub issuer_key_hash: heapless::String<128usize>,
116 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
121 pub issuer_name_hash: heapless::String<128usize>,
122 #[cfg_attr(feature = "serde", serde(rename = "responderURL"))]
124 pub responder_u_r_l: heapless::String<2000usize>,
125 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
129 pub serial_number: heapless::String<40usize>,
130}
131#[derive(Debug, Clone, PartialEq, Eq)]
132#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
133pub enum EnergyTransferModeEnum {
134 #[cfg_attr(feature = "serde", serde(rename = "AC_single_phase"))]
135 ACsinglephase,
136 #[cfg_attr(feature = "serde", serde(rename = "AC_two_phase"))]
137 ACtwophase,
138 #[cfg_attr(feature = "serde", serde(rename = "AC_three_phase"))]
139 ACthreephase,
140 DC,
141 #[cfg_attr(feature = "serde", serde(rename = "AC_BPT"))]
142 ACBPT,
143 #[cfg_attr(feature = "serde", serde(rename = "AC_BPT_DER"))]
144 ACBPTDER,
145 #[cfg_attr(feature = "serde", serde(rename = "AC_DER"))]
146 ACDER,
147 #[cfg_attr(feature = "serde", serde(rename = "DC_BPT"))]
148 DCBPT,
149 #[cfg_attr(feature = "serde", serde(rename = "DC_ACDP"))]
150 DCACDP,
151 #[cfg_attr(feature = "serde", serde(rename = "DC_ACDP_BPT"))]
152 DCACDPBPT,
153 WPT,
154}
155#[derive(Debug, Clone, PartialEq, Eq)]
159#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
160pub enum AuthorizeCertificateStatusEnum {
161 Accepted,
162 SignatureError,
163 CertificateExpired,
164 CertificateRevoked,
165 NoCertificateAvailable,
166 CertChainError,
167 ContractCancelled,
168}
169#[derive(Debug, Clone, PartialEq, Eq)]
171#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
172pub enum MessageFormatEnum {
173 ASCII,
174 HTML,
175 URI,
176 UTF8,
177 QRCODE,
178}
179#[derive(Debug, Clone, PartialEq, Eq)]
181#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
182pub struct MessageContent {
183 pub content: heapless::String<1024usize>,
187 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
188 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
189 pub custom_data: Option<CustomData>,
190 pub format: MessageFormatEnum,
191 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
193 pub language: Option<heapless::String<8usize>>,
194}
195#[derive(Debug, Clone, PartialEq, Eq)]
197#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
198pub enum AuthorizationStatusEnum {
199 Accepted,
200 Blocked,
201 ConcurrentTx,
202 Expired,
203 Invalid,
204 NoCredit,
205 NotAllowedTypeEVSE,
206 NotAtThisLocation,
207 NotAtThisTime,
208 Unknown,
209}
210#[cfg(feature = "alloc")]
211#[derive(Debug, Clone, PartialEq, Eq)]
214#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
215pub struct IdTokenInfo {
216 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
218 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
219 pub cache_expiry_date_time: Option<alloc::string::String>,
220 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
222 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
223 pub charging_priority: Option<i64>,
224 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
225 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
226 pub custom_data: Option<CustomData>,
227 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
229 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
230 pub evse_id: Option<alloc::vec::Vec<i64>>,
231 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
232 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
233 pub group_id_token: Option<IdToken>,
234 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
236 pub language1: Option<heapless::String<8usize>>,
237 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
239 pub language2: Option<heapless::String<8usize>>,
240 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
241 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
242 pub personal_message: Option<MessageContent>,
243 pub status: AuthorizationStatusEnum,
244}
245#[cfg(not(feature = "alloc"))]
246#[derive(Debug, Clone, PartialEq, Eq)]
249#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
250pub struct IdTokenInfo<
251 const ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP: usize = 1024usize,
252 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 16usize,
253 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 16usize,
254> {
255 #[cfg_attr(feature = "serde", serde(rename = "cacheExpiryDateTime"))]
257 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
258 pub cache_expiry_date_time: Option<
259 heapless::String<ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP>,
260 >,
261 #[cfg_attr(feature = "serde", serde(rename = "chargingPriority"))]
263 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
264 pub charging_priority: Option<i64>,
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<CustomData>,
268 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
270 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
271 pub evse_id: Option<heapless::Vec<i64, ID_TOKEN_INFO_EVSE_ID_CAP>>,
272 #[cfg_attr(feature = "serde", serde(rename = "groupIdToken"))]
273 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
274 pub group_id_token: Option<IdToken<ID_TOKEN_ADDITIONAL_INFO_CAP>>,
275 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
277 pub language1: Option<heapless::String<8usize>>,
278 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
280 pub language2: Option<heapless::String<8usize>>,
281 #[cfg_attr(feature = "serde", serde(rename = "personalMessage"))]
282 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
283 pub personal_message: Option<MessageContent>,
284 pub status: AuthorizationStatusEnum,
285}
286#[derive(Debug, Clone, PartialEq, Eq)]
287#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
288pub enum DayOfWeekEnum {
289 Monday,
290 Tuesday,
291 Wednesday,
292 Thursday,
293 Friday,
294 Saturday,
295 Sunday,
296}
297#[derive(Debug, Clone, PartialEq, Eq)]
299#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
300pub enum EvseKindEnum {
301 AC,
302 DC,
303}
304#[cfg(feature = "alloc")]
305#[derive(Debug, Clone, PartialEq)]
316#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
317pub struct TariffConditions {
318 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
319 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
320 pub custom_data: Option<CustomData>,
321 #[cfg_attr(feature = "serde", serde(rename = "dayOfWeek"))]
323 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
324 pub day_of_week: Option<heapless::Vec<DayOfWeekEnum, 7usize>>,
325 #[cfg_attr(feature = "serde", serde(rename = "endTimeOfDay"))]
329 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
330 pub end_time_of_day: Option<alloc::string::String>,
331 #[cfg_attr(feature = "serde", serde(rename = "evseKind"))]
332 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
333 pub evse_kind: Option<EvseKindEnum>,
334 #[cfg_attr(feature = "serde", serde(rename = "maxChargingTime"))]
338 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
339 pub max_charging_time: Option<i64>,
340 #[cfg_attr(feature = "serde", serde(rename = "maxCurrent"))]
344 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
345 pub max_current: Option<f64>,
346 #[cfg_attr(feature = "serde", serde(rename = "maxEnergy"))]
349 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
350 pub max_energy: Option<f64>,
351 #[cfg_attr(feature = "serde", serde(rename = "maxIdleTime"))]
355 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
356 pub max_idle_time: Option<i64>,
357 #[cfg_attr(feature = "serde", serde(rename = "maxPower"))]
362 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
363 pub max_power: Option<f64>,
364 #[cfg_attr(feature = "serde", serde(rename = "maxTime"))]
368 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
369 pub max_time: Option<i64>,
370 #[cfg_attr(feature = "serde", serde(rename = "minChargingTime"))]
374 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
375 pub min_charging_time: Option<i64>,
376 #[cfg_attr(feature = "serde", serde(rename = "minCurrent"))]
380 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
381 pub min_current: Option<f64>,
382 #[cfg_attr(feature = "serde", serde(rename = "minEnergy"))]
385 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
386 pub min_energy: Option<f64>,
387 #[cfg_attr(feature = "serde", serde(rename = "minIdleTime"))]
391 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
392 pub min_idle_time: Option<i64>,
393 #[cfg_attr(feature = "serde", serde(rename = "minPower"))]
398 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
399 pub min_power: Option<f64>,
400 #[cfg_attr(feature = "serde", serde(rename = "minTime"))]
404 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
405 pub min_time: Option<i64>,
406 #[cfg_attr(feature = "serde", serde(rename = "startTimeOfDay"))]
411 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
412 pub start_time_of_day: Option<alloc::string::String>,
413 #[cfg_attr(feature = "serde", serde(rename = "validFromDate"))]
419 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
420 pub valid_from_date: Option<alloc::string::String>,
421 #[cfg_attr(feature = "serde", serde(rename = "validToDate"))]
424 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
425 pub valid_to_date: Option<alloc::string::String>,
426}
427#[cfg(not(feature = "alloc"))]
428#[derive(Debug, Clone, PartialEq)]
439#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
440pub struct TariffConditions<
441 const TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP: usize = 1024usize,
442 const TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP: usize = 1024usize,
443 const TARIFF_CONDITIONS_VALID_FROM_DATE_CAP: usize = 1024usize,
444 const TARIFF_CONDITIONS_VALID_TO_DATE_CAP: usize = 1024usize,
445> {
446 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
447 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
448 pub custom_data: Option<CustomData>,
449 #[cfg_attr(feature = "serde", serde(rename = "dayOfWeek"))]
451 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
452 pub day_of_week: Option<heapless::Vec<DayOfWeekEnum, 7usize>>,
453 #[cfg_attr(feature = "serde", serde(rename = "endTimeOfDay"))]
457 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
458 pub end_time_of_day: Option<heapless::String<TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP>>,
459 #[cfg_attr(feature = "serde", serde(rename = "evseKind"))]
460 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
461 pub evse_kind: Option<EvseKindEnum>,
462 #[cfg_attr(feature = "serde", serde(rename = "maxChargingTime"))]
466 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
467 pub max_charging_time: Option<i64>,
468 #[cfg_attr(feature = "serde", serde(rename = "maxCurrent"))]
472 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
473 pub max_current: Option<f64>,
474 #[cfg_attr(feature = "serde", serde(rename = "maxEnergy"))]
477 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
478 pub max_energy: Option<f64>,
479 #[cfg_attr(feature = "serde", serde(rename = "maxIdleTime"))]
483 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
484 pub max_idle_time: Option<i64>,
485 #[cfg_attr(feature = "serde", serde(rename = "maxPower"))]
490 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
491 pub max_power: Option<f64>,
492 #[cfg_attr(feature = "serde", serde(rename = "maxTime"))]
496 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
497 pub max_time: Option<i64>,
498 #[cfg_attr(feature = "serde", serde(rename = "minChargingTime"))]
502 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
503 pub min_charging_time: Option<i64>,
504 #[cfg_attr(feature = "serde", serde(rename = "minCurrent"))]
508 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
509 pub min_current: Option<f64>,
510 #[cfg_attr(feature = "serde", serde(rename = "minEnergy"))]
513 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
514 pub min_energy: Option<f64>,
515 #[cfg_attr(feature = "serde", serde(rename = "minIdleTime"))]
519 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
520 pub min_idle_time: Option<i64>,
521 #[cfg_attr(feature = "serde", serde(rename = "minPower"))]
526 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
527 pub min_power: Option<f64>,
528 #[cfg_attr(feature = "serde", serde(rename = "minTime"))]
532 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
533 pub min_time: Option<i64>,
534 #[cfg_attr(feature = "serde", serde(rename = "startTimeOfDay"))]
539 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
540 pub start_time_of_day: Option<
541 heapless::String<TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP>,
542 >,
543 #[cfg_attr(feature = "serde", serde(rename = "validFromDate"))]
549 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
550 pub valid_from_date: Option<heapless::String<TARIFF_CONDITIONS_VALID_FROM_DATE_CAP>>,
551 #[cfg_attr(feature = "serde", serde(rename = "validToDate"))]
554 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
555 pub valid_to_date: Option<heapless::String<TARIFF_CONDITIONS_VALID_TO_DATE_CAP>>,
556}
557#[cfg(feature = "alloc")]
558#[derive(Debug, Clone, PartialEq)]
560#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
561pub struct TariffTimePrice {
562 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
563 pub conditions: Option<TariffConditions>,
564 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
565 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
566 pub custom_data: Option<CustomData>,
567 #[cfg_attr(feature = "serde", serde(rename = "priceMinute"))]
569 pub price_minute: f64,
570}
571#[cfg(not(feature = "alloc"))]
572#[derive(Debug, Clone, PartialEq)]
574#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
575pub struct TariffTimePrice<
576 const TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP: usize = 1024usize,
577 const TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP: usize = 1024usize,
578 const TARIFF_CONDITIONS_VALID_FROM_DATE_CAP: usize = 1024usize,
579 const TARIFF_CONDITIONS_VALID_TO_DATE_CAP: usize = 1024usize,
580> {
581 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
582 pub conditions: Option<
583 TariffConditions<
584 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
585 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
586 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
587 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
588 >,
589 >,
590 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
591 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
592 pub custom_data: Option<CustomData>,
593 #[cfg_attr(feature = "serde", serde(rename = "priceMinute"))]
595 pub price_minute: f64,
596}
597#[derive(Debug, Clone, PartialEq)]
599#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
600pub struct TaxRate {
601 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
602 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
603 pub custom_data: Option<CustomData>,
604 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
609 pub stack: Option<i64>,
610 pub tax: f64,
612 pub r#type: heapless::String<20usize>,
614}
615#[cfg(feature = "alloc")]
616#[derive(Debug, Clone, PartialEq)]
618#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
619pub struct TariffTime {
620 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
621 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
622 pub custom_data: Option<CustomData>,
623 pub prices: alloc::vec::Vec<TariffTimePrice>,
624 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
625 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
626 pub tax_rates: Option<heapless::Vec<TaxRate, 5usize>>,
627}
628#[cfg(not(feature = "alloc"))]
629#[derive(Debug, Clone, PartialEq)]
631#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
632pub struct TariffTime<
633 const TARIFF_TIME_PRICES_CAP: usize = 16usize,
634 const TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP: usize = 1024usize,
635 const TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP: usize = 1024usize,
636 const TARIFF_CONDITIONS_VALID_FROM_DATE_CAP: usize = 1024usize,
637 const TARIFF_CONDITIONS_VALID_TO_DATE_CAP: usize = 1024usize,
638> {
639 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
640 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
641 pub custom_data: Option<CustomData>,
642 pub prices: heapless::Vec<
643 TariffTimePrice<
644 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
645 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
646 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
647 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
648 >,
649 TARIFF_TIME_PRICES_CAP,
650 >,
651 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
652 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
653 pub tax_rates: Option<heapless::Vec<TaxRate, 5usize>>,
654}
655#[cfg(feature = "alloc")]
656#[derive(Debug, Clone, PartialEq)]
658#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
659pub struct TariffEnergyPrice {
660 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
661 pub conditions: Option<TariffConditions>,
662 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
663 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
664 pub custom_data: Option<CustomData>,
665 #[cfg_attr(feature = "serde", serde(rename = "priceKwh"))]
667 pub price_kwh: f64,
668}
669#[cfg(not(feature = "alloc"))]
670#[derive(Debug, Clone, PartialEq)]
672#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
673pub struct TariffEnergyPrice<
674 const TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP: usize = 1024usize,
675 const TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP: usize = 1024usize,
676 const TARIFF_CONDITIONS_VALID_FROM_DATE_CAP: usize = 1024usize,
677 const TARIFF_CONDITIONS_VALID_TO_DATE_CAP: usize = 1024usize,
678> {
679 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
680 pub conditions: Option<
681 TariffConditions<
682 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
683 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
684 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
685 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
686 >,
687 >,
688 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
689 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
690 pub custom_data: Option<CustomData>,
691 #[cfg_attr(feature = "serde", serde(rename = "priceKwh"))]
693 pub price_kwh: f64,
694}
695#[cfg(feature = "alloc")]
696#[derive(Debug, Clone, PartialEq)]
698#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
699pub struct TariffEnergy {
700 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
701 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
702 pub custom_data: Option<CustomData>,
703 pub prices: alloc::vec::Vec<TariffEnergyPrice>,
704 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
705 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
706 pub tax_rates: Option<heapless::Vec<TaxRate, 5usize>>,
707}
708#[cfg(not(feature = "alloc"))]
709#[derive(Debug, Clone, PartialEq)]
711#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
712pub struct TariffEnergy<
713 const TARIFF_ENERGY_PRICES_CAP: usize = 16usize,
714 const TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP: usize = 1024usize,
715 const TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP: usize = 1024usize,
716 const TARIFF_CONDITIONS_VALID_FROM_DATE_CAP: usize = 1024usize,
717 const TARIFF_CONDITIONS_VALID_TO_DATE_CAP: usize = 1024usize,
718> {
719 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
720 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
721 pub custom_data: Option<CustomData>,
722 pub prices: heapless::Vec<
723 TariffEnergyPrice<
724 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
725 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
726 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
727 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
728 >,
729 TARIFF_ENERGY_PRICES_CAP,
730 >,
731 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
732 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
733 pub tax_rates: Option<heapless::Vec<TaxRate, 5usize>>,
734}
735#[cfg(feature = "alloc")]
736#[derive(Debug, Clone, PartialEq, Eq)]
743#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
744pub struct TariffConditionsFixed {
745 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
746 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
747 pub custom_data: Option<CustomData>,
748 #[cfg_attr(feature = "serde", serde(rename = "dayOfWeek"))]
750 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
751 pub day_of_week: Option<heapless::Vec<DayOfWeekEnum, 7usize>>,
752 #[cfg_attr(feature = "serde", serde(rename = "endTimeOfDay"))]
756 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
757 pub end_time_of_day: Option<alloc::string::String>,
758 #[cfg_attr(feature = "serde", serde(rename = "evseKind"))]
759 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
760 pub evse_kind: Option<EvseKindEnum>,
761 #[cfg_attr(feature = "serde", serde(rename = "paymentBrand"))]
764 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
765 pub payment_brand: Option<heapless::String<20usize>>,
766 #[cfg_attr(feature = "serde", serde(rename = "paymentRecognition"))]
769 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
770 pub payment_recognition: Option<heapless::String<20usize>>,
771 #[cfg_attr(feature = "serde", serde(rename = "startTimeOfDay"))]
776 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
777 pub start_time_of_day: Option<alloc::string::String>,
778 #[cfg_attr(feature = "serde", serde(rename = "validFromDate"))]
784 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
785 pub valid_from_date: Option<alloc::string::String>,
786 #[cfg_attr(feature = "serde", serde(rename = "validToDate"))]
789 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
790 pub valid_to_date: Option<alloc::string::String>,
791}
792#[cfg(not(feature = "alloc"))]
793#[derive(Debug, Clone, PartialEq, Eq)]
800#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
801pub struct TariffConditionsFixed<
802 const TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP: usize = 1024usize,
803 const TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP: usize = 1024usize,
804 const TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP: usize = 1024usize,
805 const TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP: usize = 1024usize,
806> {
807 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
808 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
809 pub custom_data: Option<CustomData>,
810 #[cfg_attr(feature = "serde", serde(rename = "dayOfWeek"))]
812 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
813 pub day_of_week: Option<heapless::Vec<DayOfWeekEnum, 7usize>>,
814 #[cfg_attr(feature = "serde", serde(rename = "endTimeOfDay"))]
818 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
819 pub end_time_of_day: Option<
820 heapless::String<TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP>,
821 >,
822 #[cfg_attr(feature = "serde", serde(rename = "evseKind"))]
823 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
824 pub evse_kind: Option<EvseKindEnum>,
825 #[cfg_attr(feature = "serde", serde(rename = "paymentBrand"))]
828 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
829 pub payment_brand: Option<heapless::String<20usize>>,
830 #[cfg_attr(feature = "serde", serde(rename = "paymentRecognition"))]
833 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
834 pub payment_recognition: Option<heapless::String<20usize>>,
835 #[cfg_attr(feature = "serde", serde(rename = "startTimeOfDay"))]
840 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
841 pub start_time_of_day: Option<
842 heapless::String<TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP>,
843 >,
844 #[cfg_attr(feature = "serde", serde(rename = "validFromDate"))]
850 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
851 pub valid_from_date: Option<
852 heapless::String<TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP>,
853 >,
854 #[cfg_attr(feature = "serde", serde(rename = "validToDate"))]
857 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
858 pub valid_to_date: Option<
859 heapless::String<TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP>,
860 >,
861}
862#[cfg(feature = "alloc")]
863#[derive(Debug, Clone, PartialEq)]
865#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
866pub struct TariffFixedPrice {
867 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
868 pub conditions: Option<TariffConditionsFixed>,
869 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
870 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
871 pub custom_data: Option<CustomData>,
872 #[cfg_attr(feature = "serde", serde(rename = "priceFixed"))]
874 pub price_fixed: f64,
875}
876#[cfg(not(feature = "alloc"))]
877#[derive(Debug, Clone, PartialEq)]
879#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
880pub struct TariffFixedPrice<
881 const TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP: usize = 1024usize,
882 const TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP: usize = 1024usize,
883 const TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP: usize = 1024usize,
884 const TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP: usize = 1024usize,
885> {
886 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
887 pub conditions: Option<
888 TariffConditionsFixed<
889 TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP,
890 TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP,
891 TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP,
892 TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP,
893 >,
894 >,
895 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
896 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
897 pub custom_data: Option<CustomData>,
898 #[cfg_attr(feature = "serde", serde(rename = "priceFixed"))]
900 pub price_fixed: f64,
901}
902#[cfg(feature = "alloc")]
903#[derive(Debug, Clone, PartialEq)]
904#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
905pub struct TariffFixed {
906 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
907 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
908 pub custom_data: Option<CustomData>,
909 pub prices: alloc::vec::Vec<TariffFixedPrice>,
910 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
911 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
912 pub tax_rates: Option<heapless::Vec<TaxRate, 5usize>>,
913}
914#[cfg(not(feature = "alloc"))]
915#[derive(Debug, Clone, PartialEq)]
916#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
917pub struct TariffFixed<
918 const TARIFF_FIXED_PRICES_CAP: usize = 16usize,
919 const TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP: usize = 1024usize,
920 const TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP: usize = 1024usize,
921 const TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP: usize = 1024usize,
922 const TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP: usize = 1024usize,
923> {
924 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
925 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
926 pub custom_data: Option<CustomData>,
927 pub prices: heapless::Vec<
928 TariffFixedPrice<
929 TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP,
930 TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP,
931 TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP,
932 TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP,
933 >,
934 TARIFF_FIXED_PRICES_CAP,
935 >,
936 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
937 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
938 pub tax_rates: Option<heapless::Vec<TaxRate, 5usize>>,
939}
940#[derive(Debug, Clone, PartialEq)]
942#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
943pub struct Price {
944 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
945 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
946 pub custom_data: Option<CustomData>,
947 #[cfg_attr(feature = "serde", serde(rename = "exclTax"))]
949 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
950 pub excl_tax: Option<f64>,
951 #[cfg_attr(feature = "serde", serde(rename = "inclTax"))]
953 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
954 pub incl_tax: Option<f64>,
955 #[cfg_attr(feature = "serde", serde(rename = "taxRates"))]
956 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
957 pub tax_rates: Option<heapless::Vec<TaxRate, 5usize>>,
958}
959#[cfg(feature = "alloc")]
960#[derive(Debug, Clone, PartialEq)]
971#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
972pub struct Tariff {
973 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
974 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
975 pub charging_time: Option<TariffTime>,
976 pub currency: heapless::String<3usize>,
978 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
979 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
980 pub custom_data: Option<CustomData>,
981 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
982 pub description: Option<heapless::Vec<MessageContent, 10usize>>,
983 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
984 pub energy: Option<TariffEnergy>,
985 #[cfg_attr(feature = "serde", serde(rename = "fixedFee"))]
986 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
987 pub fixed_fee: Option<TariffFixed>,
988 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
989 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
990 pub idle_time: Option<TariffTime>,
991 #[cfg_attr(feature = "serde", serde(rename = "maxCost"))]
992 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
993 pub max_cost: Option<Price>,
994 #[cfg_attr(feature = "serde", serde(rename = "minCost"))]
995 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
996 pub min_cost: Option<Price>,
997 #[cfg_attr(feature = "serde", serde(rename = "reservationFixed"))]
998 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
999 pub reservation_fixed: Option<TariffFixed>,
1000 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
1001 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1002 pub reservation_time: Option<TariffTime>,
1003 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
1005 pub tariff_id: heapless::String<60usize>,
1006 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
1008 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1009 pub valid_from: Option<alloc::string::String>,
1010}
1011#[cfg(not(feature = "alloc"))]
1012#[derive(Debug, Clone, PartialEq)]
1023#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1024pub struct Tariff<
1025 const TARIFF_TIME_PRICES_CAP: usize = 16usize,
1026 const TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP: usize = 1024usize,
1027 const TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP: usize = 1024usize,
1028 const TARIFF_CONDITIONS_VALID_FROM_DATE_CAP: usize = 1024usize,
1029 const TARIFF_CONDITIONS_VALID_TO_DATE_CAP: usize = 1024usize,
1030 const TARIFF_ENERGY_PRICES_CAP: usize = 16usize,
1031 const TARIFF_FIXED_PRICES_CAP: usize = 16usize,
1032 const TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP: usize = 1024usize,
1033 const TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP: usize = 1024usize,
1034 const TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP: usize = 1024usize,
1035 const TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP: usize = 1024usize,
1036 const TARIFF_VALID_FROM_CAP: usize = 1024usize,
1037> {
1038 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
1039 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1040 pub charging_time: Option<
1041 TariffTime<
1042 TARIFF_TIME_PRICES_CAP,
1043 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
1044 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
1045 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
1046 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
1047 >,
1048 >,
1049 pub currency: heapless::String<3usize>,
1051 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1052 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1053 pub custom_data: Option<CustomData>,
1054 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1055 pub description: Option<heapless::Vec<MessageContent, 10usize>>,
1056 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1057 pub energy: Option<
1058 TariffEnergy<
1059 TARIFF_ENERGY_PRICES_CAP,
1060 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
1061 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
1062 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
1063 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
1064 >,
1065 >,
1066 #[cfg_attr(feature = "serde", serde(rename = "fixedFee"))]
1067 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1068 pub fixed_fee: Option<
1069 TariffFixed<
1070 TARIFF_FIXED_PRICES_CAP,
1071 TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP,
1072 TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP,
1073 TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP,
1074 TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP,
1075 >,
1076 >,
1077 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
1078 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1079 pub idle_time: Option<
1080 TariffTime<
1081 TARIFF_TIME_PRICES_CAP,
1082 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
1083 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
1084 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
1085 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
1086 >,
1087 >,
1088 #[cfg_attr(feature = "serde", serde(rename = "maxCost"))]
1089 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1090 pub max_cost: Option<Price>,
1091 #[cfg_attr(feature = "serde", serde(rename = "minCost"))]
1092 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1093 pub min_cost: Option<Price>,
1094 #[cfg_attr(feature = "serde", serde(rename = "reservationFixed"))]
1095 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1096 pub reservation_fixed: Option<
1097 TariffFixed<
1098 TARIFF_FIXED_PRICES_CAP,
1099 TARIFF_CONDITIONS_FIXED_END_TIME_OF_DAY_CAP,
1100 TARIFF_CONDITIONS_FIXED_START_TIME_OF_DAY_CAP,
1101 TARIFF_CONDITIONS_FIXED_VALID_FROM_DATE_CAP,
1102 TARIFF_CONDITIONS_FIXED_VALID_TO_DATE_CAP,
1103 >,
1104 >,
1105 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
1106 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1107 pub reservation_time: Option<
1108 TariffTime<
1109 TARIFF_TIME_PRICES_CAP,
1110 TARIFF_CONDITIONS_END_TIME_OF_DAY_CAP,
1111 TARIFF_CONDITIONS_START_TIME_OF_DAY_CAP,
1112 TARIFF_CONDITIONS_VALID_FROM_DATE_CAP,
1113 TARIFF_CONDITIONS_VALID_TO_DATE_CAP,
1114 >,
1115 >,
1116 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
1118 pub tariff_id: heapless::String<60usize>,
1119 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
1121 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1122 pub valid_from: Option<heapless::String<TARIFF_VALID_FROM_CAP>>,
1123}
1124#[cfg(feature = "alloc")]
1125#[derive(Debug, Clone, PartialEq)]
1126#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1127pub struct BatteryData {
1128 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1129 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1130 pub custom_data: Option<CustomData>,
1131 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1133 pub evse_id: i64,
1134 #[cfg_attr(feature = "serde", serde(rename = "productionDate"))]
1136 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1137 pub production_date: Option<alloc::string::String>,
1138 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
1140 pub serial_number: heapless::String<50usize>,
1141 #[cfg_attr(feature = "serde", serde(rename = "soC"))]
1143 pub so_c: f64,
1144 #[cfg_attr(feature = "serde", serde(rename = "soH"))]
1146 pub so_h: f64,
1147 #[cfg_attr(feature = "serde", serde(rename = "vendorInfo"))]
1149 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1150 pub vendor_info: Option<heapless::String<500usize>>,
1151}
1152#[cfg(not(feature = "alloc"))]
1153#[derive(Debug, Clone, PartialEq)]
1154#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1155pub struct BatteryData<const BATTERY_DATA_PRODUCTION_DATE_CAP: usize = 1024usize> {
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<CustomData>,
1159 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1161 pub evse_id: i64,
1162 #[cfg_attr(feature = "serde", serde(rename = "productionDate"))]
1164 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1165 pub production_date: Option<heapless::String<BATTERY_DATA_PRODUCTION_DATE_CAP>>,
1166 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
1168 pub serial_number: heapless::String<50usize>,
1169 #[cfg_attr(feature = "serde", serde(rename = "soC"))]
1171 pub so_c: f64,
1172 #[cfg_attr(feature = "serde", serde(rename = "soH"))]
1174 pub so_h: f64,
1175 #[cfg_attr(feature = "serde", serde(rename = "vendorInfo"))]
1177 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1178 pub vendor_info: Option<heapless::String<500usize>>,
1179}
1180#[derive(Debug, Clone, PartialEq, Eq)]
1182#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1183pub enum BatterySwapEventEnum {
1184 BatteryIn,
1185 BatteryOut,
1186 BatteryOutTimeout,
1187}
1188#[derive(Debug, Clone, PartialEq, Eq)]
1190#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1191pub struct Modem {
1192 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1193 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1194 pub custom_data: Option<CustomData>,
1195 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1197 pub iccid: Option<heapless::String<20usize>>,
1198 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1200 pub imsi: Option<heapless::String<20usize>>,
1201}
1202#[derive(Debug, Clone, PartialEq, Eq)]
1204#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1205pub struct ChargingStation {
1206 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1207 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1208 pub custom_data: Option<CustomData>,
1209 #[cfg_attr(feature = "serde", serde(rename = "firmwareVersion"))]
1211 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1212 pub firmware_version: Option<heapless::String<50usize>>,
1213 pub model: heapless::String<20usize>,
1215 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1216 pub modem: Option<Modem>,
1217 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
1219 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1220 pub serial_number: Option<heapless::String<25usize>>,
1221 #[cfg_attr(feature = "serde", serde(rename = "vendorName"))]
1223 pub vendor_name: heapless::String<50usize>,
1224}
1225#[derive(Debug, Clone, PartialEq, Eq)]
1227#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1228pub enum BootReasonEnum {
1229 ApplicationReset,
1230 FirmwareUpdate,
1231 LocalReset,
1232 PowerUp,
1233 RemoteReset,
1234 ScheduledReset,
1235 Triggered,
1236 Unknown,
1237 Watchdog,
1238}
1239#[derive(Debug, Clone, PartialEq, Eq)]
1242#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1243pub enum RegistrationStatusEnum {
1244 Accepted,
1245 Pending,
1246 Rejected,
1247}
1248#[derive(Debug, Clone, PartialEq, Eq)]
1250#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1251pub enum CancelReservationStatusEnum {
1252 Accepted,
1253 Rejected,
1254}
1255#[derive(Debug, Clone, PartialEq, Eq)]
1257#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1258pub enum CertificateSigningUseEnum {
1259 ChargingStationCertificate,
1260 V2GCertificate,
1261 V2G20Certificate,
1262}
1263#[derive(Debug, Clone, PartialEq, Eq)]
1265#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1266pub enum CertificateSignedStatusEnum {
1267 Accepted,
1268 Rejected,
1269}
1270#[derive(Debug, Clone, PartialEq, Eq)]
1272#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1273pub struct EVSE {
1274 #[cfg_attr(feature = "serde", serde(rename = "connectorId"))]
1276 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1277 pub connector_id: Option<i64>,
1278 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1279 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1280 pub custom_data: Option<CustomData>,
1281 pub id: i64,
1283}
1284#[derive(Debug, Clone, PartialEq, Eq)]
1286#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1287pub enum OperationalStatusEnum {
1288 Inoperative,
1289 Operative,
1290}
1291#[derive(Debug, Clone, PartialEq, Eq)]
1293#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1294pub enum ChangeAvailabilityStatusEnum {
1295 Accepted,
1296 Rejected,
1297 Scheduled,
1298}
1299#[derive(Debug, Clone, PartialEq, Eq)]
1301#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1302pub enum TariffChangeStatusEnum {
1303 Accepted,
1304 Rejected,
1305 TooManyElements,
1306 ConditionNotSupported,
1307 TxNotFound,
1308 NoCurrencyChange,
1309}
1310#[derive(Debug, Clone, PartialEq, Eq)]
1312#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1313pub enum ClearCacheStatusEnum {
1314 Accepted,
1315 Rejected,
1316}
1317#[derive(Debug, Clone, PartialEq, Eq)]
1319#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1320pub enum ChargingProfilePurposeEnum {
1321 ChargingStationExternalConstraints,
1322 ChargingStationMaxProfile,
1323 TxDefaultProfile,
1324 TxProfile,
1325 PriorityCharging,
1326 LocalGeneration,
1327}
1328#[derive(Debug, Clone, PartialEq, Eq)]
1330#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1331pub struct ClearChargingProfile {
1332 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
1333 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1334 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
1335 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1336 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1337 pub custom_data: Option<CustomData>,
1338 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1340 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1341 pub evse_id: Option<i64>,
1342 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
1344 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1345 pub stack_level: Option<i64>,
1346}
1347#[derive(Debug, Clone, PartialEq, Eq)]
1349#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1350pub enum ClearChargingProfileStatusEnum {
1351 Accepted,
1352 Unknown,
1353}
1354#[derive(Debug, Clone, PartialEq, Eq)]
1356#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1357pub enum DERControlEnum {
1358 EnterService,
1359 FreqDroop,
1360 FreqWatt,
1361 FixedPFAbsorb,
1362 FixedPFInject,
1363 FixedVar,
1364 Gradients,
1365 HFMustTrip,
1366 HFMayTrip,
1367 HVMustTrip,
1368 HVMomCess,
1369 HVMayTrip,
1370 LimitMaxDischarge,
1371 LFMustTrip,
1372 LVMustTrip,
1373 LVMomCess,
1374 LVMayTrip,
1375 PowerMonitoringMustTrip,
1376 VoltVar,
1377 VoltWatt,
1378 WattPF,
1379 WattVar,
1380}
1381#[derive(Debug, Clone, PartialEq, Eq)]
1383#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1384pub enum DERControlStatusEnum {
1385 Accepted,
1386 Rejected,
1387 NotSupported,
1388 NotFound,
1389}
1390#[derive(Debug, Clone, PartialEq, Eq)]
1392#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1393pub enum ClearMessageStatusEnum {
1394 Accepted,
1395 Unknown,
1396 Rejected,
1397}
1398#[derive(Debug, Clone, PartialEq, Eq)]
1399#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1400pub enum TariffClearStatusEnum {
1401 Accepted,
1402 Rejected,
1403 NoTariff,
1404}
1405#[derive(Debug, Clone, PartialEq, Eq)]
1406#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1407pub struct ClearTariffsResult {
1408 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1409 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1410 pub custom_data: Option<CustomData>,
1411 pub status: TariffClearStatusEnum,
1412 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
1413 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1414 pub status_info: Option<StatusInfo>,
1415 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
1417 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1418 pub tariff_id: Option<heapless::String<60usize>>,
1419}
1420#[derive(Debug, Clone, PartialEq, Eq)]
1422#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1423pub enum ClearMonitoringStatusEnum {
1424 Accepted,
1425 Rejected,
1426 NotFound,
1427}
1428#[derive(Debug, Clone, PartialEq, Eq)]
1429#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1430pub struct ClearMonitoringResult {
1431 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1432 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1433 pub custom_data: Option<CustomData>,
1434 pub id: i64,
1436 pub status: ClearMonitoringStatusEnum,
1437 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
1438 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1439 pub status_info: Option<StatusInfo>,
1440}
1441#[derive(Debug, Clone, PartialEq, Eq)]
1442#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1443pub struct CertificateHashData {
1444 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1445 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1446 pub custom_data: Option<CustomData>,
1447 #[cfg_attr(feature = "serde", serde(rename = "hashAlgorithm"))]
1448 pub hash_algorithm: HashAlgorithmEnum,
1449 #[cfg_attr(feature = "serde", serde(rename = "issuerKeyHash"))]
1453 pub issuer_key_hash: heapless::String<128usize>,
1454 #[cfg_attr(feature = "serde", serde(rename = "issuerNameHash"))]
1459 pub issuer_name_hash: heapless::String<128usize>,
1460 #[cfg_attr(feature = "serde", serde(rename = "serialNumber"))]
1464 pub serial_number: heapless::String<40usize>,
1465}
1466#[derive(Debug, Clone, PartialEq, Eq)]
1468#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1469pub enum CustomerInformationStatusEnum {
1470 Accepted,
1471 Rejected,
1472 Invalid,
1473}
1474#[derive(Debug, Clone, PartialEq, Eq)]
1476#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1477pub enum DataTransferStatusEnum {
1478 Accepted,
1479 Rejected,
1480 UnknownMessageId,
1481 UnknownVendorId,
1482}
1483#[derive(Debug, Clone, PartialEq, Eq)]
1485#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1486pub enum DeleteCertificateStatusEnum {
1487 Accepted,
1488 Failed,
1489 NotFound,
1490}
1491#[derive(Debug, Clone, PartialEq, Eq)]
1493#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1494pub enum FirmwareStatusEnum {
1495 Downloaded,
1496 DownloadFailed,
1497 Downloading,
1498 DownloadScheduled,
1499 DownloadPaused,
1500 Idle,
1501 InstallationFailed,
1502 Installing,
1503 Installed,
1504 InstallRebooting,
1505 InstallScheduled,
1506 InstallVerificationFailed,
1507 InvalidSignature,
1508 SignatureVerified,
1509}
1510#[derive(Debug, Clone, PartialEq, Eq)]
1512#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1513pub enum CertificateActionEnum {
1514 Install,
1515 Update,
1516}
1517#[derive(Debug, Clone, PartialEq, Eq)]
1519#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1520pub enum Iso15118EVCertificateStatusEnum {
1521 Accepted,
1522 Failed,
1523}
1524#[derive(Debug, Clone, PartialEq, Eq)]
1526#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1527pub enum ReportBaseEnum {
1528 ConfigurationInventory,
1529 FullInventory,
1530 SummaryInventory,
1531}
1532#[derive(Debug, Clone, PartialEq, Eq)]
1534#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1535pub enum GenericDeviceModelStatusEnum {
1536 Accepted,
1537 Rejected,
1538 NotSupported,
1539 EmptyResultSet,
1540}
1541#[derive(Debug, Clone, PartialEq, Eq)]
1543#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1544pub enum CertificateStatusSourceEnum {
1545 CRL,
1546 OCSP,
1547}
1548#[derive(Debug, Clone, PartialEq, Eq)]
1550#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1551pub struct CertificateStatusRequestInfo {
1552 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1553 pub certificate_hash_data: CertificateHashData,
1554 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1555 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1556 pub custom_data: Option<CustomData>,
1557 pub source: CertificateStatusSourceEnum,
1558 pub urls: heapless::Vec<heapless::String<2000usize>, 5usize>,
1560}
1561#[derive(Debug, Clone, PartialEq, Eq)]
1563#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1564pub enum CertificateStatusEnum {
1565 Good,
1566 Revoked,
1567 Unknown,
1568 Failed,
1569}
1570#[cfg(feature = "alloc")]
1571#[derive(Debug, Clone, PartialEq, Eq)]
1573#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1574pub struct CertificateStatus {
1575 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1576 pub certificate_hash_data: CertificateHashData,
1577 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1578 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1579 pub custom_data: Option<CustomData>,
1580 #[cfg_attr(feature = "serde", serde(rename = "nextUpdate"))]
1581 pub next_update: alloc::string::String,
1582 pub source: CertificateStatusSourceEnum,
1583 pub status: CertificateStatusEnum,
1584}
1585#[cfg(not(feature = "alloc"))]
1586#[derive(Debug, Clone, PartialEq, Eq)]
1588#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1589pub struct CertificateStatus<
1590 const CERTIFICATE_STATUS_NEXT_UPDATE_CAP: usize = 1024usize,
1591> {
1592 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1593 pub certificate_hash_data: CertificateHashData,
1594 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1595 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1596 pub custom_data: Option<CustomData>,
1597 #[cfg_attr(feature = "serde", serde(rename = "nextUpdate"))]
1598 pub next_update: heapless::String<CERTIFICATE_STATUS_NEXT_UPDATE_CAP>,
1599 pub source: CertificateStatusSourceEnum,
1600 pub status: CertificateStatusEnum,
1601}
1602#[derive(Debug, Clone, PartialEq, Eq)]
1604#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1605pub enum GetCertificateStatusEnum {
1606 Accepted,
1607 Failed,
1608}
1609#[cfg(feature = "alloc")]
1610#[derive(Debug, Clone, PartialEq, Eq)]
1612#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1613pub struct ChargingProfileCriterion {
1614 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
1616 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1617 pub charging_limit_source: Option<heapless::Vec<heapless::String<20usize>, 4usize>>,
1618 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
1620 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1621 pub charging_profile_id: Option<alloc::vec::Vec<i64>>,
1622 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
1623 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1624 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
1625 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1626 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1627 pub custom_data: Option<CustomData>,
1628 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
1630 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1631 pub stack_level: Option<i64>,
1632}
1633#[cfg(not(feature = "alloc"))]
1634#[derive(Debug, Clone, PartialEq, Eq)]
1636#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1637pub struct ChargingProfileCriterion<
1638 const CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP: usize = 16usize,
1639> {
1640 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
1642 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1643 pub charging_limit_source: Option<heapless::Vec<heapless::String<20usize>, 4usize>>,
1644 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileId"))]
1646 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1647 pub charging_profile_id: Option<
1648 heapless::Vec<i64, CHARGING_PROFILE_CRITERION_CHARGING_PROFILE_ID_CAP>,
1649 >,
1650 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
1651 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1652 pub charging_profile_purpose: Option<ChargingProfilePurposeEnum>,
1653 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1654 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1655 pub custom_data: Option<CustomData>,
1656 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
1658 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1659 pub stack_level: Option<i64>,
1660}
1661#[derive(Debug, Clone, PartialEq, Eq)]
1663#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1664pub enum GetChargingProfileStatusEnum {
1665 Accepted,
1666 NoProfiles,
1667}
1668#[derive(Debug, Clone, PartialEq, Eq)]
1670#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1671pub enum ChargingRateUnitEnum {
1672 W,
1673 A,
1674}
1675#[derive(Debug, Clone, PartialEq, Eq)]
1677#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1678pub enum OperationModeEnum {
1679 Idle,
1680 ChargingOnly,
1681 CentralSetpoint,
1682 ExternalSetpoint,
1683 ExternalLimits,
1684 CentralFrequency,
1685 LocalFrequency,
1686 LocalLoadBalancing,
1687}
1688#[derive(Debug, Clone, PartialEq)]
1690#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1691pub struct V2XFreqWattPoint {
1692 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1693 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1694 pub custom_data: Option<CustomData>,
1695 pub frequency: f64,
1697 pub power: f64,
1699}
1700#[derive(Debug, Clone, PartialEq)]
1702#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1703pub struct V2XSignalWattPoint {
1704 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1705 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1706 pub custom_data: Option<CustomData>,
1707 pub power: f64,
1709 pub signal: i64,
1711}
1712#[derive(Debug, Clone, PartialEq)]
1714#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1715pub struct ChargingSchedulePeriod {
1716 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1717 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1718 pub custom_data: Option<CustomData>,
1719 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit"))]
1722 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1723 pub discharge_limit: Option<f64>,
1724 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L2"))]
1726 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1727 pub discharge_limit_l2: Option<f64>,
1728 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L3"))]
1730 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1731 pub discharge_limit_l3: Option<f64>,
1732 #[cfg_attr(feature = "serde", serde(rename = "evseSleep"))]
1734 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1735 pub evse_sleep: Option<bool>,
1736 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1741 pub limit: Option<f64>,
1742 #[cfg_attr(feature = "serde", serde(rename = "limit_L2"))]
1744 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1745 pub limit_l2: Option<f64>,
1746 #[cfg_attr(feature = "serde", serde(rename = "limit_L3"))]
1748 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1749 pub limit_l3: Option<f64>,
1750 #[cfg_attr(feature = "serde", serde(rename = "numberPhases"))]
1754 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1755 pub number_phases: Option<i64>,
1756 #[cfg_attr(feature = "serde", serde(rename = "operationMode"))]
1757 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1758 pub operation_mode: Option<OperationModeEnum>,
1759 #[cfg_attr(feature = "serde", serde(rename = "phaseToUse"))]
1761 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1762 pub phase_to_use: Option<i64>,
1763 #[cfg_attr(feature = "serde", serde(rename = "preconditioningRequest"))]
1765 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1766 pub preconditioning_request: Option<bool>,
1767 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1771 pub setpoint: Option<f64>,
1772 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive"))]
1775 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1776 pub setpoint_reactive: Option<f64>,
1777 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L2"))]
1779 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1780 pub setpoint_reactive_l2: Option<f64>,
1781 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L3"))]
1783 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1784 pub setpoint_reactive_l3: Option<f64>,
1785 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L2"))]
1787 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1788 pub setpoint_l2: Option<f64>,
1789 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L3"))]
1791 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1792 pub setpoint_l3: Option<f64>,
1793 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
1795 pub start_period: i64,
1796 #[cfg_attr(feature = "serde", serde(rename = "v2xBaseline"))]
1798 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1799 pub v2x_baseline: Option<f64>,
1800 #[cfg_attr(feature = "serde", serde(rename = "v2xFreqWattCurve"))]
1801 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1802 pub v2x_freq_watt_curve: Option<heapless::Vec<V2XFreqWattPoint, 20usize>>,
1803 #[cfg_attr(feature = "serde", serde(rename = "v2xSignalWattCurve"))]
1804 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1805 pub v2x_signal_watt_curve: Option<heapless::Vec<V2XSignalWattPoint, 20usize>>,
1806}
1807#[cfg(feature = "alloc")]
1808#[derive(Debug, Clone, PartialEq)]
1809#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1810pub struct CompositeSchedule {
1811 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1812 pub charging_rate_unit: ChargingRateUnitEnum,
1813 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1814 pub charging_schedule_period: alloc::vec::Vec<ChargingSchedulePeriod>,
1815 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1816 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1817 pub custom_data: Option<CustomData>,
1818 pub duration: i64,
1819 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1820 pub evse_id: i64,
1821 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
1822 pub schedule_start: alloc::string::String,
1823}
1824#[cfg(not(feature = "alloc"))]
1825#[derive(Debug, Clone, PartialEq)]
1826#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1827pub struct CompositeSchedule<
1828 const COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP: usize = 16usize,
1829 const COMPOSITE_SCHEDULE_SCHEDULE_START_CAP: usize = 1024usize,
1830> {
1831 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
1832 pub charging_rate_unit: ChargingRateUnitEnum,
1833 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
1834 pub charging_schedule_period: heapless::Vec<
1835 ChargingSchedulePeriod,
1836 COMPOSITE_SCHEDULE_CHARGING_SCHEDULE_PERIOD_CAP,
1837 >,
1838 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1839 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1840 pub custom_data: Option<CustomData>,
1841 pub duration: i64,
1842 #[cfg_attr(feature = "serde", serde(rename = "evseId"))]
1843 pub evse_id: i64,
1844 #[cfg_attr(feature = "serde", serde(rename = "scheduleStart"))]
1845 pub schedule_start: heapless::String<COMPOSITE_SCHEDULE_SCHEDULE_START_CAP>,
1846}
1847#[derive(Debug, Clone, PartialEq, Eq)]
1849#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1850pub enum MessagePriorityEnum {
1851 AlwaysFront,
1852 InFront,
1853 NormalCycle,
1854}
1855#[derive(Debug, Clone, PartialEq, Eq)]
1857#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1858pub enum MessageStateEnum {
1859 Charging,
1860 Faulted,
1861 Idle,
1862 Unavailable,
1863 Suspended,
1864 Discharging,
1865}
1866#[derive(Debug, Clone, PartialEq, Eq)]
1868#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1869pub enum GetDisplayMessagesStatusEnum {
1870 Accepted,
1871 Unknown,
1872}
1873#[derive(Debug, Clone, PartialEq, Eq)]
1874#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1875pub enum GetCertificateIdUseEnum {
1876 V2GRootCertificate,
1877 MORootCertificate,
1878 CSMSRootCertificate,
1879 V2GCertificateChain,
1880 ManufacturerRootCertificate,
1881 OEMRootCertificate,
1882}
1883#[derive(Debug, Clone, PartialEq, Eq)]
1884#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1885pub struct CertificateHashDataChain {
1886 #[cfg_attr(feature = "serde", serde(rename = "certificateHashData"))]
1887 pub certificate_hash_data: CertificateHashData,
1888 #[cfg_attr(feature = "serde", serde(rename = "certificateType"))]
1889 pub certificate_type: GetCertificateIdUseEnum,
1890 #[cfg_attr(feature = "serde", serde(rename = "childCertificateHashData"))]
1891 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1892 pub child_certificate_hash_data: Option<heapless::Vec<CertificateHashData, 4usize>>,
1893 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1894 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1895 pub custom_data: Option<CustomData>,
1896}
1897#[derive(Debug, Clone, PartialEq, Eq)]
1899#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1900pub enum GetInstalledCertificateStatusEnum {
1901 Accepted,
1902 NotFound,
1903}
1904#[cfg(feature = "alloc")]
1905#[derive(Debug, Clone, PartialEq, Eq)]
1907#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1908pub struct LogParameters {
1909 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1910 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1911 pub custom_data: Option<CustomData>,
1912 #[cfg_attr(feature = "serde", serde(rename = "latestTimestamp"))]
1914 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1915 pub latest_timestamp: Option<alloc::string::String>,
1916 #[cfg_attr(feature = "serde", serde(rename = "oldestTimestamp"))]
1918 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1919 pub oldest_timestamp: Option<alloc::string::String>,
1920 #[cfg_attr(feature = "serde", serde(rename = "remoteLocation"))]
1922 pub remote_location: heapless::String<2000usize>,
1923}
1924#[cfg(not(feature = "alloc"))]
1925#[derive(Debug, Clone, PartialEq, Eq)]
1927#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1928pub struct LogParameters<
1929 const LOG_PARAMETERS_LATEST_TIMESTAMP_CAP: usize = 1024usize,
1930 const LOG_PARAMETERS_OLDEST_TIMESTAMP_CAP: usize = 1024usize,
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<CustomData>,
1935 #[cfg_attr(feature = "serde", serde(rename = "latestTimestamp"))]
1937 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1938 pub latest_timestamp: Option<heapless::String<LOG_PARAMETERS_LATEST_TIMESTAMP_CAP>>,
1939 #[cfg_attr(feature = "serde", serde(rename = "oldestTimestamp"))]
1941 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1942 pub oldest_timestamp: Option<heapless::String<LOG_PARAMETERS_OLDEST_TIMESTAMP_CAP>>,
1943 #[cfg_attr(feature = "serde", serde(rename = "remoteLocation"))]
1945 pub remote_location: heapless::String<2000usize>,
1946}
1947#[derive(Debug, Clone, PartialEq, Eq)]
1950#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1951pub enum LogEnum {
1952 DiagnosticsLog,
1953 SecurityLog,
1954 DataCollectorLog,
1955}
1956#[derive(Debug, Clone, PartialEq, Eq)]
1958#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1959pub enum LogStatusEnum {
1960 Accepted,
1961 Rejected,
1962 AcceptedCanceled,
1963}
1964#[derive(Debug, Clone, PartialEq, Eq)]
1966#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1967pub struct Component {
1968 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1969 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1970 pub custom_data: Option<CustomData>,
1971 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1972 pub evse: Option<EVSE>,
1973 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1975 pub instance: Option<heapless::String<50usize>>,
1976 pub name: heapless::String<50usize>,
1978}
1979#[derive(Debug, Clone, PartialEq, Eq)]
1981#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1982pub struct Variable {
1983 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1984 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1985 pub custom_data: Option<CustomData>,
1986 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1988 pub instance: Option<heapless::String<50usize>>,
1989 pub name: heapless::String<50usize>,
1991}
1992#[derive(Debug, Clone, PartialEq, Eq)]
1994#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
1995pub struct ComponentVariable {
1996 pub component: Component,
1997 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
1998 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
1999 pub custom_data: Option<CustomData>,
2000 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2001 pub variable: Option<Variable>,
2002}
2003#[derive(Debug, Clone, PartialEq, Eq)]
2004#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2005pub enum MonitoringCriterionEnum {
2006 ThresholdMonitoring,
2007 DeltaMonitoring,
2008 PeriodicMonitoring,
2009}
2010#[derive(Debug, Clone, PartialEq, Eq)]
2011#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2012pub struct ConstantStreamData {
2013 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2014 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2015 pub custom_data: Option<CustomData>,
2016 pub id: i64,
2018 pub params: PeriodicEventStreamParams,
2019 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
2021 pub variable_monitoring_id: i64,
2022}
2023#[derive(Debug, Clone, PartialEq, Eq)]
2024#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2025pub enum ComponentCriterionEnum {
2026 Active,
2027 Available,
2028 Enabled,
2029 Problem,
2030}
2031#[derive(Debug, Clone, PartialEq, Eq)]
2033#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2034pub enum TariffGetStatusEnum {
2035 Accepted,
2036 Rejected,
2037 NoTariff,
2038}
2039#[derive(Debug, Clone, PartialEq, Eq)]
2041#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2042pub enum TariffKindEnum {
2043 DefaultTariff,
2044 DriverTariff,
2045}
2046#[cfg(feature = "alloc")]
2047#[derive(Debug, Clone, PartialEq, Eq)]
2049#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2050pub struct TariffAssignment {
2051 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2052 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2053 pub custom_data: Option<CustomData>,
2054 #[cfg_attr(feature = "serde", serde(rename = "evseIds"))]
2055 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2056 pub evse_ids: Option<alloc::vec::Vec<i64>>,
2057 #[cfg_attr(feature = "serde", serde(rename = "idTokens"))]
2059 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2060 pub id_tokens: Option<alloc::vec::Vec<heapless::String<255usize>>>,
2061 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
2063 pub tariff_id: heapless::String<60usize>,
2064 #[cfg_attr(feature = "serde", serde(rename = "tariffKind"))]
2065 pub tariff_kind: TariffKindEnum,
2066 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
2068 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2069 pub valid_from: Option<alloc::string::String>,
2070}
2071#[cfg(not(feature = "alloc"))]
2072#[derive(Debug, Clone, PartialEq, Eq)]
2074#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2075pub struct TariffAssignment<
2076 const TARIFF_ASSIGNMENT_EVSE_IDS_CAP: usize = 16usize,
2077 const TARIFF_ASSIGNMENT_ID_TOKENS_CAP: usize = 16usize,
2078 const TARIFF_ASSIGNMENT_VALID_FROM_CAP: usize = 1024usize,
2079> {
2080 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2081 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2082 pub custom_data: Option<CustomData>,
2083 #[cfg_attr(feature = "serde", serde(rename = "evseIds"))]
2084 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2085 pub evse_ids: Option<heapless::Vec<i64, TARIFF_ASSIGNMENT_EVSE_IDS_CAP>>,
2086 #[cfg_attr(feature = "serde", serde(rename = "idTokens"))]
2088 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2089 pub id_tokens: Option<
2090 heapless::Vec<heapless::String<255usize>, TARIFF_ASSIGNMENT_ID_TOKENS_CAP>,
2091 >,
2092 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
2094 pub tariff_id: heapless::String<60usize>,
2095 #[cfg_attr(feature = "serde", serde(rename = "tariffKind"))]
2096 pub tariff_kind: TariffKindEnum,
2097 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
2099 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2100 pub valid_from: Option<heapless::String<TARIFF_ASSIGNMENT_VALID_FROM_CAP>>,
2101}
2102#[derive(Debug, Clone, PartialEq, Eq)]
2104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2105pub enum AttributeEnum {
2106 Actual,
2107 Target,
2108 MinSet,
2109 MaxSet,
2110}
2111#[derive(Debug, Clone, PartialEq, Eq)]
2113#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2114pub struct GetVariableData {
2115 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2116 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2117 pub attribute_type: Option<AttributeEnum>,
2118 pub component: Component,
2119 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2120 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2121 pub custom_data: Option<CustomData>,
2122 pub variable: Variable,
2123}
2124#[derive(Debug, Clone, PartialEq, Eq)]
2125#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2126pub enum GetVariableStatusEnum {
2127 Accepted,
2128 Rejected,
2129 UnknownComponent,
2130 UnknownVariable,
2131 NotSupportedAttributeType,
2132}
2133#[derive(Debug, Clone, PartialEq, Eq)]
2135#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2136pub struct GetVariableResult {
2137 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
2138 pub attribute_status: GetVariableStatusEnum,
2139 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
2140 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2141 pub attribute_status_info: Option<StatusInfo>,
2142 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
2143 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2144 pub attribute_type: Option<AttributeEnum>,
2145 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
2149 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2150 pub attribute_value: Option<heapless::String<2500usize>>,
2151 pub component: Component,
2152 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2153 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2154 pub custom_data: Option<CustomData>,
2155 pub variable: Variable,
2156}
2157#[derive(Debug, Clone, PartialEq, Eq)]
2159#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2160pub enum InstallCertificateUseEnum {
2161 V2GRootCertificate,
2162 MORootCertificate,
2163 ManufacturerRootCertificate,
2164 CSMSRootCertificate,
2165 OEMRootCertificate,
2166}
2167#[derive(Debug, Clone, PartialEq, Eq)]
2169#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2170pub enum InstallCertificateStatusEnum {
2171 Accepted,
2172 Rejected,
2173 Failed,
2174}
2175#[derive(Debug, Clone, PartialEq, Eq)]
2177#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2178pub enum UploadLogStatusEnum {
2179 BadMessage,
2180 Idle,
2181 NotSupportedOperation,
2182 PermissionDenied,
2183 Uploaded,
2184 UploadFailure,
2185 Uploading,
2186 AcceptedCanceled,
2187}
2188#[derive(Debug, Clone, PartialEq, Eq)]
2190#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2191pub enum ReadingContextEnum {
2192 #[cfg_attr(feature = "serde", serde(rename = "Interruption.Begin"))]
2193 InterruptionBegin,
2194 #[cfg_attr(feature = "serde", serde(rename = "Interruption.End"))]
2195 InterruptionEnd,
2196 Other,
2197 #[cfg_attr(feature = "serde", serde(rename = "Sample.Clock"))]
2198 SampleClock,
2199 #[cfg_attr(feature = "serde", serde(rename = "Sample.Periodic"))]
2200 SamplePeriodic,
2201 #[cfg_attr(feature = "serde", serde(rename = "Transaction.Begin"))]
2202 TransactionBegin,
2203 #[cfg_attr(feature = "serde", serde(rename = "Transaction.End"))]
2204 TransactionEnd,
2205 Trigger,
2206}
2207#[derive(Debug, Clone, PartialEq, Eq)]
2209#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2210pub enum LocationEnum {
2211 Body,
2212 Cable,
2213 EV,
2214 Inlet,
2215 Outlet,
2216 Upstream,
2217}
2218#[derive(Debug, Clone, PartialEq, Eq)]
2220#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2221pub enum MeasurandEnum {
2222 #[cfg_attr(feature = "serde", serde(rename = "Current.Export"))]
2223 CurrentExport,
2224 #[cfg_attr(feature = "serde", serde(rename = "Current.Export.Offered"))]
2225 CurrentExportOffered,
2226 #[cfg_attr(feature = "serde", serde(rename = "Current.Export.Minimum"))]
2227 CurrentExportMinimum,
2228 #[cfg_attr(feature = "serde", serde(rename = "Current.Import"))]
2229 CurrentImport,
2230 #[cfg_attr(feature = "serde", serde(rename = "Current.Import.Offered"))]
2231 CurrentImportOffered,
2232 #[cfg_attr(feature = "serde", serde(rename = "Current.Import.Minimum"))]
2233 CurrentImportMinimum,
2234 #[cfg_attr(feature = "serde", serde(rename = "Current.Offered"))]
2235 CurrentOffered,
2236 #[cfg_attr(feature = "serde", serde(rename = "Display.PresentSOC"))]
2237 DisplayPresentSOC,
2238 #[cfg_attr(feature = "serde", serde(rename = "Display.MinimumSOC"))]
2239 DisplayMinimumSOC,
2240 #[cfg_attr(feature = "serde", serde(rename = "Display.TargetSOC"))]
2241 DisplayTargetSOC,
2242 #[cfg_attr(feature = "serde", serde(rename = "Display.MaximumSOC"))]
2243 DisplayMaximumSOC,
2244 #[cfg_attr(feature = "serde", serde(rename = "Display.RemainingTimeToMinimumSOC"))]
2245 DisplayRemainingTimeToMinimumSOC,
2246 #[cfg_attr(feature = "serde", serde(rename = "Display.RemainingTimeToTargetSOC"))]
2247 DisplayRemainingTimeToTargetSOC,
2248 #[cfg_attr(feature = "serde", serde(rename = "Display.RemainingTimeToMaximumSOC"))]
2249 DisplayRemainingTimeToMaximumSOC,
2250 #[cfg_attr(feature = "serde", serde(rename = "Display.ChargingComplete"))]
2251 DisplayChargingComplete,
2252 #[cfg_attr(feature = "serde", serde(rename = "Display.BatteryEnergyCapacity"))]
2253 DisplayBatteryEnergyCapacity,
2254 #[cfg_attr(feature = "serde", serde(rename = "Display.InletHot"))]
2255 DisplayInletHot,
2256 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Interval"))]
2257 EnergyActiveExportInterval,
2258 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Export.Register"))]
2259 EnergyActiveExportRegister,
2260 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Interval"))]
2261 EnergyActiveImportInterval,
2262 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.Register"))]
2263 EnergyActiveImportRegister,
2264 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Import.CableLoss"))]
2265 EnergyActiveImportCableLoss,
2266 #[cfg_attr(
2267 feature = "serde",
2268 serde(rename = "Energy.Active.Import.LocalGeneration.Register")
2269 )]
2270 EnergyActiveImportLocalGenerationRegister,
2271 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Net"))]
2272 EnergyActiveNet,
2273 #[cfg_attr(feature = "serde", serde(rename = "Energy.Active.Setpoint.Interval"))]
2274 EnergyActiveSetpointInterval,
2275 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Export"))]
2276 EnergyApparentExport,
2277 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Import"))]
2278 EnergyApparentImport,
2279 #[cfg_attr(feature = "serde", serde(rename = "Energy.Apparent.Net"))]
2280 EnergyApparentNet,
2281 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Interval"))]
2282 EnergyReactiveExportInterval,
2283 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Export.Register"))]
2284 EnergyReactiveExportRegister,
2285 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Interval"))]
2286 EnergyReactiveImportInterval,
2287 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Import.Register"))]
2288 EnergyReactiveImportRegister,
2289 #[cfg_attr(feature = "serde", serde(rename = "Energy.Reactive.Net"))]
2290 EnergyReactiveNet,
2291 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Target"))]
2292 EnergyRequestTarget,
2293 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Minimum"))]
2294 EnergyRequestMinimum,
2295 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Maximum"))]
2296 EnergyRequestMaximum,
2297 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Minimum.V2X"))]
2298 EnergyRequestMinimumV2X,
2299 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Maximum.V2X"))]
2300 EnergyRequestMaximumV2X,
2301 #[cfg_attr(feature = "serde", serde(rename = "EnergyRequest.Bulk"))]
2302 EnergyRequestBulk,
2303 Frequency,
2304 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Export"))]
2305 PowerActiveExport,
2306 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Import"))]
2307 PowerActiveImport,
2308 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Setpoint"))]
2309 PowerActiveSetpoint,
2310 #[cfg_attr(feature = "serde", serde(rename = "Power.Active.Residual"))]
2311 PowerActiveResidual,
2312 #[cfg_attr(feature = "serde", serde(rename = "Power.Export.Minimum"))]
2313 PowerExportMinimum,
2314 #[cfg_attr(feature = "serde", serde(rename = "Power.Export.Offered"))]
2315 PowerExportOffered,
2316 #[cfg_attr(feature = "serde", serde(rename = "Power.Factor"))]
2317 PowerFactor,
2318 #[cfg_attr(feature = "serde", serde(rename = "Power.Import.Offered"))]
2319 PowerImportOffered,
2320 #[cfg_attr(feature = "serde", serde(rename = "Power.Import.Minimum"))]
2321 PowerImportMinimum,
2322 #[cfg_attr(feature = "serde", serde(rename = "Power.Offered"))]
2323 PowerOffered,
2324 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Export"))]
2325 PowerReactiveExport,
2326 #[cfg_attr(feature = "serde", serde(rename = "Power.Reactive.Import"))]
2327 PowerReactiveImport,
2328 SoC,
2329 Voltage,
2330 #[cfg_attr(feature = "serde", serde(rename = "Voltage.Minimum"))]
2331 VoltageMinimum,
2332 #[cfg_attr(feature = "serde", serde(rename = "Voltage.Maximum"))]
2333 VoltageMaximum,
2334}
2335#[derive(Debug, Clone, PartialEq, Eq)]
2337#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2338pub enum PhaseEnum {
2339 L1,
2340 L2,
2341 L3,
2342 N,
2343 #[cfg_attr(feature = "serde", serde(rename = "L1-N"))]
2344 L1N,
2345 #[cfg_attr(feature = "serde", serde(rename = "L2-N"))]
2346 L2N,
2347 #[cfg_attr(feature = "serde", serde(rename = "L3-N"))]
2348 L3N,
2349 #[cfg_attr(feature = "serde", serde(rename = "L1-L2"))]
2350 L1L2,
2351 #[cfg_attr(feature = "serde", serde(rename = "L2-L3"))]
2352 L2L3,
2353 #[cfg_attr(feature = "serde", serde(rename = "L3-L1"))]
2354 L3L1,
2355}
2356#[derive(Debug, Clone, PartialEq, Eq)]
2358#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2359pub struct SignedMeterValue {
2360 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2361 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2362 pub custom_data: Option<CustomData>,
2363 #[cfg_attr(feature = "serde", serde(rename = "encodingMethod"))]
2365 pub encoding_method: heapless::String<50usize>,
2366 #[cfg_attr(feature = "serde", serde(rename = "publicKey"))]
2368 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2369 pub public_key: Option<heapless::String<2500usize>>,
2370 #[cfg_attr(feature = "serde", serde(rename = "signedMeterData"))]
2372 pub signed_meter_data: heapless::String<32768usize>,
2373 #[cfg_attr(feature = "serde", serde(rename = "signingMethod"))]
2375 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2376 pub signing_method: Option<heapless::String<50usize>>,
2377}
2378#[derive(Debug, Clone, PartialEq, Eq)]
2380#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2381pub struct UnitOfMeasure {
2382 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2383 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2384 pub custom_data: Option<CustomData>,
2385 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2388 pub multiplier: Option<i64>,
2389 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2393 pub unit: Option<heapless::String<20usize>>,
2394}
2395#[derive(Debug, Clone, PartialEq)]
2399#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2400pub struct SampledValue {
2401 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2402 pub context: Option<ReadingContextEnum>,
2403 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2404 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2405 pub custom_data: Option<CustomData>,
2406 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2407 pub location: Option<LocationEnum>,
2408 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2409 pub measurand: Option<MeasurandEnum>,
2410 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2411 pub phase: Option<PhaseEnum>,
2412 #[cfg_attr(feature = "serde", serde(rename = "signedMeterValue"))]
2413 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2414 pub signed_meter_value: Option<SignedMeterValue>,
2415 #[cfg_attr(feature = "serde", serde(rename = "unitOfMeasure"))]
2416 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2417 pub unit_of_measure: Option<UnitOfMeasure>,
2418 pub value: f64,
2420}
2421#[cfg(feature = "alloc")]
2422#[derive(Debug, Clone, PartialEq)]
2424#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2425pub struct MeterValue {
2426 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2427 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2428 pub custom_data: Option<CustomData>,
2429 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
2430 pub sampled_value: alloc::vec::Vec<SampledValue>,
2431 pub timestamp: alloc::string::String,
2433}
2434#[cfg(not(feature = "alloc"))]
2435#[derive(Debug, Clone, PartialEq)]
2437#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2438pub struct MeterValue<
2439 const METER_VALUE_SAMPLED_VALUE_CAP: usize = 16usize,
2440 const METER_VALUE_TIMESTAMP_CAP: usize = 1024usize,
2441> {
2442 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2443 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2444 pub custom_data: Option<CustomData>,
2445 #[cfg_attr(feature = "serde", serde(rename = "sampledValue"))]
2446 pub sampled_value: heapless::Vec<SampledValue, METER_VALUE_SAMPLED_VALUE_CAP>,
2447 pub timestamp: heapless::String<METER_VALUE_TIMESTAMP_CAP>,
2449}
2450#[derive(Debug, Clone, PartialEq, Eq)]
2451#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2452pub enum NotifyAllowedEnergyTransferStatusEnum {
2453 Accepted,
2454 Rejected,
2455}
2456#[derive(Debug, Clone, PartialEq, Eq)]
2457#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2458pub struct ChargingLimit {
2459 #[cfg_attr(feature = "serde", serde(rename = "chargingLimitSource"))]
2461 pub charging_limit_source: heapless::String<20usize>,
2462 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2463 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2464 pub custom_data: Option<CustomData>,
2465 #[cfg_attr(feature = "serde", serde(rename = "isGridCritical"))]
2467 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2468 pub is_grid_critical: Option<bool>,
2469 #[cfg_attr(feature = "serde", serde(rename = "isLocalGeneration"))]
2471 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2472 pub is_local_generation: Option<bool>,
2473}
2474#[derive(Debug, Clone, PartialEq, Eq)]
2476#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2477pub struct RationalNumber {
2478 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2479 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2480 pub custom_data: Option<CustomData>,
2481 pub exponent: i64,
2483 pub value: i64,
2485}
2486#[derive(Debug, Clone, PartialEq, Eq)]
2488#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2489pub struct AdditionalSelectedServices {
2490 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2491 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2492 pub custom_data: Option<CustomData>,
2493 #[cfg_attr(feature = "serde", serde(rename = "serviceFee"))]
2494 pub service_fee: RationalNumber,
2495 #[cfg_attr(feature = "serde", serde(rename = "serviceName"))]
2497 pub service_name: heapless::String<80usize>,
2498}
2499#[derive(Debug, Clone, PartialEq, Eq)]
2501#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2502pub struct OverstayRule {
2503 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2504 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2505 pub custom_data: Option<CustomData>,
2506 #[cfg_attr(feature = "serde", serde(rename = "overstayFee"))]
2507 pub overstay_fee: RationalNumber,
2508 #[cfg_attr(feature = "serde", serde(rename = "overstayFeePeriod"))]
2510 pub overstay_fee_period: i64,
2511 #[cfg_attr(feature = "serde", serde(rename = "overstayRuleDescription"))]
2513 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2514 pub overstay_rule_description: Option<heapless::String<32usize>>,
2515 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
2517 pub start_time: i64,
2518}
2519#[derive(Debug, Clone, PartialEq, Eq)]
2521#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2522pub struct OverstayRuleList {
2523 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2524 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2525 pub custom_data: Option<CustomData>,
2526 #[cfg_attr(feature = "serde", serde(rename = "overstayPowerThreshold"))]
2527 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2528 pub overstay_power_threshold: Option<RationalNumber>,
2529 #[cfg_attr(feature = "serde", serde(rename = "overstayRule"))]
2530 pub overstay_rule: heapless::Vec<OverstayRule, 5usize>,
2531 #[cfg_attr(feature = "serde", serde(rename = "overstayTimeThreshold"))]
2533 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2534 pub overstay_time_threshold: Option<i64>,
2535}
2536#[derive(Debug, Clone, PartialEq, Eq)]
2538#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2539pub struct PriceRule {
2540 #[cfg_attr(feature = "serde", serde(rename = "carbonDioxideEmission"))]
2542 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2543 pub carbon_dioxide_emission: Option<i64>,
2544 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2545 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2546 pub custom_data: Option<CustomData>,
2547 #[cfg_attr(feature = "serde", serde(rename = "energyFee"))]
2548 pub energy_fee: RationalNumber,
2549 #[cfg_attr(feature = "serde", serde(rename = "parkingFee"))]
2550 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2551 pub parking_fee: Option<RationalNumber>,
2552 #[cfg_attr(feature = "serde", serde(rename = "parkingFeePeriod"))]
2555 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2556 pub parking_fee_period: Option<i64>,
2557 #[cfg_attr(feature = "serde", serde(rename = "powerRangeStart"))]
2558 pub power_range_start: RationalNumber,
2559 #[cfg_attr(feature = "serde", serde(rename = "renewableGenerationPercentage"))]
2561 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2562 pub renewable_generation_percentage: Option<i64>,
2563}
2564#[derive(Debug, Clone, PartialEq, Eq)]
2566#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2567pub struct PriceRuleStack {
2568 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2569 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2570 pub custom_data: Option<CustomData>,
2571 pub duration: i64,
2573 #[cfg_attr(feature = "serde", serde(rename = "priceRule"))]
2574 pub price_rule: heapless::Vec<PriceRule, 8usize>,
2575}
2576#[derive(Debug, Clone, PartialEq, Eq)]
2578#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2579pub struct TaxRule {
2580 #[cfg_attr(feature = "serde", serde(rename = "appliesToEnergyFee"))]
2582 pub applies_to_energy_fee: bool,
2583 #[cfg_attr(feature = "serde", serde(rename = "appliesToMinimumMaximumCost"))]
2585 pub applies_to_minimum_maximum_cost: bool,
2586 #[cfg_attr(feature = "serde", serde(rename = "appliesToOverstayFee"))]
2588 pub applies_to_overstay_fee: bool,
2589 #[cfg_attr(feature = "serde", serde(rename = "appliesToParkingFee"))]
2591 pub applies_to_parking_fee: bool,
2592 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2593 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2594 pub custom_data: Option<CustomData>,
2595 #[cfg_attr(feature = "serde", serde(rename = "taxIncludedInPrice"))]
2597 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2598 pub tax_included_in_price: Option<bool>,
2599 #[cfg_attr(feature = "serde", serde(rename = "taxRate"))]
2600 pub tax_rate: RationalNumber,
2601 #[cfg_attr(feature = "serde", serde(rename = "taxRuleID"))]
2603 pub tax_rule_i_d: i64,
2604 #[cfg_attr(feature = "serde", serde(rename = "taxRuleName"))]
2606 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2607 pub tax_rule_name: Option<heapless::String<100usize>>,
2608}
2609#[cfg(feature = "alloc")]
2610#[derive(Debug, Clone, PartialEq, Eq)]
2614#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2615pub struct AbsolutePriceSchedule {
2616 #[cfg_attr(feature = "serde", serde(rename = "additionalSelectedServices"))]
2617 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2618 pub additional_selected_services: Option<
2619 heapless::Vec<AdditionalSelectedServices, 5usize>,
2620 >,
2621 pub currency: heapless::String<3usize>,
2623 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2624 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2625 pub custom_data: Option<CustomData>,
2626 pub language: heapless::String<8usize>,
2628 #[cfg_attr(feature = "serde", serde(rename = "maximumCost"))]
2629 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2630 pub maximum_cost: Option<RationalNumber>,
2631 #[cfg_attr(feature = "serde", serde(rename = "minimumCost"))]
2632 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2633 pub minimum_cost: Option<RationalNumber>,
2634 #[cfg_attr(feature = "serde", serde(rename = "overstayRuleList"))]
2635 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2636 pub overstay_rule_list: Option<OverstayRuleList>,
2637 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
2639 pub price_algorithm: heapless::String<2000usize>,
2640 #[cfg_attr(feature = "serde", serde(rename = "priceRuleStacks"))]
2641 pub price_rule_stacks: heapless::Vec<PriceRuleStack, 1024usize>,
2642 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2644 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2645 pub price_schedule_description: Option<heapless::String<160usize>>,
2646 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleID"))]
2648 pub price_schedule_i_d: i64,
2649 #[cfg_attr(feature = "serde", serde(rename = "taxRules"))]
2650 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2651 pub tax_rules: Option<heapless::Vec<TaxRule, 10usize>>,
2652 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2654 pub time_anchor: alloc::string::String,
2655}
2656#[cfg(not(feature = "alloc"))]
2657#[derive(Debug, Clone, PartialEq, Eq)]
2661#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2662pub struct AbsolutePriceSchedule<
2663 const ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
2664> {
2665 #[cfg_attr(feature = "serde", serde(rename = "additionalSelectedServices"))]
2666 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2667 pub additional_selected_services: Option<
2668 heapless::Vec<AdditionalSelectedServices, 5usize>,
2669 >,
2670 pub currency: heapless::String<3usize>,
2672 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2673 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2674 pub custom_data: Option<CustomData>,
2675 pub language: heapless::String<8usize>,
2677 #[cfg_attr(feature = "serde", serde(rename = "maximumCost"))]
2678 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2679 pub maximum_cost: Option<RationalNumber>,
2680 #[cfg_attr(feature = "serde", serde(rename = "minimumCost"))]
2681 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2682 pub minimum_cost: Option<RationalNumber>,
2683 #[cfg_attr(feature = "serde", serde(rename = "overstayRuleList"))]
2684 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2685 pub overstay_rule_list: Option<OverstayRuleList>,
2686 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
2688 pub price_algorithm: heapless::String<2000usize>,
2689 #[cfg_attr(feature = "serde", serde(rename = "priceRuleStacks"))]
2690 pub price_rule_stacks: heapless::Vec<PriceRuleStack, 1024usize>,
2691 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2693 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2694 pub price_schedule_description: Option<heapless::String<160usize>>,
2695 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleID"))]
2697 pub price_schedule_i_d: i64,
2698 #[cfg_attr(feature = "serde", serde(rename = "taxRules"))]
2699 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2700 pub tax_rules: Option<heapless::Vec<TaxRule, 10usize>>,
2701 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2703 pub time_anchor: heapless::String<ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP>,
2704}
2705#[derive(Debug, Clone, PartialEq)]
2706#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2707pub struct LimitAtSoC {
2708 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2709 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2710 pub custom_data: Option<CustomData>,
2711 pub limit: f64,
2714 pub soc: i64,
2716}
2717#[derive(Debug, Clone, PartialEq, Eq)]
2719#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2720pub struct PriceLevelScheduleEntry {
2721 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2722 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2723 pub custom_data: Option<CustomData>,
2724 pub duration: i64,
2726 #[cfg_attr(feature = "serde", serde(rename = "priceLevel"))]
2728 pub price_level: i64,
2729}
2730#[cfg(feature = "alloc")]
2731#[derive(Debug, Clone, PartialEq, Eq)]
2733#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2734pub struct PriceLevelSchedule {
2735 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2736 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2737 pub custom_data: Option<CustomData>,
2738 #[cfg_attr(feature = "serde", serde(rename = "numberOfPriceLevels"))]
2740 pub number_of_price_levels: i64,
2741 #[cfg_attr(feature = "serde", serde(rename = "priceLevelScheduleEntries"))]
2742 pub price_level_schedule_entries: heapless::Vec<PriceLevelScheduleEntry, 100usize>,
2743 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2745 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2746 pub price_schedule_description: Option<heapless::String<32usize>>,
2747 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleId"))]
2749 pub price_schedule_id: i64,
2750 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2752 pub time_anchor: alloc::string::String,
2753}
2754#[cfg(not(feature = "alloc"))]
2755#[derive(Debug, Clone, PartialEq, Eq)]
2757#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2758pub struct PriceLevelSchedule<
2759 const PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
2760> {
2761 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2762 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2763 pub custom_data: Option<CustomData>,
2764 #[cfg_attr(feature = "serde", serde(rename = "numberOfPriceLevels"))]
2766 pub number_of_price_levels: i64,
2767 #[cfg_attr(feature = "serde", serde(rename = "priceLevelScheduleEntries"))]
2768 pub price_level_schedule_entries: heapless::Vec<PriceLevelScheduleEntry, 100usize>,
2769 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleDescription"))]
2771 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2772 pub price_schedule_description: Option<heapless::String<32usize>>,
2773 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleId"))]
2775 pub price_schedule_id: i64,
2776 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
2778 pub time_anchor: heapless::String<PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP>,
2779}
2780#[derive(Debug, Clone, PartialEq, Eq)]
2782#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2783pub enum CostKindEnum {
2784 CarbonDioxideEmission,
2785 RelativePricePercentage,
2786 RenewableGenerationPercentage,
2787}
2788#[derive(Debug, Clone, PartialEq, Eq)]
2789#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2790pub struct Cost {
2791 pub amount: i64,
2793 #[cfg_attr(feature = "serde", serde(rename = "amountMultiplier"))]
2795 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2796 pub amount_multiplier: Option<i64>,
2797 #[cfg_attr(feature = "serde", serde(rename = "costKind"))]
2798 pub cost_kind: CostKindEnum,
2799 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2800 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2801 pub custom_data: Option<CustomData>,
2802}
2803#[derive(Debug, Clone, PartialEq)]
2804#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2805pub struct ConsumptionCost {
2806 pub cost: heapless::Vec<Cost, 3usize>,
2807 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2808 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2809 pub custom_data: Option<CustomData>,
2810 #[cfg_attr(feature = "serde", serde(rename = "startValue"))]
2812 pub start_value: f64,
2813}
2814#[derive(Debug, Clone, PartialEq, Eq)]
2815#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2816pub struct RelativeTimeInterval {
2817 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2818 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2819 pub custom_data: Option<CustomData>,
2820 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2822 pub duration: Option<i64>,
2823 pub start: i64,
2825}
2826#[derive(Debug, Clone, PartialEq)]
2827#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2828pub struct SalesTariffEntry {
2829 #[cfg_attr(feature = "serde", serde(rename = "consumptionCost"))]
2830 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2831 pub consumption_cost: Option<heapless::Vec<ConsumptionCost, 3usize>>,
2832 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2833 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2834 pub custom_data: Option<CustomData>,
2835 #[cfg_attr(feature = "serde", serde(rename = "ePriceLevel"))]
2837 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2838 pub e_price_level: Option<i64>,
2839 #[cfg_attr(feature = "serde", serde(rename = "relativeTimeInterval"))]
2840 pub relative_time_interval: RelativeTimeInterval,
2841}
2842#[derive(Debug, Clone, PartialEq)]
2845#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2846pub struct SalesTariff {
2847 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2848 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2849 pub custom_data: Option<CustomData>,
2850 pub id: i64,
2852 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
2854 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2855 pub num_e_price_levels: Option<i64>,
2856 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
2858 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2859 pub sales_tariff_description: Option<heapless::String<32usize>>,
2860 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
2861 pub sales_tariff_entry: heapless::Vec<SalesTariffEntry, 1024usize>,
2862}
2863#[cfg(feature = "alloc")]
2864#[derive(Debug, Clone, PartialEq)]
2869#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2870pub struct ChargingSchedule {
2871 #[cfg_attr(feature = "serde", serde(rename = "absolutePriceSchedule"))]
2872 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2873 pub absolute_price_schedule: Option<AbsolutePriceSchedule>,
2874 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
2875 pub charging_rate_unit: ChargingRateUnitEnum,
2876 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
2877 pub charging_schedule_period: heapless::Vec<ChargingSchedulePeriod, 1024usize>,
2878 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2879 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2880 pub custom_data: Option<CustomData>,
2881 #[cfg_attr(feature = "serde", serde(rename = "digestValue"))]
2883 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2884 pub digest_value: Option<heapless::String<88usize>>,
2885 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2887 pub duration: Option<i64>,
2888 pub id: i64,
2889 #[cfg_attr(feature = "serde", serde(rename = "limitAtSoC"))]
2890 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2891 pub limit_at_so_c: Option<LimitAtSoC>,
2892 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
2894 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2895 pub min_charging_rate: Option<f64>,
2896 #[cfg_attr(feature = "serde", serde(rename = "powerTolerance"))]
2898 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2899 pub power_tolerance: Option<f64>,
2900 #[cfg_attr(feature = "serde", serde(rename = "priceLevelSchedule"))]
2901 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2902 pub price_level_schedule: Option<PriceLevelSchedule>,
2903 #[cfg_attr(feature = "serde", serde(rename = "randomizedDelay"))]
2905 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2906 pub randomized_delay: Option<i64>,
2907 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
2908 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2909 pub sales_tariff: Option<SalesTariff>,
2910 #[cfg_attr(feature = "serde", serde(rename = "signatureId"))]
2912 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2913 pub signature_id: Option<i64>,
2914 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
2916 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2917 pub start_schedule: Option<alloc::string::String>,
2918 #[cfg_attr(feature = "serde", serde(rename = "useLocalTime"))]
2921 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2922 pub use_local_time: Option<bool>,
2923}
2924#[cfg(not(feature = "alloc"))]
2925#[derive(Debug, Clone, PartialEq)]
2930#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2931pub struct ChargingSchedule<
2932 const ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
2933 const PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
2934 const CHARGING_SCHEDULE_START_SCHEDULE_CAP: usize = 1024usize,
2935> {
2936 #[cfg_attr(feature = "serde", serde(rename = "absolutePriceSchedule"))]
2937 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2938 pub absolute_price_schedule: Option<
2939 AbsolutePriceSchedule<ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP>,
2940 >,
2941 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
2942 pub charging_rate_unit: ChargingRateUnitEnum,
2943 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
2944 pub charging_schedule_period: heapless::Vec<ChargingSchedulePeriod, 1024usize>,
2945 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2946 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2947 pub custom_data: Option<CustomData>,
2948 #[cfg_attr(feature = "serde", serde(rename = "digestValue"))]
2950 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2951 pub digest_value: Option<heapless::String<88usize>>,
2952 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2954 pub duration: Option<i64>,
2955 pub id: i64,
2956 #[cfg_attr(feature = "serde", serde(rename = "limitAtSoC"))]
2957 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2958 pub limit_at_so_c: Option<LimitAtSoC>,
2959 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
2961 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2962 pub min_charging_rate: Option<f64>,
2963 #[cfg_attr(feature = "serde", serde(rename = "powerTolerance"))]
2965 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2966 pub power_tolerance: Option<f64>,
2967 #[cfg_attr(feature = "serde", serde(rename = "priceLevelSchedule"))]
2968 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2969 pub price_level_schedule: Option<
2970 PriceLevelSchedule<PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP>,
2971 >,
2972 #[cfg_attr(feature = "serde", serde(rename = "randomizedDelay"))]
2974 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2975 pub randomized_delay: Option<i64>,
2976 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
2977 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2978 pub sales_tariff: Option<SalesTariff>,
2979 #[cfg_attr(feature = "serde", serde(rename = "signatureId"))]
2981 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2982 pub signature_id: Option<i64>,
2983 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
2985 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2986 pub start_schedule: Option<heapless::String<CHARGING_SCHEDULE_START_SCHEDULE_CAP>>,
2987 #[cfg_attr(feature = "serde", serde(rename = "useLocalTime"))]
2990 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2991 pub use_local_time: Option<bool>,
2992}
2993#[derive(Debug, Clone, PartialEq, Eq)]
2995#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2996pub enum GridEventFaultEnum {
2997 CurrentImbalance,
2998 LocalEmergency,
2999 LowInputPower,
3000 OverCurrent,
3001 OverFrequency,
3002 OverVoltage,
3003 PhaseRotation,
3004 RemoteEmergency,
3005 UnderFrequency,
3006 UnderVoltage,
3007 VoltageImbalance,
3008}
3009#[cfg(feature = "alloc")]
3010#[derive(Debug, Clone, PartialEq, Eq)]
3012#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3013pub struct MessageInfo {
3014 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3015 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3016 pub custom_data: Option<CustomData>,
3017 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3018 pub display: Option<Component>,
3019 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
3021 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3022 pub end_date_time: Option<alloc::string::String>,
3023 pub id: i64,
3025 pub message: MessageContent,
3026 #[cfg_attr(feature = "serde", serde(rename = "messageExtra"))]
3027 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3028 pub message_extra: Option<heapless::Vec<MessageContent, 4usize>>,
3029 pub priority: MessagePriorityEnum,
3030 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
3032 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3033 pub start_date_time: Option<alloc::string::String>,
3034 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3035 pub state: Option<MessageStateEnum>,
3036 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
3040 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3041 pub transaction_id: Option<heapless::String<36usize>>,
3042}
3043#[cfg(not(feature = "alloc"))]
3044#[derive(Debug, Clone, PartialEq, Eq)]
3046#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3047pub struct MessageInfo<
3048 const MESSAGE_INFO_END_DATE_TIME_CAP: usize = 1024usize,
3049 const MESSAGE_INFO_START_DATE_TIME_CAP: usize = 1024usize,
3050> {
3051 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3052 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3053 pub custom_data: Option<CustomData>,
3054 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3055 pub display: Option<Component>,
3056 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
3058 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3059 pub end_date_time: Option<heapless::String<MESSAGE_INFO_END_DATE_TIME_CAP>>,
3060 pub id: i64,
3062 pub message: MessageContent,
3063 #[cfg_attr(feature = "serde", serde(rename = "messageExtra"))]
3064 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3065 pub message_extra: Option<heapless::Vec<MessageContent, 4usize>>,
3066 pub priority: MessagePriorityEnum,
3067 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
3069 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3070 pub start_date_time: Option<heapless::String<MESSAGE_INFO_START_DATE_TIME_CAP>>,
3071 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3072 pub state: Option<MessageStateEnum>,
3073 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
3077 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3078 pub transaction_id: Option<heapless::String<36usize>>,
3079}
3080#[derive(Debug, Clone, PartialEq)]
3082#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3083pub struct ACChargingParameters {
3084 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3085 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3086 pub custom_data: Option<CustomData>,
3087 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
3092 pub energy_amount: f64,
3093 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
3097 pub ev_max_current: f64,
3098 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
3102 pub ev_max_voltage: f64,
3103 #[cfg_attr(feature = "serde", serde(rename = "evMinCurrent"))]
3107 pub ev_min_current: f64,
3108}
3109#[derive(Debug, Clone, PartialEq, Eq)]
3113#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3114pub enum ControlModeEnum {
3115 ScheduledControl,
3116 DynamicControl,
3117}
3118#[derive(Debug, Clone, PartialEq)]
3120#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3121pub struct DCChargingParameters {
3122 #[cfg_attr(feature = "serde", serde(rename = "bulkSoC"))]
3126 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3127 pub bulk_so_c: Option<i64>,
3128 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3129 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3130 pub custom_data: Option<CustomData>,
3131 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
3135 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3136 pub energy_amount: Option<f64>,
3137 #[cfg_attr(feature = "serde", serde(rename = "evEnergyCapacity"))]
3141 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3142 pub ev_energy_capacity: Option<f64>,
3143 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
3147 pub ev_max_current: f64,
3148 #[cfg_attr(feature = "serde", serde(rename = "evMaxPower"))]
3152 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3153 pub ev_max_power: Option<f64>,
3154 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
3158 pub ev_max_voltage: f64,
3159 #[cfg_attr(feature = "serde", serde(rename = "fullSoC"))]
3163 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3164 pub full_so_c: Option<i64>,
3165 #[cfg_attr(feature = "serde", serde(rename = "stateOfCharge"))]
3169 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3170 pub state_of_charge: Option<i64>,
3171}
3172#[derive(Debug, Clone, PartialEq, Eq)]
3173#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3174pub enum IslandingDetectionEnum {
3175 NoAntiIslandingSupport,
3176 RoCoF,
3177 #[cfg_attr(feature = "serde", serde(rename = "UVP_OVP"))]
3178 UVPOVP,
3179 #[cfg_attr(feature = "serde", serde(rename = "UFP_OFP"))]
3180 UFPOFP,
3181 VoltageVectorShift,
3182 ZeroCrossingDetection,
3183 OtherPassive,
3184 ImpedanceMeasurement,
3185 ImpedanceAtFrequency,
3186 SlipModeFrequencyShift,
3187 SandiaFrequencyShift,
3188 SandiaVoltageShift,
3189 FrequencyJump,
3190 RCLQFactor,
3191 OtherActive,
3192}
3193#[cfg(feature = "alloc")]
3194#[derive(Debug, Clone, PartialEq)]
3203#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3204pub struct DERChargingParameters {
3205 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3206 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3207 pub custom_data: Option<CustomData>,
3208 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel1DCInjection"))]
3211 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3212 pub ev_duration_level1_d_c_injection: Option<f64>,
3213 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel2DCInjection"))]
3216 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3217 pub ev_duration_level2_d_c_injection: Option<f64>,
3218 #[cfg_attr(feature = "serde", serde(rename = "evInverterHwVersion"))]
3221 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3222 pub ev_inverter_hw_version: Option<heapless::String<50usize>>,
3223 #[cfg_attr(feature = "serde", serde(rename = "evInverterManufacturer"))]
3226 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3227 pub ev_inverter_manufacturer: Option<heapless::String<50usize>>,
3228 #[cfg_attr(feature = "serde", serde(rename = "evInverterModel"))]
3231 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3232 pub ev_inverter_model: Option<heapless::String<50usize>>,
3233 #[cfg_attr(feature = "serde", serde(rename = "evInverterSerialNumber"))]
3236 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3237 pub ev_inverter_serial_number: Option<heapless::String<50usize>>,
3238 #[cfg_attr(feature = "serde", serde(rename = "evInverterSwVersion"))]
3241 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3242 pub ev_inverter_sw_version: Option<heapless::String<50usize>>,
3243 #[cfg_attr(feature = "serde", serde(rename = "evIslandingDetectionMethod"))]
3246 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3247 pub ev_islanding_detection_method: Option<alloc::vec::Vec<IslandingDetectionEnum>>,
3248 #[cfg_attr(feature = "serde", serde(rename = "evIslandingTripTime"))]
3251 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3252 pub ev_islanding_trip_time: Option<f64>,
3253 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel1DCInjection"))]
3256 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3257 pub ev_maximum_level1_d_c_injection: Option<f64>,
3258 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel2DCInjection"))]
3261 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3262 pub ev_maximum_level2_d_c_injection: Option<f64>,
3263 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedMaxDischargePower"))]
3268 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3269 pub ev_over_excited_max_discharge_power: Option<f64>,
3270 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedPowerFactor"))]
3274 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3275 pub ev_over_excited_power_factor: Option<f64>,
3276 #[cfg_attr(feature = "serde", serde(rename = "evReactiveSusceptance"))]
3279 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3280 pub ev_reactive_susceptance: Option<f64>,
3281 #[cfg_attr(
3284 feature = "serde",
3285 serde(rename = "evSessionTotalDischargeEnergyAvailable")
3286 )]
3287 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3288 pub ev_session_total_discharge_energy_available: Option<f64>,
3289 #[cfg_attr(feature = "serde", serde(rename = "evSupportedDERControl"))]
3292 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3293 pub ev_supported_d_e_r_control: Option<alloc::vec::Vec<DERControlEnum>>,
3294 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedMaxDischargePower"))]
3300 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3301 pub ev_under_excited_max_discharge_power: Option<f64>,
3302 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedPowerFactor"))]
3306 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3307 pub ev_under_excited_power_factor: Option<f64>,
3308 #[cfg_attr(feature = "serde", serde(rename = "maxApparentPower"))]
3312 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3313 pub max_apparent_power: Option<f64>,
3314 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower"))]
3320 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3321 pub max_charge_apparent_power: Option<f64>,
3322 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L2"))]
3326 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3327 pub max_charge_apparent_power_l2: Option<f64>,
3328 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L3"))]
3332 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3333 pub max_charge_apparent_power_l3: Option<f64>,
3334 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower"))]
3340 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3341 pub max_charge_reactive_power: Option<f64>,
3342 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L2"))]
3346 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3347 pub max_charge_reactive_power_l2: Option<f64>,
3348 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L3"))]
3352 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3353 pub max_charge_reactive_power_l3: Option<f64>,
3354 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower"))]
3360 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3361 pub max_discharge_apparent_power: Option<f64>,
3362 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L2"))]
3366 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3367 pub max_discharge_apparent_power_l2: Option<f64>,
3368 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L3"))]
3372 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3373 pub max_discharge_apparent_power_l3: Option<f64>,
3374 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower"))]
3380 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3381 pub max_discharge_reactive_power: Option<f64>,
3382 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L2"))]
3386 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3387 pub max_discharge_reactive_power_l2: Option<f64>,
3388 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L3"))]
3392 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3393 pub max_discharge_reactive_power_l3: Option<f64>,
3394 #[cfg_attr(feature = "serde", serde(rename = "maxNominalVoltage"))]
3397 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3398 pub max_nominal_voltage: Option<f64>,
3399 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower"))]
3404 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3405 pub min_charge_reactive_power: Option<f64>,
3406 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L2"))]
3409 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3410 pub min_charge_reactive_power_l2: Option<f64>,
3411 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L3"))]
3414 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3415 pub min_charge_reactive_power_l3: Option<f64>,
3416 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower"))]
3421 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3422 pub min_discharge_reactive_power: Option<f64>,
3423 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L2"))]
3426 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3427 pub min_discharge_reactive_power_l2: Option<f64>,
3428 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L3"))]
3431 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3432 pub min_discharge_reactive_power_l3: Option<f64>,
3433 #[cfg_attr(feature = "serde", serde(rename = "minNominalVoltage"))]
3436 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3437 pub min_nominal_voltage: Option<f64>,
3438 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltage"))]
3441 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3442 pub nominal_voltage: Option<f64>,
3443 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltageOffset"))]
3446 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3447 pub nominal_voltage_offset: Option<f64>,
3448}
3449#[cfg(not(feature = "alloc"))]
3450#[derive(Debug, Clone, PartialEq)]
3459#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3460pub struct DERChargingParameters<
3461 const D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP: usize = 16usize,
3462 const D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP: usize = 16usize,
3463> {
3464 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3465 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3466 pub custom_data: Option<CustomData>,
3467 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel1DCInjection"))]
3470 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3471 pub ev_duration_level1_d_c_injection: Option<f64>,
3472 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel2DCInjection"))]
3475 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3476 pub ev_duration_level2_d_c_injection: Option<f64>,
3477 #[cfg_attr(feature = "serde", serde(rename = "evInverterHwVersion"))]
3480 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3481 pub ev_inverter_hw_version: Option<heapless::String<50usize>>,
3482 #[cfg_attr(feature = "serde", serde(rename = "evInverterManufacturer"))]
3485 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3486 pub ev_inverter_manufacturer: Option<heapless::String<50usize>>,
3487 #[cfg_attr(feature = "serde", serde(rename = "evInverterModel"))]
3490 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3491 pub ev_inverter_model: Option<heapless::String<50usize>>,
3492 #[cfg_attr(feature = "serde", serde(rename = "evInverterSerialNumber"))]
3495 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3496 pub ev_inverter_serial_number: Option<heapless::String<50usize>>,
3497 #[cfg_attr(feature = "serde", serde(rename = "evInverterSwVersion"))]
3500 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3501 pub ev_inverter_sw_version: Option<heapless::String<50usize>>,
3502 #[cfg_attr(feature = "serde", serde(rename = "evIslandingDetectionMethod"))]
3505 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3506 pub ev_islanding_detection_method: Option<
3507 heapless::Vec<
3508 IslandingDetectionEnum,
3509 D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP,
3510 >,
3511 >,
3512 #[cfg_attr(feature = "serde", serde(rename = "evIslandingTripTime"))]
3515 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3516 pub ev_islanding_trip_time: Option<f64>,
3517 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel1DCInjection"))]
3520 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3521 pub ev_maximum_level1_d_c_injection: Option<f64>,
3522 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel2DCInjection"))]
3525 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3526 pub ev_maximum_level2_d_c_injection: Option<f64>,
3527 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedMaxDischargePower"))]
3532 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3533 pub ev_over_excited_max_discharge_power: Option<f64>,
3534 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedPowerFactor"))]
3538 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3539 pub ev_over_excited_power_factor: Option<f64>,
3540 #[cfg_attr(feature = "serde", serde(rename = "evReactiveSusceptance"))]
3543 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3544 pub ev_reactive_susceptance: Option<f64>,
3545 #[cfg_attr(
3548 feature = "serde",
3549 serde(rename = "evSessionTotalDischargeEnergyAvailable")
3550 )]
3551 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3552 pub ev_session_total_discharge_energy_available: Option<f64>,
3553 #[cfg_attr(feature = "serde", serde(rename = "evSupportedDERControl"))]
3556 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3557 pub ev_supported_d_e_r_control: Option<
3558 heapless::Vec<
3559 DERControlEnum,
3560 D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP,
3561 >,
3562 >,
3563 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedMaxDischargePower"))]
3569 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3570 pub ev_under_excited_max_discharge_power: Option<f64>,
3571 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedPowerFactor"))]
3575 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3576 pub ev_under_excited_power_factor: Option<f64>,
3577 #[cfg_attr(feature = "serde", serde(rename = "maxApparentPower"))]
3581 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3582 pub max_apparent_power: Option<f64>,
3583 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower"))]
3589 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3590 pub max_charge_apparent_power: Option<f64>,
3591 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L2"))]
3595 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3596 pub max_charge_apparent_power_l2: Option<f64>,
3597 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L3"))]
3601 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3602 pub max_charge_apparent_power_l3: Option<f64>,
3603 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower"))]
3609 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3610 pub max_charge_reactive_power: Option<f64>,
3611 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L2"))]
3615 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3616 pub max_charge_reactive_power_l2: Option<f64>,
3617 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L3"))]
3621 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3622 pub max_charge_reactive_power_l3: Option<f64>,
3623 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower"))]
3629 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3630 pub max_discharge_apparent_power: Option<f64>,
3631 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L2"))]
3635 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3636 pub max_discharge_apparent_power_l2: Option<f64>,
3637 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L3"))]
3641 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3642 pub max_discharge_apparent_power_l3: Option<f64>,
3643 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower"))]
3649 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3650 pub max_discharge_reactive_power: Option<f64>,
3651 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L2"))]
3655 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3656 pub max_discharge_reactive_power_l2: Option<f64>,
3657 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L3"))]
3661 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3662 pub max_discharge_reactive_power_l3: Option<f64>,
3663 #[cfg_attr(feature = "serde", serde(rename = "maxNominalVoltage"))]
3666 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3667 pub max_nominal_voltage: Option<f64>,
3668 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower"))]
3673 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3674 pub min_charge_reactive_power: Option<f64>,
3675 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L2"))]
3678 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3679 pub min_charge_reactive_power_l2: Option<f64>,
3680 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L3"))]
3683 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3684 pub min_charge_reactive_power_l3: Option<f64>,
3685 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower"))]
3690 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3691 pub min_discharge_reactive_power: Option<f64>,
3692 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L2"))]
3695 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3696 pub min_discharge_reactive_power_l2: Option<f64>,
3697 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L3"))]
3700 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3701 pub min_discharge_reactive_power_l3: Option<f64>,
3702 #[cfg_attr(feature = "serde", serde(rename = "minNominalVoltage"))]
3705 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3706 pub min_nominal_voltage: Option<f64>,
3707 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltage"))]
3710 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3711 pub nominal_voltage: Option<f64>,
3712 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltageOffset"))]
3715 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3716 pub nominal_voltage_offset: Option<f64>,
3717}
3718#[derive(Debug, Clone, PartialEq)]
3720#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3721pub struct EVPriceRule {
3722 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3723 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3724 pub custom_data: Option<CustomData>,
3725 #[cfg_attr(feature = "serde", serde(rename = "energyFee"))]
3727 pub energy_fee: f64,
3728 #[cfg_attr(feature = "serde", serde(rename = "powerRangeStart"))]
3730 pub power_range_start: f64,
3731}
3732#[derive(Debug, Clone, PartialEq)]
3734#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3735pub struct EVAbsolutePriceScheduleEntry {
3736 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3737 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3738 pub custom_data: Option<CustomData>,
3739 pub duration: i64,
3741 #[cfg_attr(feature = "serde", serde(rename = "evPriceRule"))]
3742 pub ev_price_rule: heapless::Vec<EVPriceRule, 8usize>,
3743}
3744#[cfg(feature = "alloc")]
3745#[derive(Debug, Clone, PartialEq)]
3747#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3748pub struct EVAbsolutePriceSchedule {
3749 pub currency: heapless::String<3usize>,
3751 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3752 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3753 pub custom_data: Option<CustomData>,
3754 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceScheduleEntries"))]
3755 pub ev_absolute_price_schedule_entries: heapless::Vec<
3756 EVAbsolutePriceScheduleEntry,
3757 1024usize,
3758 >,
3759 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
3761 pub price_algorithm: heapless::String<2000usize>,
3762 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3764 pub time_anchor: alloc::string::String,
3765}
3766#[cfg(not(feature = "alloc"))]
3767#[derive(Debug, Clone, PartialEq)]
3769#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3770pub struct EVAbsolutePriceSchedule<
3771 const E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
3772> {
3773 pub currency: heapless::String<3usize>,
3775 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3776 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3777 pub custom_data: Option<CustomData>,
3778 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceScheduleEntries"))]
3779 pub ev_absolute_price_schedule_entries: heapless::Vec<
3780 EVAbsolutePriceScheduleEntry,
3781 1024usize,
3782 >,
3783 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
3785 pub price_algorithm: heapless::String<2000usize>,
3786 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3788 pub time_anchor: heapless::String<E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP>,
3789}
3790#[derive(Debug, Clone, PartialEq)]
3792#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3793pub struct EVPowerScheduleEntry {
3794 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3795 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3796 pub custom_data: Option<CustomData>,
3797 pub duration: i64,
3799 pub power: f64,
3801}
3802#[cfg(feature = "alloc")]
3803#[derive(Debug, Clone, PartialEq)]
3805#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3806pub struct EVPowerSchedule {
3807 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3808 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3809 pub custom_data: Option<CustomData>,
3810 #[cfg_attr(feature = "serde", serde(rename = "evPowerScheduleEntries"))]
3811 pub ev_power_schedule_entries: heapless::Vec<EVPowerScheduleEntry, 1024usize>,
3812 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3814 pub time_anchor: alloc::string::String,
3815}
3816#[cfg(not(feature = "alloc"))]
3817#[derive(Debug, Clone, PartialEq)]
3819#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3820pub struct EVPowerSchedule<const E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize> {
3821 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3822 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3823 pub custom_data: Option<CustomData>,
3824 #[cfg_attr(feature = "serde", serde(rename = "evPowerScheduleEntries"))]
3825 pub ev_power_schedule_entries: heapless::Vec<EVPowerScheduleEntry, 1024usize>,
3826 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3828 pub time_anchor: heapless::String<E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP>,
3829}
3830#[cfg(feature = "alloc")]
3831#[derive(Debug, Clone, PartialEq)]
3833#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3834pub struct EVEnergyOffer {
3835 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3836 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3837 pub custom_data: Option<CustomData>,
3838 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceSchedule"))]
3839 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3840 pub ev_absolute_price_schedule: Option<EVAbsolutePriceSchedule>,
3841 #[cfg_attr(feature = "serde", serde(rename = "evPowerSchedule"))]
3842 pub ev_power_schedule: EVPowerSchedule,
3843}
3844#[cfg(not(feature = "alloc"))]
3845#[derive(Debug, Clone, PartialEq)]
3847#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3848pub struct EVEnergyOffer<
3849 const E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
3850 const E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
3851> {
3852 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3853 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3854 pub custom_data: Option<CustomData>,
3855 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceSchedule"))]
3856 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3857 pub ev_absolute_price_schedule: Option<
3858 EVAbsolutePriceSchedule<E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP>,
3859 >,
3860 #[cfg_attr(feature = "serde", serde(rename = "evPowerSchedule"))]
3861 pub ev_power_schedule: EVPowerSchedule<E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP>,
3862}
3863#[derive(Debug, Clone, PartialEq, Eq)]
3868#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3869pub enum MobilityNeedsModeEnum {
3870 EVCC,
3871 #[cfg_attr(feature = "serde", serde(rename = "EVCC_SECC"))]
3872 EVCCSECC,
3873}
3874#[derive(Debug, Clone, PartialEq)]
3877#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3878pub struct V2XChargingParameters {
3879 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3880 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3881 pub custom_data: Option<CustomData>,
3882 #[cfg_attr(feature = "serde", serde(rename = "evMaxEnergyRequest"))]
3886 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3887 pub ev_max_energy_request: Option<f64>,
3888 #[cfg_attr(feature = "serde", serde(rename = "evMaxV2XEnergyRequest"))]
3893 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3894 pub ev_max_v2_x_energy_request: Option<f64>,
3895 #[cfg_attr(feature = "serde", serde(rename = "evMinEnergyRequest"))]
3899 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3900 pub ev_min_energy_request: Option<f64>,
3901 #[cfg_attr(feature = "serde", serde(rename = "evMinV2XEnergyRequest"))]
3906 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3907 pub ev_min_v2_x_energy_request: Option<f64>,
3908 #[cfg_attr(feature = "serde", serde(rename = "evTargetEnergyRequest"))]
3912 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3913 pub ev_target_energy_request: Option<f64>,
3914 #[cfg_attr(feature = "serde", serde(rename = "maxChargeCurrent"))]
3918 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3919 pub max_charge_current: Option<f64>,
3920 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower"))]
3928 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3929 pub max_charge_power: Option<f64>,
3930 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower_L2"))]
3934 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3935 pub max_charge_power_l2: Option<f64>,
3936 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower_L3"))]
3940 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3941 pub max_charge_power_l3: Option<f64>,
3942 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeCurrent"))]
3946 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3947 pub max_discharge_current: Option<f64>,
3948 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower"))]
3953 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3954 pub max_discharge_power: Option<f64>,
3955 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower_L2"))]
3959 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3960 pub max_discharge_power_l2: Option<f64>,
3961 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower_L3"))]
3965 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3966 pub max_discharge_power_l3: Option<f64>,
3967 #[cfg_attr(feature = "serde", serde(rename = "maxVoltage"))]
3971 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3972 pub max_voltage: Option<f64>,
3973 #[cfg_attr(feature = "serde", serde(rename = "minChargeCurrent"))]
3977 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3978 pub min_charge_current: Option<f64>,
3979 #[cfg_attr(feature = "serde", serde(rename = "minChargePower"))]
3984 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3985 pub min_charge_power: Option<f64>,
3986 #[cfg_attr(feature = "serde", serde(rename = "minChargePower_L2"))]
3990 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3991 pub min_charge_power_l2: Option<f64>,
3992 #[cfg_attr(feature = "serde", serde(rename = "minChargePower_L3"))]
3996 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3997 pub min_charge_power_l3: Option<f64>,
3998 #[cfg_attr(feature = "serde", serde(rename = "minDischargeCurrent"))]
4002 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4003 pub min_discharge_current: Option<f64>,
4004 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower"))]
4012 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4013 pub min_discharge_power: Option<f64>,
4014 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower_L2"))]
4018 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4019 pub min_discharge_power_l2: Option<f64>,
4020 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower_L3"))]
4024 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4025 pub min_discharge_power_l3: Option<f64>,
4026 #[cfg_attr(feature = "serde", serde(rename = "minVoltage"))]
4030 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4031 pub min_voltage: Option<f64>,
4032 #[cfg_attr(feature = "serde", serde(rename = "targetSoC"))]
4036 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4037 pub target_so_c: Option<i64>,
4038}
4039#[cfg(feature = "alloc")]
4040#[derive(Debug, Clone, PartialEq)]
4041#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4042pub struct ChargingNeeds {
4043 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
4044 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4045 pub ac_charging_parameters: Option<ACChargingParameters>,
4046 #[cfg_attr(feature = "serde", serde(rename = "availableEnergyTransfer"))]
4048 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4049 pub available_energy_transfer: Option<alloc::vec::Vec<EnergyTransferModeEnum>>,
4050 #[cfg_attr(feature = "serde", serde(rename = "controlMode"))]
4051 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4052 pub control_mode: Option<ControlModeEnum>,
4053 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4054 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4055 pub custom_data: Option<CustomData>,
4056 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
4057 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4058 pub dc_charging_parameters: Option<DCChargingParameters>,
4059 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
4063 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4064 pub departure_time: Option<alloc::string::String>,
4065 #[cfg_attr(feature = "serde", serde(rename = "derChargingParameters"))]
4066 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4067 pub der_charging_parameters: Option<DERChargingParameters>,
4068 #[cfg_attr(feature = "serde", serde(rename = "evEnergyOffer"))]
4069 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4070 pub ev_energy_offer: Option<EVEnergyOffer>,
4071 #[cfg_attr(feature = "serde", serde(rename = "mobilityNeedsMode"))]
4072 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4073 pub mobility_needs_mode: Option<MobilityNeedsModeEnum>,
4074 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
4075 pub requested_energy_transfer: EnergyTransferModeEnum,
4076 #[cfg_attr(feature = "serde", serde(rename = "v2xChargingParameters"))]
4077 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4078 pub v2x_charging_parameters: Option<V2XChargingParameters>,
4079}
4080#[cfg(not(feature = "alloc"))]
4081#[derive(Debug, Clone, PartialEq)]
4082#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4083pub struct ChargingNeeds<
4084 const CHARGING_NEEDS_AVAILABLE_ENERGY_TRANSFER_CAP: usize = 16usize,
4085 const CHARGING_NEEDS_DEPARTURE_TIME_CAP: usize = 1024usize,
4086 const D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP: usize = 16usize,
4087 const D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP: usize = 16usize,
4088 const E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4089 const E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4090> {
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>,
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<
4098 heapless::Vec<
4099 EnergyTransferModeEnum,
4100 CHARGING_NEEDS_AVAILABLE_ENERGY_TRANSFER_CAP,
4101 >,
4102 >,
4103 #[cfg_attr(feature = "serde", serde(rename = "controlMode"))]
4104 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4105 pub control_mode: Option<ControlModeEnum>,
4106 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4107 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4108 pub custom_data: Option<CustomData>,
4109 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
4110 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4111 pub dc_charging_parameters: Option<DCChargingParameters>,
4112 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
4116 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4117 pub departure_time: Option<heapless::String<CHARGING_NEEDS_DEPARTURE_TIME_CAP>>,
4118 #[cfg_attr(feature = "serde", serde(rename = "derChargingParameters"))]
4119 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4120 pub der_charging_parameters: Option<
4121 DERChargingParameters<
4122 D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP,
4123 D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP,
4124 >,
4125 >,
4126 #[cfg_attr(feature = "serde", serde(rename = "evEnergyOffer"))]
4127 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4128 pub ev_energy_offer: Option<
4129 EVEnergyOffer<
4130 E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP,
4131 E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP,
4132 >,
4133 >,
4134 #[cfg_attr(feature = "serde", serde(rename = "mobilityNeedsMode"))]
4135 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4136 pub mobility_needs_mode: Option<MobilityNeedsModeEnum>,
4137 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
4138 pub requested_energy_transfer: EnergyTransferModeEnum,
4139 #[cfg_attr(feature = "serde", serde(rename = "v2xChargingParameters"))]
4140 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4141 pub v2x_charging_parameters: Option<V2XChargingParameters>,
4142}
4143#[derive(Debug, Clone, PartialEq, Eq)]
4145#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4146pub enum NotifyEVChargingNeedsStatusEnum {
4147 Accepted,
4148 Rejected,
4149 Processing,
4150 NoChargingProfile,
4151}
4152#[derive(Debug, Clone, PartialEq, Eq)]
4154#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4155pub enum EventNotificationEnum {
4156 HardWiredNotification,
4157 HardWiredMonitor,
4158 PreconfiguredMonitor,
4159 CustomMonitor,
4160}
4161#[derive(Debug, Clone, PartialEq, Eq)]
4163#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4164pub enum EventTriggerEnum {
4165 Alerting,
4166 Delta,
4167 Periodic,
4168}
4169#[cfg(feature = "alloc")]
4170#[derive(Debug, Clone, PartialEq, Eq)]
4172#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4173pub struct EventData {
4174 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
4178 pub actual_value: heapless::String<2500usize>,
4179 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4181 pub cause: Option<i64>,
4182 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4184 pub cleared: Option<bool>,
4185 pub component: Component,
4186 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4187 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4188 pub custom_data: Option<CustomData>,
4189 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
4191 pub event_id: i64,
4192 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4193 pub event_notification_type: EventNotificationEnum,
4194 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4196 pub severity: Option<i64>,
4197 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
4199 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4200 pub tech_code: Option<heapless::String<50usize>>,
4201 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
4203 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4204 pub tech_info: Option<heapless::String<500usize>>,
4205 pub timestamp: alloc::string::String,
4207 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4209 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4210 pub transaction_id: Option<heapless::String<36usize>>,
4211 pub trigger: EventTriggerEnum,
4212 pub variable: Variable,
4213 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
4215 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4216 pub variable_monitoring_id: Option<i64>,
4217}
4218#[cfg(not(feature = "alloc"))]
4219#[derive(Debug, Clone, PartialEq, Eq)]
4221#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4222pub struct EventData<const EVENT_DATA_TIMESTAMP_CAP: usize = 1024usize> {
4223 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
4227 pub actual_value: heapless::String<2500usize>,
4228 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4230 pub cause: Option<i64>,
4231 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4233 pub cleared: Option<bool>,
4234 pub component: Component,
4235 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4236 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4237 pub custom_data: Option<CustomData>,
4238 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
4240 pub event_id: i64,
4241 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4242 pub event_notification_type: EventNotificationEnum,
4243 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4245 pub severity: Option<i64>,
4246 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
4248 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4249 pub tech_code: Option<heapless::String<50usize>>,
4250 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
4252 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4253 pub tech_info: Option<heapless::String<500usize>>,
4254 pub timestamp: heapless::String<EVENT_DATA_TIMESTAMP_CAP>,
4256 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4258 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4259 pub transaction_id: Option<heapless::String<36usize>>,
4260 pub trigger: EventTriggerEnum,
4261 pub variable: Variable,
4262 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
4264 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4265 pub variable_monitoring_id: Option<i64>,
4266}
4267#[derive(Debug, Clone, PartialEq, Eq)]
4269#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4270pub enum MonitorEnum {
4271 UpperThreshold,
4272 LowerThreshold,
4273 Delta,
4274 Periodic,
4275 PeriodicClockAligned,
4276 TargetDelta,
4277 TargetDeltaRelative,
4278}
4279#[derive(Debug, Clone, PartialEq)]
4281#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4282pub struct VariableMonitoring {
4283 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4284 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4285 pub custom_data: Option<CustomData>,
4286 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4287 pub event_notification_type: EventNotificationEnum,
4288 pub id: i64,
4290 pub severity: i64,
4314 pub transaction: bool,
4316 pub r#type: MonitorEnum,
4317 pub value: f64,
4320}
4321#[cfg(feature = "alloc")]
4322#[derive(Debug, Clone, PartialEq)]
4324#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4325pub struct MonitoringData {
4326 pub component: Component,
4327 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4328 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4329 pub custom_data: Option<CustomData>,
4330 pub variable: Variable,
4331 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
4332 pub variable_monitoring: alloc::vec::Vec<VariableMonitoring>,
4333}
4334#[cfg(not(feature = "alloc"))]
4335#[derive(Debug, Clone, PartialEq)]
4337#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4338pub struct MonitoringData<
4339 const MONITORING_DATA_VARIABLE_MONITORING_CAP: usize = 16usize,
4340> {
4341 pub component: Component,
4342 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4343 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4344 pub custom_data: Option<CustomData>,
4345 pub variable: Variable,
4346 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
4347 pub variable_monitoring: heapless::Vec<
4348 VariableMonitoring,
4349 MONITORING_DATA_VARIABLE_MONITORING_CAP,
4350 >,
4351}
4352#[derive(Debug, Clone, PartialEq)]
4353#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4354pub struct StreamDataElement {
4355 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4356 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4357 pub custom_data: Option<CustomData>,
4358 pub t: f64,
4360 pub v: heapless::String<2500usize>,
4361}
4362#[derive(Debug, Clone, PartialEq, Eq)]
4364#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4365pub enum MutabilityEnum {
4366 ReadOnly,
4367 WriteOnly,
4368 ReadWrite,
4369}
4370#[derive(Debug, Clone, PartialEq, Eq)]
4372#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4373pub struct VariableAttribute {
4374 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4376 pub constant: Option<bool>,
4377 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4378 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4379 pub custom_data: Option<CustomData>,
4380 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4381 pub mutability: Option<MutabilityEnum>,
4382 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4384 pub persistent: Option<bool>,
4385 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4386 pub r#type: Option<AttributeEnum>,
4387 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4391 pub value: Option<heapless::String<2500usize>>,
4392}
4393#[derive(Debug, Clone, PartialEq, Eq)]
4395#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4396pub enum DataEnum {
4397 #[cfg_attr(feature = "serde", serde(rename = "string"))]
4398 String,
4399 #[cfg_attr(feature = "serde", serde(rename = "decimal"))]
4400 Decimal,
4401 #[cfg_attr(feature = "serde", serde(rename = "integer"))]
4402 Integer,
4403 #[cfg_attr(feature = "serde", serde(rename = "dateTime"))]
4404 DateTime,
4405 #[cfg_attr(feature = "serde", serde(rename = "boolean"))]
4406 Boolean,
4407 OptionList,
4408 SequenceList,
4409 MemberList,
4410}
4411#[derive(Debug, Clone, PartialEq)]
4413#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4414pub struct VariableCharacteristics {
4415 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4416 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4417 pub custom_data: Option<CustomData>,
4418 #[cfg_attr(feature = "serde", serde(rename = "dataType"))]
4419 pub data_type: DataEnum,
4420 #[cfg_attr(feature = "serde", serde(rename = "maxElements"))]
4422 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4423 pub max_elements: Option<i64>,
4424 #[cfg_attr(feature = "serde", serde(rename = "maxLimit"))]
4426 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4427 pub max_limit: Option<f64>,
4428 #[cfg_attr(feature = "serde", serde(rename = "minLimit"))]
4430 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4431 pub min_limit: Option<f64>,
4432 #[cfg_attr(feature = "serde", serde(rename = "supportsMonitoring"))]
4434 pub supports_monitoring: bool,
4435 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4437 pub unit: Option<heapless::String<16usize>>,
4438 #[cfg_attr(feature = "serde", serde(rename = "valuesList"))]
4452 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4453 pub values_list: Option<heapless::String<1000usize>>,
4454}
4455#[derive(Debug, Clone, PartialEq)]
4457#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4458pub struct ReportData {
4459 pub component: Component,
4460 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4461 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4462 pub custom_data: Option<CustomData>,
4463 pub variable: Variable,
4464 #[cfg_attr(feature = "serde", serde(rename = "variableAttribute"))]
4465 pub variable_attribute: heapless::Vec<VariableAttribute, 4usize>,
4466 #[cfg_attr(feature = "serde", serde(rename = "variableCharacteristics"))]
4467 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4468 pub variable_characteristics: Option<VariableCharacteristics>,
4469}
4470#[derive(Debug, Clone, PartialEq, Eq)]
4472#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4473pub enum PaymentStatusEnum {
4474 Settled,
4475 Canceled,
4476 Rejected,
4477 Failed,
4478}
4479#[derive(Debug, Clone, PartialEq, Eq)]
4481#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4482pub struct Address {
4483 pub address1: heapless::String<100usize>,
4485 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4487 pub address2: Option<heapless::String<100usize>>,
4488 pub city: heapless::String<100usize>,
4490 pub country: heapless::String<50usize>,
4492 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4493 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4494 pub custom_data: Option<CustomData>,
4495 pub name: heapless::String<50usize>,
4497 #[cfg_attr(feature = "serde", serde(rename = "postalCode"))]
4499 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4500 pub postal_code: Option<heapless::String<20usize>>,
4501}
4502#[derive(Debug, Clone, PartialEq, Eq)]
4505#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4506pub enum PublishFirmwareStatusEnum {
4507 Idle,
4508 DownloadScheduled,
4509 Downloading,
4510 Downloaded,
4511 Published,
4512 DownloadFailed,
4513 DownloadPaused,
4514 InvalidChecksum,
4515 ChecksumVerified,
4516 PublishFailed,
4517}
4518#[derive(Debug, Clone, PartialEq)]
4520#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4521pub struct ChargingScheduleUpdate {
4522 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4523 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4524 pub custom_data: Option<CustomData>,
4525 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit"))]
4528 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4529 pub discharge_limit: Option<f64>,
4530 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L2"))]
4532 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4533 pub discharge_limit_l2: Option<f64>,
4534 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L3"))]
4536 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4537 pub discharge_limit_l3: Option<f64>,
4538 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4543 pub limit: Option<f64>,
4544 #[cfg_attr(feature = "serde", serde(rename = "limit_L2"))]
4546 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4547 pub limit_l2: Option<f64>,
4548 #[cfg_attr(feature = "serde", serde(rename = "limit_L3"))]
4550 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4551 pub limit_l3: Option<f64>,
4552 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4556 pub setpoint: Option<f64>,
4557 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive"))]
4560 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4561 pub setpoint_reactive: Option<f64>,
4562 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L2"))]
4564 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4565 pub setpoint_reactive_l2: Option<f64>,
4566 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L3"))]
4568 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4569 pub setpoint_reactive_l3: Option<f64>,
4570 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L2"))]
4572 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4573 pub setpoint_l2: Option<f64>,
4574 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L3"))]
4576 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4577 pub setpoint_l3: Option<f64>,
4578}
4579#[derive(Debug, Clone, PartialEq, Eq)]
4581#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4582pub enum ChargingProfileStatusEnum {
4583 Accepted,
4584 Rejected,
4585}
4586#[derive(Debug, Clone, PartialEq, Eq)]
4588#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4589pub enum ChargingProfileKindEnum {
4590 Absolute,
4591 Recurring,
4592 Relative,
4593 Dynamic,
4594}
4595#[derive(Debug, Clone, PartialEq, Eq)]
4597#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4598pub enum RecurrencyKindEnum {
4599 Daily,
4600 Weekly,
4601}
4602#[cfg(feature = "alloc")]
4603#[derive(Debug, Clone, PartialEq)]
4607#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4608pub struct ChargingProfile {
4609 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
4610 pub charging_profile_kind: ChargingProfileKindEnum,
4611 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
4612 pub charging_profile_purpose: ChargingProfilePurposeEnum,
4613 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
4614 pub charging_schedule: heapless::Vec<ChargingSchedule, 3usize>,
4615 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4616 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4617 pub custom_data: Option<CustomData>,
4618 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateInterval"))]
4622 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4623 pub dyn_update_interval: Option<i64>,
4624 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateTime"))]
4627 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4628 pub dyn_update_time: Option<alloc::string::String>,
4629 pub id: i64,
4631 #[cfg_attr(feature = "serde", serde(rename = "invalidAfterOfflineDuration"))]
4634 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4635 pub invalid_after_offline_duration: Option<bool>,
4636 #[cfg_attr(feature = "serde", serde(rename = "maxOfflineDuration"))]
4640 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4641 pub max_offline_duration: Option<i64>,
4642 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleSignature"))]
4645 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4646 pub price_schedule_signature: Option<heapless::String<256usize>>,
4647 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
4648 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4649 pub recurrency_kind: Option<RecurrencyKindEnum>,
4650 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
4652 pub stack_level: i64,
4653 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4655 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4656 pub transaction_id: Option<heapless::String<36usize>>,
4657 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
4659 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4660 pub valid_from: Option<alloc::string::String>,
4661 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
4663 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4664 pub valid_to: Option<alloc::string::String>,
4665}
4666#[cfg(not(feature = "alloc"))]
4667#[derive(Debug, Clone, PartialEq)]
4671#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4672pub struct ChargingProfile<
4673 const ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4674 const PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4675 const CHARGING_SCHEDULE_START_SCHEDULE_CAP: usize = 1024usize,
4676 const CHARGING_PROFILE_DYN_UPDATE_TIME_CAP: usize = 1024usize,
4677 const CHARGING_PROFILE_VALID_FROM_CAP: usize = 1024usize,
4678 const CHARGING_PROFILE_VALID_TO_CAP: usize = 1024usize,
4679> {
4680 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
4681 pub charging_profile_kind: ChargingProfileKindEnum,
4682 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
4683 pub charging_profile_purpose: ChargingProfilePurposeEnum,
4684 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
4685 pub charging_schedule: heapless::Vec<
4686 ChargingSchedule<
4687 ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP,
4688 PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP,
4689 CHARGING_SCHEDULE_START_SCHEDULE_CAP,
4690 >,
4691 3usize,
4692 >,
4693 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4694 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4695 pub custom_data: Option<CustomData>,
4696 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateInterval"))]
4700 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4701 pub dyn_update_interval: Option<i64>,
4702 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateTime"))]
4705 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4706 pub dyn_update_time: Option<heapless::String<CHARGING_PROFILE_DYN_UPDATE_TIME_CAP>>,
4707 pub id: i64,
4709 #[cfg_attr(feature = "serde", serde(rename = "invalidAfterOfflineDuration"))]
4712 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4713 pub invalid_after_offline_duration: Option<bool>,
4714 #[cfg_attr(feature = "serde", serde(rename = "maxOfflineDuration"))]
4718 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4719 pub max_offline_duration: Option<i64>,
4720 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleSignature"))]
4723 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4724 pub price_schedule_signature: Option<heapless::String<256usize>>,
4725 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
4726 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4727 pub recurrency_kind: Option<RecurrencyKindEnum>,
4728 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
4730 pub stack_level: i64,
4731 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4733 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4734 pub transaction_id: Option<heapless::String<36usize>>,
4735 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
4737 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4738 pub valid_from: Option<heapless::String<CHARGING_PROFILE_VALID_FROM_CAP>>,
4739 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
4741 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4742 pub valid_to: Option<heapless::String<CHARGING_PROFILE_VALID_TO_CAP>>,
4743}
4744#[derive(Debug, Clone, PartialEq)]
4745#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4746pub struct DERCurvePoints {
4747 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4748 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4749 pub custom_data: Option<CustomData>,
4750 pub x: f64,
4752 pub y: f64,
4754}
4755#[derive(Debug, Clone, PartialEq)]
4756#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4757pub struct Hysteresis {
4758 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4759 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4760 pub custom_data: Option<CustomData>,
4761 #[cfg_attr(feature = "serde", serde(rename = "hysteresisDelay"))]
4763 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4764 pub hysteresis_delay: Option<f64>,
4765 #[cfg_attr(feature = "serde", serde(rename = "hysteresisGradient"))]
4767 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4768 pub hysteresis_gradient: Option<f64>,
4769 #[cfg_attr(feature = "serde", serde(rename = "hysteresisHigh"))]
4771 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4772 pub hysteresis_high: Option<f64>,
4773 #[cfg_attr(feature = "serde", serde(rename = "hysteresisLow"))]
4775 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4776 pub hysteresis_low: Option<f64>,
4777}
4778#[derive(Debug, Clone, PartialEq)]
4779#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4780pub struct ReactivePowerParams {
4781 #[cfg_attr(feature = "serde", serde(rename = "autonomousVRefEnable"))]
4783 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4784 pub autonomous_v_ref_enable: Option<bool>,
4785 #[cfg_attr(feature = "serde", serde(rename = "autonomousVRefTimeConstant"))]
4787 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4788 pub autonomous_v_ref_time_constant: Option<f64>,
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<CustomData>,
4792 #[cfg_attr(feature = "serde", serde(rename = "vRef"))]
4794 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4795 pub v_ref: Option<f64>,
4796}
4797#[derive(Debug, Clone, PartialEq, Eq)]
4799#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4800pub enum PowerDuringCessationEnum {
4801 Active,
4802 Reactive,
4803}
4804#[derive(Debug, Clone, PartialEq)]
4805#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4806pub struct VoltageParams {
4807 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4808 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4809 pub custom_data: Option<CustomData>,
4810 #[cfg_attr(feature = "serde", serde(rename = "hv10MinMeanTripDelay"))]
4814 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4815 pub hv10_min_mean_trip_delay: Option<f64>,
4816 #[cfg_attr(feature = "serde", serde(rename = "hv10MinMeanValue"))]
4822 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4823 pub hv10_min_mean_value: Option<f64>,
4824 #[cfg_attr(feature = "serde", serde(rename = "powerDuringCessation"))]
4825 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4826 pub power_during_cessation: Option<PowerDuringCessationEnum>,
4827}
4828#[derive(Debug, Clone, PartialEq, Eq)]
4830#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4831pub enum DERUnitEnum {
4832 #[cfg_attr(feature = "serde", serde(rename = "Not_Applicable"))]
4833 NotApplicable,
4834 PctMaxW,
4835 PctMaxVar,
4836 PctWAvail,
4837 PctVarAvail,
4838 PctEffectiveV,
4839}
4840#[cfg(feature = "alloc")]
4841#[derive(Debug, Clone, PartialEq)]
4842#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4843pub struct DERCurve {
4844 #[cfg_attr(feature = "serde", serde(rename = "curveData"))]
4845 pub curve_data: heapless::Vec<DERCurvePoints, 10usize>,
4846 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4847 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4848 pub custom_data: Option<CustomData>,
4849 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4851 pub duration: Option<f64>,
4852 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4853 pub hysteresis: Option<Hysteresis>,
4854 pub priority: i64,
4856 #[cfg_attr(feature = "serde", serde(rename = "reactivePowerParams"))]
4857 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4858 pub reactive_power_params: Option<ReactivePowerParams>,
4859 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
4861 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4862 pub response_time: Option<f64>,
4863 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
4865 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4866 pub start_time: Option<alloc::string::String>,
4867 #[cfg_attr(feature = "serde", serde(rename = "voltageParams"))]
4868 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4869 pub voltage_params: Option<VoltageParams>,
4870 #[cfg_attr(feature = "serde", serde(rename = "yUnit"))]
4871 pub y_unit: DERUnitEnum,
4872}
4873#[cfg(not(feature = "alloc"))]
4874#[derive(Debug, Clone, PartialEq)]
4875#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4876pub struct DERCurve<const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize> {
4877 #[cfg_attr(feature = "serde", serde(rename = "curveData"))]
4878 pub curve_data: heapless::Vec<DERCurvePoints, 10usize>,
4879 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4880 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4881 pub custom_data: Option<CustomData>,
4882 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4884 pub duration: Option<f64>,
4885 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4886 pub hysteresis: Option<Hysteresis>,
4887 pub priority: i64,
4889 #[cfg_attr(feature = "serde", serde(rename = "reactivePowerParams"))]
4890 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4891 pub reactive_power_params: Option<ReactivePowerParams>,
4892 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
4894 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4895 pub response_time: Option<f64>,
4896 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
4898 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4899 pub start_time: Option<heapless::String<D_E_R_CURVE_START_TIME_CAP>>,
4900 #[cfg_attr(feature = "serde", serde(rename = "voltageParams"))]
4901 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4902 pub voltage_params: Option<VoltageParams>,
4903 #[cfg_attr(feature = "serde", serde(rename = "yUnit"))]
4904 pub y_unit: DERUnitEnum,
4905}
4906#[cfg(feature = "alloc")]
4907#[derive(Debug, Clone, PartialEq)]
4908#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4909pub struct DERCurveGet {
4910 pub curve: DERCurve,
4911 #[cfg_attr(feature = "serde", serde(rename = "curveType"))]
4912 pub curve_type: DERControlEnum,
4913 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4914 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4915 pub custom_data: Option<CustomData>,
4916 pub id: heapless::String<36usize>,
4918 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
4920 pub is_default: bool,
4921 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
4923 pub is_superseded: bool,
4924}
4925#[cfg(not(feature = "alloc"))]
4926#[derive(Debug, Clone, PartialEq)]
4927#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4928pub struct DERCurveGet<const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize> {
4929 pub curve: DERCurve<D_E_R_CURVE_START_TIME_CAP>,
4930 #[cfg_attr(feature = "serde", serde(rename = "curveType"))]
4931 pub curve_type: DERControlEnum,
4932 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4933 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4934 pub custom_data: Option<CustomData>,
4935 pub id: heapless::String<36usize>,
4937 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
4939 pub is_default: bool,
4940 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
4942 pub is_superseded: bool,
4943}
4944#[derive(Debug, Clone, PartialEq)]
4945#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4946pub struct EnterService {
4947 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4948 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4949 pub custom_data: Option<CustomData>,
4950 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4952 pub delay: Option<f64>,
4953 #[cfg_attr(feature = "serde", serde(rename = "highFreq"))]
4955 pub high_freq: f64,
4956 #[cfg_attr(feature = "serde", serde(rename = "highVoltage"))]
4958 pub high_voltage: f64,
4959 #[cfg_attr(feature = "serde", serde(rename = "lowFreq"))]
4961 pub low_freq: f64,
4962 #[cfg_attr(feature = "serde", serde(rename = "lowVoltage"))]
4964 pub low_voltage: f64,
4965 pub priority: i64,
4967 #[cfg_attr(feature = "serde", serde(rename = "rampRate"))]
4969 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4970 pub ramp_rate: Option<f64>,
4971 #[cfg_attr(feature = "serde", serde(rename = "randomDelay"))]
4973 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4974 pub random_delay: Option<f64>,
4975}
4976#[derive(Debug, Clone, PartialEq)]
4977#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4978pub struct EnterServiceGet {
4979 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4980 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4981 pub custom_data: Option<CustomData>,
4982 #[cfg_attr(feature = "serde", serde(rename = "enterService"))]
4983 pub enter_service: EnterService,
4984 pub id: heapless::String<36usize>,
4986}
4987#[cfg(feature = "alloc")]
4988#[derive(Debug, Clone, PartialEq)]
4989#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4990pub struct FixedPF {
4991 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4992 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4993 pub custom_data: Option<CustomData>,
4994 pub displacement: f64,
4996 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4998 pub duration: Option<f64>,
4999 pub excitation: bool,
5001 pub priority: i64,
5003 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5005 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5006 pub start_time: Option<alloc::string::String>,
5007}
5008#[cfg(not(feature = "alloc"))]
5009#[derive(Debug, Clone, PartialEq)]
5010#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5011pub struct FixedPF<const FIXED_P_F_START_TIME_CAP: usize = 1024usize> {
5012 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5013 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5014 pub custom_data: Option<CustomData>,
5015 pub displacement: f64,
5017 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5019 pub duration: Option<f64>,
5020 pub excitation: bool,
5022 pub priority: i64,
5024 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5026 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5027 pub start_time: Option<heapless::String<FIXED_P_F_START_TIME_CAP>>,
5028}
5029#[cfg(feature = "alloc")]
5030#[derive(Debug, Clone, PartialEq)]
5031#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5032pub struct FixedPFGet {
5033 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5034 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5035 pub custom_data: Option<CustomData>,
5036 #[cfg_attr(feature = "serde", serde(rename = "fixedPF"))]
5037 pub fixed_p_f: FixedPF,
5038 pub id: heapless::String<36usize>,
5040 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5042 pub is_default: bool,
5043 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5045 pub is_superseded: bool,
5046}
5047#[cfg(not(feature = "alloc"))]
5048#[derive(Debug, Clone, PartialEq)]
5049#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5050pub struct FixedPFGet<const FIXED_P_F_START_TIME_CAP: usize = 1024usize> {
5051 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5052 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5053 pub custom_data: Option<CustomData>,
5054 #[cfg_attr(feature = "serde", serde(rename = "fixedPF"))]
5055 pub fixed_p_f: FixedPF<FIXED_P_F_START_TIME_CAP>,
5056 pub id: heapless::String<36usize>,
5058 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5060 pub is_default: bool,
5061 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5063 pub is_superseded: bool,
5064}
5065#[cfg(feature = "alloc")]
5066#[derive(Debug, Clone, PartialEq)]
5067#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5068pub struct FixedVar {
5069 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5070 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5071 pub custom_data: Option<CustomData>,
5072 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5074 pub duration: Option<f64>,
5075 pub priority: i64,
5077 pub setpoint: f64,
5081 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5083 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5084 pub start_time: Option<alloc::string::String>,
5085 pub unit: DERUnitEnum,
5086}
5087#[cfg(not(feature = "alloc"))]
5088#[derive(Debug, Clone, PartialEq)]
5089#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5090pub struct FixedVar<const FIXED_VAR_START_TIME_CAP: usize = 1024usize> {
5091 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5092 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5093 pub custom_data: Option<CustomData>,
5094 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5096 pub duration: Option<f64>,
5097 pub priority: i64,
5099 pub setpoint: f64,
5103 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5105 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5106 pub start_time: Option<heapless::String<FIXED_VAR_START_TIME_CAP>>,
5107 pub unit: DERUnitEnum,
5108}
5109#[cfg(feature = "alloc")]
5110#[derive(Debug, Clone, PartialEq)]
5111#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5112pub struct FixedVarGet {
5113 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5114 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5115 pub custom_data: Option<CustomData>,
5116 #[cfg_attr(feature = "serde", serde(rename = "fixedVar"))]
5117 pub fixed_var: FixedVar,
5118 pub id: heapless::String<36usize>,
5120 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5122 pub is_default: bool,
5123 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5125 pub is_superseded: bool,
5126}
5127#[cfg(not(feature = "alloc"))]
5128#[derive(Debug, Clone, PartialEq)]
5129#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5130pub struct FixedVarGet<const FIXED_VAR_START_TIME_CAP: usize = 1024usize> {
5131 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5132 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5133 pub custom_data: Option<CustomData>,
5134 #[cfg_attr(feature = "serde", serde(rename = "fixedVar"))]
5135 pub fixed_var: FixedVar<FIXED_VAR_START_TIME_CAP>,
5136 pub id: heapless::String<36usize>,
5138 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5140 pub is_default: bool,
5141 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5143 pub is_superseded: bool,
5144}
5145#[cfg(feature = "alloc")]
5146#[derive(Debug, Clone, PartialEq)]
5147#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5148pub struct FreqDroop {
5149 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5150 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5151 pub custom_data: Option<CustomData>,
5152 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5154 pub duration: Option<f64>,
5155 #[cfg_attr(feature = "serde", serde(rename = "overDroop"))]
5157 pub over_droop: f64,
5158 #[cfg_attr(feature = "serde", serde(rename = "overFreq"))]
5160 pub over_freq: f64,
5161 pub priority: i64,
5163 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
5165 pub response_time: 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<alloc::string::String>,
5170 #[cfg_attr(feature = "serde", serde(rename = "underDroop"))]
5172 pub under_droop: f64,
5173 #[cfg_attr(feature = "serde", serde(rename = "underFreq"))]
5175 pub under_freq: f64,
5176}
5177#[cfg(not(feature = "alloc"))]
5178#[derive(Debug, Clone, PartialEq)]
5179#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5180pub struct FreqDroop<const FREQ_DROOP_START_TIME_CAP: usize = 1024usize> {
5181 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5182 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5183 pub custom_data: Option<CustomData>,
5184 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5186 pub duration: Option<f64>,
5187 #[cfg_attr(feature = "serde", serde(rename = "overDroop"))]
5189 pub over_droop: f64,
5190 #[cfg_attr(feature = "serde", serde(rename = "overFreq"))]
5192 pub over_freq: f64,
5193 pub priority: i64,
5195 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
5197 pub response_time: f64,
5198 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5200 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5201 pub start_time: Option<heapless::String<FREQ_DROOP_START_TIME_CAP>>,
5202 #[cfg_attr(feature = "serde", serde(rename = "underDroop"))]
5204 pub under_droop: f64,
5205 #[cfg_attr(feature = "serde", serde(rename = "underFreq"))]
5207 pub under_freq: f64,
5208}
5209#[cfg(feature = "alloc")]
5210#[derive(Debug, Clone, PartialEq)]
5211#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5212pub struct FreqDroopGet {
5213 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5214 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5215 pub custom_data: Option<CustomData>,
5216 #[cfg_attr(feature = "serde", serde(rename = "freqDroop"))]
5217 pub freq_droop: FreqDroop,
5218 pub id: heapless::String<36usize>,
5220 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5222 pub is_default: bool,
5223 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5225 pub is_superseded: bool,
5226}
5227#[cfg(not(feature = "alloc"))]
5228#[derive(Debug, Clone, PartialEq)]
5229#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5230pub struct FreqDroopGet<const FREQ_DROOP_START_TIME_CAP: usize = 1024usize> {
5231 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5232 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5233 pub custom_data: Option<CustomData>,
5234 #[cfg_attr(feature = "serde", serde(rename = "freqDroop"))]
5235 pub freq_droop: FreqDroop<FREQ_DROOP_START_TIME_CAP>,
5236 pub id: heapless::String<36usize>,
5238 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5240 pub is_default: bool,
5241 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5243 pub is_superseded: bool,
5244}
5245#[derive(Debug, Clone, PartialEq)]
5246#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5247pub struct Gradient {
5248 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5249 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5250 pub custom_data: Option<CustomData>,
5251 pub gradient: f64,
5253 pub priority: i64,
5255 #[cfg_attr(feature = "serde", serde(rename = "softGradient"))]
5257 pub soft_gradient: f64,
5258}
5259#[derive(Debug, Clone, PartialEq)]
5260#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5261pub struct GradientGet {
5262 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5263 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5264 pub custom_data: Option<CustomData>,
5265 pub gradient: Gradient,
5266 pub id: heapless::String<36usize>,
5268}
5269#[cfg(feature = "alloc")]
5270#[derive(Debug, Clone, PartialEq)]
5271#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5272pub struct LimitMaxDischarge {
5273 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5274 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5275 pub custom_data: Option<CustomData>,
5276 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5278 pub duration: Option<f64>,
5279 #[cfg_attr(feature = "serde", serde(rename = "pctMaxDischargePower"))]
5283 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5284 pub pct_max_discharge_power: Option<f64>,
5285 #[cfg_attr(feature = "serde", serde(rename = "powerMonitoringMustTrip"))]
5286 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5287 pub power_monitoring_must_trip: Option<DERCurve>,
5288 pub priority: i64,
5290 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5292 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5293 pub start_time: Option<alloc::string::String>,
5294}
5295#[cfg(not(feature = "alloc"))]
5296#[derive(Debug, Clone, PartialEq)]
5297#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5298pub struct LimitMaxDischarge<
5299 const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize,
5300 const LIMIT_MAX_DISCHARGE_START_TIME_CAP: usize = 1024usize,
5301> {
5302 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5303 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5304 pub custom_data: Option<CustomData>,
5305 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5307 pub duration: Option<f64>,
5308 #[cfg_attr(feature = "serde", serde(rename = "pctMaxDischargePower"))]
5312 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5313 pub pct_max_discharge_power: Option<f64>,
5314 #[cfg_attr(feature = "serde", serde(rename = "powerMonitoringMustTrip"))]
5315 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5316 pub power_monitoring_must_trip: Option<DERCurve<D_E_R_CURVE_START_TIME_CAP>>,
5317 pub priority: i64,
5319 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5321 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5322 pub start_time: Option<heapless::String<LIMIT_MAX_DISCHARGE_START_TIME_CAP>>,
5323}
5324#[cfg(feature = "alloc")]
5325#[derive(Debug, Clone, PartialEq)]
5326#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5327pub struct LimitMaxDischargeGet {
5328 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5329 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5330 pub custom_data: Option<CustomData>,
5331 pub id: heapless::String<36usize>,
5333 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5335 pub is_default: bool,
5336 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5338 pub is_superseded: bool,
5339 #[cfg_attr(feature = "serde", serde(rename = "limitMaxDischarge"))]
5340 pub limit_max_discharge: LimitMaxDischarge,
5341}
5342#[cfg(not(feature = "alloc"))]
5343#[derive(Debug, Clone, PartialEq)]
5344#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5345pub struct LimitMaxDischargeGet<
5346 const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize,
5347 const LIMIT_MAX_DISCHARGE_START_TIME_CAP: usize = 1024usize,
5348> {
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<CustomData>,
5352 pub id: heapless::String<36usize>,
5354 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5356 pub is_default: bool,
5357 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5359 pub is_superseded: bool,
5360 #[cfg_attr(feature = "serde", serde(rename = "limitMaxDischarge"))]
5361 pub limit_max_discharge: LimitMaxDischarge<
5362 D_E_R_CURVE_START_TIME_CAP,
5363 LIMIT_MAX_DISCHARGE_START_TIME_CAP,
5364 >,
5365}
5366#[derive(Debug, Clone, PartialEq, Eq)]
5368#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5369pub enum RequestStartStopStatusEnum {
5370 Accepted,
5371 Rejected,
5372}
5373#[derive(Debug, Clone, PartialEq, Eq)]
5375#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5376pub enum ReservationUpdateStatusEnum {
5377 Expired,
5378 Removed,
5379 NoTransaction,
5380}
5381#[derive(Debug, Clone, PartialEq, Eq)]
5383#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5384pub enum ReserveNowStatusEnum {
5385 Accepted,
5386 Faulted,
5387 Occupied,
5388 Rejected,
5389 Unavailable,
5390}
5391#[derive(Debug, Clone, PartialEq, Eq)]
5393#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5394pub enum ResetEnum {
5395 Immediate,
5396 OnIdle,
5397 ImmediateAndResume,
5398}
5399#[derive(Debug, Clone, PartialEq, Eq)]
5401#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5402pub enum ResetStatusEnum {
5403 Accepted,
5404 Rejected,
5405 Scheduled,
5406}
5407#[cfg(feature = "alloc")]
5408#[derive(Debug, Clone, PartialEq, Eq)]
5410#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5411pub struct AuthorizationData {
5412 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5413 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5414 pub custom_data: Option<CustomData>,
5415 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
5416 pub id_token: IdToken,
5417 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
5418 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5419 pub id_token_info: Option<IdTokenInfo>,
5420}
5421#[cfg(not(feature = "alloc"))]
5422#[derive(Debug, Clone, PartialEq, Eq)]
5424#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5425pub struct AuthorizationData<
5426 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 16usize,
5427 const ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP: usize = 1024usize,
5428 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 16usize,
5429> {
5430 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5431 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5432 pub custom_data: Option<CustomData>,
5433 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
5434 pub id_token: IdToken<ID_TOKEN_ADDITIONAL_INFO_CAP>,
5435 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
5436 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5437 pub id_token_info: Option<
5438 IdTokenInfo<
5439 ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP,
5440 ID_TOKEN_INFO_EVSE_ID_CAP,
5441 ID_TOKEN_ADDITIONAL_INFO_CAP,
5442 >,
5443 >,
5444}
5445#[derive(Debug, Clone, PartialEq, Eq)]
5447#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5448pub enum UpdateEnum {
5449 Differential,
5450 Full,
5451}
5452#[derive(Debug, Clone, PartialEq, Eq)]
5454#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5455pub enum SendLocalListStatusEnum {
5456 Accepted,
5457 Failed,
5458 VersionMismatch,
5459}
5460#[derive(Debug, Clone, PartialEq, Eq)]
5461#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5462pub enum TariffSetStatusEnum {
5463 Accepted,
5464 Rejected,
5465 TooManyElements,
5466 ConditionNotSupported,
5467 DuplicateTariffId,
5468}
5469#[derive(Debug, Clone, PartialEq, Eq)]
5471#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5472pub enum DisplayMessageStatusEnum {
5473 Accepted,
5474 NotSupportedMessageFormat,
5475 Rejected,
5476 NotSupportedPriority,
5477 NotSupportedState,
5478 UnknownTransaction,
5479 LanguageNotSupported,
5480}
5481#[derive(Debug, Clone, PartialEq, Eq)]
5483#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5484pub enum MonitoringBaseEnum {
5485 All,
5486 FactoryDefault,
5487 HardWiredOnly,
5488}
5489#[derive(Debug, Clone, PartialEq, Eq)]
5491#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5492pub enum APNAuthenticationEnum {
5493 PAP,
5494 CHAP,
5495 NONE,
5496 AUTO,
5497}
5498#[derive(Debug, Clone, PartialEq, Eq)]
5502#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5503pub struct APN {
5504 pub apn: heapless::String<2000usize>,
5506 #[cfg_attr(feature = "serde", serde(rename = "apnAuthentication"))]
5507 pub apn_authentication: APNAuthenticationEnum,
5508 #[cfg_attr(feature = "serde", serde(rename = "apnPassword"))]
5510 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5511 pub apn_password: Option<heapless::String<64usize>>,
5512 #[cfg_attr(feature = "serde", serde(rename = "apnUserName"))]
5514 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5515 pub apn_user_name: Option<heapless::String<50usize>>,
5516 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5517 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5518 pub custom_data: Option<CustomData>,
5519 #[cfg_attr(feature = "serde", serde(rename = "preferredNetwork"))]
5521 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5522 pub preferred_network: Option<heapless::String<6usize>>,
5523 #[cfg_attr(feature = "serde", serde(rename = "simPin"))]
5525 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5526 pub sim_pin: Option<i64>,
5527 #[cfg_attr(feature = "serde", serde(rename = "useOnlyPreferredNetwork"))]
5530 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5531 pub use_only_preferred_network: Option<bool>,
5532}
5533#[derive(Debug, Clone, PartialEq, Eq)]
5535#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5536pub enum OCPPInterfaceEnum {
5537 Wired0,
5538 Wired1,
5539 Wired2,
5540 Wired3,
5541 Wireless0,
5542 Wireless1,
5543 Wireless2,
5544 Wireless3,
5545 Any,
5546}
5547#[derive(Debug, Clone, PartialEq, Eq)]
5549#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5550pub enum OCPPTransportEnum {
5551 SOAP,
5552 JSON,
5553}
5554#[derive(Debug, Clone, PartialEq, Eq)]
5556#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5557pub enum OCPPVersionEnum {
5558 OCPP12,
5559 OCPP15,
5560 OCPP16,
5561 OCPP20,
5562 OCPP201,
5563 OCPP21,
5564}
5565#[derive(Debug, Clone, PartialEq, Eq)]
5567#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5568pub enum VPNEnum {
5569 IKEv2,
5570 IPSec,
5571 L2TP,
5572 PPTP,
5573}
5574#[derive(Debug, Clone, PartialEq, Eq)]
5576#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5577pub struct VPN {
5578 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5579 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5580 pub custom_data: Option<CustomData>,
5581 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5583 pub group: Option<heapless::String<50usize>>,
5584 pub key: heapless::String<255usize>,
5586 pub password: heapless::String<64usize>,
5588 pub server: heapless::String<2000usize>,
5590 pub r#type: VPNEnum,
5591 pub user: heapless::String<50usize>,
5593}
5594#[derive(Debug, Clone, PartialEq, Eq)]
5596#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5597pub struct NetworkConnectionProfile {
5598 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5599 pub apn: Option<APN>,
5600 #[cfg_attr(feature = "serde", serde(rename = "basicAuthPassword"))]
5602 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5603 pub basic_auth_password: Option<heapless::String<64usize>>,
5604 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5605 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5606 pub custom_data: Option<CustomData>,
5607 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5609 pub identity: Option<heapless::String<48usize>>,
5610 #[cfg_attr(feature = "serde", serde(rename = "messageTimeout"))]
5614 pub message_timeout: i64,
5615 #[cfg_attr(feature = "serde", serde(rename = "ocppCsmsUrl"))]
5618 pub ocpp_csms_url: heapless::String<2000usize>,
5619 #[cfg_attr(feature = "serde", serde(rename = "ocppInterface"))]
5620 pub ocpp_interface: OCPPInterfaceEnum,
5621 #[cfg_attr(feature = "serde", serde(rename = "ocppTransport"))]
5622 pub ocpp_transport: OCPPTransportEnum,
5623 #[cfg_attr(feature = "serde", serde(rename = "ocppVersion"))]
5624 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5625 pub ocpp_version: Option<OCPPVersionEnum>,
5626 #[cfg_attr(feature = "serde", serde(rename = "securityProfile"))]
5628 pub security_profile: i64,
5629 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5630 pub vpn: Option<VPN>,
5631}
5632#[derive(Debug, Clone, PartialEq, Eq)]
5634#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5635pub enum SetNetworkProfileStatusEnum {
5636 Accepted,
5637 Rejected,
5638 Failed,
5639}
5640#[derive(Debug, Clone, PartialEq)]
5642#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5643pub struct SetMonitoringData {
5644 pub component: Component,
5645 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5646 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5647 pub custom_data: Option<CustomData>,
5648 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5650 pub id: Option<i64>,
5651 #[cfg_attr(feature = "serde", serde(rename = "periodicEventStream"))]
5652 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5653 pub periodic_event_stream: Option<PeriodicEventStreamParams>,
5654 pub severity: i64,
5678 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5680 pub transaction: Option<bool>,
5681 pub r#type: MonitorEnum,
5682 pub value: f64,
5685 pub variable: Variable,
5686}
5687#[derive(Debug, Clone, PartialEq, Eq)]
5689#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5690pub enum SetMonitoringStatusEnum {
5691 Accepted,
5692 UnknownComponent,
5693 UnknownVariable,
5694 UnsupportedMonitorType,
5695 Rejected,
5696 Duplicate,
5697}
5698#[derive(Debug, Clone, PartialEq, Eq)]
5700#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5701pub struct SetMonitoringResult {
5702 pub component: Component,
5703 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5704 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5705 pub custom_data: Option<CustomData>,
5706 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5708 pub id: Option<i64>,
5709 pub severity: i64,
5733 pub status: SetMonitoringStatusEnum,
5734 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
5735 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5736 pub status_info: Option<StatusInfo>,
5737 pub r#type: MonitorEnum,
5738 pub variable: Variable,
5739}
5740#[derive(Debug, Clone, PartialEq, Eq)]
5741#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5742pub struct SetVariableData {
5743 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5744 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5745 pub attribute_type: Option<AttributeEnum>,
5746 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
5751 pub attribute_value: heapless::String<2500usize>,
5752 pub component: Component,
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<CustomData>,
5756 pub variable: Variable,
5757}
5758#[derive(Debug, Clone, PartialEq, Eq)]
5760#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5761pub enum SetVariableStatusEnum {
5762 Accepted,
5763 Rejected,
5764 UnknownComponent,
5765 UnknownVariable,
5766 NotSupportedAttributeType,
5767 RebootRequired,
5768}
5769#[derive(Debug, Clone, PartialEq, Eq)]
5770#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5771pub struct SetVariableResult {
5772 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
5773 pub attribute_status: SetVariableStatusEnum,
5774 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
5775 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5776 pub attribute_status_info: Option<StatusInfo>,
5777 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5778 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5779 pub attribute_type: Option<AttributeEnum>,
5780 pub component: Component,
5781 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5782 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5783 pub custom_data: Option<CustomData>,
5784 pub variable: Variable,
5785}
5786#[derive(Debug, Clone, PartialEq, Eq)]
5788#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5789pub enum ConnectorStatusEnum {
5790 Available,
5791 Occupied,
5792 Reserved,
5793 Unavailable,
5794 Faulted,
5795}
5796#[derive(Debug, Clone, PartialEq, Eq)]
5798#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5799pub enum CostDimensionEnum {
5800 Energy,
5801 MaxCurrent,
5802 MinCurrent,
5803 MaxPower,
5804 MinPower,
5805 IdleTIme,
5806 ChargingTime,
5807}
5808#[derive(Debug, Clone, PartialEq)]
5810#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5811pub struct CostDimension {
5812 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5813 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5814 pub custom_data: Option<CustomData>,
5815 pub r#type: CostDimensionEnum,
5816 pub volume: f64,
5818}
5819#[cfg(feature = "alloc")]
5820#[derive(Debug, Clone, PartialEq)]
5822#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5823pub struct ChargingPeriod {
5824 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5825 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5826 pub custom_data: Option<CustomData>,
5827 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5828 pub dimensions: Option<alloc::vec::Vec<CostDimension>>,
5829 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
5831 pub start_period: alloc::string::String,
5832 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
5834 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5835 pub tariff_id: Option<heapless::String<60usize>>,
5836}
5837#[cfg(not(feature = "alloc"))]
5838#[derive(Debug, Clone, PartialEq)]
5840#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5841pub struct ChargingPeriod<
5842 const CHARGING_PERIOD_DIMENSIONS_CAP: usize = 16usize,
5843 const CHARGING_PERIOD_START_PERIOD_CAP: usize = 1024usize,
5844> {
5845 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5846 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5847 pub custom_data: Option<CustomData>,
5848 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5849 pub dimensions: Option<heapless::Vec<CostDimension, CHARGING_PERIOD_DIMENSIONS_CAP>>,
5850 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
5852 pub start_period: heapless::String<CHARGING_PERIOD_START_PERIOD_CAP>,
5853 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
5855 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5856 pub tariff_id: Option<heapless::String<60usize>>,
5857}
5858#[derive(Debug, Clone, PartialEq)]
5860#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5861pub struct TotalPrice {
5862 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5863 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5864 pub custom_data: Option<CustomData>,
5865 #[cfg_attr(feature = "serde", serde(rename = "exclTax"))]
5867 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5868 pub excl_tax: Option<f64>,
5869 #[cfg_attr(feature = "serde", serde(rename = "inclTax"))]
5871 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5872 pub incl_tax: Option<f64>,
5873}
5874#[derive(Debug, Clone, PartialEq, Eq)]
5876#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5877pub enum TariffCostEnum {
5878 NormalCost,
5879 MinCost,
5880 MaxCost,
5881}
5882#[derive(Debug, Clone, PartialEq)]
5884#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5885pub struct TotalCost {
5886 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
5887 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5888 pub charging_time: Option<Price>,
5889 pub currency: heapless::String<3usize>,
5891 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5892 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5893 pub custom_data: Option<CustomData>,
5894 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5895 pub energy: Option<Price>,
5896 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5897 pub fixed: Option<Price>,
5898 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
5899 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5900 pub idle_time: Option<Price>,
5901 #[cfg_attr(feature = "serde", serde(rename = "reservationFixed"))]
5902 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5903 pub reservation_fixed: Option<Price>,
5904 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
5905 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5906 pub reservation_time: Option<Price>,
5907 pub total: TotalPrice,
5908 #[cfg_attr(feature = "serde", serde(rename = "typeOfCost"))]
5909 pub type_of_cost: TariffCostEnum,
5910}
5911#[derive(Debug, Clone, PartialEq)]
5913#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5914pub struct TotalUsage {
5915 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
5917 pub charging_time: i64,
5918 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5919 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5920 pub custom_data: Option<CustomData>,
5921 pub energy: f64,
5922 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
5924 pub idle_time: i64,
5925 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
5927 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5928 pub reservation_time: Option<i64>,
5929}
5930#[cfg(feature = "alloc")]
5931#[derive(Debug, Clone, PartialEq)]
5935#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5936pub struct CostDetails {
5937 #[cfg_attr(feature = "serde", serde(rename = "chargingPeriods"))]
5938 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5939 pub charging_periods: Option<alloc::vec::Vec<ChargingPeriod>>,
5940 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5941 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5942 pub custom_data: Option<CustomData>,
5943 #[cfg_attr(feature = "serde", serde(rename = "failureReason"))]
5945 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5946 pub failure_reason: Option<heapless::String<500usize>>,
5947 #[cfg_attr(feature = "serde", serde(rename = "failureToCalculate"))]
5949 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5950 pub failure_to_calculate: Option<bool>,
5951 #[cfg_attr(feature = "serde", serde(rename = "totalCost"))]
5952 pub total_cost: TotalCost,
5953 #[cfg_attr(feature = "serde", serde(rename = "totalUsage"))]
5954 pub total_usage: TotalUsage,
5955}
5956#[cfg(not(feature = "alloc"))]
5957#[derive(Debug, Clone, PartialEq)]
5961#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5962pub struct CostDetails<
5963 const COST_DETAILS_CHARGING_PERIODS_CAP: usize = 16usize,
5964 const CHARGING_PERIOD_DIMENSIONS_CAP: usize = 16usize,
5965 const CHARGING_PERIOD_START_PERIOD_CAP: usize = 1024usize,
5966> {
5967 #[cfg_attr(feature = "serde", serde(rename = "chargingPeriods"))]
5968 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5969 pub charging_periods: Option<
5970 heapless::Vec<
5971 ChargingPeriod<
5972 CHARGING_PERIOD_DIMENSIONS_CAP,
5973 CHARGING_PERIOD_START_PERIOD_CAP,
5974 >,
5975 COST_DETAILS_CHARGING_PERIODS_CAP,
5976 >,
5977 >,
5978 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5979 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5980 pub custom_data: Option<CustomData>,
5981 #[cfg_attr(feature = "serde", serde(rename = "failureReason"))]
5983 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5984 pub failure_reason: Option<heapless::String<500usize>>,
5985 #[cfg_attr(feature = "serde", serde(rename = "failureToCalculate"))]
5987 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5988 pub failure_to_calculate: Option<bool>,
5989 #[cfg_attr(feature = "serde", serde(rename = "totalCost"))]
5990 pub total_cost: TotalCost,
5991 #[cfg_attr(feature = "serde", serde(rename = "totalUsage"))]
5992 pub total_usage: TotalUsage,
5993}
5994#[derive(Debug, Clone, PartialEq, Eq)]
5997#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5998pub enum TransactionEventEnum {
5999 Ended,
6000 Started,
6001 Updated,
6002}
6003#[derive(Debug, Clone, PartialEq, Eq)]
6005#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6006pub enum PreconditioningStatusEnum {
6007 Unknown,
6008 Ready,
6009 NotReady,
6010 Preconditioning,
6011}
6012#[derive(Debug, Clone, PartialEq, Eq)]
6015#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6016pub enum ChargingStateEnum {
6017 EVConnected,
6018 Charging,
6019 SuspendedEV,
6020 SuspendedEVSE,
6021 Idle,
6022}
6023#[derive(Debug, Clone, PartialEq, Eq)]
6026#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6027pub enum ReasonEnum {
6028 DeAuthorized,
6029 EmergencyStop,
6030 EnergyLimitReached,
6031 EVDisconnected,
6032 GroundFault,
6033 ImmediateReset,
6034 MasterPass,
6035 Local,
6036 LocalOutOfCredit,
6037 Other,
6038 OvercurrentFault,
6039 PowerLoss,
6040 PowerQuality,
6041 Reboot,
6042 Remote,
6043 SOCLimitReached,
6044 StoppedByEV,
6045 TimeLimitReached,
6046 Timeout,
6047 ReqEnergyTransferRejected,
6048}
6049#[derive(Debug, Clone, PartialEq)]
6051#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6052pub struct TransactionLimit {
6053 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6054 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6055 pub custom_data: Option<CustomData>,
6056 #[cfg_attr(feature = "serde", serde(rename = "maxCost"))]
6058 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6059 pub max_cost: Option<f64>,
6060 #[cfg_attr(feature = "serde", serde(rename = "maxEnergy"))]
6062 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6063 pub max_energy: Option<f64>,
6064 #[cfg_attr(feature = "serde", serde(rename = "maxSoC"))]
6066 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6067 pub max_so_c: Option<i64>,
6068 #[cfg_attr(feature = "serde", serde(rename = "maxTime"))]
6070 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6071 pub max_time: Option<i64>,
6072}
6073#[derive(Debug, Clone, PartialEq)]
6074#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6075pub struct Transaction {
6076 #[cfg_attr(feature = "serde", serde(rename = "chargingState"))]
6077 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6078 pub charging_state: Option<ChargingStateEnum>,
6079 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6080 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6081 pub custom_data: Option<CustomData>,
6082 #[cfg_attr(feature = "serde", serde(rename = "operationMode"))]
6083 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6084 pub operation_mode: Option<OperationModeEnum>,
6085 #[cfg_attr(feature = "serde", serde(rename = "remoteStartId"))]
6087 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6088 pub remote_start_id: Option<i64>,
6089 #[cfg_attr(feature = "serde", serde(rename = "stoppedReason"))]
6090 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6091 pub stopped_reason: Option<ReasonEnum>,
6092 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
6094 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6095 pub tariff_id: Option<heapless::String<60usize>>,
6096 #[cfg_attr(feature = "serde", serde(rename = "timeSpentCharging"))]
6098 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6099 pub time_spent_charging: Option<i64>,
6100 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
6102 pub transaction_id: heapless::String<36usize>,
6103 #[cfg_attr(feature = "serde", serde(rename = "transactionLimit"))]
6104 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6105 pub transaction_limit: Option<TransactionLimit>,
6106}
6107#[derive(Debug, Clone, PartialEq, Eq)]
6109#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6110pub enum TriggerReasonEnum {
6111 AbnormalCondition,
6112 Authorized,
6113 CablePluggedIn,
6114 ChargingRateChanged,
6115 ChargingStateChanged,
6116 CostLimitReached,
6117 Deauthorized,
6118 EnergyLimitReached,
6119 EVCommunicationLost,
6120 EVConnectTimeout,
6121 EVDeparted,
6122 EVDetected,
6123 LimitSet,
6124 MeterValueClock,
6125 MeterValuePeriodic,
6126 OperationModeChanged,
6127 RemoteStart,
6128 RemoteStop,
6129 ResetCommand,
6130 RunningCost,
6131 SignedDataReceived,
6132 SoCLimitReached,
6133 StopAuthorized,
6134 TariffChanged,
6135 TariffNotAccepted,
6136 TimeLimitReached,
6137 Trigger,
6138 TxResumed,
6139 UnlockCommand,
6140}
6141#[derive(Debug, Clone, PartialEq, Eq)]
6143#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6144pub enum MessageTriggerEnum {
6145 BootNotification,
6146 LogStatusNotification,
6147 FirmwareStatusNotification,
6148 Heartbeat,
6149 MeterValues,
6150 SignChargingStationCertificate,
6151 SignV2GCertificate,
6152 SignV2G20Certificate,
6153 StatusNotification,
6154 TransactionEvent,
6155 SignCombinedCertificate,
6156 PublishFirmwareStatusNotification,
6157 CustomTrigger,
6158}
6159#[derive(Debug, Clone, PartialEq, Eq)]
6161#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6162pub enum TriggerMessageStatusEnum {
6163 Accepted,
6164 Rejected,
6165 NotImplemented,
6166}
6167#[derive(Debug, Clone, PartialEq, Eq)]
6169#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6170pub enum UnlockStatusEnum {
6171 Unlocked,
6172 UnlockFailed,
6173 OngoingAuthorizedTransaction,
6174 UnknownConnector,
6175}
6176#[derive(Debug, Clone, PartialEq, Eq)]
6178#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6179pub enum UnpublishFirmwareStatusEnum {
6180 DownloadOngoing,
6181 NoFirmware,
6182 Unpublished,
6183}
6184#[cfg(feature = "alloc")]
6185#[derive(Debug, Clone, PartialEq, Eq)]
6187#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6188pub struct Firmware {
6189 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6190 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6191 pub custom_data: Option<CustomData>,
6192 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
6194 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6195 pub install_date_time: Option<alloc::string::String>,
6196 pub location: heapless::String<2000usize>,
6198 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
6200 pub retrieve_date_time: alloc::string::String,
6201 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6203 pub signature: Option<heapless::String<800usize>>,
6204 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
6207 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6208 pub signing_certificate: Option<heapless::String<5500usize>>,
6209}
6210#[cfg(not(feature = "alloc"))]
6211#[derive(Debug, Clone, PartialEq, Eq)]
6213#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6214pub struct Firmware<
6215 const FIRMWARE_INSTALL_DATE_TIME_CAP: usize = 1024usize,
6216 const FIRMWARE_RETRIEVE_DATE_TIME_CAP: usize = 1024usize,
6217> {
6218 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6219 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6220 pub custom_data: Option<CustomData>,
6221 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
6223 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6224 pub install_date_time: Option<heapless::String<FIRMWARE_INSTALL_DATE_TIME_CAP>>,
6225 pub location: heapless::String<2000usize>,
6227 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
6229 pub retrieve_date_time: heapless::String<FIRMWARE_RETRIEVE_DATE_TIME_CAP>,
6230 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6232 pub signature: Option<heapless::String<800usize>>,
6233 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
6236 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6237 pub signing_certificate: Option<heapless::String<5500usize>>,
6238}
6239#[derive(Debug, Clone, PartialEq, Eq)]
6241#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6242pub enum UpdateFirmwareStatusEnum {
6243 Accepted,
6244 Rejected,
6245 AcceptedCanceled,
6246 InvalidCertificate,
6247 RevokedCertificate,
6248}
6249#[derive(Debug, Clone, PartialEq, Eq)]
6251#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6252pub enum PriorityChargingStatusEnum {
6253 Accepted,
6254 Rejected,
6255 NoProfile,
6256}