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: alloc::vec::Vec<PriceRuleStack>,
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: alloc::vec::Vec<PriceLevelScheduleEntry>,
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#[cfg(feature = "alloc")]
2843#[derive(Debug, Clone, PartialEq)]
2846#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2847pub struct SalesTariff {
2848 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2849 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2850 pub custom_data: Option<CustomData>,
2851 pub id: i64,
2853 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
2855 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2856 pub num_e_price_levels: Option<i64>,
2857 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
2859 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2860 pub sales_tariff_description: Option<heapless::String<32usize>>,
2861 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
2862 pub sales_tariff_entry: alloc::vec::Vec<SalesTariffEntry>,
2863}
2864#[cfg(not(feature = "alloc"))]
2865#[derive(Debug, Clone, PartialEq)]
2868#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2869pub struct SalesTariff {
2870 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2871 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2872 pub custom_data: Option<CustomData>,
2873 pub id: i64,
2875 #[cfg_attr(feature = "serde", serde(rename = "numEPriceLevels"))]
2877 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2878 pub num_e_price_levels: Option<i64>,
2879 #[cfg_attr(feature = "serde", serde(rename = "salesTariffDescription"))]
2881 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2882 pub sales_tariff_description: Option<heapless::String<32usize>>,
2883 #[cfg_attr(feature = "serde", serde(rename = "salesTariffEntry"))]
2884 pub sales_tariff_entry: heapless::Vec<SalesTariffEntry, 1024usize>,
2885}
2886#[cfg(feature = "alloc")]
2887#[derive(Debug, Clone, PartialEq)]
2892#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2893pub struct ChargingSchedule {
2894 #[cfg_attr(feature = "serde", serde(rename = "absolutePriceSchedule"))]
2895 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2896 pub absolute_price_schedule: Option<AbsolutePriceSchedule>,
2897 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
2898 pub charging_rate_unit: ChargingRateUnitEnum,
2899 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
2900 pub charging_schedule_period: alloc::vec::Vec<ChargingSchedulePeriod>,
2901 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2902 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2903 pub custom_data: Option<CustomData>,
2904 #[cfg_attr(feature = "serde", serde(rename = "digestValue"))]
2906 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2907 pub digest_value: Option<heapless::String<88usize>>,
2908 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2910 pub duration: Option<i64>,
2911 pub id: i64,
2912 #[cfg_attr(feature = "serde", serde(rename = "limitAtSoC"))]
2913 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2914 pub limit_at_so_c: Option<LimitAtSoC>,
2915 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
2917 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2918 pub min_charging_rate: Option<f64>,
2919 #[cfg_attr(feature = "serde", serde(rename = "powerTolerance"))]
2921 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2922 pub power_tolerance: Option<f64>,
2923 #[cfg_attr(feature = "serde", serde(rename = "priceLevelSchedule"))]
2924 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2925 pub price_level_schedule: Option<PriceLevelSchedule>,
2926 #[cfg_attr(feature = "serde", serde(rename = "randomizedDelay"))]
2928 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2929 pub randomized_delay: Option<i64>,
2930 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
2931 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2932 pub sales_tariff: Option<SalesTariff>,
2933 #[cfg_attr(feature = "serde", serde(rename = "signatureId"))]
2935 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2936 pub signature_id: Option<i64>,
2937 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
2939 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2940 pub start_schedule: Option<alloc::string::String>,
2941 #[cfg_attr(feature = "serde", serde(rename = "useLocalTime"))]
2944 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2945 pub use_local_time: Option<bool>,
2946}
2947#[cfg(not(feature = "alloc"))]
2948#[derive(Debug, Clone, PartialEq)]
2953#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2954pub struct ChargingSchedule<
2955 const ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
2956 const PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
2957 const CHARGING_SCHEDULE_START_SCHEDULE_CAP: usize = 1024usize,
2958> {
2959 #[cfg_attr(feature = "serde", serde(rename = "absolutePriceSchedule"))]
2960 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2961 pub absolute_price_schedule: Option<
2962 AbsolutePriceSchedule<ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP>,
2963 >,
2964 #[cfg_attr(feature = "serde", serde(rename = "chargingRateUnit"))]
2965 pub charging_rate_unit: ChargingRateUnitEnum,
2966 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedulePeriod"))]
2967 pub charging_schedule_period: heapless::Vec<ChargingSchedulePeriod, 1024usize>,
2968 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
2969 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2970 pub custom_data: Option<CustomData>,
2971 #[cfg_attr(feature = "serde", serde(rename = "digestValue"))]
2973 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2974 pub digest_value: Option<heapless::String<88usize>>,
2975 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2977 pub duration: Option<i64>,
2978 pub id: i64,
2979 #[cfg_attr(feature = "serde", serde(rename = "limitAtSoC"))]
2980 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2981 pub limit_at_so_c: Option<LimitAtSoC>,
2982 #[cfg_attr(feature = "serde", serde(rename = "minChargingRate"))]
2984 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2985 pub min_charging_rate: Option<f64>,
2986 #[cfg_attr(feature = "serde", serde(rename = "powerTolerance"))]
2988 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2989 pub power_tolerance: Option<f64>,
2990 #[cfg_attr(feature = "serde", serde(rename = "priceLevelSchedule"))]
2991 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2992 pub price_level_schedule: Option<
2993 PriceLevelSchedule<PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP>,
2994 >,
2995 #[cfg_attr(feature = "serde", serde(rename = "randomizedDelay"))]
2997 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
2998 pub randomized_delay: Option<i64>,
2999 #[cfg_attr(feature = "serde", serde(rename = "salesTariff"))]
3000 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3001 pub sales_tariff: Option<SalesTariff>,
3002 #[cfg_attr(feature = "serde", serde(rename = "signatureId"))]
3004 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3005 pub signature_id: Option<i64>,
3006 #[cfg_attr(feature = "serde", serde(rename = "startSchedule"))]
3008 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3009 pub start_schedule: Option<heapless::String<CHARGING_SCHEDULE_START_SCHEDULE_CAP>>,
3010 #[cfg_attr(feature = "serde", serde(rename = "useLocalTime"))]
3013 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3014 pub use_local_time: Option<bool>,
3015}
3016#[derive(Debug, Clone, PartialEq, Eq)]
3018#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3019pub enum GridEventFaultEnum {
3020 CurrentImbalance,
3021 LocalEmergency,
3022 LowInputPower,
3023 OverCurrent,
3024 OverFrequency,
3025 OverVoltage,
3026 PhaseRotation,
3027 RemoteEmergency,
3028 UnderFrequency,
3029 UnderVoltage,
3030 VoltageImbalance,
3031}
3032#[cfg(feature = "alloc")]
3033#[derive(Debug, Clone, PartialEq, Eq)]
3035#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3036pub struct MessageInfo {
3037 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3038 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3039 pub custom_data: Option<CustomData>,
3040 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3041 pub display: Option<Component>,
3042 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
3044 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3045 pub end_date_time: Option<alloc::string::String>,
3046 pub id: i64,
3048 pub message: MessageContent,
3049 #[cfg_attr(feature = "serde", serde(rename = "messageExtra"))]
3050 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3051 pub message_extra: Option<heapless::Vec<MessageContent, 4usize>>,
3052 pub priority: MessagePriorityEnum,
3053 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
3055 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3056 pub start_date_time: Option<alloc::string::String>,
3057 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3058 pub state: Option<MessageStateEnum>,
3059 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
3063 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3064 pub transaction_id: Option<heapless::String<36usize>>,
3065}
3066#[cfg(not(feature = "alloc"))]
3067#[derive(Debug, Clone, PartialEq, Eq)]
3069#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3070pub struct MessageInfo<
3071 const MESSAGE_INFO_END_DATE_TIME_CAP: usize = 1024usize,
3072 const MESSAGE_INFO_START_DATE_TIME_CAP: usize = 1024usize,
3073> {
3074 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3075 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3076 pub custom_data: Option<CustomData>,
3077 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3078 pub display: Option<Component>,
3079 #[cfg_attr(feature = "serde", serde(rename = "endDateTime"))]
3081 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3082 pub end_date_time: Option<heapless::String<MESSAGE_INFO_END_DATE_TIME_CAP>>,
3083 pub id: i64,
3085 pub message: MessageContent,
3086 #[cfg_attr(feature = "serde", serde(rename = "messageExtra"))]
3087 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3088 pub message_extra: Option<heapless::Vec<MessageContent, 4usize>>,
3089 pub priority: MessagePriorityEnum,
3090 #[cfg_attr(feature = "serde", serde(rename = "startDateTime"))]
3092 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3093 pub start_date_time: Option<heapless::String<MESSAGE_INFO_START_DATE_TIME_CAP>>,
3094 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3095 pub state: Option<MessageStateEnum>,
3096 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
3100 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3101 pub transaction_id: Option<heapless::String<36usize>>,
3102}
3103#[derive(Debug, Clone, PartialEq)]
3105#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3106pub struct ACChargingParameters {
3107 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3108 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3109 pub custom_data: Option<CustomData>,
3110 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
3115 pub energy_amount: f64,
3116 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
3120 pub ev_max_current: f64,
3121 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
3125 pub ev_max_voltage: f64,
3126 #[cfg_attr(feature = "serde", serde(rename = "evMinCurrent"))]
3130 pub ev_min_current: f64,
3131}
3132#[derive(Debug, Clone, PartialEq, Eq)]
3136#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3137pub enum ControlModeEnum {
3138 ScheduledControl,
3139 DynamicControl,
3140}
3141#[derive(Debug, Clone, PartialEq)]
3143#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3144pub struct DCChargingParameters {
3145 #[cfg_attr(feature = "serde", serde(rename = "bulkSoC"))]
3149 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3150 pub bulk_so_c: Option<i64>,
3151 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3152 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3153 pub custom_data: Option<CustomData>,
3154 #[cfg_attr(feature = "serde", serde(rename = "energyAmount"))]
3158 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3159 pub energy_amount: Option<f64>,
3160 #[cfg_attr(feature = "serde", serde(rename = "evEnergyCapacity"))]
3164 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3165 pub ev_energy_capacity: Option<f64>,
3166 #[cfg_attr(feature = "serde", serde(rename = "evMaxCurrent"))]
3170 pub ev_max_current: f64,
3171 #[cfg_attr(feature = "serde", serde(rename = "evMaxPower"))]
3175 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3176 pub ev_max_power: Option<f64>,
3177 #[cfg_attr(feature = "serde", serde(rename = "evMaxVoltage"))]
3181 pub ev_max_voltage: f64,
3182 #[cfg_attr(feature = "serde", serde(rename = "fullSoC"))]
3186 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3187 pub full_so_c: Option<i64>,
3188 #[cfg_attr(feature = "serde", serde(rename = "stateOfCharge"))]
3192 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3193 pub state_of_charge: Option<i64>,
3194}
3195#[derive(Debug, Clone, PartialEq, Eq)]
3196#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3197pub enum IslandingDetectionEnum {
3198 NoAntiIslandingSupport,
3199 RoCoF,
3200 #[cfg_attr(feature = "serde", serde(rename = "UVP_OVP"))]
3201 UVPOVP,
3202 #[cfg_attr(feature = "serde", serde(rename = "UFP_OFP"))]
3203 UFPOFP,
3204 VoltageVectorShift,
3205 ZeroCrossingDetection,
3206 OtherPassive,
3207 ImpedanceMeasurement,
3208 ImpedanceAtFrequency,
3209 SlipModeFrequencyShift,
3210 SandiaFrequencyShift,
3211 SandiaVoltageShift,
3212 FrequencyJump,
3213 RCLQFactor,
3214 OtherActive,
3215}
3216#[cfg(feature = "alloc")]
3217#[derive(Debug, Clone, PartialEq)]
3226#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3227pub struct DERChargingParameters {
3228 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3229 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3230 pub custom_data: Option<CustomData>,
3231 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel1DCInjection"))]
3234 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3235 pub ev_duration_level1_d_c_injection: Option<f64>,
3236 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel2DCInjection"))]
3239 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3240 pub ev_duration_level2_d_c_injection: Option<f64>,
3241 #[cfg_attr(feature = "serde", serde(rename = "evInverterHwVersion"))]
3244 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3245 pub ev_inverter_hw_version: Option<heapless::String<50usize>>,
3246 #[cfg_attr(feature = "serde", serde(rename = "evInverterManufacturer"))]
3249 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3250 pub ev_inverter_manufacturer: Option<heapless::String<50usize>>,
3251 #[cfg_attr(feature = "serde", serde(rename = "evInverterModel"))]
3254 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3255 pub ev_inverter_model: Option<heapless::String<50usize>>,
3256 #[cfg_attr(feature = "serde", serde(rename = "evInverterSerialNumber"))]
3259 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3260 pub ev_inverter_serial_number: Option<heapless::String<50usize>>,
3261 #[cfg_attr(feature = "serde", serde(rename = "evInverterSwVersion"))]
3264 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3265 pub ev_inverter_sw_version: Option<heapless::String<50usize>>,
3266 #[cfg_attr(feature = "serde", serde(rename = "evIslandingDetectionMethod"))]
3269 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3270 pub ev_islanding_detection_method: Option<alloc::vec::Vec<IslandingDetectionEnum>>,
3271 #[cfg_attr(feature = "serde", serde(rename = "evIslandingTripTime"))]
3274 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3275 pub ev_islanding_trip_time: Option<f64>,
3276 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel1DCInjection"))]
3279 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3280 pub ev_maximum_level1_d_c_injection: Option<f64>,
3281 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel2DCInjection"))]
3284 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3285 pub ev_maximum_level2_d_c_injection: Option<f64>,
3286 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedMaxDischargePower"))]
3291 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3292 pub ev_over_excited_max_discharge_power: Option<f64>,
3293 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedPowerFactor"))]
3297 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3298 pub ev_over_excited_power_factor: Option<f64>,
3299 #[cfg_attr(feature = "serde", serde(rename = "evReactiveSusceptance"))]
3302 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3303 pub ev_reactive_susceptance: Option<f64>,
3304 #[cfg_attr(
3307 feature = "serde",
3308 serde(rename = "evSessionTotalDischargeEnergyAvailable")
3309 )]
3310 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3311 pub ev_session_total_discharge_energy_available: Option<f64>,
3312 #[cfg_attr(feature = "serde", serde(rename = "evSupportedDERControl"))]
3315 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3316 pub ev_supported_d_e_r_control: Option<alloc::vec::Vec<DERControlEnum>>,
3317 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedMaxDischargePower"))]
3323 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3324 pub ev_under_excited_max_discharge_power: Option<f64>,
3325 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedPowerFactor"))]
3329 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3330 pub ev_under_excited_power_factor: Option<f64>,
3331 #[cfg_attr(feature = "serde", serde(rename = "maxApparentPower"))]
3335 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3336 pub max_apparent_power: Option<f64>,
3337 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower"))]
3343 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3344 pub max_charge_apparent_power: Option<f64>,
3345 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L2"))]
3349 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3350 pub max_charge_apparent_power_l2: Option<f64>,
3351 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L3"))]
3355 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3356 pub max_charge_apparent_power_l3: Option<f64>,
3357 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower"))]
3363 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3364 pub max_charge_reactive_power: Option<f64>,
3365 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L2"))]
3369 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3370 pub max_charge_reactive_power_l2: Option<f64>,
3371 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L3"))]
3375 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3376 pub max_charge_reactive_power_l3: Option<f64>,
3377 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower"))]
3383 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3384 pub max_discharge_apparent_power: Option<f64>,
3385 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L2"))]
3389 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3390 pub max_discharge_apparent_power_l2: Option<f64>,
3391 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L3"))]
3395 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3396 pub max_discharge_apparent_power_l3: Option<f64>,
3397 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower"))]
3403 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3404 pub max_discharge_reactive_power: Option<f64>,
3405 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L2"))]
3409 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3410 pub max_discharge_reactive_power_l2: Option<f64>,
3411 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L3"))]
3415 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3416 pub max_discharge_reactive_power_l3: Option<f64>,
3417 #[cfg_attr(feature = "serde", serde(rename = "maxNominalVoltage"))]
3420 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3421 pub max_nominal_voltage: Option<f64>,
3422 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower"))]
3427 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3428 pub min_charge_reactive_power: Option<f64>,
3429 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L2"))]
3432 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3433 pub min_charge_reactive_power_l2: Option<f64>,
3434 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L3"))]
3437 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3438 pub min_charge_reactive_power_l3: Option<f64>,
3439 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower"))]
3444 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3445 pub min_discharge_reactive_power: Option<f64>,
3446 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L2"))]
3449 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3450 pub min_discharge_reactive_power_l2: Option<f64>,
3451 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L3"))]
3454 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3455 pub min_discharge_reactive_power_l3: Option<f64>,
3456 #[cfg_attr(feature = "serde", serde(rename = "minNominalVoltage"))]
3459 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3460 pub min_nominal_voltage: Option<f64>,
3461 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltage"))]
3464 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3465 pub nominal_voltage: Option<f64>,
3466 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltageOffset"))]
3469 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3470 pub nominal_voltage_offset: Option<f64>,
3471}
3472#[cfg(not(feature = "alloc"))]
3473#[derive(Debug, Clone, PartialEq)]
3482#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3483pub struct DERChargingParameters<
3484 const D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP: usize = 16usize,
3485 const D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP: usize = 16usize,
3486> {
3487 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3488 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3489 pub custom_data: Option<CustomData>,
3490 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel1DCInjection"))]
3493 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3494 pub ev_duration_level1_d_c_injection: Option<f64>,
3495 #[cfg_attr(feature = "serde", serde(rename = "evDurationLevel2DCInjection"))]
3498 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3499 pub ev_duration_level2_d_c_injection: Option<f64>,
3500 #[cfg_attr(feature = "serde", serde(rename = "evInverterHwVersion"))]
3503 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3504 pub ev_inverter_hw_version: Option<heapless::String<50usize>>,
3505 #[cfg_attr(feature = "serde", serde(rename = "evInverterManufacturer"))]
3508 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3509 pub ev_inverter_manufacturer: Option<heapless::String<50usize>>,
3510 #[cfg_attr(feature = "serde", serde(rename = "evInverterModel"))]
3513 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3514 pub ev_inverter_model: Option<heapless::String<50usize>>,
3515 #[cfg_attr(feature = "serde", serde(rename = "evInverterSerialNumber"))]
3518 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3519 pub ev_inverter_serial_number: Option<heapless::String<50usize>>,
3520 #[cfg_attr(feature = "serde", serde(rename = "evInverterSwVersion"))]
3523 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3524 pub ev_inverter_sw_version: Option<heapless::String<50usize>>,
3525 #[cfg_attr(feature = "serde", serde(rename = "evIslandingDetectionMethod"))]
3528 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3529 pub ev_islanding_detection_method: Option<
3530 heapless::Vec<
3531 IslandingDetectionEnum,
3532 D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP,
3533 >,
3534 >,
3535 #[cfg_attr(feature = "serde", serde(rename = "evIslandingTripTime"))]
3538 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3539 pub ev_islanding_trip_time: Option<f64>,
3540 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel1DCInjection"))]
3543 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3544 pub ev_maximum_level1_d_c_injection: Option<f64>,
3545 #[cfg_attr(feature = "serde", serde(rename = "evMaximumLevel2DCInjection"))]
3548 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3549 pub ev_maximum_level2_d_c_injection: Option<f64>,
3550 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedMaxDischargePower"))]
3555 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3556 pub ev_over_excited_max_discharge_power: Option<f64>,
3557 #[cfg_attr(feature = "serde", serde(rename = "evOverExcitedPowerFactor"))]
3561 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3562 pub ev_over_excited_power_factor: Option<f64>,
3563 #[cfg_attr(feature = "serde", serde(rename = "evReactiveSusceptance"))]
3566 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3567 pub ev_reactive_susceptance: Option<f64>,
3568 #[cfg_attr(
3571 feature = "serde",
3572 serde(rename = "evSessionTotalDischargeEnergyAvailable")
3573 )]
3574 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3575 pub ev_session_total_discharge_energy_available: Option<f64>,
3576 #[cfg_attr(feature = "serde", serde(rename = "evSupportedDERControl"))]
3579 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3580 pub ev_supported_d_e_r_control: Option<
3581 heapless::Vec<
3582 DERControlEnum,
3583 D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP,
3584 >,
3585 >,
3586 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedMaxDischargePower"))]
3592 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3593 pub ev_under_excited_max_discharge_power: Option<f64>,
3594 #[cfg_attr(feature = "serde", serde(rename = "evUnderExcitedPowerFactor"))]
3598 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3599 pub ev_under_excited_power_factor: Option<f64>,
3600 #[cfg_attr(feature = "serde", serde(rename = "maxApparentPower"))]
3604 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3605 pub max_apparent_power: Option<f64>,
3606 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower"))]
3612 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3613 pub max_charge_apparent_power: Option<f64>,
3614 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L2"))]
3618 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3619 pub max_charge_apparent_power_l2: Option<f64>,
3620 #[cfg_attr(feature = "serde", serde(rename = "maxChargeApparentPower_L3"))]
3624 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3625 pub max_charge_apparent_power_l3: Option<f64>,
3626 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower"))]
3632 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3633 pub max_charge_reactive_power: Option<f64>,
3634 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L2"))]
3638 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3639 pub max_charge_reactive_power_l2: Option<f64>,
3640 #[cfg_attr(feature = "serde", serde(rename = "maxChargeReactivePower_L3"))]
3644 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3645 pub max_charge_reactive_power_l3: Option<f64>,
3646 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower"))]
3652 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3653 pub max_discharge_apparent_power: Option<f64>,
3654 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L2"))]
3658 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3659 pub max_discharge_apparent_power_l2: Option<f64>,
3660 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeApparentPower_L3"))]
3664 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3665 pub max_discharge_apparent_power_l3: Option<f64>,
3666 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower"))]
3672 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3673 pub max_discharge_reactive_power: Option<f64>,
3674 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L2"))]
3678 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3679 pub max_discharge_reactive_power_l2: Option<f64>,
3680 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeReactivePower_L3"))]
3684 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3685 pub max_discharge_reactive_power_l3: Option<f64>,
3686 #[cfg_attr(feature = "serde", serde(rename = "maxNominalVoltage"))]
3689 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3690 pub max_nominal_voltage: Option<f64>,
3691 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower"))]
3696 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3697 pub min_charge_reactive_power: Option<f64>,
3698 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L2"))]
3701 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3702 pub min_charge_reactive_power_l2: Option<f64>,
3703 #[cfg_attr(feature = "serde", serde(rename = "minChargeReactivePower_L3"))]
3706 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3707 pub min_charge_reactive_power_l3: Option<f64>,
3708 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower"))]
3713 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3714 pub min_discharge_reactive_power: Option<f64>,
3715 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L2"))]
3718 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3719 pub min_discharge_reactive_power_l2: Option<f64>,
3720 #[cfg_attr(feature = "serde", serde(rename = "minDischargeReactivePower_L3"))]
3723 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3724 pub min_discharge_reactive_power_l3: Option<f64>,
3725 #[cfg_attr(feature = "serde", serde(rename = "minNominalVoltage"))]
3728 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3729 pub min_nominal_voltage: Option<f64>,
3730 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltage"))]
3733 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3734 pub nominal_voltage: Option<f64>,
3735 #[cfg_attr(feature = "serde", serde(rename = "nominalVoltageOffset"))]
3738 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3739 pub nominal_voltage_offset: Option<f64>,
3740}
3741#[derive(Debug, Clone, PartialEq)]
3743#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3744pub struct EVPriceRule {
3745 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3746 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3747 pub custom_data: Option<CustomData>,
3748 #[cfg_attr(feature = "serde", serde(rename = "energyFee"))]
3750 pub energy_fee: f64,
3751 #[cfg_attr(feature = "serde", serde(rename = "powerRangeStart"))]
3753 pub power_range_start: f64,
3754}
3755#[derive(Debug, Clone, PartialEq)]
3757#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3758pub struct EVAbsolutePriceScheduleEntry {
3759 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3760 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3761 pub custom_data: Option<CustomData>,
3762 pub duration: i64,
3764 #[cfg_attr(feature = "serde", serde(rename = "evPriceRule"))]
3765 pub ev_price_rule: heapless::Vec<EVPriceRule, 8usize>,
3766}
3767#[cfg(feature = "alloc")]
3768#[derive(Debug, Clone, PartialEq)]
3770#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3771pub struct EVAbsolutePriceSchedule {
3772 pub currency: heapless::String<3usize>,
3774 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3775 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3776 pub custom_data: Option<CustomData>,
3777 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceScheduleEntries"))]
3778 pub ev_absolute_price_schedule_entries: alloc::vec::Vec<
3779 EVAbsolutePriceScheduleEntry,
3780 >,
3781 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
3783 pub price_algorithm: heapless::String<2000usize>,
3784 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3786 pub time_anchor: alloc::string::String,
3787}
3788#[cfg(not(feature = "alloc"))]
3789#[derive(Debug, Clone, PartialEq)]
3791#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3792pub struct EVAbsolutePriceSchedule<
3793 const E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
3794> {
3795 pub currency: heapless::String<3usize>,
3797 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3798 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3799 pub custom_data: Option<CustomData>,
3800 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceScheduleEntries"))]
3801 pub ev_absolute_price_schedule_entries: heapless::Vec<
3802 EVAbsolutePriceScheduleEntry,
3803 1024usize,
3804 >,
3805 #[cfg_attr(feature = "serde", serde(rename = "priceAlgorithm"))]
3807 pub price_algorithm: heapless::String<2000usize>,
3808 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3810 pub time_anchor: heapless::String<E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP>,
3811}
3812#[derive(Debug, Clone, PartialEq)]
3814#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3815pub struct EVPowerScheduleEntry {
3816 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3817 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3818 pub custom_data: Option<CustomData>,
3819 pub duration: i64,
3821 pub power: f64,
3823}
3824#[cfg(feature = "alloc")]
3825#[derive(Debug, Clone, PartialEq)]
3827#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3828pub struct EVPowerSchedule {
3829 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3830 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3831 pub custom_data: Option<CustomData>,
3832 #[cfg_attr(feature = "serde", serde(rename = "evPowerScheduleEntries"))]
3833 pub ev_power_schedule_entries: alloc::vec::Vec<EVPowerScheduleEntry>,
3834 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3836 pub time_anchor: alloc::string::String,
3837}
3838#[cfg(not(feature = "alloc"))]
3839#[derive(Debug, Clone, PartialEq)]
3841#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3842pub struct EVPowerSchedule<const E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize> {
3843 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3844 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3845 pub custom_data: Option<CustomData>,
3846 #[cfg_attr(feature = "serde", serde(rename = "evPowerScheduleEntries"))]
3847 pub ev_power_schedule_entries: heapless::Vec<EVPowerScheduleEntry, 1024usize>,
3848 #[cfg_attr(feature = "serde", serde(rename = "timeAnchor"))]
3850 pub time_anchor: heapless::String<E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP>,
3851}
3852#[cfg(feature = "alloc")]
3853#[derive(Debug, Clone, PartialEq)]
3855#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3856pub struct EVEnergyOffer {
3857 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3858 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3859 pub custom_data: Option<CustomData>,
3860 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceSchedule"))]
3861 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3862 pub ev_absolute_price_schedule: Option<EVAbsolutePriceSchedule>,
3863 #[cfg_attr(feature = "serde", serde(rename = "evPowerSchedule"))]
3864 pub ev_power_schedule: EVPowerSchedule,
3865}
3866#[cfg(not(feature = "alloc"))]
3867#[derive(Debug, Clone, PartialEq)]
3869#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3870pub struct EVEnergyOffer<
3871 const E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
3872 const E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
3873> {
3874 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3875 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3876 pub custom_data: Option<CustomData>,
3877 #[cfg_attr(feature = "serde", serde(rename = "evAbsolutePriceSchedule"))]
3878 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3879 pub ev_absolute_price_schedule: Option<
3880 EVAbsolutePriceSchedule<E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP>,
3881 >,
3882 #[cfg_attr(feature = "serde", serde(rename = "evPowerSchedule"))]
3883 pub ev_power_schedule: EVPowerSchedule<E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP>,
3884}
3885#[derive(Debug, Clone, PartialEq, Eq)]
3890#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3891pub enum MobilityNeedsModeEnum {
3892 EVCC,
3893 #[cfg_attr(feature = "serde", serde(rename = "EVCC_SECC"))]
3894 EVCCSECC,
3895}
3896#[derive(Debug, Clone, PartialEq)]
3899#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3900pub struct V2XChargingParameters {
3901 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
3902 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3903 pub custom_data: Option<CustomData>,
3904 #[cfg_attr(feature = "serde", serde(rename = "evMaxEnergyRequest"))]
3908 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3909 pub ev_max_energy_request: Option<f64>,
3910 #[cfg_attr(feature = "serde", serde(rename = "evMaxV2XEnergyRequest"))]
3915 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3916 pub ev_max_v2_x_energy_request: Option<f64>,
3917 #[cfg_attr(feature = "serde", serde(rename = "evMinEnergyRequest"))]
3921 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3922 pub ev_min_energy_request: Option<f64>,
3923 #[cfg_attr(feature = "serde", serde(rename = "evMinV2XEnergyRequest"))]
3928 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3929 pub ev_min_v2_x_energy_request: Option<f64>,
3930 #[cfg_attr(feature = "serde", serde(rename = "evTargetEnergyRequest"))]
3934 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3935 pub ev_target_energy_request: Option<f64>,
3936 #[cfg_attr(feature = "serde", serde(rename = "maxChargeCurrent"))]
3940 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3941 pub max_charge_current: Option<f64>,
3942 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower"))]
3950 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3951 pub max_charge_power: Option<f64>,
3952 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower_L2"))]
3956 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3957 pub max_charge_power_l2: Option<f64>,
3958 #[cfg_attr(feature = "serde", serde(rename = "maxChargePower_L3"))]
3962 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3963 pub max_charge_power_l3: Option<f64>,
3964 #[cfg_attr(feature = "serde", serde(rename = "maxDischargeCurrent"))]
3968 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3969 pub max_discharge_current: Option<f64>,
3970 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower"))]
3975 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3976 pub max_discharge_power: Option<f64>,
3977 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower_L2"))]
3981 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3982 pub max_discharge_power_l2: Option<f64>,
3983 #[cfg_attr(feature = "serde", serde(rename = "maxDischargePower_L3"))]
3987 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3988 pub max_discharge_power_l3: Option<f64>,
3989 #[cfg_attr(feature = "serde", serde(rename = "maxVoltage"))]
3993 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
3994 pub max_voltage: Option<f64>,
3995 #[cfg_attr(feature = "serde", serde(rename = "minChargeCurrent"))]
3999 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4000 pub min_charge_current: Option<f64>,
4001 #[cfg_attr(feature = "serde", serde(rename = "minChargePower"))]
4006 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4007 pub min_charge_power: Option<f64>,
4008 #[cfg_attr(feature = "serde", serde(rename = "minChargePower_L2"))]
4012 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4013 pub min_charge_power_l2: Option<f64>,
4014 #[cfg_attr(feature = "serde", serde(rename = "minChargePower_L3"))]
4018 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4019 pub min_charge_power_l3: Option<f64>,
4020 #[cfg_attr(feature = "serde", serde(rename = "minDischargeCurrent"))]
4024 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4025 pub min_discharge_current: Option<f64>,
4026 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower"))]
4034 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4035 pub min_discharge_power: Option<f64>,
4036 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower_L2"))]
4040 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4041 pub min_discharge_power_l2: Option<f64>,
4042 #[cfg_attr(feature = "serde", serde(rename = "minDischargePower_L3"))]
4046 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4047 pub min_discharge_power_l3: Option<f64>,
4048 #[cfg_attr(feature = "serde", serde(rename = "minVoltage"))]
4052 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4053 pub min_voltage: Option<f64>,
4054 #[cfg_attr(feature = "serde", serde(rename = "targetSoC"))]
4058 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4059 pub target_so_c: Option<i64>,
4060}
4061#[cfg(feature = "alloc")]
4062#[derive(Debug, Clone, PartialEq)]
4063#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4064pub struct ChargingNeeds {
4065 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
4066 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4067 pub ac_charging_parameters: Option<ACChargingParameters>,
4068 #[cfg_attr(feature = "serde", serde(rename = "availableEnergyTransfer"))]
4070 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4071 pub available_energy_transfer: Option<alloc::vec::Vec<EnergyTransferModeEnum>>,
4072 #[cfg_attr(feature = "serde", serde(rename = "controlMode"))]
4073 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4074 pub control_mode: Option<ControlModeEnum>,
4075 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4076 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4077 pub custom_data: Option<CustomData>,
4078 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
4079 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4080 pub dc_charging_parameters: Option<DCChargingParameters>,
4081 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
4085 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4086 pub departure_time: Option<alloc::string::String>,
4087 #[cfg_attr(feature = "serde", serde(rename = "derChargingParameters"))]
4088 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4089 pub der_charging_parameters: Option<DERChargingParameters>,
4090 #[cfg_attr(feature = "serde", serde(rename = "evEnergyOffer"))]
4091 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4092 pub ev_energy_offer: Option<EVEnergyOffer>,
4093 #[cfg_attr(feature = "serde", serde(rename = "mobilityNeedsMode"))]
4094 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4095 pub mobility_needs_mode: Option<MobilityNeedsModeEnum>,
4096 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
4097 pub requested_energy_transfer: EnergyTransferModeEnum,
4098 #[cfg_attr(feature = "serde", serde(rename = "v2xChargingParameters"))]
4099 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4100 pub v2x_charging_parameters: Option<V2XChargingParameters>,
4101}
4102#[cfg(not(feature = "alloc"))]
4103#[derive(Debug, Clone, PartialEq)]
4104#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4105pub struct ChargingNeeds<
4106 const CHARGING_NEEDS_AVAILABLE_ENERGY_TRANSFER_CAP: usize = 16usize,
4107 const CHARGING_NEEDS_DEPARTURE_TIME_CAP: usize = 1024usize,
4108 const D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP: usize = 16usize,
4109 const D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP: usize = 16usize,
4110 const E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4111 const E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4112> {
4113 #[cfg_attr(feature = "serde", serde(rename = "acChargingParameters"))]
4114 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4115 pub ac_charging_parameters: Option<ACChargingParameters>,
4116 #[cfg_attr(feature = "serde", serde(rename = "availableEnergyTransfer"))]
4118 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4119 pub available_energy_transfer: Option<
4120 heapless::Vec<
4121 EnergyTransferModeEnum,
4122 CHARGING_NEEDS_AVAILABLE_ENERGY_TRANSFER_CAP,
4123 >,
4124 >,
4125 #[cfg_attr(feature = "serde", serde(rename = "controlMode"))]
4126 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4127 pub control_mode: Option<ControlModeEnum>,
4128 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4129 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4130 pub custom_data: Option<CustomData>,
4131 #[cfg_attr(feature = "serde", serde(rename = "dcChargingParameters"))]
4132 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4133 pub dc_charging_parameters: Option<DCChargingParameters>,
4134 #[cfg_attr(feature = "serde", serde(rename = "departureTime"))]
4138 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4139 pub departure_time: Option<heapless::String<CHARGING_NEEDS_DEPARTURE_TIME_CAP>>,
4140 #[cfg_attr(feature = "serde", serde(rename = "derChargingParameters"))]
4141 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4142 pub der_charging_parameters: Option<
4143 DERChargingParameters<
4144 D_E_R_CHARGING_PARAMETERS_EV_ISLANDING_DETECTION_METHOD_CAP,
4145 D_E_R_CHARGING_PARAMETERS_EV_SUPPORTED_D_E_R_CONTROL_CAP,
4146 >,
4147 >,
4148 #[cfg_attr(feature = "serde", serde(rename = "evEnergyOffer"))]
4149 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4150 pub ev_energy_offer: Option<
4151 EVEnergyOffer<
4152 E_V_ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP,
4153 E_V_POWER_SCHEDULE_TIME_ANCHOR_CAP,
4154 >,
4155 >,
4156 #[cfg_attr(feature = "serde", serde(rename = "mobilityNeedsMode"))]
4157 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4158 pub mobility_needs_mode: Option<MobilityNeedsModeEnum>,
4159 #[cfg_attr(feature = "serde", serde(rename = "requestedEnergyTransfer"))]
4160 pub requested_energy_transfer: EnergyTransferModeEnum,
4161 #[cfg_attr(feature = "serde", serde(rename = "v2xChargingParameters"))]
4162 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4163 pub v2x_charging_parameters: Option<V2XChargingParameters>,
4164}
4165#[derive(Debug, Clone, PartialEq, Eq)]
4167#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4168pub enum NotifyEVChargingNeedsStatusEnum {
4169 Accepted,
4170 Rejected,
4171 Processing,
4172 NoChargingProfile,
4173}
4174#[derive(Debug, Clone, PartialEq, Eq)]
4176#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4177pub enum EventNotificationEnum {
4178 HardWiredNotification,
4179 HardWiredMonitor,
4180 PreconfiguredMonitor,
4181 CustomMonitor,
4182}
4183#[derive(Debug, Clone, PartialEq, Eq)]
4185#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4186pub enum EventTriggerEnum {
4187 Alerting,
4188 Delta,
4189 Periodic,
4190}
4191#[cfg(feature = "alloc")]
4192#[derive(Debug, Clone, PartialEq, Eq)]
4194#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4195pub struct EventData {
4196 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
4200 pub actual_value: heapless::String<2500usize>,
4201 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4203 pub cause: Option<i64>,
4204 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4206 pub cleared: Option<bool>,
4207 pub component: Component,
4208 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4209 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4210 pub custom_data: Option<CustomData>,
4211 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
4213 pub event_id: i64,
4214 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4215 pub event_notification_type: EventNotificationEnum,
4216 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4218 pub severity: Option<i64>,
4219 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
4221 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4222 pub tech_code: Option<heapless::String<50usize>>,
4223 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
4225 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4226 pub tech_info: Option<heapless::String<500usize>>,
4227 pub timestamp: alloc::string::String,
4229 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4231 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4232 pub transaction_id: Option<heapless::String<36usize>>,
4233 pub trigger: EventTriggerEnum,
4234 pub variable: Variable,
4235 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
4237 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4238 pub variable_monitoring_id: Option<i64>,
4239}
4240#[cfg(not(feature = "alloc"))]
4241#[derive(Debug, Clone, PartialEq, Eq)]
4243#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4244pub struct EventData<const EVENT_DATA_TIMESTAMP_CAP: usize = 1024usize> {
4245 #[cfg_attr(feature = "serde", serde(rename = "actualValue"))]
4249 pub actual_value: heapless::String<2500usize>,
4250 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4252 pub cause: Option<i64>,
4253 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4255 pub cleared: Option<bool>,
4256 pub component: Component,
4257 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4258 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4259 pub custom_data: Option<CustomData>,
4260 #[cfg_attr(feature = "serde", serde(rename = "eventId"))]
4262 pub event_id: i64,
4263 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4264 pub event_notification_type: EventNotificationEnum,
4265 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4267 pub severity: Option<i64>,
4268 #[cfg_attr(feature = "serde", serde(rename = "techCode"))]
4270 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4271 pub tech_code: Option<heapless::String<50usize>>,
4272 #[cfg_attr(feature = "serde", serde(rename = "techInfo"))]
4274 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4275 pub tech_info: Option<heapless::String<500usize>>,
4276 pub timestamp: heapless::String<EVENT_DATA_TIMESTAMP_CAP>,
4278 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4280 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4281 pub transaction_id: Option<heapless::String<36usize>>,
4282 pub trigger: EventTriggerEnum,
4283 pub variable: Variable,
4284 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoringId"))]
4286 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4287 pub variable_monitoring_id: Option<i64>,
4288}
4289#[derive(Debug, Clone, PartialEq, Eq)]
4291#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4292pub enum MonitorEnum {
4293 UpperThreshold,
4294 LowerThreshold,
4295 Delta,
4296 Periodic,
4297 PeriodicClockAligned,
4298 TargetDelta,
4299 TargetDeltaRelative,
4300}
4301#[derive(Debug, Clone, PartialEq)]
4303#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4304pub struct VariableMonitoring {
4305 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4306 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4307 pub custom_data: Option<CustomData>,
4308 #[cfg_attr(feature = "serde", serde(rename = "eventNotificationType"))]
4309 pub event_notification_type: EventNotificationEnum,
4310 pub id: i64,
4312 pub severity: i64,
4336 pub transaction: bool,
4338 pub r#type: MonitorEnum,
4339 pub value: f64,
4342}
4343#[cfg(feature = "alloc")]
4344#[derive(Debug, Clone, PartialEq)]
4346#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4347pub struct MonitoringData {
4348 pub component: Component,
4349 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4350 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4351 pub custom_data: Option<CustomData>,
4352 pub variable: Variable,
4353 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
4354 pub variable_monitoring: alloc::vec::Vec<VariableMonitoring>,
4355}
4356#[cfg(not(feature = "alloc"))]
4357#[derive(Debug, Clone, PartialEq)]
4359#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4360pub struct MonitoringData<
4361 const MONITORING_DATA_VARIABLE_MONITORING_CAP: usize = 16usize,
4362> {
4363 pub component: Component,
4364 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4365 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4366 pub custom_data: Option<CustomData>,
4367 pub variable: Variable,
4368 #[cfg_attr(feature = "serde", serde(rename = "variableMonitoring"))]
4369 pub variable_monitoring: heapless::Vec<
4370 VariableMonitoring,
4371 MONITORING_DATA_VARIABLE_MONITORING_CAP,
4372 >,
4373}
4374#[derive(Debug, Clone, PartialEq)]
4375#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4376pub struct StreamDataElement {
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 pub t: f64,
4382 pub v: heapless::String<2500usize>,
4383}
4384#[derive(Debug, Clone, PartialEq, Eq)]
4386#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4387pub enum MutabilityEnum {
4388 ReadOnly,
4389 WriteOnly,
4390 ReadWrite,
4391}
4392#[derive(Debug, Clone, PartialEq, Eq)]
4394#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4395pub struct VariableAttribute {
4396 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4398 pub constant: Option<bool>,
4399 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4400 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4401 pub custom_data: Option<CustomData>,
4402 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4403 pub mutability: Option<MutabilityEnum>,
4404 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4406 pub persistent: Option<bool>,
4407 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4408 pub r#type: Option<AttributeEnum>,
4409 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4413 pub value: Option<heapless::String<2500usize>>,
4414}
4415#[derive(Debug, Clone, PartialEq, Eq)]
4417#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4418pub enum DataEnum {
4419 #[cfg_attr(feature = "serde", serde(rename = "string"))]
4420 String,
4421 #[cfg_attr(feature = "serde", serde(rename = "decimal"))]
4422 Decimal,
4423 #[cfg_attr(feature = "serde", serde(rename = "integer"))]
4424 Integer,
4425 #[cfg_attr(feature = "serde", serde(rename = "dateTime"))]
4426 DateTime,
4427 #[cfg_attr(feature = "serde", serde(rename = "boolean"))]
4428 Boolean,
4429 OptionList,
4430 SequenceList,
4431 MemberList,
4432}
4433#[derive(Debug, Clone, PartialEq)]
4435#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4436pub struct VariableCharacteristics {
4437 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4438 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4439 pub custom_data: Option<CustomData>,
4440 #[cfg_attr(feature = "serde", serde(rename = "dataType"))]
4441 pub data_type: DataEnum,
4442 #[cfg_attr(feature = "serde", serde(rename = "maxElements"))]
4444 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4445 pub max_elements: Option<i64>,
4446 #[cfg_attr(feature = "serde", serde(rename = "maxLimit"))]
4448 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4449 pub max_limit: Option<f64>,
4450 #[cfg_attr(feature = "serde", serde(rename = "minLimit"))]
4452 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4453 pub min_limit: Option<f64>,
4454 #[cfg_attr(feature = "serde", serde(rename = "supportsMonitoring"))]
4456 pub supports_monitoring: bool,
4457 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4459 pub unit: Option<heapless::String<16usize>>,
4460 #[cfg_attr(feature = "serde", serde(rename = "valuesList"))]
4474 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4475 pub values_list: Option<heapless::String<1000usize>>,
4476}
4477#[derive(Debug, Clone, PartialEq)]
4479#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4480pub struct ReportData {
4481 pub component: Component,
4482 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4483 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4484 pub custom_data: Option<CustomData>,
4485 pub variable: Variable,
4486 #[cfg_attr(feature = "serde", serde(rename = "variableAttribute"))]
4487 pub variable_attribute: heapless::Vec<VariableAttribute, 4usize>,
4488 #[cfg_attr(feature = "serde", serde(rename = "variableCharacteristics"))]
4489 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4490 pub variable_characteristics: Option<VariableCharacteristics>,
4491}
4492#[derive(Debug, Clone, PartialEq, Eq)]
4494#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4495pub enum PaymentStatusEnum {
4496 Settled,
4497 Canceled,
4498 Rejected,
4499 Failed,
4500}
4501#[derive(Debug, Clone, PartialEq, Eq)]
4503#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4504pub struct Address {
4505 pub address1: heapless::String<100usize>,
4507 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4509 pub address2: Option<heapless::String<100usize>>,
4510 pub city: heapless::String<100usize>,
4512 pub country: heapless::String<50usize>,
4514 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4515 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4516 pub custom_data: Option<CustomData>,
4517 pub name: heapless::String<50usize>,
4519 #[cfg_attr(feature = "serde", serde(rename = "postalCode"))]
4521 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4522 pub postal_code: Option<heapless::String<20usize>>,
4523}
4524#[derive(Debug, Clone, PartialEq, Eq)]
4527#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4528pub enum PublishFirmwareStatusEnum {
4529 Idle,
4530 DownloadScheduled,
4531 Downloading,
4532 Downloaded,
4533 Published,
4534 DownloadFailed,
4535 DownloadPaused,
4536 InvalidChecksum,
4537 ChecksumVerified,
4538 PublishFailed,
4539}
4540#[derive(Debug, Clone, PartialEq)]
4542#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4543pub struct ChargingScheduleUpdate {
4544 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4545 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4546 pub custom_data: Option<CustomData>,
4547 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit"))]
4550 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4551 pub discharge_limit: Option<f64>,
4552 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L2"))]
4554 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4555 pub discharge_limit_l2: Option<f64>,
4556 #[cfg_attr(feature = "serde", serde(rename = "dischargeLimit_L3"))]
4558 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4559 pub discharge_limit_l3: Option<f64>,
4560 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4565 pub limit: Option<f64>,
4566 #[cfg_attr(feature = "serde", serde(rename = "limit_L2"))]
4568 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4569 pub limit_l2: Option<f64>,
4570 #[cfg_attr(feature = "serde", serde(rename = "limit_L3"))]
4572 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4573 pub limit_l3: Option<f64>,
4574 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4578 pub setpoint: Option<f64>,
4579 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive"))]
4582 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4583 pub setpoint_reactive: Option<f64>,
4584 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L2"))]
4586 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4587 pub setpoint_reactive_l2: Option<f64>,
4588 #[cfg_attr(feature = "serde", serde(rename = "setpointReactive_L3"))]
4590 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4591 pub setpoint_reactive_l3: Option<f64>,
4592 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L2"))]
4594 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4595 pub setpoint_l2: Option<f64>,
4596 #[cfg_attr(feature = "serde", serde(rename = "setpoint_L3"))]
4598 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4599 pub setpoint_l3: Option<f64>,
4600}
4601#[derive(Debug, Clone, PartialEq, Eq)]
4603#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4604pub enum ChargingProfileStatusEnum {
4605 Accepted,
4606 Rejected,
4607}
4608#[derive(Debug, Clone, PartialEq, Eq)]
4610#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4611pub enum ChargingProfileKindEnum {
4612 Absolute,
4613 Recurring,
4614 Relative,
4615 Dynamic,
4616}
4617#[derive(Debug, Clone, PartialEq, Eq)]
4619#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4620pub enum RecurrencyKindEnum {
4621 Daily,
4622 Weekly,
4623}
4624#[cfg(feature = "alloc")]
4625#[derive(Debug, Clone, PartialEq)]
4629#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4630pub struct ChargingProfile {
4631 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
4632 pub charging_profile_kind: ChargingProfileKindEnum,
4633 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
4634 pub charging_profile_purpose: ChargingProfilePurposeEnum,
4635 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
4636 pub charging_schedule: heapless::Vec<ChargingSchedule, 3usize>,
4637 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4638 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4639 pub custom_data: Option<CustomData>,
4640 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateInterval"))]
4644 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4645 pub dyn_update_interval: Option<i64>,
4646 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateTime"))]
4649 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4650 pub dyn_update_time: Option<alloc::string::String>,
4651 pub id: i64,
4653 #[cfg_attr(feature = "serde", serde(rename = "invalidAfterOfflineDuration"))]
4656 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4657 pub invalid_after_offline_duration: Option<bool>,
4658 #[cfg_attr(feature = "serde", serde(rename = "maxOfflineDuration"))]
4662 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4663 pub max_offline_duration: Option<i64>,
4664 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleSignature"))]
4667 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4668 pub price_schedule_signature: Option<heapless::String<256usize>>,
4669 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
4670 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4671 pub recurrency_kind: Option<RecurrencyKindEnum>,
4672 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
4674 pub stack_level: i64,
4675 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4677 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4678 pub transaction_id: Option<heapless::String<36usize>>,
4679 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
4681 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4682 pub valid_from: Option<alloc::string::String>,
4683 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
4685 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4686 pub valid_to: Option<alloc::string::String>,
4687}
4688#[cfg(not(feature = "alloc"))]
4689#[derive(Debug, Clone, PartialEq)]
4693#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4694pub struct ChargingProfile<
4695 const ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4696 const PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP: usize = 1024usize,
4697 const CHARGING_SCHEDULE_START_SCHEDULE_CAP: usize = 1024usize,
4698 const CHARGING_PROFILE_DYN_UPDATE_TIME_CAP: usize = 1024usize,
4699 const CHARGING_PROFILE_VALID_FROM_CAP: usize = 1024usize,
4700 const CHARGING_PROFILE_VALID_TO_CAP: usize = 1024usize,
4701> {
4702 #[cfg_attr(feature = "serde", serde(rename = "chargingProfileKind"))]
4703 pub charging_profile_kind: ChargingProfileKindEnum,
4704 #[cfg_attr(feature = "serde", serde(rename = "chargingProfilePurpose"))]
4705 pub charging_profile_purpose: ChargingProfilePurposeEnum,
4706 #[cfg_attr(feature = "serde", serde(rename = "chargingSchedule"))]
4707 pub charging_schedule: heapless::Vec<
4708 ChargingSchedule<
4709 ABSOLUTE_PRICE_SCHEDULE_TIME_ANCHOR_CAP,
4710 PRICE_LEVEL_SCHEDULE_TIME_ANCHOR_CAP,
4711 CHARGING_SCHEDULE_START_SCHEDULE_CAP,
4712 >,
4713 3usize,
4714 >,
4715 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4716 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4717 pub custom_data: Option<CustomData>,
4718 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateInterval"))]
4722 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4723 pub dyn_update_interval: Option<i64>,
4724 #[cfg_attr(feature = "serde", serde(rename = "dynUpdateTime"))]
4727 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4728 pub dyn_update_time: Option<heapless::String<CHARGING_PROFILE_DYN_UPDATE_TIME_CAP>>,
4729 pub id: i64,
4731 #[cfg_attr(feature = "serde", serde(rename = "invalidAfterOfflineDuration"))]
4734 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4735 pub invalid_after_offline_duration: Option<bool>,
4736 #[cfg_attr(feature = "serde", serde(rename = "maxOfflineDuration"))]
4740 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4741 pub max_offline_duration: Option<i64>,
4742 #[cfg_attr(feature = "serde", serde(rename = "priceScheduleSignature"))]
4745 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4746 pub price_schedule_signature: Option<heapless::String<256usize>>,
4747 #[cfg_attr(feature = "serde", serde(rename = "recurrencyKind"))]
4748 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4749 pub recurrency_kind: Option<RecurrencyKindEnum>,
4750 #[cfg_attr(feature = "serde", serde(rename = "stackLevel"))]
4752 pub stack_level: i64,
4753 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
4755 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4756 pub transaction_id: Option<heapless::String<36usize>>,
4757 #[cfg_attr(feature = "serde", serde(rename = "validFrom"))]
4759 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4760 pub valid_from: Option<heapless::String<CHARGING_PROFILE_VALID_FROM_CAP>>,
4761 #[cfg_attr(feature = "serde", serde(rename = "validTo"))]
4763 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4764 pub valid_to: Option<heapless::String<CHARGING_PROFILE_VALID_TO_CAP>>,
4765}
4766#[derive(Debug, Clone, PartialEq)]
4767#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4768pub struct DERCurvePoints {
4769 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4770 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4771 pub custom_data: Option<CustomData>,
4772 pub x: f64,
4774 pub y: f64,
4776}
4777#[derive(Debug, Clone, PartialEq)]
4778#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4779pub struct Hysteresis {
4780 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4781 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4782 pub custom_data: Option<CustomData>,
4783 #[cfg_attr(feature = "serde", serde(rename = "hysteresisDelay"))]
4785 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4786 pub hysteresis_delay: Option<f64>,
4787 #[cfg_attr(feature = "serde", serde(rename = "hysteresisGradient"))]
4789 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4790 pub hysteresis_gradient: Option<f64>,
4791 #[cfg_attr(feature = "serde", serde(rename = "hysteresisHigh"))]
4793 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4794 pub hysteresis_high: Option<f64>,
4795 #[cfg_attr(feature = "serde", serde(rename = "hysteresisLow"))]
4797 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4798 pub hysteresis_low: Option<f64>,
4799}
4800#[derive(Debug, Clone, PartialEq)]
4801#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4802pub struct ReactivePowerParams {
4803 #[cfg_attr(feature = "serde", serde(rename = "autonomousVRefEnable"))]
4805 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4806 pub autonomous_v_ref_enable: Option<bool>,
4807 #[cfg_attr(feature = "serde", serde(rename = "autonomousVRefTimeConstant"))]
4809 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4810 pub autonomous_v_ref_time_constant: Option<f64>,
4811 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4812 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4813 pub custom_data: Option<CustomData>,
4814 #[cfg_attr(feature = "serde", serde(rename = "vRef"))]
4816 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4817 pub v_ref: Option<f64>,
4818}
4819#[derive(Debug, Clone, PartialEq, Eq)]
4821#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4822pub enum PowerDuringCessationEnum {
4823 Active,
4824 Reactive,
4825}
4826#[derive(Debug, Clone, PartialEq)]
4827#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4828pub struct VoltageParams {
4829 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4830 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4831 pub custom_data: Option<CustomData>,
4832 #[cfg_attr(feature = "serde", serde(rename = "hv10MinMeanTripDelay"))]
4836 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4837 pub hv10_min_mean_trip_delay: Option<f64>,
4838 #[cfg_attr(feature = "serde", serde(rename = "hv10MinMeanValue"))]
4844 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4845 pub hv10_min_mean_value: Option<f64>,
4846 #[cfg_attr(feature = "serde", serde(rename = "powerDuringCessation"))]
4847 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4848 pub power_during_cessation: Option<PowerDuringCessationEnum>,
4849}
4850#[derive(Debug, Clone, PartialEq, Eq)]
4852#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4853pub enum DERUnitEnum {
4854 #[cfg_attr(feature = "serde", serde(rename = "Not_Applicable"))]
4855 NotApplicable,
4856 PctMaxW,
4857 PctMaxVar,
4858 PctWAvail,
4859 PctVarAvail,
4860 PctEffectiveV,
4861}
4862#[cfg(feature = "alloc")]
4863#[derive(Debug, Clone, PartialEq)]
4864#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4865pub struct DERCurve {
4866 #[cfg_attr(feature = "serde", serde(rename = "curveData"))]
4867 pub curve_data: heapless::Vec<DERCurvePoints, 10usize>,
4868 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4869 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4870 pub custom_data: Option<CustomData>,
4871 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4873 pub duration: Option<f64>,
4874 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4875 pub hysteresis: Option<Hysteresis>,
4876 pub priority: i64,
4878 #[cfg_attr(feature = "serde", serde(rename = "reactivePowerParams"))]
4879 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4880 pub reactive_power_params: Option<ReactivePowerParams>,
4881 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
4883 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4884 pub response_time: Option<f64>,
4885 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
4887 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4888 pub start_time: Option<alloc::string::String>,
4889 #[cfg_attr(feature = "serde", serde(rename = "voltageParams"))]
4890 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4891 pub voltage_params: Option<VoltageParams>,
4892 #[cfg_attr(feature = "serde", serde(rename = "yUnit"))]
4893 pub y_unit: DERUnitEnum,
4894}
4895#[cfg(not(feature = "alloc"))]
4896#[derive(Debug, Clone, PartialEq)]
4897#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4898pub struct DERCurve<const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize> {
4899 #[cfg_attr(feature = "serde", serde(rename = "curveData"))]
4900 pub curve_data: heapless::Vec<DERCurvePoints, 10usize>,
4901 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4902 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4903 pub custom_data: Option<CustomData>,
4904 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4906 pub duration: Option<f64>,
4907 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4908 pub hysteresis: Option<Hysteresis>,
4909 pub priority: i64,
4911 #[cfg_attr(feature = "serde", serde(rename = "reactivePowerParams"))]
4912 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4913 pub reactive_power_params: Option<ReactivePowerParams>,
4914 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
4916 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4917 pub response_time: Option<f64>,
4918 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
4920 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4921 pub start_time: Option<heapless::String<D_E_R_CURVE_START_TIME_CAP>>,
4922 #[cfg_attr(feature = "serde", serde(rename = "voltageParams"))]
4923 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4924 pub voltage_params: Option<VoltageParams>,
4925 #[cfg_attr(feature = "serde", serde(rename = "yUnit"))]
4926 pub y_unit: DERUnitEnum,
4927}
4928#[cfg(feature = "alloc")]
4929#[derive(Debug, Clone, PartialEq)]
4930#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4931pub struct DERCurveGet {
4932 pub curve: DERCurve,
4933 #[cfg_attr(feature = "serde", serde(rename = "curveType"))]
4934 pub curve_type: DERControlEnum,
4935 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4936 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4937 pub custom_data: Option<CustomData>,
4938 pub id: heapless::String<36usize>,
4940 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
4942 pub is_default: bool,
4943 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
4945 pub is_superseded: bool,
4946}
4947#[cfg(not(feature = "alloc"))]
4948#[derive(Debug, Clone, PartialEq)]
4949#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4950pub struct DERCurveGet<const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize> {
4951 pub curve: DERCurve<D_E_R_CURVE_START_TIME_CAP>,
4952 #[cfg_attr(feature = "serde", serde(rename = "curveType"))]
4953 pub curve_type: DERControlEnum,
4954 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4955 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4956 pub custom_data: Option<CustomData>,
4957 pub id: heapless::String<36usize>,
4959 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
4961 pub is_default: bool,
4962 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
4964 pub is_superseded: bool,
4965}
4966#[derive(Debug, Clone, PartialEq)]
4967#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4968pub struct EnterService {
4969 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
4970 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4971 pub custom_data: Option<CustomData>,
4972 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4974 pub delay: Option<f64>,
4975 #[cfg_attr(feature = "serde", serde(rename = "highFreq"))]
4977 pub high_freq: f64,
4978 #[cfg_attr(feature = "serde", serde(rename = "highVoltage"))]
4980 pub high_voltage: f64,
4981 #[cfg_attr(feature = "serde", serde(rename = "lowFreq"))]
4983 pub low_freq: f64,
4984 #[cfg_attr(feature = "serde", serde(rename = "lowVoltage"))]
4986 pub low_voltage: f64,
4987 pub priority: i64,
4989 #[cfg_attr(feature = "serde", serde(rename = "rampRate"))]
4991 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4992 pub ramp_rate: Option<f64>,
4993 #[cfg_attr(feature = "serde", serde(rename = "randomDelay"))]
4995 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
4996 pub random_delay: Option<f64>,
4997}
4998#[derive(Debug, Clone, PartialEq)]
4999#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5000pub struct EnterServiceGet {
5001 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5002 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5003 pub custom_data: Option<CustomData>,
5004 #[cfg_attr(feature = "serde", serde(rename = "enterService"))]
5005 pub enter_service: EnterService,
5006 pub id: heapless::String<36usize>,
5008}
5009#[cfg(feature = "alloc")]
5010#[derive(Debug, Clone, PartialEq)]
5011#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5012pub struct FixedPF {
5013 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5014 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5015 pub custom_data: Option<CustomData>,
5016 pub displacement: f64,
5018 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5020 pub duration: Option<f64>,
5021 pub excitation: bool,
5023 pub priority: i64,
5025 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5027 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5028 pub start_time: Option<alloc::string::String>,
5029}
5030#[cfg(not(feature = "alloc"))]
5031#[derive(Debug, Clone, PartialEq)]
5032#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5033pub struct FixedPF<const FIXED_P_F_START_TIME_CAP: usize = 1024usize> {
5034 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5035 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5036 pub custom_data: Option<CustomData>,
5037 pub displacement: f64,
5039 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5041 pub duration: Option<f64>,
5042 pub excitation: bool,
5044 pub priority: i64,
5046 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5048 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5049 pub start_time: Option<heapless::String<FIXED_P_F_START_TIME_CAP>>,
5050}
5051#[cfg(feature = "alloc")]
5052#[derive(Debug, Clone, PartialEq)]
5053#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5054pub struct FixedPFGet {
5055 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5056 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5057 pub custom_data: Option<CustomData>,
5058 #[cfg_attr(feature = "serde", serde(rename = "fixedPF"))]
5059 pub fixed_p_f: FixedPF,
5060 pub id: heapless::String<36usize>,
5062 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5064 pub is_default: bool,
5065 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5067 pub is_superseded: bool,
5068}
5069#[cfg(not(feature = "alloc"))]
5070#[derive(Debug, Clone, PartialEq)]
5071#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5072pub struct FixedPFGet<const FIXED_P_F_START_TIME_CAP: usize = 1024usize> {
5073 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5074 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5075 pub custom_data: Option<CustomData>,
5076 #[cfg_attr(feature = "serde", serde(rename = "fixedPF"))]
5077 pub fixed_p_f: FixedPF<FIXED_P_F_START_TIME_CAP>,
5078 pub id: heapless::String<36usize>,
5080 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5082 pub is_default: bool,
5083 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5085 pub is_superseded: bool,
5086}
5087#[cfg(feature = "alloc")]
5088#[derive(Debug, Clone, PartialEq)]
5089#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5090pub struct FixedVar {
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<alloc::string::String>,
5107 pub unit: DERUnitEnum,
5108}
5109#[cfg(not(feature = "alloc"))]
5110#[derive(Debug, Clone, PartialEq)]
5111#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5112pub struct FixedVar<const FIXED_VAR_START_TIME_CAP: usize = 1024usize> {
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(skip_serializing_if = "Option::is_none"))]
5118 pub duration: Option<f64>,
5119 pub priority: i64,
5121 pub setpoint: f64,
5125 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5127 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5128 pub start_time: Option<heapless::String<FIXED_VAR_START_TIME_CAP>>,
5129 pub unit: DERUnitEnum,
5130}
5131#[cfg(feature = "alloc")]
5132#[derive(Debug, Clone, PartialEq)]
5133#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5134pub struct FixedVarGet {
5135 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5136 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5137 pub custom_data: Option<CustomData>,
5138 #[cfg_attr(feature = "serde", serde(rename = "fixedVar"))]
5139 pub fixed_var: FixedVar,
5140 pub id: heapless::String<36usize>,
5142 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5144 pub is_default: bool,
5145 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5147 pub is_superseded: bool,
5148}
5149#[cfg(not(feature = "alloc"))]
5150#[derive(Debug, Clone, PartialEq)]
5151#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5152pub struct FixedVarGet<const FIXED_VAR_START_TIME_CAP: usize = 1024usize> {
5153 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5154 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5155 pub custom_data: Option<CustomData>,
5156 #[cfg_attr(feature = "serde", serde(rename = "fixedVar"))]
5157 pub fixed_var: FixedVar<FIXED_VAR_START_TIME_CAP>,
5158 pub id: heapless::String<36usize>,
5160 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5162 pub is_default: bool,
5163 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5165 pub is_superseded: bool,
5166}
5167#[cfg(feature = "alloc")]
5168#[derive(Debug, Clone, PartialEq)]
5169#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5170pub struct FreqDroop {
5171 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5172 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5173 pub custom_data: Option<CustomData>,
5174 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5176 pub duration: Option<f64>,
5177 #[cfg_attr(feature = "serde", serde(rename = "overDroop"))]
5179 pub over_droop: f64,
5180 #[cfg_attr(feature = "serde", serde(rename = "overFreq"))]
5182 pub over_freq: f64,
5183 pub priority: i64,
5185 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
5187 pub response_time: f64,
5188 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5190 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5191 pub start_time: Option<alloc::string::String>,
5192 #[cfg_attr(feature = "serde", serde(rename = "underDroop"))]
5194 pub under_droop: f64,
5195 #[cfg_attr(feature = "serde", serde(rename = "underFreq"))]
5197 pub under_freq: f64,
5198}
5199#[cfg(not(feature = "alloc"))]
5200#[derive(Debug, Clone, PartialEq)]
5201#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5202pub struct FreqDroop<const FREQ_DROOP_START_TIME_CAP: usize = 1024usize> {
5203 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5204 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5205 pub custom_data: Option<CustomData>,
5206 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5208 pub duration: Option<f64>,
5209 #[cfg_attr(feature = "serde", serde(rename = "overDroop"))]
5211 pub over_droop: f64,
5212 #[cfg_attr(feature = "serde", serde(rename = "overFreq"))]
5214 pub over_freq: f64,
5215 pub priority: i64,
5217 #[cfg_attr(feature = "serde", serde(rename = "responseTime"))]
5219 pub response_time: f64,
5220 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5222 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5223 pub start_time: Option<heapless::String<FREQ_DROOP_START_TIME_CAP>>,
5224 #[cfg_attr(feature = "serde", serde(rename = "underDroop"))]
5226 pub under_droop: f64,
5227 #[cfg_attr(feature = "serde", serde(rename = "underFreq"))]
5229 pub under_freq: f64,
5230}
5231#[cfg(feature = "alloc")]
5232#[derive(Debug, Clone, PartialEq)]
5233#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5234pub struct FreqDroopGet {
5235 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5236 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5237 pub custom_data: Option<CustomData>,
5238 #[cfg_attr(feature = "serde", serde(rename = "freqDroop"))]
5239 pub freq_droop: FreqDroop,
5240 pub id: heapless::String<36usize>,
5242 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5244 pub is_default: bool,
5245 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5247 pub is_superseded: bool,
5248}
5249#[cfg(not(feature = "alloc"))]
5250#[derive(Debug, Clone, PartialEq)]
5251#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5252pub struct FreqDroopGet<const FREQ_DROOP_START_TIME_CAP: usize = 1024usize> {
5253 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5254 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5255 pub custom_data: Option<CustomData>,
5256 #[cfg_attr(feature = "serde", serde(rename = "freqDroop"))]
5257 pub freq_droop: FreqDroop<FREQ_DROOP_START_TIME_CAP>,
5258 pub id: heapless::String<36usize>,
5260 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5262 pub is_default: bool,
5263 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5265 pub is_superseded: bool,
5266}
5267#[derive(Debug, Clone, PartialEq)]
5268#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5269pub struct Gradient {
5270 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5271 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5272 pub custom_data: Option<CustomData>,
5273 pub gradient: f64,
5275 pub priority: i64,
5277 #[cfg_attr(feature = "serde", serde(rename = "softGradient"))]
5279 pub soft_gradient: f64,
5280}
5281#[derive(Debug, Clone, PartialEq)]
5282#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5283pub struct GradientGet {
5284 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5285 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5286 pub custom_data: Option<CustomData>,
5287 pub gradient: Gradient,
5288 pub id: heapless::String<36usize>,
5290}
5291#[cfg(feature = "alloc")]
5292#[derive(Debug, Clone, PartialEq)]
5293#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5294pub struct LimitMaxDischarge {
5295 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5296 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5297 pub custom_data: Option<CustomData>,
5298 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5300 pub duration: Option<f64>,
5301 #[cfg_attr(feature = "serde", serde(rename = "pctMaxDischargePower"))]
5305 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5306 pub pct_max_discharge_power: Option<f64>,
5307 #[cfg_attr(feature = "serde", serde(rename = "powerMonitoringMustTrip"))]
5308 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5309 pub power_monitoring_must_trip: Option<DERCurve>,
5310 pub priority: i64,
5312 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5314 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5315 pub start_time: Option<alloc::string::String>,
5316}
5317#[cfg(not(feature = "alloc"))]
5318#[derive(Debug, Clone, PartialEq)]
5319#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5320pub struct LimitMaxDischarge<
5321 const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize,
5322 const LIMIT_MAX_DISCHARGE_START_TIME_CAP: usize = 1024usize,
5323> {
5324 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5325 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5326 pub custom_data: Option<CustomData>,
5327 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5329 pub duration: Option<f64>,
5330 #[cfg_attr(feature = "serde", serde(rename = "pctMaxDischargePower"))]
5334 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5335 pub pct_max_discharge_power: Option<f64>,
5336 #[cfg_attr(feature = "serde", serde(rename = "powerMonitoringMustTrip"))]
5337 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5338 pub power_monitoring_must_trip: Option<DERCurve<D_E_R_CURVE_START_TIME_CAP>>,
5339 pub priority: i64,
5341 #[cfg_attr(feature = "serde", serde(rename = "startTime"))]
5343 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5344 pub start_time: Option<heapless::String<LIMIT_MAX_DISCHARGE_START_TIME_CAP>>,
5345}
5346#[cfg(feature = "alloc")]
5347#[derive(Debug, Clone, PartialEq)]
5348#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5349pub struct LimitMaxDischargeGet {
5350 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5351 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5352 pub custom_data: Option<CustomData>,
5353 pub id: heapless::String<36usize>,
5355 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5357 pub is_default: bool,
5358 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5360 pub is_superseded: bool,
5361 #[cfg_attr(feature = "serde", serde(rename = "limitMaxDischarge"))]
5362 pub limit_max_discharge: LimitMaxDischarge,
5363}
5364#[cfg(not(feature = "alloc"))]
5365#[derive(Debug, Clone, PartialEq)]
5366#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5367pub struct LimitMaxDischargeGet<
5368 const D_E_R_CURVE_START_TIME_CAP: usize = 1024usize,
5369 const LIMIT_MAX_DISCHARGE_START_TIME_CAP: usize = 1024usize,
5370> {
5371 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5372 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5373 pub custom_data: Option<CustomData>,
5374 pub id: heapless::String<36usize>,
5376 #[cfg_attr(feature = "serde", serde(rename = "isDefault"))]
5378 pub is_default: bool,
5379 #[cfg_attr(feature = "serde", serde(rename = "isSuperseded"))]
5381 pub is_superseded: bool,
5382 #[cfg_attr(feature = "serde", serde(rename = "limitMaxDischarge"))]
5383 pub limit_max_discharge: LimitMaxDischarge<
5384 D_E_R_CURVE_START_TIME_CAP,
5385 LIMIT_MAX_DISCHARGE_START_TIME_CAP,
5386 >,
5387}
5388#[derive(Debug, Clone, PartialEq, Eq)]
5390#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5391pub enum RequestStartStopStatusEnum {
5392 Accepted,
5393 Rejected,
5394}
5395#[derive(Debug, Clone, PartialEq, Eq)]
5397#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5398pub enum ReservationUpdateStatusEnum {
5399 Expired,
5400 Removed,
5401 NoTransaction,
5402}
5403#[derive(Debug, Clone, PartialEq, Eq)]
5405#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5406pub enum ReserveNowStatusEnum {
5407 Accepted,
5408 Faulted,
5409 Occupied,
5410 Rejected,
5411 Unavailable,
5412}
5413#[derive(Debug, Clone, PartialEq, Eq)]
5415#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5416pub enum ResetEnum {
5417 Immediate,
5418 OnIdle,
5419 ImmediateAndResume,
5420}
5421#[derive(Debug, Clone, PartialEq, Eq)]
5423#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5424pub enum ResetStatusEnum {
5425 Accepted,
5426 Rejected,
5427 Scheduled,
5428}
5429#[cfg(feature = "alloc")]
5430#[derive(Debug, Clone, PartialEq, Eq)]
5432#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5433pub struct AuthorizationData {
5434 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5435 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5436 pub custom_data: Option<CustomData>,
5437 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
5438 pub id_token: IdToken,
5439 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
5440 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5441 pub id_token_info: Option<IdTokenInfo>,
5442}
5443#[cfg(not(feature = "alloc"))]
5444#[derive(Debug, Clone, PartialEq, Eq)]
5446#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5447pub struct AuthorizationData<
5448 const ID_TOKEN_ADDITIONAL_INFO_CAP: usize = 16usize,
5449 const ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP: usize = 1024usize,
5450 const ID_TOKEN_INFO_EVSE_ID_CAP: usize = 16usize,
5451> {
5452 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5453 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5454 pub custom_data: Option<CustomData>,
5455 #[cfg_attr(feature = "serde", serde(rename = "idToken"))]
5456 pub id_token: IdToken<ID_TOKEN_ADDITIONAL_INFO_CAP>,
5457 #[cfg_attr(feature = "serde", serde(rename = "idTokenInfo"))]
5458 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5459 pub id_token_info: Option<
5460 IdTokenInfo<
5461 ID_TOKEN_INFO_CACHE_EXPIRY_DATE_TIME_CAP,
5462 ID_TOKEN_INFO_EVSE_ID_CAP,
5463 ID_TOKEN_ADDITIONAL_INFO_CAP,
5464 >,
5465 >,
5466}
5467#[derive(Debug, Clone, PartialEq, Eq)]
5469#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5470pub enum UpdateEnum {
5471 Differential,
5472 Full,
5473}
5474#[derive(Debug, Clone, PartialEq, Eq)]
5476#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5477pub enum SendLocalListStatusEnum {
5478 Accepted,
5479 Failed,
5480 VersionMismatch,
5481}
5482#[derive(Debug, Clone, PartialEq, Eq)]
5483#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5484pub enum TariffSetStatusEnum {
5485 Accepted,
5486 Rejected,
5487 TooManyElements,
5488 ConditionNotSupported,
5489 DuplicateTariffId,
5490}
5491#[derive(Debug, Clone, PartialEq, Eq)]
5493#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5494pub enum DisplayMessageStatusEnum {
5495 Accepted,
5496 NotSupportedMessageFormat,
5497 Rejected,
5498 NotSupportedPriority,
5499 NotSupportedState,
5500 UnknownTransaction,
5501 LanguageNotSupported,
5502}
5503#[derive(Debug, Clone, PartialEq, Eq)]
5505#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5506pub enum MonitoringBaseEnum {
5507 All,
5508 FactoryDefault,
5509 HardWiredOnly,
5510}
5511#[derive(Debug, Clone, PartialEq, Eq)]
5513#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5514pub enum APNAuthenticationEnum {
5515 PAP,
5516 CHAP,
5517 NONE,
5518 AUTO,
5519}
5520#[derive(Debug, Clone, PartialEq, Eq)]
5524#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5525pub struct APN {
5526 pub apn: heapless::String<2000usize>,
5528 #[cfg_attr(feature = "serde", serde(rename = "apnAuthentication"))]
5529 pub apn_authentication: APNAuthenticationEnum,
5530 #[cfg_attr(feature = "serde", serde(rename = "apnPassword"))]
5532 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5533 pub apn_password: Option<heapless::String<64usize>>,
5534 #[cfg_attr(feature = "serde", serde(rename = "apnUserName"))]
5536 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5537 pub apn_user_name: Option<heapless::String<50usize>>,
5538 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5539 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5540 pub custom_data: Option<CustomData>,
5541 #[cfg_attr(feature = "serde", serde(rename = "preferredNetwork"))]
5543 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5544 pub preferred_network: Option<heapless::String<6usize>>,
5545 #[cfg_attr(feature = "serde", serde(rename = "simPin"))]
5547 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5548 pub sim_pin: Option<i64>,
5549 #[cfg_attr(feature = "serde", serde(rename = "useOnlyPreferredNetwork"))]
5552 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5553 pub use_only_preferred_network: Option<bool>,
5554}
5555#[derive(Debug, Clone, PartialEq, Eq)]
5557#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5558pub enum OCPPInterfaceEnum {
5559 Wired0,
5560 Wired1,
5561 Wired2,
5562 Wired3,
5563 Wireless0,
5564 Wireless1,
5565 Wireless2,
5566 Wireless3,
5567 Any,
5568}
5569#[derive(Debug, Clone, PartialEq, Eq)]
5571#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5572pub enum OCPPTransportEnum {
5573 SOAP,
5574 JSON,
5575}
5576#[derive(Debug, Clone, PartialEq, Eq)]
5578#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5579pub enum OCPPVersionEnum {
5580 OCPP12,
5581 OCPP15,
5582 OCPP16,
5583 OCPP20,
5584 OCPP201,
5585 OCPP21,
5586}
5587#[derive(Debug, Clone, PartialEq, Eq)]
5589#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5590pub enum VPNEnum {
5591 IKEv2,
5592 IPSec,
5593 L2TP,
5594 PPTP,
5595}
5596#[derive(Debug, Clone, PartialEq, Eq)]
5598#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5599pub struct VPN {
5600 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5601 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5602 pub custom_data: Option<CustomData>,
5603 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5605 pub group: Option<heapless::String<50usize>>,
5606 pub key: heapless::String<255usize>,
5608 pub password: heapless::String<64usize>,
5610 pub server: heapless::String<2000usize>,
5612 pub r#type: VPNEnum,
5613 pub user: heapless::String<50usize>,
5615}
5616#[derive(Debug, Clone, PartialEq, Eq)]
5618#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5619pub struct NetworkConnectionProfile {
5620 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5621 pub apn: Option<APN>,
5622 #[cfg_attr(feature = "serde", serde(rename = "basicAuthPassword"))]
5624 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5625 pub basic_auth_password: Option<heapless::String<64usize>>,
5626 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5627 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5628 pub custom_data: Option<CustomData>,
5629 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5631 pub identity: Option<heapless::String<48usize>>,
5632 #[cfg_attr(feature = "serde", serde(rename = "messageTimeout"))]
5636 pub message_timeout: i64,
5637 #[cfg_attr(feature = "serde", serde(rename = "ocppCsmsUrl"))]
5640 pub ocpp_csms_url: heapless::String<2000usize>,
5641 #[cfg_attr(feature = "serde", serde(rename = "ocppInterface"))]
5642 pub ocpp_interface: OCPPInterfaceEnum,
5643 #[cfg_attr(feature = "serde", serde(rename = "ocppTransport"))]
5644 pub ocpp_transport: OCPPTransportEnum,
5645 #[cfg_attr(feature = "serde", serde(rename = "ocppVersion"))]
5646 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5647 pub ocpp_version: Option<OCPPVersionEnum>,
5648 #[cfg_attr(feature = "serde", serde(rename = "securityProfile"))]
5650 pub security_profile: i64,
5651 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5652 pub vpn: Option<VPN>,
5653}
5654#[derive(Debug, Clone, PartialEq, Eq)]
5656#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5657pub enum SetNetworkProfileStatusEnum {
5658 Accepted,
5659 Rejected,
5660 Failed,
5661}
5662#[derive(Debug, Clone, PartialEq)]
5664#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5665pub struct SetMonitoringData {
5666 pub component: Component,
5667 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5668 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5669 pub custom_data: Option<CustomData>,
5670 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5672 pub id: Option<i64>,
5673 #[cfg_attr(feature = "serde", serde(rename = "periodicEventStream"))]
5674 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5675 pub periodic_event_stream: Option<PeriodicEventStreamParams>,
5676 pub severity: i64,
5700 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5702 pub transaction: Option<bool>,
5703 pub r#type: MonitorEnum,
5704 pub value: f64,
5707 pub variable: Variable,
5708}
5709#[derive(Debug, Clone, PartialEq, Eq)]
5711#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5712pub enum SetMonitoringStatusEnum {
5713 Accepted,
5714 UnknownComponent,
5715 UnknownVariable,
5716 UnsupportedMonitorType,
5717 Rejected,
5718 Duplicate,
5719}
5720#[derive(Debug, Clone, PartialEq, Eq)]
5722#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5723pub struct SetMonitoringResult {
5724 pub component: Component,
5725 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5726 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5727 pub custom_data: Option<CustomData>,
5728 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5730 pub id: Option<i64>,
5731 pub severity: i64,
5755 pub status: SetMonitoringStatusEnum,
5756 #[cfg_attr(feature = "serde", serde(rename = "statusInfo"))]
5757 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5758 pub status_info: Option<StatusInfo>,
5759 pub r#type: MonitorEnum,
5760 pub variable: Variable,
5761}
5762#[derive(Debug, Clone, PartialEq, Eq)]
5763#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5764pub struct SetVariableData {
5765 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5766 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5767 pub attribute_type: Option<AttributeEnum>,
5768 #[cfg_attr(feature = "serde", serde(rename = "attributeValue"))]
5773 pub attribute_value: heapless::String<2500usize>,
5774 pub component: Component,
5775 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5776 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5777 pub custom_data: Option<CustomData>,
5778 pub variable: Variable,
5779}
5780#[derive(Debug, Clone, PartialEq, Eq)]
5782#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5783pub enum SetVariableStatusEnum {
5784 Accepted,
5785 Rejected,
5786 UnknownComponent,
5787 UnknownVariable,
5788 NotSupportedAttributeType,
5789 RebootRequired,
5790}
5791#[derive(Debug, Clone, PartialEq, Eq)]
5792#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5793pub struct SetVariableResult {
5794 #[cfg_attr(feature = "serde", serde(rename = "attributeStatus"))]
5795 pub attribute_status: SetVariableStatusEnum,
5796 #[cfg_attr(feature = "serde", serde(rename = "attributeStatusInfo"))]
5797 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5798 pub attribute_status_info: Option<StatusInfo>,
5799 #[cfg_attr(feature = "serde", serde(rename = "attributeType"))]
5800 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5801 pub attribute_type: Option<AttributeEnum>,
5802 pub component: Component,
5803 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5804 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5805 pub custom_data: Option<CustomData>,
5806 pub variable: Variable,
5807}
5808#[derive(Debug, Clone, PartialEq, Eq)]
5810#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5811pub enum ConnectorStatusEnum {
5812 Available,
5813 Occupied,
5814 Reserved,
5815 Unavailable,
5816 Faulted,
5817}
5818#[derive(Debug, Clone, PartialEq, Eq)]
5820#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5821pub enum CostDimensionEnum {
5822 Energy,
5823 MaxCurrent,
5824 MinCurrent,
5825 MaxPower,
5826 MinPower,
5827 IdleTIme,
5828 ChargingTime,
5829}
5830#[derive(Debug, Clone, PartialEq)]
5832#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5833pub struct CostDimension {
5834 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5835 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5836 pub custom_data: Option<CustomData>,
5837 pub r#type: CostDimensionEnum,
5838 pub volume: f64,
5840}
5841#[cfg(feature = "alloc")]
5842#[derive(Debug, Clone, PartialEq)]
5844#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5845pub struct ChargingPeriod {
5846 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5847 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5848 pub custom_data: Option<CustomData>,
5849 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5850 pub dimensions: Option<alloc::vec::Vec<CostDimension>>,
5851 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
5853 pub start_period: alloc::string::String,
5854 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
5856 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5857 pub tariff_id: Option<heapless::String<60usize>>,
5858}
5859#[cfg(not(feature = "alloc"))]
5860#[derive(Debug, Clone, PartialEq)]
5862#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5863pub struct ChargingPeriod<
5864 const CHARGING_PERIOD_DIMENSIONS_CAP: usize = 16usize,
5865 const CHARGING_PERIOD_START_PERIOD_CAP: usize = 1024usize,
5866> {
5867 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5868 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5869 pub custom_data: Option<CustomData>,
5870 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5871 pub dimensions: Option<heapless::Vec<CostDimension, CHARGING_PERIOD_DIMENSIONS_CAP>>,
5872 #[cfg_attr(feature = "serde", serde(rename = "startPeriod"))]
5874 pub start_period: heapless::String<CHARGING_PERIOD_START_PERIOD_CAP>,
5875 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
5877 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5878 pub tariff_id: Option<heapless::String<60usize>>,
5879}
5880#[derive(Debug, Clone, PartialEq)]
5882#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5883pub struct TotalPrice {
5884 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5885 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5886 pub custom_data: Option<CustomData>,
5887 #[cfg_attr(feature = "serde", serde(rename = "exclTax"))]
5889 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5890 pub excl_tax: Option<f64>,
5891 #[cfg_attr(feature = "serde", serde(rename = "inclTax"))]
5893 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5894 pub incl_tax: Option<f64>,
5895}
5896#[derive(Debug, Clone, PartialEq, Eq)]
5898#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5899pub enum TariffCostEnum {
5900 NormalCost,
5901 MinCost,
5902 MaxCost,
5903}
5904#[derive(Debug, Clone, PartialEq)]
5906#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5907pub struct TotalCost {
5908 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
5909 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5910 pub charging_time: Option<Price>,
5911 pub currency: heapless::String<3usize>,
5913 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5914 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5915 pub custom_data: Option<CustomData>,
5916 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5917 pub energy: Option<Price>,
5918 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5919 pub fixed: Option<Price>,
5920 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
5921 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5922 pub idle_time: Option<Price>,
5923 #[cfg_attr(feature = "serde", serde(rename = "reservationFixed"))]
5924 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5925 pub reservation_fixed: Option<Price>,
5926 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
5927 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5928 pub reservation_time: Option<Price>,
5929 pub total: TotalPrice,
5930 #[cfg_attr(feature = "serde", serde(rename = "typeOfCost"))]
5931 pub type_of_cost: TariffCostEnum,
5932}
5933#[derive(Debug, Clone, PartialEq)]
5935#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5936pub struct TotalUsage {
5937 #[cfg_attr(feature = "serde", serde(rename = "chargingTime"))]
5939 pub charging_time: i64,
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 pub energy: f64,
5944 #[cfg_attr(feature = "serde", serde(rename = "idleTime"))]
5946 pub idle_time: i64,
5947 #[cfg_attr(feature = "serde", serde(rename = "reservationTime"))]
5949 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5950 pub reservation_time: Option<i64>,
5951}
5952#[cfg(feature = "alloc")]
5953#[derive(Debug, Clone, PartialEq)]
5957#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5958pub struct CostDetails {
5959 #[cfg_attr(feature = "serde", serde(rename = "chargingPeriods"))]
5960 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5961 pub charging_periods: Option<alloc::vec::Vec<ChargingPeriod>>,
5962 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
5963 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5964 pub custom_data: Option<CustomData>,
5965 #[cfg_attr(feature = "serde", serde(rename = "failureReason"))]
5967 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5968 pub failure_reason: Option<heapless::String<500usize>>,
5969 #[cfg_attr(feature = "serde", serde(rename = "failureToCalculate"))]
5971 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5972 pub failure_to_calculate: Option<bool>,
5973 #[cfg_attr(feature = "serde", serde(rename = "totalCost"))]
5974 pub total_cost: TotalCost,
5975 #[cfg_attr(feature = "serde", serde(rename = "totalUsage"))]
5976 pub total_usage: TotalUsage,
5977}
5978#[cfg(not(feature = "alloc"))]
5979#[derive(Debug, Clone, PartialEq)]
5983#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5984pub struct CostDetails<
5985 const COST_DETAILS_CHARGING_PERIODS_CAP: usize = 16usize,
5986 const CHARGING_PERIOD_DIMENSIONS_CAP: usize = 16usize,
5987 const CHARGING_PERIOD_START_PERIOD_CAP: usize = 1024usize,
5988> {
5989 #[cfg_attr(feature = "serde", serde(rename = "chargingPeriods"))]
5990 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
5991 pub charging_periods: Option<
5992 heapless::Vec<
5993 ChargingPeriod<
5994 CHARGING_PERIOD_DIMENSIONS_CAP,
5995 CHARGING_PERIOD_START_PERIOD_CAP,
5996 >,
5997 COST_DETAILS_CHARGING_PERIODS_CAP,
5998 >,
5999 >,
6000 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6001 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6002 pub custom_data: Option<CustomData>,
6003 #[cfg_attr(feature = "serde", serde(rename = "failureReason"))]
6005 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6006 pub failure_reason: Option<heapless::String<500usize>>,
6007 #[cfg_attr(feature = "serde", serde(rename = "failureToCalculate"))]
6009 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6010 pub failure_to_calculate: Option<bool>,
6011 #[cfg_attr(feature = "serde", serde(rename = "totalCost"))]
6012 pub total_cost: TotalCost,
6013 #[cfg_attr(feature = "serde", serde(rename = "totalUsage"))]
6014 pub total_usage: TotalUsage,
6015}
6016#[derive(Debug, Clone, PartialEq, Eq)]
6019#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6020pub enum TransactionEventEnum {
6021 Ended,
6022 Started,
6023 Updated,
6024}
6025#[derive(Debug, Clone, PartialEq, Eq)]
6027#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6028pub enum PreconditioningStatusEnum {
6029 Unknown,
6030 Ready,
6031 NotReady,
6032 Preconditioning,
6033}
6034#[derive(Debug, Clone, PartialEq, Eq)]
6037#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6038pub enum ChargingStateEnum {
6039 EVConnected,
6040 Charging,
6041 SuspendedEV,
6042 SuspendedEVSE,
6043 Idle,
6044}
6045#[derive(Debug, Clone, PartialEq, Eq)]
6048#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6049pub enum ReasonEnum {
6050 DeAuthorized,
6051 EmergencyStop,
6052 EnergyLimitReached,
6053 EVDisconnected,
6054 GroundFault,
6055 ImmediateReset,
6056 MasterPass,
6057 Local,
6058 LocalOutOfCredit,
6059 Other,
6060 OvercurrentFault,
6061 PowerLoss,
6062 PowerQuality,
6063 Reboot,
6064 Remote,
6065 SOCLimitReached,
6066 StoppedByEV,
6067 TimeLimitReached,
6068 Timeout,
6069 ReqEnergyTransferRejected,
6070}
6071#[derive(Debug, Clone, PartialEq)]
6073#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6074pub struct TransactionLimit {
6075 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6076 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6077 pub custom_data: Option<CustomData>,
6078 #[cfg_attr(feature = "serde", serde(rename = "maxCost"))]
6080 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6081 pub max_cost: Option<f64>,
6082 #[cfg_attr(feature = "serde", serde(rename = "maxEnergy"))]
6084 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6085 pub max_energy: Option<f64>,
6086 #[cfg_attr(feature = "serde", serde(rename = "maxSoC"))]
6088 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6089 pub max_so_c: Option<i64>,
6090 #[cfg_attr(feature = "serde", serde(rename = "maxTime"))]
6092 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6093 pub max_time: Option<i64>,
6094}
6095#[derive(Debug, Clone, PartialEq)]
6096#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6097pub struct Transaction {
6098 #[cfg_attr(feature = "serde", serde(rename = "chargingState"))]
6099 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6100 pub charging_state: Option<ChargingStateEnum>,
6101 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6102 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6103 pub custom_data: Option<CustomData>,
6104 #[cfg_attr(feature = "serde", serde(rename = "operationMode"))]
6105 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6106 pub operation_mode: Option<OperationModeEnum>,
6107 #[cfg_attr(feature = "serde", serde(rename = "remoteStartId"))]
6109 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6110 pub remote_start_id: Option<i64>,
6111 #[cfg_attr(feature = "serde", serde(rename = "stoppedReason"))]
6112 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6113 pub stopped_reason: Option<ReasonEnum>,
6114 #[cfg_attr(feature = "serde", serde(rename = "tariffId"))]
6116 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6117 pub tariff_id: Option<heapless::String<60usize>>,
6118 #[cfg_attr(feature = "serde", serde(rename = "timeSpentCharging"))]
6120 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6121 pub time_spent_charging: Option<i64>,
6122 #[cfg_attr(feature = "serde", serde(rename = "transactionId"))]
6124 pub transaction_id: heapless::String<36usize>,
6125 #[cfg_attr(feature = "serde", serde(rename = "transactionLimit"))]
6126 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6127 pub transaction_limit: Option<TransactionLimit>,
6128}
6129#[derive(Debug, Clone, PartialEq, Eq)]
6131#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6132pub enum TriggerReasonEnum {
6133 AbnormalCondition,
6134 Authorized,
6135 CablePluggedIn,
6136 ChargingRateChanged,
6137 ChargingStateChanged,
6138 CostLimitReached,
6139 Deauthorized,
6140 EnergyLimitReached,
6141 EVCommunicationLost,
6142 EVConnectTimeout,
6143 EVDeparted,
6144 EVDetected,
6145 LimitSet,
6146 MeterValueClock,
6147 MeterValuePeriodic,
6148 OperationModeChanged,
6149 RemoteStart,
6150 RemoteStop,
6151 ResetCommand,
6152 RunningCost,
6153 SignedDataReceived,
6154 SoCLimitReached,
6155 StopAuthorized,
6156 TariffChanged,
6157 TariffNotAccepted,
6158 TimeLimitReached,
6159 Trigger,
6160 TxResumed,
6161 UnlockCommand,
6162}
6163#[derive(Debug, Clone, PartialEq, Eq)]
6165#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6166pub enum MessageTriggerEnum {
6167 BootNotification,
6168 LogStatusNotification,
6169 FirmwareStatusNotification,
6170 Heartbeat,
6171 MeterValues,
6172 SignChargingStationCertificate,
6173 SignV2GCertificate,
6174 SignV2G20Certificate,
6175 StatusNotification,
6176 TransactionEvent,
6177 SignCombinedCertificate,
6178 PublishFirmwareStatusNotification,
6179 CustomTrigger,
6180}
6181#[derive(Debug, Clone, PartialEq, Eq)]
6183#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6184pub enum TriggerMessageStatusEnum {
6185 Accepted,
6186 Rejected,
6187 NotImplemented,
6188}
6189#[derive(Debug, Clone, PartialEq, Eq)]
6191#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6192pub enum UnlockStatusEnum {
6193 Unlocked,
6194 UnlockFailed,
6195 OngoingAuthorizedTransaction,
6196 UnknownConnector,
6197}
6198#[derive(Debug, Clone, PartialEq, Eq)]
6200#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6201pub enum UnpublishFirmwareStatusEnum {
6202 DownloadOngoing,
6203 NoFirmware,
6204 Unpublished,
6205}
6206#[cfg(feature = "alloc")]
6207#[derive(Debug, Clone, PartialEq, Eq)]
6209#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6210pub struct Firmware {
6211 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6212 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6213 pub custom_data: Option<CustomData>,
6214 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
6216 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6217 pub install_date_time: Option<alloc::string::String>,
6218 pub location: heapless::String<2000usize>,
6220 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
6222 pub retrieve_date_time: alloc::string::String,
6223 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6225 pub signature: Option<heapless::String<800usize>>,
6226 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
6229 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6230 pub signing_certificate: Option<heapless::String<5500usize>>,
6231}
6232#[cfg(not(feature = "alloc"))]
6233#[derive(Debug, Clone, PartialEq, Eq)]
6235#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6236pub struct Firmware<
6237 const FIRMWARE_INSTALL_DATE_TIME_CAP: usize = 1024usize,
6238 const FIRMWARE_RETRIEVE_DATE_TIME_CAP: usize = 1024usize,
6239> {
6240 #[cfg_attr(feature = "serde", serde(rename = "customData"))]
6241 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6242 pub custom_data: Option<CustomData>,
6243 #[cfg_attr(feature = "serde", serde(rename = "installDateTime"))]
6245 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6246 pub install_date_time: Option<heapless::String<FIRMWARE_INSTALL_DATE_TIME_CAP>>,
6247 pub location: heapless::String<2000usize>,
6249 #[cfg_attr(feature = "serde", serde(rename = "retrieveDateTime"))]
6251 pub retrieve_date_time: heapless::String<FIRMWARE_RETRIEVE_DATE_TIME_CAP>,
6252 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6254 pub signature: Option<heapless::String<800usize>>,
6255 #[cfg_attr(feature = "serde", serde(rename = "signingCertificate"))]
6258 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
6259 pub signing_certificate: Option<heapless::String<5500usize>>,
6260}
6261#[derive(Debug, Clone, PartialEq, Eq)]
6263#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6264pub enum UpdateFirmwareStatusEnum {
6265 Accepted,
6266 Rejected,
6267 AcceptedCanceled,
6268 InvalidCertificate,
6269 RevokedCertificate,
6270}
6271#[derive(Debug, Clone, PartialEq, Eq)]
6273#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6274pub enum PriorityChargingStatusEnum {
6275 Accepted,
6276 Rejected,
6277 NoProfile,
6278}