Skip to main content

ocpp_types/v21/
standard.rs

1// @generated by ocpp-codegen from schemas/. Do not edit by hand -- run
2// `scripts/generate.sh` to regenerate; manual changes will be overwritten.
3
4//! Value sets the specification defines for fields its JSON schemas
5//! type as bare strings.
6//!
7//! A field like `Variable.name` or `SecurityEventNotification.type` is
8//! just `{"type": "string", "maxLength": N}` in the schema, with the
9//! permitted values listed in a specification appendix instead. Those
10//! appendix tables are vendored under `csv/` and generated into this
11//! module.
12//!
13//! Nothing here changes a wire type. OCPP permits vendor-specific
14//! values for these fields, so the message structs keep their
15//! `heapless::String` fields and these enums sit alongside:
16//!
17//! # Open and closed value sets
18//!
19//! The sets a deployment realistically extends -- components,
20//! variables, configuration keys -- are *open*: they carry an
21//! `Other` variant, so a third-party value survives a
22//! deserialize/serialize round trip. Use `from_wire_or_other` to
23//! accept any value, `from_wire` to ask whether a value is one the
24//! specification defines, and `is_standardized` to tell them apart
25//! afterwards. Their equality and hashing compare the wire string,
26//! so `Other("X")` and the `X` variant are one value.
27//!
28//! The rest are *closed*: one byte, `Copy`, and `from_wire`
29//! returning `None` is the only outcome for an unrecognized value.
30//! An open set is neither `Copy` nor one byte -- it is as wide as
31//! the field's `maxLength` -- which is why it is opt-in per set.
32//!
33//! ```ignore
34//! use ocpp_types::v21::common::Variable;
35//! use ocpp_types::v21::standard::VariableName;
36//!
37//! let variable = Variable {
38//!     name: heapless::String::try_from(VariableName::HeartbeatInterval.as_str()).unwrap(),
39//!     custom_data: None,
40//!     instance: None,
41//! };
42//! ```
43/// Returned by `FromStr` for a value the specification doesn't
44/// define.
45///
46/// Not in itself a protocol error: OCPP permits vendor-specific
47/// components, variables, configuration keys and security events,
48/// so receiving one of those is conformant. Use `from_wire` when an
49/// unrecognized value is expected and `Option` reads better than
50/// `Result`.
51#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
52pub struct UnknownValue;
53impl core::fmt::Display for UnknownValue {
54    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
55        f.write_str("not a value defined by this OCPP version's specification")
56    }
57}
58impl core::error::Error for UnknownValue {}
59/// Returned when a value is longer than the specification's
60/// `maxLength` for its field.
61///
62/// Only an open value set can produce this, and only from
63/// `from_wire_or_other`: a value too long for the field is not one the
64/// field could have carried, so it is rejected rather than truncated.
65#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
66pub struct ValueTooLong;
67impl core::fmt::Display for ValueTooLong {
68    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
69        f.write_str("longer than this field's maxLength in the specification")
70    }
71}
72impl core::error::Error for ValueTooLong {}
73/// Standardized `Component.name` values.
74///
75/// The schema types `Component.name` as a plain string, since a Charging Station may expose vendor-specific components alongside these.
76///
77/// An *open* set: values the specification doesn't define are carried
78/// in [`Self::Other`] rather than rejected, so a deployment's own
79/// values survive a deserialize/serialize round trip.
80///
81/// Comparison and hashing go through the wire string, not the variant,
82/// so `Other("...")` holding a standardized value compares equal to
83/// that variant.
84#[derive(Debug, Clone)]
85pub enum ComponentName {
86    /// Responsible for configuration relating to DER capabilities that the EVSE of the Charging Station can emulate by using ISO 15118-20 ChargeLoop messages to control the inverter in the EV. The component is located at the EVSE level, since it represents the DER capabilities of the EVSE.
87    ACDERCtrlr,
88    /// Logical Component responsible for configuration relating to the reporting of clock-aligned meter data.
89    AlignedDataCtrlr,
90    /// Logical Component responsible for configuration relating to the use of a local cache for authorization for Charging Station use.
91    AuthCacheCtrlr,
92    /// Logical Component responsible for configuration relating to the use of authorization for Charging Station use.
93    AuthCtrlr,
94    /// Responsible for configuration relating to Battery swapping.
95    BatterySwapCtrlr,
96    /// A CHAdeMO Controller component communicates with an EV using the wired CANbus protocol to exchange information and control charging using the CHAdeMO protocol
97    CHAdeMOCtrlr,
98    /// Provides a means to configure management of time tracking by Charging Station.
99    ClockCtrlr,
100    /// Responsible for configuration relating to custom vendor-specific implementations, like the DataTransfer message and CustomData extensions or CustomTriggers.
101    CustomizationCtrlr,
102    /// Responsible for configuration relating to DER capabilities of the DC inverter of the EVSE in the Charging Station. The component is located at the EVSE level, since it represents the DER capabilities, also referred to as nameplate information, of the EVSE.
103    DCDERCtrlr,
104    /// Logical Component responsible for configuration relating to the exchange and storage of Charging Station Device Model data.
105    DeviceDataCtrlr,
106    /// Logical Component responsible for configuration relating to the display of messages to Charging Station users.
107    DisplayMessageCtrlr,
108    /// Communicates with an EV to exchange information and control charging using the ISO 15118 protocol.
109    ISO15118Ctrlr,
110    /// Logical Component responsible for configuration relating to the use of Local Authorization Lists for Charging Station use.
111    LocalAuthListCtrlr,
112    /// Logical Component responsible for configuration relating to the exchange of monitoring event data.
113    MonitoringCtrlr,
114    /// Logical Component responsible for configuration relating to payment terminals.
115    PaymentCtrlr,
116    /// Logical Component responsible for configuration relating to information exchange between Charging Station and CSMS.
117    OCPPCommCtrlr,
118    /// Logical Component responsible for configuration relating to reservations.
119    ReservationCtrlr,
120    /// Logical Component responsible for configuration relating to the reporting of sampled meter data.
121    SampledDataCtrlr,
122    /// Logical Component responsible for configuration relating to security of communications between Charging Station and CSMS.
123    SecurityCtrlr,
124    /// Logical Component responsible for configuration relating to smart charging.
125    SmartChargingCtrlr,
126    /// Logical Component responsible for configuration relating to tariff and cost display.
127    TariffCostCtrlr,
128    /// Logical Component responsible for configuration relating to transaction characteristics and behaviour.
129    TxCtrlr,
130    /// Responsible for configuration relating to V2X charging/discharging. This component exists on the EVSE tier hierarchy.
131    V2XChargingCtrlr,
132    /// Responsible for configuration of a dynamic QR code for ad hoc payments.
133    WebPaymentsCtrlr,
134    /// Allows physical access of vehicles to a charging site to be controlled.
135    AccessBarrier,
136    /// Provides a variable DC current source to force energy directly into an EV battery stack, under tight control of the EV's battery management system.
137    AcDcConverter,
138    /// Allows a specific AC phase to be selected (typically at EVSE tier) for single phase vehicle charging in order to lower overall (e.g. site) phase imbalance.
139    AcPhaseSelector,
140    /// A general purpose electro-mechanical output system, with optional completion tracking sensing. Each output should use a Variable instance key indicating the nature of the output.
141    Actuator,
142    /// Fans (or equivalent devices) used to provide cooling.
143    AirCoolingSystem,
144    /// Fans (or equivalent devices) used to ensure that EVs that require ventilation during charging
145    AreaVentilation,
146    /// BatteryCartridge represents the battery cartridge that is currently inserted into the EVSE of a battery swap station
147    BatteryCartridge,
148    /// Sensor (optical, ground loop, ultrasonic, etc.) to detect whether the associated parking/charging bay is physically vacant, or is occupied by a vehicle or other obstruction
149    BayOccupancySensor,
150    /// Beacon Lighting to help EV drivers to locate nearby charging places, and/or to determine charging availability state, usually by color variation.
151    BeaconLighting,
152    /// A sensor that detects when a charging cable (captive or removable) has been forcibly pulled from the Charging Station.
153    CableBreakawaySensor,
154    /// Reports when an access door/panel is open
155    CaseAccessSensor,
156    /// The entire Charging Station as a logical entity
157    ChargingStation,
158    /// The Charging Status Indicator, provides visible feedback to the user about the connection and charging status of an EVSE/Connector. This is commonly in the form of multi-colored lighting.
159    ChargingStatusIndicator,
160    /// ConnectedEV is a component that represents a connected vehicle for which data is received via an ISO 15118 or CHAdeMO interface. The generic information that is received, is represented as variables of ConnectedEV. Any protocol-specific information is represented in variables of the ISO15118Ctrlr or CHAdeMOCtrlr component.
161    ConnectedEV,
162    /// A means to connect an EV to a Charging Station with either a socket, an attached cable & inline connector, or any wireless power transfer device.
163    Connector,
164    /// A mechanism present in a connector holster to prevent the connector from being removed inappropriately: typically unlocks connector after authorization.
165    ConnectorHolsterRelease,
166    /// A mechanism to report when a tethered cable connector has been removed from its normal stowage position. May be used for detection of connectors left un-holstered, and possible penalty billing.
167    ConnectorHolsterSensor,
168    /// Locking mechanism to retain an inserted plug, both to prevent on-load disconnection, and to prevent theft of charging cables
169    ConnectorPlugRetentionLock,
170    /// External protective mechanism (e.g. an external shutter or a connector holster lock mechanism) to prevent contact with conductors that may become 'live' under other failure modes
171    ConnectorProtectionRelease,
172    /// An embedded logic controller
173    Controller,
174    /// Energy, Power, Electricity meter, used to measure energy, current, voltages etc.
175    ControlMetering,
176    /// Control Pilot PWM Controller: provides and senses the IEC 61851-1 / SAE J1772 low voltage DC and PWM signalling between an EVSE and EV over a control pilot line.
177    CPPWMController,
178    /// Provides a communications link from a Charging Station to a CSMS. It may use fixed infrastructure, mobile telephony data services, WiFi, or other connectivity channels.
179    DataLink,
180    /// Provides information and feedback to the user.
181    Display,
182    /// Defines the Distribution Panel, with it's fuses and connections to both Charging Stations and other Distribution Panel's.
183    DistributionPanel,
184    /// Represents an incoming electrical connection to a Charging Station, that may be a grid/distribution network connection, of a connection to local power generation and/or storage. Each electrical feed can record the electrical and other characteristics of that feed, including power rating, fusing, upstream metering, etc. When a Charging Station has more than one electrical feed, it must represent which feed supplies each EVSE, and which feed supplies the house load of the Charging Station itself. Simple Charging Stations with only a single electrical feed may omit all electrical feed information, in which case it is inferred that all power is supplied from a single feed, and what would otherwise be ElectricalFeed data (Variables) may be reported as being associated with the ChargingStation component.
185    ElectricalFeed,
186    /// Represents the low voltage power supply (typically 12V DC and often other ELV voltages) that provides operating power for controllers, relays, and other electrical components.
187    ELVSupply,
188    /// An 'Emergency Stop' button that should be pressed by the user or other nearby persons if serious faulty behavior is observed (e.g. smoke/flames from EV or Charging Station).
189    EmergencyStopSensor,
190    /// Provides reporting/control of general illumination lighting in use at Charging Station.
191    EnvironmentalLighting,
192    /// A locking mechanism on the EV side as a safety measure to prevent it being disconnected while high currents are flowing.
193    EVRetentionLock,
194    /// The entire chain of components responsible for transporting energy from the incoming supply to the electric vehicle (or vice versa)
195    EVSE,
196    /// Reports ambient air temperature
197    ExternalTemperatureSensor,
198    /// Provides energy transfer readings that are the basis for billing.
199    FiscalMetering,
200    /// A sensor reporting whether the Charging Station is experiencing water ingress/pooling.
201    FloodSensor,
202    /// An Isolation Tester as part of their own self-test mechanisms, to confirm the isolation of floating circuitry when no Evs are connected
203    GroundIsolationProtection,
204    /// Heater to ensure reliable operation in cold environments
205    Heater,
206    /// Reports relative air humidity
207    HumiditySensor,
208    /// Reports ambient light levels.
209    LightSensor,
210    /// A liquid based cooling system, typically used to cool the connector cables of very high power Charging Stations.
211    LiquidCoolingSystem,
212    /// Accepts local signal inputs controlling whether new Charging Sessions can start and/or whether ongoing sessions should continue. Typically connected to a site/building power supply, to automatically report unavailability when closed.
213    LocalAvailabilitySensor,
214    /// The entire Local Controller as a logical entity
215    LocalController,
216    /// Energy storage
217    LocalEnergyStorage,
218    /// The instances of component NetworkConfiguration represent network connection configurations.
219    NetworkConfiguration,
220    /// Protects equipment by disconnecting the electrical supply when the current drawn (on any phase) exceeds the rated value to a substantial degree.
221    OverCurrentProtection,
222    /// Recloser mechanism of an OverCurrentProtection to perform re-arm retries after a trip, or may be set for remotely controlled re-arming on command.
223    OverCurrentProtectionRecloser,
224    /// Switches on and off the power to the EV after all authorization and safety requirements have been met. May have secondary contacts to report closure state.
225    PowerContactor,
226    /// A Residual Current Device (US: ground fault breaker) protects human life and/or downstream equipment by quickly detecting abnormal current flows (usually indicative in earth faults) in the Charging Station, cable, or EV during charging.
227    RCD,
228    /// A motorized recloser mechanism of an RCD that may be configured to perform re-arm retries after a trip, or may be set for remotely controlled re-arming on command.
229    RCDRecloser,
230    /// Represents realtime clock hardware that can maintain accurate date & time information in a Charging Station, even in the case of simultaneous CSMS uncontactability and power outages or resets.
231    RealTimeClock,
232    /// Measures impact forces/accelerations experienced, indicative of possible damage.
233    ShockSensor,
234    /// Electronic signage allowing a charging controller for a large charging facility to advertise counts of available spaces to passing traffic.
235    SpacesCountSignage,
236    /// A general purpose electromechanical input device, with optional remote defaulting/resetting of values. Each input should use a Variable instance key indicating the nature of the input.
237    Switch,
238    /// Temperature sensor at a point inside the Charging Station, multiple sensing points for a single sensing controller. Multiple sensing points for a single sensing controller may be reported using distinct Variable instance keys.
239    TemperatureSensor,
240    /// Measures Tilt angle from normal reference position (normally 90 degree vertical).
241    TiltSensor,
242    /// An authorization token reader (e.g. RFID)
243    TokenReader,
244    /// Circuitry designed to trigger the disconnection of power to the structure by an upstream protection device after a severe problem has been detected
245    UpstreamProtectionTrigger,
246    /// A logical input mechanism (e.g. set of buttons) that is part of a UI whose use may be communicated to the CSMS (in near real time). May support momentary inputs ('Operated') or modal state ('Active'). Multiple input sources should use explicit Variable instance keys (where the input function is key name).
247    UIInput,
248    /// Reports an identifier associated with a vehicle occupying a charging bay. The identifier may be a vehicle registration number via ANPR hardware, a VIN, or other local identifier of the vehicle based on medium range/active RFID, or any other relevant technology and result.
249    VehicleIdSensor,
250    /// Listed in the specification's device model table but not in its dedicated name table.
251    FrequencySimulator,
252    /// Listed in the specification's device model table but not in its dedicated name table.
253    DataCollector,
254    /** A value this version's specification doesn't define -- typically a
255 vendor-specific one, which OCPP explicitly permits.
256
257 Bounded at 50 bytes, the same `maxLength` the wire field carries,
258 so anything the field can hold this can hold. Prefer
259 [`Self::from_wire_or_other`] over constructing this directly: it
260 returns the standardized variant when the value is one, keeping a
261 single representation per wire string.*/
262    Other(heapless::String<50usize>),
263}
264impl ComponentName {
265    /// Every value this version's specification defines (84), in spec order.
266    ///
267    /// Does not include [`Self::Other`], which is unbounded in the
268    /// values it can hold.
269    pub const ALL: &'static [Self] = &[
270        Self::ACDERCtrlr,
271        Self::AlignedDataCtrlr,
272        Self::AuthCacheCtrlr,
273        Self::AuthCtrlr,
274        Self::BatterySwapCtrlr,
275        Self::CHAdeMOCtrlr,
276        Self::ClockCtrlr,
277        Self::CustomizationCtrlr,
278        Self::DCDERCtrlr,
279        Self::DeviceDataCtrlr,
280        Self::DisplayMessageCtrlr,
281        Self::ISO15118Ctrlr,
282        Self::LocalAuthListCtrlr,
283        Self::MonitoringCtrlr,
284        Self::PaymentCtrlr,
285        Self::OCPPCommCtrlr,
286        Self::ReservationCtrlr,
287        Self::SampledDataCtrlr,
288        Self::SecurityCtrlr,
289        Self::SmartChargingCtrlr,
290        Self::TariffCostCtrlr,
291        Self::TxCtrlr,
292        Self::V2XChargingCtrlr,
293        Self::WebPaymentsCtrlr,
294        Self::AccessBarrier,
295        Self::AcDcConverter,
296        Self::AcPhaseSelector,
297        Self::Actuator,
298        Self::AirCoolingSystem,
299        Self::AreaVentilation,
300        Self::BatteryCartridge,
301        Self::BayOccupancySensor,
302        Self::BeaconLighting,
303        Self::CableBreakawaySensor,
304        Self::CaseAccessSensor,
305        Self::ChargingStation,
306        Self::ChargingStatusIndicator,
307        Self::ConnectedEV,
308        Self::Connector,
309        Self::ConnectorHolsterRelease,
310        Self::ConnectorHolsterSensor,
311        Self::ConnectorPlugRetentionLock,
312        Self::ConnectorProtectionRelease,
313        Self::Controller,
314        Self::ControlMetering,
315        Self::CPPWMController,
316        Self::DataLink,
317        Self::Display,
318        Self::DistributionPanel,
319        Self::ElectricalFeed,
320        Self::ELVSupply,
321        Self::EmergencyStopSensor,
322        Self::EnvironmentalLighting,
323        Self::EVRetentionLock,
324        Self::EVSE,
325        Self::ExternalTemperatureSensor,
326        Self::FiscalMetering,
327        Self::FloodSensor,
328        Self::GroundIsolationProtection,
329        Self::Heater,
330        Self::HumiditySensor,
331        Self::LightSensor,
332        Self::LiquidCoolingSystem,
333        Self::LocalAvailabilitySensor,
334        Self::LocalController,
335        Self::LocalEnergyStorage,
336        Self::NetworkConfiguration,
337        Self::OverCurrentProtection,
338        Self::OverCurrentProtectionRecloser,
339        Self::PowerContactor,
340        Self::RCD,
341        Self::RCDRecloser,
342        Self::RealTimeClock,
343        Self::ShockSensor,
344        Self::SpacesCountSignage,
345        Self::Switch,
346        Self::TemperatureSensor,
347        Self::TiltSensor,
348        Self::TokenReader,
349        Self::UpstreamProtectionTrigger,
350        Self::UIInput,
351        Self::VehicleIdSensor,
352        Self::FrequencySimulator,
353        Self::DataCollector,
354    ];
355    /// This value as it appears on the wire.
356    pub fn as_str(&self) -> &str {
357        match self {
358            Self::ACDERCtrlr => "ACDERCtrlr",
359            Self::AlignedDataCtrlr => "AlignedDataCtrlr",
360            Self::AuthCacheCtrlr => "AuthCacheCtrlr",
361            Self::AuthCtrlr => "AuthCtrlr",
362            Self::BatterySwapCtrlr => "BatterySwapCtrlr",
363            Self::CHAdeMOCtrlr => "CHAdeMOCtrlr",
364            Self::ClockCtrlr => "ClockCtrlr",
365            Self::CustomizationCtrlr => "CustomizationCtrlr",
366            Self::DCDERCtrlr => "DCDERCtrlr",
367            Self::DeviceDataCtrlr => "DeviceDataCtrlr",
368            Self::DisplayMessageCtrlr => "DisplayMessageCtrlr",
369            Self::ISO15118Ctrlr => "ISO15118Ctrlr",
370            Self::LocalAuthListCtrlr => "LocalAuthListCtrlr",
371            Self::MonitoringCtrlr => "MonitoringCtrlr",
372            Self::PaymentCtrlr => "PaymentCtrlr",
373            Self::OCPPCommCtrlr => "OCPPCommCtrlr",
374            Self::ReservationCtrlr => "ReservationCtrlr",
375            Self::SampledDataCtrlr => "SampledDataCtrlr",
376            Self::SecurityCtrlr => "SecurityCtrlr",
377            Self::SmartChargingCtrlr => "SmartChargingCtrlr",
378            Self::TariffCostCtrlr => "TariffCostCtrlr",
379            Self::TxCtrlr => "TxCtrlr",
380            Self::V2XChargingCtrlr => "V2XChargingCtrlr",
381            Self::WebPaymentsCtrlr => "WebPaymentsCtrlr",
382            Self::AccessBarrier => "AccessBarrier",
383            Self::AcDcConverter => "AcDcConverter",
384            Self::AcPhaseSelector => "AcPhaseSelector",
385            Self::Actuator => "Actuator",
386            Self::AirCoolingSystem => "AirCoolingSystem",
387            Self::AreaVentilation => "AreaVentilation",
388            Self::BatteryCartridge => "BatteryCartridge",
389            Self::BayOccupancySensor => "BayOccupancySensor",
390            Self::BeaconLighting => "BeaconLighting",
391            Self::CableBreakawaySensor => "CableBreakawaySensor",
392            Self::CaseAccessSensor => "CaseAccessSensor",
393            Self::ChargingStation => "ChargingStation",
394            Self::ChargingStatusIndicator => "ChargingStatusIndicator",
395            Self::ConnectedEV => "ConnectedEV",
396            Self::Connector => "Connector",
397            Self::ConnectorHolsterRelease => "ConnectorHolsterRelease",
398            Self::ConnectorHolsterSensor => "ConnectorHolsterSensor",
399            Self::ConnectorPlugRetentionLock => "ConnectorPlugRetentionLock",
400            Self::ConnectorProtectionRelease => "ConnectorProtectionRelease",
401            Self::Controller => "Controller",
402            Self::ControlMetering => "ControlMetering",
403            Self::CPPWMController => "CPPWMController",
404            Self::DataLink => "DataLink",
405            Self::Display => "Display",
406            Self::DistributionPanel => "DistributionPanel",
407            Self::ElectricalFeed => "ElectricalFeed",
408            Self::ELVSupply => "ELVSupply",
409            Self::EmergencyStopSensor => "EmergencyStopSensor",
410            Self::EnvironmentalLighting => "EnvironmentalLighting",
411            Self::EVRetentionLock => "EVRetentionLock",
412            Self::EVSE => "EVSE",
413            Self::ExternalTemperatureSensor => "ExternalTemperatureSensor",
414            Self::FiscalMetering => "FiscalMetering",
415            Self::FloodSensor => "FloodSensor",
416            Self::GroundIsolationProtection => "GroundIsolationProtection",
417            Self::Heater => "Heater",
418            Self::HumiditySensor => "HumiditySensor",
419            Self::LightSensor => "LightSensor",
420            Self::LiquidCoolingSystem => "LiquidCoolingSystem",
421            Self::LocalAvailabilitySensor => "LocalAvailabilitySensor",
422            Self::LocalController => "LocalController",
423            Self::LocalEnergyStorage => "LocalEnergyStorage",
424            Self::NetworkConfiguration => "NetworkConfiguration",
425            Self::OverCurrentProtection => "OverCurrentProtection",
426            Self::OverCurrentProtectionRecloser => "OverCurrentProtectionRecloser",
427            Self::PowerContactor => "PowerContactor",
428            Self::RCD => "RCD",
429            Self::RCDRecloser => "RCDRecloser",
430            Self::RealTimeClock => "RealTimeClock",
431            Self::ShockSensor => "ShockSensor",
432            Self::SpacesCountSignage => "SpacesCountSignage",
433            Self::Switch => "Switch",
434            Self::TemperatureSensor => "TemperatureSensor",
435            Self::TiltSensor => "TiltSensor",
436            Self::TokenReader => "TokenReader",
437            Self::UpstreamProtectionTrigger => "UpstreamProtectionTrigger",
438            Self::UIInput => "UIInput",
439            Self::VehicleIdSensor => "VehicleIdSensor",
440            Self::FrequencySimulator => "FrequencySimulator",
441            Self::DataCollector => "DataCollector",
442            Self::Other(value) => value.as_str(),
443        }
444    }
445    /// Parses a wire value, returning `None` for values the
446    /// specification doesn't define.
447    ///
448    /// Use this to ask "is this one of the spec's values?". To accept
449    /// any value, use [`Self::from_wire_or_other`].
450    pub fn from_wire(value: &str) -> Option<Self> {
451        match value {
452            "ACDERCtrlr" => Some(Self::ACDERCtrlr),
453            "AlignedDataCtrlr" => Some(Self::AlignedDataCtrlr),
454            "AuthCacheCtrlr" => Some(Self::AuthCacheCtrlr),
455            "AuthCtrlr" => Some(Self::AuthCtrlr),
456            "BatterySwapCtrlr" => Some(Self::BatterySwapCtrlr),
457            "CHAdeMOCtrlr" => Some(Self::CHAdeMOCtrlr),
458            "ClockCtrlr" => Some(Self::ClockCtrlr),
459            "CustomizationCtrlr" => Some(Self::CustomizationCtrlr),
460            "DCDERCtrlr" => Some(Self::DCDERCtrlr),
461            "DeviceDataCtrlr" => Some(Self::DeviceDataCtrlr),
462            "DisplayMessageCtrlr" => Some(Self::DisplayMessageCtrlr),
463            "ISO15118Ctrlr" => Some(Self::ISO15118Ctrlr),
464            "LocalAuthListCtrlr" => Some(Self::LocalAuthListCtrlr),
465            "MonitoringCtrlr" => Some(Self::MonitoringCtrlr),
466            "PaymentCtrlr" => Some(Self::PaymentCtrlr),
467            "OCPPCommCtrlr" => Some(Self::OCPPCommCtrlr),
468            "ReservationCtrlr" => Some(Self::ReservationCtrlr),
469            "SampledDataCtrlr" => Some(Self::SampledDataCtrlr),
470            "SecurityCtrlr" => Some(Self::SecurityCtrlr),
471            "SmartChargingCtrlr" => Some(Self::SmartChargingCtrlr),
472            "TariffCostCtrlr" => Some(Self::TariffCostCtrlr),
473            "TxCtrlr" => Some(Self::TxCtrlr),
474            "V2XChargingCtrlr" => Some(Self::V2XChargingCtrlr),
475            "WebPaymentsCtrlr" => Some(Self::WebPaymentsCtrlr),
476            "AccessBarrier" => Some(Self::AccessBarrier),
477            "AcDcConverter" => Some(Self::AcDcConverter),
478            "AcPhaseSelector" => Some(Self::AcPhaseSelector),
479            "Actuator" => Some(Self::Actuator),
480            "AirCoolingSystem" => Some(Self::AirCoolingSystem),
481            "AreaVentilation" => Some(Self::AreaVentilation),
482            "BatteryCartridge" => Some(Self::BatteryCartridge),
483            "BayOccupancySensor" => Some(Self::BayOccupancySensor),
484            "BeaconLighting" => Some(Self::BeaconLighting),
485            "CableBreakawaySensor" => Some(Self::CableBreakawaySensor),
486            "CaseAccessSensor" => Some(Self::CaseAccessSensor),
487            "ChargingStation" => Some(Self::ChargingStation),
488            "ChargingStatusIndicator" => Some(Self::ChargingStatusIndicator),
489            "ConnectedEV" => Some(Self::ConnectedEV),
490            "Connector" => Some(Self::Connector),
491            "ConnectorHolsterRelease" => Some(Self::ConnectorHolsterRelease),
492            "ConnectorHolsterSensor" => Some(Self::ConnectorHolsterSensor),
493            "ConnectorPlugRetentionLock" => Some(Self::ConnectorPlugRetentionLock),
494            "ConnectorProtectionRelease" => Some(Self::ConnectorProtectionRelease),
495            "Controller" => Some(Self::Controller),
496            "ControlMetering" => Some(Self::ControlMetering),
497            "CPPWMController" => Some(Self::CPPWMController),
498            "DataLink" => Some(Self::DataLink),
499            "Display" => Some(Self::Display),
500            "DistributionPanel" => Some(Self::DistributionPanel),
501            "ElectricalFeed" => Some(Self::ElectricalFeed),
502            "ELVSupply" => Some(Self::ELVSupply),
503            "EmergencyStopSensor" => Some(Self::EmergencyStopSensor),
504            "EnvironmentalLighting" => Some(Self::EnvironmentalLighting),
505            "EVRetentionLock" => Some(Self::EVRetentionLock),
506            "EVSE" => Some(Self::EVSE),
507            "ExternalTemperatureSensor" => Some(Self::ExternalTemperatureSensor),
508            "FiscalMetering" => Some(Self::FiscalMetering),
509            "FloodSensor" => Some(Self::FloodSensor),
510            "GroundIsolationProtection" => Some(Self::GroundIsolationProtection),
511            "Heater" => Some(Self::Heater),
512            "HumiditySensor" => Some(Self::HumiditySensor),
513            "LightSensor" => Some(Self::LightSensor),
514            "LiquidCoolingSystem" => Some(Self::LiquidCoolingSystem),
515            "LocalAvailabilitySensor" => Some(Self::LocalAvailabilitySensor),
516            "LocalController" => Some(Self::LocalController),
517            "LocalEnergyStorage" => Some(Self::LocalEnergyStorage),
518            "NetworkConfiguration" => Some(Self::NetworkConfiguration),
519            "OverCurrentProtection" => Some(Self::OverCurrentProtection),
520            "OverCurrentProtectionRecloser" => Some(Self::OverCurrentProtectionRecloser),
521            "PowerContactor" => Some(Self::PowerContactor),
522            "RCD" => Some(Self::RCD),
523            "RCDRecloser" => Some(Self::RCDRecloser),
524            "RealTimeClock" => Some(Self::RealTimeClock),
525            "ShockSensor" => Some(Self::ShockSensor),
526            "SpacesCountSignage" => Some(Self::SpacesCountSignage),
527            "Switch" => Some(Self::Switch),
528            "TemperatureSensor" => Some(Self::TemperatureSensor),
529            "TiltSensor" => Some(Self::TiltSensor),
530            "TokenReader" => Some(Self::TokenReader),
531            "UpstreamProtectionTrigger" => Some(Self::UpstreamProtectionTrigger),
532            "UIInput" => Some(Self::UIInput),
533            "VehicleIdSensor" => Some(Self::VehicleIdSensor),
534            "FrequencySimulator" => Some(Self::FrequencySimulator),
535            "DataCollector" => Some(Self::DataCollector),
536            _ => None,
537        }
538    }
539    /// Parses any wire value, falling back to [`Self::Other`].
540    ///
541    /// Fails only if `value` is longer than the specification's
542    /// `maxLength` for this field, in which case it isn't a value the
543    /// field could have carried in the first place.
544    pub fn from_wire_or_other(value: &str) -> Result<Self, ValueTooLong> {
545        if let Some(standardized) = Self::from_wire(value) {
546            return Ok(standardized);
547        }
548        heapless::String::try_from(value).map(Self::Other).map_err(|_| ValueTooLong)
549    }
550    /// Whether this is one of the values the specification defines,
551    /// as opposed to a vendor's own.
552    pub fn is_standardized(&self) -> bool {
553        !matches!(self, Self::Other(_))
554    }
555}
556impl core::fmt::Display for ComponentName {
557    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
558        f.write_str(self.as_str())
559    }
560}
561impl core::str::FromStr for ComponentName {
562    type Err = ValueTooLong;
563    fn from_str(value: &str) -> Result<Self, Self::Err> {
564        Self::from_wire_or_other(value)
565    }
566}
567impl PartialEq for ComponentName {
568    fn eq(&self, other: &Self) -> bool {
569        self.as_str() == other.as_str()
570    }
571}
572impl Eq for ComponentName {}
573impl core::hash::Hash for ComponentName {
574    fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
575        self.as_str().hash(state);
576    }
577}
578impl PartialOrd for ComponentName {
579    fn partial_cmp(&self, other: &Self) -> Option<core::cmp::Ordering> {
580        Some(self.cmp(other))
581    }
582}
583impl Ord for ComponentName {
584    fn cmp(&self, other: &Self) -> core::cmp::Ordering {
585        self.as_str().cmp(other.as_str())
586    }
587}
588#[cfg(feature = "serde")]
589impl serde::Serialize for ComponentName {
590    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
591        serializer.serialize_str(self.as_str())
592    }
593}
594#[cfg(feature = "serde")]
595impl<'de> serde::Deserialize<'de> for ComponentName {
596    fn deserialize<D: serde::Deserializer<'de>>(
597        deserializer: D,
598    ) -> Result<Self, D::Error> {
599        struct Visitor;
600        impl<'v> serde::de::Visitor<'v> for Visitor {
601            type Value = ComponentName;
602            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
603                f.write_str("a ComponentName string")
604            }
605            fn visit_str<E: serde::de::Error>(
606                self,
607                value: &str,
608            ) -> Result<Self::Value, E> {
609                ComponentName::from_wire_or_other(value)
610                    .map_err(serde::de::Error::custom)
611            }
612        }
613        deserializer.deserialize_str(Visitor)
614    }
615}
616/// Standardized `Variable.name` values.
617///
618/// The schema types `Variable.name` as a plain string, since a Charging Station may expose vendor-specific variables alongside these.
619///
620/// An *open* set: values the specification doesn't define are carried
621/// in [`Self::Other`] rather than rejected, so a deployment's own
622/// values survive a deserialize/serialize round trip.
623///
624/// Comparison and hashing go through the wire string, not the variant,
625/// so `Other("...")` holding a standardized value compares equal to
626/// that variant.
627#[derive(Debug, Clone)]
628pub enum VariableName {
629    /// RMS AC Current (in amperes). For 3-phase circuits, each phase (and optional neutral) is represented by a Variable instance equal to a value of the PhaseEnumType (e.g. L1,N). Unkeyed values reported for a Component declared to be multi-phase are assumed to be an average of all per-phase readings and written values are common per-phase settings. Example(s): ChargingStation: Total AC current consumption (all EVSE’s, ancillaries), EVSE: Total current consumed by EVSE: includes losses (AC-\>DC) and EVSE specific ancillaries (e.g. fans), ElectricalFeed: Inflow AC current on feed
630    ACCurrent,
631    /// If defined and true, this EVSE supports the selection of which phase to use for 1 phase AC charging.
632    ACPhaseSwitchingSupported,
633    /// RMS AC Voltage (in volts). For 3-phase circuits, each phase (and optional neutral) is represented by a Variable instance equal to a value of the PhaseEnumType (e.g. L1,N). Unkeyed values reported for a Component declared to be multi-phase are assumed to be an average ofall per-phase readings and written values are common per-phase settings. Example(s): ElectricalFeed: Input Voltage
634    ACVoltage,
635    /// Component is in its non-resting / active state: e.g: On, Engaged, Locked. Some Components may have secondary functions that have corresponding Active Variables with an explicit Variable instance., Note: Monitoring of changes in the Active state of any Component can be specified by setting Delta monitoring on the boolean value with a delta values of 1. Setting/clearing an Active Variable activates/stops the associated functionality, where remotely controllable. Only components that are Available and Enabled can be in the Active state.
636    Active,
637    /// Shows the currently used MonitoringBase.
638    ActiveMonitoringBase,
639    /// Shows the currently use MonitoringLevel.
640    ActiveMonitoringLevel,
641    /// Indicates the configuration profile the station uses to connect to the network.
642    ActiveNetworkProfile,
643    /// Active transaction on charging station or EVSE.
644    ActiveTransactionId,
645    /// Maximum number of _additionalInfo_ items that can be sent in one message.
646    AdditionalInfoItemsPerMessage,
647    /// When set to true, only one certificate (plus a temporarily fallback certificate) of certificateType CSMSRootCertificate is allowed to be installed at a time.
648    AdditionalRootCertificateCheck,
649    /// This variable defines whether energy transfer is allowed to be resumed when the transaction is resumed after a reset or power outage.
650    AllowEnergyTransferResumption,
651    /// Indicates whether new sessions can be started on EVSEs, while Charging Station is waiting for all EVSEs to become Available in order to start a pending firmware update.
652    AllowNewSessionsPendingFirmwareUpdate,
653    /// Component can be reset. Can be used to announce that an EVSE can be reset individually.
654    AllowReset,
655    /// If this variable is implemented and set to _true_, then the Charging Station allows downgrading the security profile from 3 to 2.
656    AllowSecurityProfileDowngrade,
657    /// Angle(s) relative to normal/design idle position. Multiple Variable instance values may be used to indicate angular position in multiple axes (e.g. Left-Right, Forward-Back).
658    Angle,
659    /// Number of attempts (INCLUDING the original attempt) in the last successful or attempted, cycle of operation. Applies typically to self-monitoring motorized electro-mechanical equipment, etc. {Null}: Unknown, 0: Not Attempted/Not allowed, 1: Single attempt/No retries \[allowed\], 2-N: \[up to\] N tries \[allowed\]
660    Attempts,
661    /// Whether a remote request to start a transaction in the form of RequestStartTransactionRequest message should be authorized beforehand like a local action to start a transaction.
662    AuthorizeRemoteStart,
663    /// A value of ConnectorStatusEnumType (See part 2): replicates ConnectorStatus values reported in StatusNotification messages.
664    AvailabilityState,
665    /// The Component exists and is locally configured/wired for use, but might not be (remotely) Enabled.
666    Available,
667    /// The basic authentication password is used for HTTP Basic Authentication.
668    BasicAuthPassword,
669    /// Message Size (in bytes) - puts constraint on GetReportRequest, GetMonitoringReportRequest or GetVariableRequest message size.
670    BytesPerMessage,
671    /// If this variable exists and has the value _true_, then Charging Station can provide a contract certificate that it cannot validate, to the CSMS for validation as part of the AuthorizeRequest.
672    CentralContractValidationAllowed,
673    /// This variable can be used to configure the amount of times the Charging Station SHALL double the previous back-off time, starting with the number of seconds configured at CertSigningWaitMinimum, every time the back-off time expires without having received the CertificateSignedRequest containing the from the CSR generated signed certificate.
674    CertSigningRepeatTimes,
675    /// This configuration variable defines how long the Charging Station has to wait before generating another CSR, in the case the CSMS accepts the SignCertificateRequest, but never returns the signed certificate.
676    CertSigningWaitMinimum,
677    /// Digital Certificate (in Base64 encoding)
678    Certificate,
679    /// Amount of Certificates currently installed on the Charging Station.
680    CertificateEntries,
681    /// When present, this variable tells CSMS whether Charging Station uses OCSP or CRL to check for revoked certificates.
682    CertificateStatusSource,
683    /// The Charging Control Protocol applicable to a Connector. CHAdeMO: CHAdeMO protocol, ISO15118: ISO15118 V2G protocol (wired or wireless) as used with CCS, CPPWM: IEC61851-1 / SAE J1772 protocol (ELV DC & PWM signalling via Control Pilot wire), Uncontrolled: No charging power management applies (e.g. Schuko socket), Undetermined: Yet to be determined (e.g. before plugged in), Unknown: Not determinable, NOTE: ChargeProtocol is distinct from and orthogonal to connectorType.
684    ChargeProtocol,
685    /// Charging up to StateOfChargeBulk has completed.
686    ChargingCompleteBulk,
687    /// Charging up to StateOfCharge.maxSet has completed.
688    ChargingCompleteFull,
689    /// If an instance of this variable is true, then charging profiles with the _chargingProfilePurpose_ mentioned in the *variableInstance* are persistent, i.e. they are stored persistently and will still exist after a reboot.
690    ChargingProfilePersistence,
691    /// This variable reports the current transaction charging state for an EVSE.
692    ChargingState,
693    /// Time from earliest to latest substantive energy transfer
694    ChargingTime,
695    /// Standard 24 bit hexadecimal RGB values. Reg Green Blue color intensity, expressed as standard 24 bit hexadecimal RGB values: 3 00-FF (0-255), in order RRGGBB). E.g. 000000: Black, FF0000: Red, 00FF00: Green, 0000FF: Blue, FFFF00:Yellow, FFFFFF: White, 008000: Medium intensity green.
696    Color,
697    /// Points to a communication parent component (data flow source), to allow rendering the communication hierarchy in a UI.
698    CommunicationParent,
699    /// Component’s operation cycle has completed. Used only in event notifications, where it is always true.
700    Complete,
701    /// If set to true the Charging Station supports tariffs with conditions.
702    ConditionsSupported,
703    /// This Configuration Variable can be used to limit the following fields: SetVariableData.attributeValue and VariableCharacteristics.valuesList.
704    ConfigurationValueSize,
705    /// Time since logical connection established
706    ConnectedTime,
707    /// A value of ConnectorStringEnumType (See Appendix 7). Specific type of connector, including sub-variant information. Note: Distinct and orthogonal to Charging Protocol, Power Type, Phases.
708    ConnectorType,
709    /// If this variable is _true_, then ISO 15118 contract certificate installation/update as described by use case M01 - Certificate installation EV
710    ContractCertificateInstallationEnabled,
711    /// If this variable is _true_, then Charging Station will try to validate a contract certificate when it is offline.
712    ContractValidationOffline,
713    /// General purpose integer count variable for Component state reporting
714    Count,
715    /// The countryName of the SECC in the ISO 3166-1 format.
716    CountryName,
717    /// Currency in a ISO 4217 formatted currency code.
718    Currency,
719    /// Percentage current imbalance in an AC three phase supply.
720    CurrentImbalance,
721    /// This standard configuration variable is used to enable/disable the custom implementation named in the *variableInstance*.
722    CustomImplementationEnabled,
723    /// This variable defines the names of custom triggers that Charging Station supports in a _customTrigger_ field of TriggerMessageRequest.
724    CustomTriggers,
725    /// DC Current (in amperes). May be an instantaneous measurement, or a period average, depending on context/equipment.
726    DCCurrent,
727    /// When DCInputPhaseControl is true, then the values of _numberPhases_ and _PhaseToUse_ in a ChargingSchedulePeriodType will select the input phases from the grid to be used by the DC EVSE.
728    DCInputPhaseControl,
729    /// DC Voltage (volts). May be an instantaneous measurement, or a period average, depending on context/equipment.
730    DCVoltage,
731    /// Text associated with a Component, e.g. a Display.
732    DataText,
733    /// Point in time value, in \[RFC3339\] datetime format. Time zone optional.
734    DateTime,
735    /// Time in \[RFC3339\] datetime format, when an EV intends to leave the charging station.
736    DepartureTime,
737    /// When set to _true_ this variable disables the behavior to request authorization for an
738    DisablePostAuthorize,
739    /// When set to _true_ this instructs the Charging Station to not issue any AuthorizationRequests, but only use Authorization Cache and Local Authorization List to determine validity of idTokens.
740    DisableRemoteAuthorization,
741    /// The variableCharacteristic _maxLimit_ holds the maximum rated discharge power that this EVSE can provide. The variableCharacteristic _maxSet_ holds the maximum configured discharge power that this EVSE can provide. The _Actual_ value of the instantaneous (real) discharge power is recommended to be supported, but not required. Discharge power is represented by a positive value.
742    DischargePower,
743    /// Maximum number of different messages that can configured in this Charging Station simultaneous, via SetDisplayMessageRequest.
744    DisplayMessages,
745    /// Production series variants reflecting internal design changes or sub-component substitutions not affecting external functionality.
746    ECVariant,
747    /// Interval from between 'starting' of a transaction until incipient transaction is automatically canceled, due to failure of EV driver to (correctly) insert the charging cable connector(s) into the appropriate socket(s).
748    EVConnectionTimeOut,
749    /// Points to a electrical parent component (energy flow source), to allow rendering the electrical hierarchy in a UI.
750    ElectricalParent,
751    /// The Component is Enabled for operation. For Available components that cannot be selectively (remotely) enabled / disabled, this value is always true. Note: Available cannot be false of Enabled is true, so during inventory reporting, Enabled=1 also logically states Available=true
752    Enabled,
753    /// Energy quantity (in Wh) for reporting/configuring values related to stored energy (i.e. not transferred energy).
754    Energy,
755    /// Energy capacity in Wh of an energy storage device.
756    EnergyCapacity,
757    /// Total energy transferred: e.g. from EV during (ongoing or terminated) charging session (in wH by default)
758    EnergyExport,
759    /// Cumulative export kWh register value, such as from a (certified) fiscal energy meter.
760    EnergyExportRegister,
761    /// Total energy transferred.
762    EnergyImport,
763    /// Cumulative export kWh register value, such as from a (certified) fiscal energy meter.
764    EnergyImportRegister,
765    /// General purpose variable for reporting/managing numbers of entries in repetitive data structures. maxLimit characteristic reports maximum possible entries.
766    Entries,
767    /// Date/time when the configuration was changed externally, i.e. outside of CSMS, for example by a local service action.
768    ExternalConfigChangeDate,
769    /// Indicates whether a Charging Station allows an external system to submit a `ChargingStationExternalConstraints` charging profile.
770    ExternalConstraintsProfileDisallowed,
771    /// Indicates whether a Charging Station is able to respond to external control signals that influence charging. If the variable is true, but CSMS has set \<\<configkey-external-constraints-profile-disallowed\>\> = true, then external control signals are only allowed during a charging profile with a _chargingProfilePeriod_ = `ExternalLimits` or `ExternalSetpoint`.
772    ExternalControlSignalsEnabled,
773    /// Component is operating in a fallback, or backup mode. In inventory reports, a Value of 1 for the maxLimit characteristic indicates that the component can enter a fallback state (i.e. a fallback mode is present).
774    Fallback,
775    /// Fan Speed (in RPM). A value of 0 represents stopped/stalled. An empty value indicates that fan speed cannot be read.
776    FanSpeed,
777    /// This variable is used to report the length of \<field\> in \<message\> when it is larger
778    FieldLength,
779    /// List of supported file transfer protocols.
780    FileTransferProtocols,
781    /// Version number of firmware.
782    FirmwareVersion,
783    /// Reports (impact) force/ acceleration values (estimates) in one or more directions, in units of Newtons or “g”. Multiple force readings in different (orthogonal) dimensions may be reported using Variable instance values, such as Down, Right, Forward.
784    Force,
785    /// List of message formats supported by this Charging Station. Possible values: ASCII, HTML, URI, UTF-8.
786    Formats,
787    /// Frequency of AC power, signal, or component operation.
788    Frequency,
789    /// A JSON-formatted string with an array of { _time, freq_ } pairs, in which _time_ is
790    FrequencySchedule,
791    /// Current rating of a fuse/breaker. Variable instances keyed by phase identifier (L1/L2/L3/N).
792    FuseRating,
793    /// This configuration determines how to act when a driver-specific tariff is received, which cannot be processed.
794    HandleFailedTariff,
795    /// Interval of inactivity (no OCPP exchanges) with CSMS after which the Charging Station should send HeartbeatRequest.
796    HeartbeatInterval,
797    /// Height above(+)/below(-) reference level (ground level unless context demands otherwise).
798    Height,
799    /// The relative humidity in %.
800    Humidity,
801    /// Specifies the width of a 'dead band' (as a percentage of the threshold) around the central value of a threshold setting (e.g. MinSet, MaxSet, monitor thresholds) to avoid repeated triggering when the measured quantity lies close to the threshold and is subject to small variations.
802    Hysteresis,
803    /// ICCID (Integrated Circuit Card IDentifier) of mobile data SIM card.
804    ICCID,
805    /// IMSI (International Mobile Subscriber Identity) number of mobile data SIM card
806    IMSI,
807    /// EVSE ID in string format as used in ISO 15118 and IEC 63119-2
808    ISO15118EvseId,
809    /// The IdToken used to authorize a charging transaction.
810    IdToken,
811    /// The Charging Station identity.
812    Identity,
813    /// Impedance: Primary value is real (resistive only) impedance. Where a complex impedance is to be reported, the imaginary part (reactance) must be represented with a separate Variable instance value of 'reactance'. Reactance values are expressed at the (nominal) relevant operating frequency of the Component (e.g. 50/60Hz for mains electricity feed).
814    Impedance,
815    /// Minimum Interval (in seconds) between (attempted) operations.
816    Interval,
817    /// Maximum number of ComponentVariable entries that can be sent in one GetReportRequest or GetMonitoringReportRequest message.
818    ItemsPerMessage,
819    /// Label for a component. Specifies a non-unique label to be used in a hierarchy UI rendering, in place of the unique component name and instance
820    Label,
821    /// Default language code, per RFC 5646, of this Charging Station.
822    Language,
823    /// General Purpose linear distance measure.
824    Length,
825    /// Indicates how long it takes until a token expires in the authorization cache since it is last used.
826    LifeTime,
827    /// (Ambient) light level. The value is in Lux.
828    Light,
829    /// If at the Charging Station side a change in the limit in a ChargingProfile is lower than this percentage, the Charging Station MAY skip sending a NotifyChargingLimitRequest or a TransactionEventRequest message to the CSMS.
830    LimitChangeSignificance,
831    /// Whether the Charging Station, when _Offline_, will start a transaction for locally-authorized identifiers.
832    LocalAuthorizeOffline,
833    /// The amount of change in net frequency in *mHz* is needed to trigger a recalculation of the setpoint.
834    LocalFrequencyUpdateThreshold,
835    /// Variable with instances to control local load-balancing.
836    LocalLoadBalancing,
837    /// Whether the Charging Station, when online, will start a transaction for locally-authorized identifiers without waiting for or requesting an AuthorizeResponse from the CSMS.
838    LocalPreAuthorize,
839    /// Points to a logical parent component, to allow rendering a comprehensive overview of the Charging Station components in a UI.
840    LogicalParent,
841    /// Component Manufacturer name
842    Manufacturer,
843    /// IdTokens that have this id as groupId belong to the Master Pass Group.
844    MasterPassGroupId,
845    /// This configuration variable can be used to limit the size of the 'certificateChain' field from the CertificateSignedRequest PDU.
846    MaxCertificateChainSize,
847    /// For TariffCostCtrlr: Specifies the maximum number of _prices_ elements that the Charging Station supports in each _energy_, _chargingTime, _idleTime_ and _fixedFee_ of a TariffType.
848    MaxElements,
849    /// Maximum amount of energy in Wh delivered when an identifier is deauthorized by the CSMS after start of a transaction.
850    MaxEnergyOnInvalidId,
851    /// Defines the highest value that a charging profile id of a `ChargingStationExternalConstraints` profile in the Charging Station can have.
852    MaxExternalConstraintsId,
853    /// The maximum number of open periodic event streams that Charging Station supports.
854    MaxPeriodicEventStreams,
855    /// For ISO15118Ctrlr: The maximum number of _priceRuleStacks_ and _priceLevelScheduleEntries_ that Charging Station is able to accept in a ChargingScheduleType.
856    MaxPriceElements,
857    /// The maximum state of charge that a battery will be charged to.
858    MaxSoc,
859    /// Measurand(s) to be included in \<\<metervaluesrequest,MeterValuesRequest\>\> or \<\<transactioneventrequest,TransactionEventRequest\>\>
860    Measurands,
861    /// Specific stored message for display.
862    Message,
863    /// How long the Charging Station should wait before resubmitting a TransactionEventRequest message that the CSMS failed to process.
864    MessageAttemptInterval,
865    /// How often the Charging Station should try to submit a TransactionEventRequest message when the CSMS fails to process it.
866    MessageAttempts,
867    /// The purpose of the message timeout is to be able to consider a request message as not sent and continue with other tasks when the message did not arrive due to communication errors or software failure.
868    MessageTimeout,
869    /// Minimum duration that a Charging Station or EVSE status is stable before StatusNotificationRequest is sent to the CSMS.
870    MinimumStatusDuration,
871    /// Operating mode string from among valid options (communicated by OptionList, etc. during capability/configuration discovery).
872    Mode,
873    /// Manufacturer's Model code/number of Component, including suffixes etc. to identify functional, regional or linguistic variation, but NOT engineering change level internal variation not affecting external behaviour, etc.
874    Model,
875    /// Current network address of a Component.
876    NetworkAddress,
877    /// A comma separated ordered list of the priority of the possible Network Connection Profiles. The list of possible available profile slots for the network configuration profiles SHALL be reported, via the valuesList characteristic of this Variable.
878    NetworkConfigurationPriority,
879    /// Specifies the number of connection attempts the Charging Station executes before switching to a different profile.
880    NetworkProfileConnectionAttempts,
881    /// Date time of the next time offset transition. On this date time, the clock displayed to the EV driver will be given the new offset as configured via `TimeOffsetNextTransition`.
882    NextTimeOffsetTransitionDateTime,
883    /// For ReservationCtrlr: If this configuration variable is present and set to _true_: Charging Station supports reservation where EVSE id is not specified.
884    NonEvseSpecific,
885    /// For ISO15118Ctrlr: The SECC (EVSE) uses the NotificationMaxDelay element in the EVSEStatus to indicate the time in seconds until it expects the EVCC (EV) to react on the action request indicated in EVSENotification.
886    NotificationMaxDelay,
887    /// Indicates if the Charging Station should include the externally set charging limit/schedule in the message when it sends a NotifyChargingLimitRequest message.
888    NotifyChargingLimitWithSchedules,
889    /// This contains the address of the NTP server.
890    NtpServerUri,
891    /// Use the NTP server provided via DHCP, or use the manually configured NTP server.
892    NtpSource,
893    /// When set and the Charging Station is _offline_, the Charging Station shall queue any NotifyEventRequest messages triggered by a monitor with a severity number equal to or lower than the severity configured here.
894    OfflineQueuingSeverity,
895    /// Message (and/or tariff information) to be shown to an EV Driver when Charging Station is offline.
896    OfflineTariffFallbackMessage,
897    /// When the offline period of a Charging Station exceeds the `OfflineThreshold` it is recommended to send a StatusNotificationRequest for all its Connectors when the Charging Station is back online.
898    OfflineThreshold,
899    /// If this key exists and is true, the Charging Station supports Unknown Offline Authorization.
900    OfflineTxForUnknownIdEnabled,
901    /// The Component operated in an instantaneous, transient, or immediately self-resetting pattern. Used only in event notifications, where it is always true.
902    Operated,
903    /// Recurring operating times in iCalendar RRULE format.
904    OperatingTimes,
905    /// The organizationName of the CSO operating the charging station.
906    OrganizationName,
907    /// Component is in Overload state.
908    Overload,
909    /// Generic dimensionless value reporting/setting value.
910    Percent,
911    /// Maximum number of periods that may be defined per ChargingSchedule.
912    PeriodsPerSchedule,
913    /// This variable describes the phase rotation of a Component relative to its parent Component, using a
914    PhaseRotation,
915    /// If defined and true, this Charging Station supports switching from 3 to 1 phase during a transaction.
916    Phases3to1,
917    /// Points to a physical parent component (container), to allow rendering an overview of the Charging Station component locations in a UI.
918    PhysicalParent,
919    /// If this variable is _true_, then ISO 15118 plug and charge as described by use case C07 - Authorization using Contract Certificates is enabled.
920    PnCEnabled,
921    /// Cache Entry Replacement Policy: least recently used, least frequently used, first in first out, other custom mechanism.
922    Policy,
923    /// Elapsed time in seconds since last substantive energy transfer
924    PostChargingTime,
925    /// Instantaneous (real) Power (measured/calculated, including power factor for AC). Where a component (e.g. AC to DC Power Converter) has multiple power measurements, the default (unkeyed) instance is “input” power.
926    Power,
927    /// Component exists, but might not be locally configured/wired for use, nor (remotely) Enabled.
928    Present,
929    /// Component itself has a 'Problem' condition that impacts in any significant way on its normal operation. By definition, 'Problem' state includes (logical OR) 'Fault' state. 'Problem' specifically INCLUDES inability to operate that is propagated (up/down/sideways) from any other associated/connected/containing/contained Component.
930    Problem,
931    /// Maximum acceptable value for _stackLevel_ in a ChargingProfile.
932    ProfileStackLevel,
933    /// Applies to 'sensor' type Components that have an associated protection capability, whereby they can disconnect power (e.g. using the main PowerContactor) if the sensed quantity is outside preset/configured limits. If Protecting is true, the Component is actively preventing/interrupting charging.
934    Protecting,
935    /// For ConnectedEV: A string with the following comma-separated items: “\<uri\>,\<major\>,\<minor\>”. This is the protocol uri and version information that was agreed upon between EV and EVSE in the supportedAppProtocolReq handshake from ISO 15118.
936    ProtocolAgreed,
937    /// For ISO15118Ctrlr: A string with the following comma-separated items: “\<uri\>,\<major\>,\<minor\>”. \<uri\> is in the format as used in the SupportedAppProtocolReq message from ISO 15118-2 and ISO 15118-20. This variable has at most 20 instances, one for each supported protocol version.
938    ProtocolSupported,
939    /// For ConnectedEV: A string with the following comma-separated items: “\<uri\>,\<major\>,\<minor\>”. This is information from the SupportedAppProtocolReq message from ISO 15118. Each priority is given its own variable instance. Priority is a number from 1 to 20 as a string.
940    ProtocolSupportedByEV,
941    /// Configuration variable that can be used to retrieve the public key for a meter connected to a specific EVSE.
942    PublicKey,
943    /// This Configuration Variable can be used to configure whether a public key needs to be sent with a signed meter value.
944    PublicKeyWithSignedMeterValue,
945    /// When this variable is set to _true_, the Charging Station will queue all message until they are delivered to the CSMS.
946    QueueAllMessages,
947    /// A list of supported quantities (A, W) for use in a ChargingSchedule.
948    RateUnit,
949    /// If this variable reports a value of _true_, then meter values of measurand `Energy.Active.Import.Register` will only report the total energy over all phases without reporting the individual phase values.
950    RegisterValuesWithoutPhases,
951    /// Number of seconds remaining to charge to bulk state of charge, given by StateOfChargeBulk.
952    RemainingTimeBulk,
953    /// Number of seconds remaining to charge to 100% state of charge.
954    RemainingTimeFull,
955    /// This Configuration Variable can be used to limit the following fields: GetVariableResult.attributeValue, VariableAttribute.value and EventData.actualValue.
956    ReportingValueSize,
957    /// For ISO15118Ctrlr: If this variable is _true_, then Charging Station shall request a metering receipt
958    RequestMeteringReceipt,
959    /// Number of times to retry a reset of the Charging Station when a reset was unsuccessful.
960    ResetRetries,
961    /// This variable defines the maximum number of seconds that a transaction may be interrupted by a power outage and still be resumed afterwards.
962    ResumptionTimeout,
963    /// The set of measurands to be sampled by the DataCollector component.
964    SampledMeasurands,
965    /// The sampling interval in *seconds*.
966    SamplingInterval,
967    /// The name of the SECC in the string format as required by ISO 15118.
968    SeccId,
969    /// This configuration variable is used to report the security profile used by the Charging Station.
970    SecurityProfile,
971    /// For AlignedDataCtrlr: If set to _true_, the Charging Station SHALL only send clock aligned meter values when there is no transaction ongoing.
972    SendDuringIdle,
973    /// Serial number of Component.
974    SerialNumber,
975    /// For ISO15118Ctrlr: If set to 'True' the SECC (EVSE) is capable of ServiceRenegotiation.
976    ServiceRenegotiationSupport,
977    /// Defines which _setpoint_ shall be used when a `ChargingStationExternalConstraints` profile
978    SetpointPriority,
979    /// If set to _true_, the Charging Station SHALL include signed meter values in the TransactionEventRequest(Ended).
980    SignReadings,
981    /// If set to _true_, the Charging Station SHALL include signed meter values for _context_ = `Transaction.Begin` in the _metervalues_ field in the TransactionEventRequest(Started or Updated).
982    SignStartedReadings,
983    /// If set to _true_, the Charging Station SHALL include signed meter values in the _metervalues_ field in the TransactionEventRequest(Updated).
984    SignUpdatedReadings,
985    /// (Radio/Wired/Optical) data signal strength, in ASU (typically 0-31 or 99 for unknown). Or dbmW (typically -140 to -50).
986    SignalStrength,
987    /// This variable represents the status of the door of the battery slot.
988    SlotStatus,
989    /// SoC of the component BatteryCartridge which refers to the battery that is inserted at the EVSE.
990    SoC,
991    /// SoH of the component BatteryCartridge which refers to the battery that is inserted at the EVSE.
992    SoH,
993    /// A state code or name identifier string, to allow the internal state of components to be reported and/or controlled
994    State,
995    /// Energy Storage Device (e.g. battery) state of charge, expressed as a percentage of nominal design 0-100% operating range. The value of StateOfCharge.maxSet represents the maximum state of charge for a full battery and is usually at or near 100%.
996    StateOfCharge,
997    /// Energy Storage Device (e.g. battery) state of charge up to which fast charging is possible. Above this percentage charging speed will drop significantly.
998    StateOfChargeBulk,
999    /// When set to _true_, the Charging Station SHALL deauthorize the transaction when the cable is unplugged from the EV.
1000    StopTxOnEVSideDisconnect,
1001    /// Whether the Charging Station will deauthorize an ongoing transaction when it receives a non- _Accepted_ authorization status in TransactionEventResponse for this transaction.
1002    StopTxOnInvalidId,
1003    /// In bytes. Amount of storage occupied. Storage(maxLimit) specifies absolute limit Storage(MaxSet) restricts usage to specified Max, if supported.
1004    Storage,
1005    /// Number of alternating current phases connected/available. 1 or 3 for AC, 0 means DC (no alternating phases). Null value indicates that the number of phases (e.g. in use) is unknown.
1006    SupplyPhases,
1007    /// This configuration variable lists the additional charging profile purposes, that have been introduced in OCPP 2.1, that are supported by the Charging Station.
1008    SupportedAdditionalPurposes,
1009    /// Lists the energy transfer services that are supported by the Charging Station.
1010    SupportedEnergyTransferModes,
1011    /// For DisplayMessageCtrlr: List of message formats supported by this Charging Station.
1012    SupportedFormats,
1013    /// The subset of the list of supported IdTokenTypes as defined in Appendix 7.
1014    SupportedIdTokenTypes,
1015    /// This variable defines which transaction limits in TransactionLimitType are supported by the Charging Station.
1016    SupportedLimits,
1017    /// Lists the V2X operation modes that are supported by the Charging Station.
1018    SupportedOperationModes,
1019    /// For DisplayMessageCtrlr: List of the priorities supported by this Charging Station.
1020    SupportedPriorities,
1021    /// A comma-separated list of all providers (eMSPs) that are supported on this Charging Station. The providers are listed using country and provider ID from the EMAID, as defined in ISO 15118-20.
1022    SupportedProviders,
1023    /// For DisplayMessageCtrlr: List of the states during which to display a message supported by this Charging Station.
1024    SupportedStates,
1025    /// When this variable has value True, then the Charging Station supports charging profiles of type `Dynamic`.
1026    SupportsDynamicProfiles,
1027    /// When reported as true the Charging Station supports the _evseSleep_ flag in a ChargingSchedulePeriod, which requests the EVSE electronics to go to sleep during _operationMode_ = 'Idle'.
1028    SupportsEvseSleep,
1029    /// For LocalAuthListCtrlr: When set to _true_ Charging Station will disregard idTokens for authorization as if not present in the Local Authorization List when current date/time is past the value of _cacheExpiryDateTime_.
1030    SupportsExpiryDateTime,
1031    /// When this variable has value True, then the Charging Station supports the field _limitAtSoC_ in ChargingSchedul, which will cap the limit or setpoint in the ChargingSchedulePeriodType by the value of _limitAtSoC.limit._
1032    SupportsLimitAtSoC,
1033    /// When this variable has value True, then the Charging Station supports the fields _maxOfflineDuration_ and _invalidAfterOfflineDuration_ in ChargingProfile.
1034    SupportsMaxOfflineDuration,
1035    /// When this variable has value True, then the Charging Station supports the field _randomizedDelay_ in ChargingSchedule, which will delay the start of each charging schedule period by a random number between 0 and _randomizedDelay_.
1036    SupportsRandomizedDelay,
1037    /// When this variable has value True, then the Charging Station supports the field _useLocalTime_ in ChargingSchedule.
1038    SupportsUseLocalTime,
1039    /// If Suspending is true, the Component can is currently suspending charging.
1040    Suspending,
1041    /// Applies to 'sensor' type Components that have a charging suspension capability, typically for safety or equipment protection reasons. If Suspension is true, the component can suspend charging when the sensed quantity is outside preset/configured limits.
1042    Suspension,
1043    /// For BatterySwapCtrlr: The state of charge that a battery must have in order to be eligible for swapping.
1044    TargetSoc,
1045    /// Message (and/or tariff information) to be shown to an EV Driver when there is no driver specific tariff information available.
1046    TariffFallbackMessage,
1047    /// Temperature(s) of component (in Celsius, by default). Components may have multiple indexed temperature sensors.
1048    Temperature,
1049    /// Point in time value, in ISO 8601 datetime format. Time zone optional.
1050    Time,
1051    /// When the clock time is adjusted forwards or backwards for more then TimeAdjustmentReportingThreshold number of seconds, a SecurityEventNotification( 'SettingSystemTime' ) is sent by the charging station.
1052    TimeAdjustmentReportingThreshold,
1053    /// A Time Offset with respect to Coordinated Universal Time (aka UTC or Greenwich Mean Time) in the form of an \[RFC3339\] time (zone) offset suffix, including the mandatory “+” or “-“ prefix.
1054    TimeOffset,
1055    /// Via this variable, the Charging Station provides the CSMS with the option to configure a clock source.
1056    TimeSource,
1057    /// Configured current local time zone in the format: 'Europe/Oslo', 'Asia/Singapore' etc.
1058    TimeZone,
1059    /// Generic timeout value for Component operation (in seconds).
1060    ///
1061    /// Also listed as: For BatterySwapCtrlr: Timeout in seconds in which a set of batteries must be inserted or removed after successful authorization.
1062    Timeout,
1063    /// String of bytes representing an ID token.
1064    Token,
1065    /// Type of Token. Value is one of IdTokenEnumStringType (See Appendix 7).
1066    TokenType,
1067    /// Message to be shown to an EV Driver when the Charging Station cannot retrieve the cost for a transaction at the end of the transaction.
1068    TotalCostFallbackMessage,
1069    /// Number of attempts done by a Component.
1070    Tries,
1071    /// Single-shot device requires explicit intervention to re-prime/activate to normal.
1072    Tripped,
1073    /// With this configuration variable the Charging Station can be configured to allow charging before having received a BootNotificationResponse with status: Accepted.
1074    TxBeforeAcceptedEnabled,
1075    /// Interval between sampling of metering (or other) data, intended to be transmitted in the TransactionEventRequest(Ended) message.
1076    TxEndedInterval,
1077    /// Sampled measurands to be included in the _meterValues_ element of TransactionEventRequest(Ended).
1078    TxEndedMeasurands,
1079    /// Start points for a transaction.
1080    TxStartPoint,
1081    /// Sampled measurands to be included in the _meterValues_ element of TransactionEventRequest(Started).
1082    TxStartedMeasurands,
1083    /// Stop points of a transaction.
1084    TxStopPoint,
1085    /// Interval between sampling of metering (or other) data, intended to be transmitted in the TransactionEventRequest(Updated) message.
1086    TxUpdatedInterval,
1087    /// Sampled measurands to be included in the _meterValues_ element of TransactionEventRequest(Updated).
1088    TxUpdatedMeasurands,
1089    /// When set to true, the Charging Station SHALL unlock the cable on the Charging Station side when the cable is unplugged at the EV.
1090    UnlockOnEVSideDisconnect,
1091    /// Interval between sampling of metering (or other) data, intended to be transmitted via TransactionEventRequest(Updated) messages for location = `Upstream` only.
1092    UpstreamInterval,
1093    /// Sampled measurands to be included in the _meterValues_ element of every TransactionEventRequest(Updated) for location = `Upstream` only.
1094    UpstreamMeasurands,
1095    /// If this variable is _true_, then ISO 15118 V2G Charging Station certificate installation as described by use case A02 - Update Charging Station Certificate by request of CSMS
1096    V2GCertificateInstallationEnabled,
1097    /// For ConnectedEV: The PEM encoded X.509 leaf/intermediate/root certificate when present in the vehicle certificate chain.
1098    VehicleCertificate,
1099    /// ID that EV provides to charging station. Encoded as a hexbinary string. In ISO 15118 the EVCCID is 6 bytes (MAC address), in CHAdeMO the vehicle id can be 24 bytes.
1100    VehicleId,
1101    /// \[RFC3339\]
1102    VersionDate,
1103    /// Version number of hardware
1104    VersionNumber,
1105    /// Percentage voltage imbalance in three phase supply.
1106    VoltageImbalance,
1107    /// This variable represents the current working mode of the battery in BatteryCartridge component.
1108    WorkingMode,
1109    /// Listed in the specification's device model table but not in its dedicated name table.
1110    VendorName,
1111    /// Listed in the specification's device model table but not in its dedicated name table.
1112    SupportedIdTokenType,
1113    /// Listed in the specification's device model table but not in its dedicated name table.
1114    SelftestActive,
1115    /// Listed in the specification's device model table but not in its dedicated name table.
1116    CHAdeMOProtocolNumber,
1117    /// Listed in the specification's device model table but not in its dedicated name table.
1118    VehicleStatus,
1119    /// Listed in the specification's device model table but not in its dedicated name table.
1120    DynamicControl,
1121    /// Listed in the specification's device model table but not in its dedicated name table.
1122    HighCurrentControl,
1123    /// Listed in the specification's device model table but not in its dedicated name table.
1124    HighVoltageControl,
1125    /// Listed in the specification's device model table but not in its dedicated name table.
1126    AutoManufacturerCode,
1127    /// Listed in the specification's device model table but not in its dedicated name table.
1128    VehicleID,
1129    /// Listed in the specification's device model table but not in its dedicated name table.
1130    BatteryCapacity,
1131    /// Listed in the specification's device model table but not in its dedicated name table.
1132    ValueSize,
1133    /// Listed in the specification's device model table but not in its dedicated name table.
1134    EvseId,
1135    /// Listed in the specification's device model table but not in its dedicated name table.
1136    MaxScheduleEntries,
1137    /// Listed in the specification's device model table but not in its dedicated name table.
1138    RequestedEnergyTransferMode,
1139    /// Listed in the specification's device model table but not in its dedicated name table.
1140    NotificationDelay,
1141    /// Listed in the specification's device model table but not in its dedicated name table.
1142    Capacity,
1143    /// Listed in the specification's device model table but not in its dedicated name table.
1144    MonitoringBase,
1145    /// Listed in the specification's device model table but not in its dedicated name table.
1146    MonitoringLevel,
1147    /// Listed in the specification's device model table but not in its dedicated name table.
1148    RetryBackOffRandomRange,
1149    /// Listed in the specification's device model table but not in its dedicated name table.
1150    RetryBackOffRepeatTimes,
1151    /// Listed in the specification's device model table but not in its dedicated name table.
1152    RetryBackOffWaitMinimum,
1153    /// Listed in the specification's device model table but not in its dedicated name table.
1154    WebSocketPingInterval,
1155    /// Listed in the specification's device model table but not in its dedicated name table.
1156    EnergyTransferResumptionRandomRange,
1157    /// Listed in the specification's device model table but not in its dedicated name table.
1158    MaxW,
1159    /// Listed in the specification's device model table but not in its dedicated name table.
1160    OverExcitedW,
1161    /// Listed in the specification's device model table but not in its dedicated name table.
1162    OverExcitedPF,
1163    /// Listed in the specification's device model table but not in its dedicated name table.
1164    UnderExcitedW,
1165    /// Listed in the specification's device model table but not in its dedicated name table.
1166    UnderExcitedPF,
1167    /// Listed in the specification's device model table but not in its dedicated name table.
1168    MaxVA,
1169    /// Listed in the specification's device model table but not in its dedicated name table.
1170    MaxVar,
1171    /// Listed in the specification's device model table but not in its dedicated name table.
1172    MaxVarNeg,
1173    /// Listed in the specification's device model table but not in its dedicated name table.
1174    MaxChargeRateW,
1175    /// Listed in the specification's device model table but not in its dedicated name table.
1176    MaxChargeRateVA,
1177    /// Listed in the specification's device model table but not in its dedicated name table.
1178    VNom,
1179    /// Listed in the specification's device model table but not in its dedicated name table.
1180    MaxV,
1181    /// Listed in the specification's device model table but not in its dedicated name table.
1182    MinV,
1183    /// Listed in the specification's device model table but not in its dedicated name table.
1184    ModesSupported,
1185    /// Listed in the specification's device model table but not in its dedicated name table.
1186    InverterManufacturer,
1187    /// Listed in the specification's device model table but not in its dedicated name table.
1188    InverterModel,
1189    /// Listed in the specification's device model table but not in its dedicated name table.
1190    InverterSerialNumber,
1191    /// Listed in the specification's device model table but not in its dedicated name table.
1192    InverterSwVersion,
1193    /// Listed in the specification's device model table but not in its dedicated name table.
1194    InverterHwVersion,
1195    /// Listed in the specification's device model table but not in its dedicated name table.
1196    IslandingDetectionMethod,
1197    /// Listed in the specification's device model table but not in its dedicated name table.
1198    IslandingDetectionTripTime,
1199    /// Listed in the specification's device model table but not in its dedicated name table.
1200    ReactiveSusceptance,
1201    /// Listed in the specification's device model table but not in its dedicated name table.
1202    TargetSoC,
1203    /// Listed in the specification's device model table but not in its dedicated name table.
1204    OcppCsmsUrl,
1205    /// Listed in the specification's device model table but not in its dedicated name table.
1206    OcppInterface,
1207    /// Listed in the specification's device model table but not in its dedicated name table.
1208    OcppTransport,
1209    /// Listed in the specification's device model table but not in its dedicated name table.
1210    OcppVersion,
1211    /// Listed in the specification's device model table but not in its dedicated name table.
1212    CsmsRootCertificateHashAlgorithm,
1213    /// Listed in the specification's device model table but not in its dedicated name table.
1214    CsmsRootCertificateIssuerKeyHash,
1215    /// Listed in the specification's device model table but not in its dedicated name table.
1216    CsmsRootCertificateIssuerNameHash,
1217    /// Listed in the specification's device model table but not in its dedicated name table.
1218    CsmsRootCertificateSerialNumber,
1219    /// Listed in the specification's device model table but not in its dedicated name table.
1220    VpnEnabled,
1221    /// Listed in the specification's device model table but not in its dedicated name table.
1222    VpnType,
1223    /// Listed in the specification's device model table but not in its dedicated name table.
1224    VpnServer,
1225    /// Listed in the specification's device model table but not in its dedicated name table.
1226    VpnUser,
1227    /// Listed in the specification's device model table but not in its dedicated name table.
1228    VpnGroup,
1229    /// Listed in the specification's device model table but not in its dedicated name table.
1230    VpnPassword,
1231    /// Listed in the specification's device model table but not in its dedicated name table.
1232    VpnKey,
1233    /// Listed in the specification's device model table but not in its dedicated name table.
1234    ApnEnabled,
1235    /// Listed in the specification's device model table but not in its dedicated name table.
1236    Apn,
1237    /// Listed in the specification's device model table but not in its dedicated name table.
1238    ApnUserName,
1239    /// Listed in the specification's device model table but not in its dedicated name table.
1240    ApnPassword,
1241    /// Listed in the specification's device model table but not in its dedicated name table.
1242    SimPin,
1243    /// Listed in the specification's device model table but not in its dedicated name table.
1244    PreferredNetwork,
1245    /// Listed in the specification's device model table but not in its dedicated name table.
1246    UseOnlyPreferredNetwork,
1247    /// Listed in the specification's device model table but not in its dedicated name table.
1248    ApnAuthentication,
1249    /// Listed in the specification's device model table but not in its dedicated name table.
1250    AuthorizeDirectPayment,
1251    /// Listed in the specification's device model table but not in its dedicated name table.
1252    AuthorizationAmount,
1253    /// Listed in the specification's device model table but not in its dedicated name table.
1254    IncrementalAuthorizationAmount,
1255    /// Listed in the specification's device model table but not in its dedicated name table.
1256    IncrementalAuthorizationThreshold,
1257    /// Listed in the specification's device model table but not in its dedicated name table.
1258    PaymentDetails,
1259    /// Listed in the specification's device model table but not in its dedicated name table.
1260    SettlementByCSMS,
1261    /// Listed in the specification's device model table but not in its dedicated name table.
1262    ReceiptServerUrl,
1263    /// Listed in the specification's device model table but not in its dedicated name table.
1264    ReceiptByCSMS,
1265    /// Listed in the specification's device model table but not in its dedicated name table.
1266    Merchant,
1267    /// Listed in the specification's device model table but not in its dedicated name table.
1268    TerminalID,
1269    /// Listed in the specification's device model table but not in its dedicated name table.
1270    PaymentServiceProvider,
1271    /// Listed in the specification's device model table but not in its dedicated name table.
1272    Connected,
1273    /// Listed in the specification's device model table but not in its dedicated name table.
1274    URLTemplate,
1275    /// Listed in the specification's device model table but not in its dedicated name table.
1276    URLParameters,
1277    /// Listed in the specification's device model table but not in its dedicated name table.
1278    TOTPVersion,
1279    /// Listed in the specification's device model table but not in its dedicated name table.
1280    ChargingStationId,
1281    /// Listed in the specification's device model table but not in its dedicated name table.
1282    ValidityTime,
1283    /// Listed in the specification's device model table but not in its dedicated name table.
1284    SharedSecret,
1285    /// Listed in the specification's device model table but not in its dedicated name table.
1286    QRCodeQuality,
1287    /** A value this version's specification doesn't define -- typically a
1288 vendor-specific one, which OCPP explicitly permits.
1289
1290 Bounded at 50 bytes, the same `maxLength` the wire field carries,
1291 so anything the field can hold this can hold. Prefer
1292 [`Self::from_wire_or_other`] over constructing this directly: it
1293 returns the standardized variant when the value is one, keeping a
1294 single representation per wire string.*/
1295    Other(heapless::String<50usize>),
1296}
1297impl VariableName {
1298    /// Every value this version's specification defines (328), in spec order.
1299    ///
1300    /// Does not include [`Self::Other`], which is unbounded in the
1301    /// values it can hold.
1302    pub const ALL: &'static [Self] = &[
1303        Self::ACCurrent,
1304        Self::ACPhaseSwitchingSupported,
1305        Self::ACVoltage,
1306        Self::Active,
1307        Self::ActiveMonitoringBase,
1308        Self::ActiveMonitoringLevel,
1309        Self::ActiveNetworkProfile,
1310        Self::ActiveTransactionId,
1311        Self::AdditionalInfoItemsPerMessage,
1312        Self::AdditionalRootCertificateCheck,
1313        Self::AllowEnergyTransferResumption,
1314        Self::AllowNewSessionsPendingFirmwareUpdate,
1315        Self::AllowReset,
1316        Self::AllowSecurityProfileDowngrade,
1317        Self::Angle,
1318        Self::Attempts,
1319        Self::AuthorizeRemoteStart,
1320        Self::AvailabilityState,
1321        Self::Available,
1322        Self::BasicAuthPassword,
1323        Self::BytesPerMessage,
1324        Self::CentralContractValidationAllowed,
1325        Self::CertSigningRepeatTimes,
1326        Self::CertSigningWaitMinimum,
1327        Self::Certificate,
1328        Self::CertificateEntries,
1329        Self::CertificateStatusSource,
1330        Self::ChargeProtocol,
1331        Self::ChargingCompleteBulk,
1332        Self::ChargingCompleteFull,
1333        Self::ChargingProfilePersistence,
1334        Self::ChargingState,
1335        Self::ChargingTime,
1336        Self::Color,
1337        Self::CommunicationParent,
1338        Self::Complete,
1339        Self::ConditionsSupported,
1340        Self::ConfigurationValueSize,
1341        Self::ConnectedTime,
1342        Self::ConnectorType,
1343        Self::ContractCertificateInstallationEnabled,
1344        Self::ContractValidationOffline,
1345        Self::Count,
1346        Self::CountryName,
1347        Self::Currency,
1348        Self::CurrentImbalance,
1349        Self::CustomImplementationEnabled,
1350        Self::CustomTriggers,
1351        Self::DCCurrent,
1352        Self::DCInputPhaseControl,
1353        Self::DCVoltage,
1354        Self::DataText,
1355        Self::DateTime,
1356        Self::DepartureTime,
1357        Self::DisablePostAuthorize,
1358        Self::DisableRemoteAuthorization,
1359        Self::DischargePower,
1360        Self::DisplayMessages,
1361        Self::ECVariant,
1362        Self::EVConnectionTimeOut,
1363        Self::ElectricalParent,
1364        Self::Enabled,
1365        Self::Energy,
1366        Self::EnergyCapacity,
1367        Self::EnergyExport,
1368        Self::EnergyExportRegister,
1369        Self::EnergyImport,
1370        Self::EnergyImportRegister,
1371        Self::Entries,
1372        Self::ExternalConfigChangeDate,
1373        Self::ExternalConstraintsProfileDisallowed,
1374        Self::ExternalControlSignalsEnabled,
1375        Self::Fallback,
1376        Self::FanSpeed,
1377        Self::FieldLength,
1378        Self::FileTransferProtocols,
1379        Self::FirmwareVersion,
1380        Self::Force,
1381        Self::Formats,
1382        Self::Frequency,
1383        Self::FrequencySchedule,
1384        Self::FuseRating,
1385        Self::HandleFailedTariff,
1386        Self::HeartbeatInterval,
1387        Self::Height,
1388        Self::Humidity,
1389        Self::Hysteresis,
1390        Self::ICCID,
1391        Self::IMSI,
1392        Self::ISO15118EvseId,
1393        Self::IdToken,
1394        Self::Identity,
1395        Self::Impedance,
1396        Self::Interval,
1397        Self::ItemsPerMessage,
1398        Self::Label,
1399        Self::Language,
1400        Self::Length,
1401        Self::LifeTime,
1402        Self::Light,
1403        Self::LimitChangeSignificance,
1404        Self::LocalAuthorizeOffline,
1405        Self::LocalFrequencyUpdateThreshold,
1406        Self::LocalLoadBalancing,
1407        Self::LocalPreAuthorize,
1408        Self::LogicalParent,
1409        Self::Manufacturer,
1410        Self::MasterPassGroupId,
1411        Self::MaxCertificateChainSize,
1412        Self::MaxElements,
1413        Self::MaxEnergyOnInvalidId,
1414        Self::MaxExternalConstraintsId,
1415        Self::MaxPeriodicEventStreams,
1416        Self::MaxPriceElements,
1417        Self::MaxSoc,
1418        Self::Measurands,
1419        Self::Message,
1420        Self::MessageAttemptInterval,
1421        Self::MessageAttempts,
1422        Self::MessageTimeout,
1423        Self::MinimumStatusDuration,
1424        Self::Mode,
1425        Self::Model,
1426        Self::NetworkAddress,
1427        Self::NetworkConfigurationPriority,
1428        Self::NetworkProfileConnectionAttempts,
1429        Self::NextTimeOffsetTransitionDateTime,
1430        Self::NonEvseSpecific,
1431        Self::NotificationMaxDelay,
1432        Self::NotifyChargingLimitWithSchedules,
1433        Self::NtpServerUri,
1434        Self::NtpSource,
1435        Self::OfflineQueuingSeverity,
1436        Self::OfflineTariffFallbackMessage,
1437        Self::OfflineThreshold,
1438        Self::OfflineTxForUnknownIdEnabled,
1439        Self::Operated,
1440        Self::OperatingTimes,
1441        Self::OrganizationName,
1442        Self::Overload,
1443        Self::Percent,
1444        Self::PeriodsPerSchedule,
1445        Self::PhaseRotation,
1446        Self::Phases3to1,
1447        Self::PhysicalParent,
1448        Self::PnCEnabled,
1449        Self::Policy,
1450        Self::PostChargingTime,
1451        Self::Power,
1452        Self::Present,
1453        Self::Problem,
1454        Self::ProfileStackLevel,
1455        Self::Protecting,
1456        Self::ProtocolAgreed,
1457        Self::ProtocolSupported,
1458        Self::ProtocolSupportedByEV,
1459        Self::PublicKey,
1460        Self::PublicKeyWithSignedMeterValue,
1461        Self::QueueAllMessages,
1462        Self::RateUnit,
1463        Self::RegisterValuesWithoutPhases,
1464        Self::RemainingTimeBulk,
1465        Self::RemainingTimeFull,
1466        Self::ReportingValueSize,
1467        Self::RequestMeteringReceipt,
1468        Self::ResetRetries,
1469        Self::ResumptionTimeout,
1470        Self::SampledMeasurands,
1471        Self::SamplingInterval,
1472        Self::SeccId,
1473        Self::SecurityProfile,
1474        Self::SendDuringIdle,
1475        Self::SerialNumber,
1476        Self::ServiceRenegotiationSupport,
1477        Self::SetpointPriority,
1478        Self::SignReadings,
1479        Self::SignStartedReadings,
1480        Self::SignUpdatedReadings,
1481        Self::SignalStrength,
1482        Self::SlotStatus,
1483        Self::SoC,
1484        Self::SoH,
1485        Self::State,
1486        Self::StateOfCharge,
1487        Self::StateOfChargeBulk,
1488        Self::StopTxOnEVSideDisconnect,
1489        Self::StopTxOnInvalidId,
1490        Self::Storage,
1491        Self::SupplyPhases,
1492        Self::SupportedAdditionalPurposes,
1493        Self::SupportedEnergyTransferModes,
1494        Self::SupportedFormats,
1495        Self::SupportedIdTokenTypes,
1496        Self::SupportedLimits,
1497        Self::SupportedOperationModes,
1498        Self::SupportedPriorities,
1499        Self::SupportedProviders,
1500        Self::SupportedStates,
1501        Self::SupportsDynamicProfiles,
1502        Self::SupportsEvseSleep,
1503        Self::SupportsExpiryDateTime,
1504        Self::SupportsLimitAtSoC,
1505        Self::SupportsMaxOfflineDuration,
1506        Self::SupportsRandomizedDelay,
1507        Self::SupportsUseLocalTime,
1508        Self::Suspending,
1509        Self::Suspension,
1510        Self::TargetSoc,
1511        Self::TariffFallbackMessage,
1512        Self::Temperature,
1513        Self::Time,
1514        Self::TimeAdjustmentReportingThreshold,
1515        Self::TimeOffset,
1516        Self::TimeSource,
1517        Self::TimeZone,
1518        Self::Timeout,
1519        Self::Token,
1520        Self::TokenType,
1521        Self::TotalCostFallbackMessage,
1522        Self::Tries,
1523        Self::Tripped,
1524        Self::TxBeforeAcceptedEnabled,
1525        Self::TxEndedInterval,
1526        Self::TxEndedMeasurands,
1527        Self::TxStartPoint,
1528        Self::TxStartedMeasurands,
1529        Self::TxStopPoint,
1530        Self::TxUpdatedInterval,
1531        Self::TxUpdatedMeasurands,
1532        Self::UnlockOnEVSideDisconnect,
1533        Self::UpstreamInterval,
1534        Self::UpstreamMeasurands,
1535        Self::V2GCertificateInstallationEnabled,
1536        Self::VehicleCertificate,
1537        Self::VehicleId,
1538        Self::VersionDate,
1539        Self::VersionNumber,
1540        Self::VoltageImbalance,
1541        Self::WorkingMode,
1542        Self::VendorName,
1543        Self::SupportedIdTokenType,
1544        Self::SelftestActive,
1545        Self::CHAdeMOProtocolNumber,
1546        Self::VehicleStatus,
1547        Self::DynamicControl,
1548        Self::HighCurrentControl,
1549        Self::HighVoltageControl,
1550        Self::AutoManufacturerCode,
1551        Self::VehicleID,
1552        Self::BatteryCapacity,
1553        Self::ValueSize,
1554        Self::EvseId,
1555        Self::MaxScheduleEntries,
1556        Self::RequestedEnergyTransferMode,
1557        Self::NotificationDelay,
1558        Self::Capacity,
1559        Self::MonitoringBase,
1560        Self::MonitoringLevel,
1561        Self::RetryBackOffRandomRange,
1562        Self::RetryBackOffRepeatTimes,
1563        Self::RetryBackOffWaitMinimum,
1564        Self::WebSocketPingInterval,
1565        Self::EnergyTransferResumptionRandomRange,
1566        Self::MaxW,
1567        Self::OverExcitedW,
1568        Self::OverExcitedPF,
1569        Self::UnderExcitedW,
1570        Self::UnderExcitedPF,
1571        Self::MaxVA,
1572        Self::MaxVar,
1573        Self::MaxVarNeg,
1574        Self::MaxChargeRateW,
1575        Self::MaxChargeRateVA,
1576        Self::VNom,
1577        Self::MaxV,
1578        Self::MinV,
1579        Self::ModesSupported,
1580        Self::InverterManufacturer,
1581        Self::InverterModel,
1582        Self::InverterSerialNumber,
1583        Self::InverterSwVersion,
1584        Self::InverterHwVersion,
1585        Self::IslandingDetectionMethod,
1586        Self::IslandingDetectionTripTime,
1587        Self::ReactiveSusceptance,
1588        Self::TargetSoC,
1589        Self::OcppCsmsUrl,
1590        Self::OcppInterface,
1591        Self::OcppTransport,
1592        Self::OcppVersion,
1593        Self::CsmsRootCertificateHashAlgorithm,
1594        Self::CsmsRootCertificateIssuerKeyHash,
1595        Self::CsmsRootCertificateIssuerNameHash,
1596        Self::CsmsRootCertificateSerialNumber,
1597        Self::VpnEnabled,
1598        Self::VpnType,
1599        Self::VpnServer,
1600        Self::VpnUser,
1601        Self::VpnGroup,
1602        Self::VpnPassword,
1603        Self::VpnKey,
1604        Self::ApnEnabled,
1605        Self::Apn,
1606        Self::ApnUserName,
1607        Self::ApnPassword,
1608        Self::SimPin,
1609        Self::PreferredNetwork,
1610        Self::UseOnlyPreferredNetwork,
1611        Self::ApnAuthentication,
1612        Self::AuthorizeDirectPayment,
1613        Self::AuthorizationAmount,
1614        Self::IncrementalAuthorizationAmount,
1615        Self::IncrementalAuthorizationThreshold,
1616        Self::PaymentDetails,
1617        Self::SettlementByCSMS,
1618        Self::ReceiptServerUrl,
1619        Self::ReceiptByCSMS,
1620        Self::Merchant,
1621        Self::TerminalID,
1622        Self::PaymentServiceProvider,
1623        Self::Connected,
1624        Self::URLTemplate,
1625        Self::URLParameters,
1626        Self::TOTPVersion,
1627        Self::ChargingStationId,
1628        Self::ValidityTime,
1629        Self::SharedSecret,
1630        Self::QRCodeQuality,
1631    ];
1632    /// This value as it appears on the wire.
1633    pub fn as_str(&self) -> &str {
1634        match self {
1635            Self::ACCurrent => "ACCurrent",
1636            Self::ACPhaseSwitchingSupported => "ACPhaseSwitchingSupported",
1637            Self::ACVoltage => "ACVoltage",
1638            Self::Active => "Active",
1639            Self::ActiveMonitoringBase => "ActiveMonitoringBase",
1640            Self::ActiveMonitoringLevel => "ActiveMonitoringLevel",
1641            Self::ActiveNetworkProfile => "ActiveNetworkProfile",
1642            Self::ActiveTransactionId => "ActiveTransactionId",
1643            Self::AdditionalInfoItemsPerMessage => "AdditionalInfoItemsPerMessage",
1644            Self::AdditionalRootCertificateCheck => "AdditionalRootCertificateCheck",
1645            Self::AllowEnergyTransferResumption => "AllowEnergyTransferResumption",
1646            Self::AllowNewSessionsPendingFirmwareUpdate => {
1647                "AllowNewSessionsPendingFirmwareUpdate"
1648            }
1649            Self::AllowReset => "AllowReset",
1650            Self::AllowSecurityProfileDowngrade => "AllowSecurityProfileDowngrade",
1651            Self::Angle => "Angle",
1652            Self::Attempts => "Attempts",
1653            Self::AuthorizeRemoteStart => "AuthorizeRemoteStart",
1654            Self::AvailabilityState => "AvailabilityState",
1655            Self::Available => "Available",
1656            Self::BasicAuthPassword => "BasicAuthPassword",
1657            Self::BytesPerMessage => "BytesPerMessage",
1658            Self::CentralContractValidationAllowed => "CentralContractValidationAllowed",
1659            Self::CertSigningRepeatTimes => "CertSigningRepeatTimes",
1660            Self::CertSigningWaitMinimum => "CertSigningWaitMinimum",
1661            Self::Certificate => "Certificate",
1662            Self::CertificateEntries => "CertificateEntries",
1663            Self::CertificateStatusSource => "CertificateStatusSource",
1664            Self::ChargeProtocol => "ChargeProtocol",
1665            Self::ChargingCompleteBulk => "ChargingCompleteBulk",
1666            Self::ChargingCompleteFull => "ChargingCompleteFull",
1667            Self::ChargingProfilePersistence => "ChargingProfilePersistence",
1668            Self::ChargingState => "ChargingState",
1669            Self::ChargingTime => "ChargingTime",
1670            Self::Color => "Color",
1671            Self::CommunicationParent => "CommunicationParent",
1672            Self::Complete => "Complete",
1673            Self::ConditionsSupported => "ConditionsSupported",
1674            Self::ConfigurationValueSize => "ConfigurationValueSize",
1675            Self::ConnectedTime => "ConnectedTime",
1676            Self::ConnectorType => "ConnectorType",
1677            Self::ContractCertificateInstallationEnabled => {
1678                "ContractCertificateInstallationEnabled"
1679            }
1680            Self::ContractValidationOffline => "ContractValidationOffline",
1681            Self::Count => "Count",
1682            Self::CountryName => "CountryName",
1683            Self::Currency => "Currency",
1684            Self::CurrentImbalance => "CurrentImbalance",
1685            Self::CustomImplementationEnabled => "CustomImplementationEnabled",
1686            Self::CustomTriggers => "CustomTriggers",
1687            Self::DCCurrent => "DCCurrent",
1688            Self::DCInputPhaseControl => "DCInputPhaseControl",
1689            Self::DCVoltage => "DCVoltage",
1690            Self::DataText => "DataText",
1691            Self::DateTime => "DateTime",
1692            Self::DepartureTime => "DepartureTime",
1693            Self::DisablePostAuthorize => "DisablePostAuthorize",
1694            Self::DisableRemoteAuthorization => "DisableRemoteAuthorization",
1695            Self::DischargePower => "DischargePower",
1696            Self::DisplayMessages => "DisplayMessages",
1697            Self::ECVariant => "ECVariant",
1698            Self::EVConnectionTimeOut => "EVConnectionTimeOut",
1699            Self::ElectricalParent => "ElectricalParent",
1700            Self::Enabled => "Enabled",
1701            Self::Energy => "Energy",
1702            Self::EnergyCapacity => "EnergyCapacity",
1703            Self::EnergyExport => "EnergyExport",
1704            Self::EnergyExportRegister => "EnergyExportRegister",
1705            Self::EnergyImport => "EnergyImport",
1706            Self::EnergyImportRegister => "EnergyImportRegister",
1707            Self::Entries => "Entries",
1708            Self::ExternalConfigChangeDate => "ExternalConfigChangeDate",
1709            Self::ExternalConstraintsProfileDisallowed => {
1710                "ExternalConstraintsProfileDisallowed"
1711            }
1712            Self::ExternalControlSignalsEnabled => "ExternalControlSignalsEnabled",
1713            Self::Fallback => "Fallback",
1714            Self::FanSpeed => "FanSpeed",
1715            Self::FieldLength => "FieldLength",
1716            Self::FileTransferProtocols => "FileTransferProtocols",
1717            Self::FirmwareVersion => "FirmwareVersion",
1718            Self::Force => "Force",
1719            Self::Formats => "Formats",
1720            Self::Frequency => "Frequency",
1721            Self::FrequencySchedule => "FrequencySchedule",
1722            Self::FuseRating => "FuseRating",
1723            Self::HandleFailedTariff => "HandleFailedTariff",
1724            Self::HeartbeatInterval => "HeartbeatInterval",
1725            Self::Height => "Height",
1726            Self::Humidity => "Humidity",
1727            Self::Hysteresis => "Hysteresis",
1728            Self::ICCID => "ICCID",
1729            Self::IMSI => "IMSI",
1730            Self::ISO15118EvseId => "ISO15118EvseId",
1731            Self::IdToken => "IdToken",
1732            Self::Identity => "Identity",
1733            Self::Impedance => "Impedance",
1734            Self::Interval => "Interval",
1735            Self::ItemsPerMessage => "ItemsPerMessage",
1736            Self::Label => "Label",
1737            Self::Language => "Language",
1738            Self::Length => "Length",
1739            Self::LifeTime => "LifeTime",
1740            Self::Light => "Light",
1741            Self::LimitChangeSignificance => "LimitChangeSignificance",
1742            Self::LocalAuthorizeOffline => "LocalAuthorizeOffline",
1743            Self::LocalFrequencyUpdateThreshold => "LocalFrequencyUpdateThreshold",
1744            Self::LocalLoadBalancing => "LocalLoadBalancing",
1745            Self::LocalPreAuthorize => "LocalPreAuthorize",
1746            Self::LogicalParent => "LogicalParent",
1747            Self::Manufacturer => "Manufacturer",
1748            Self::MasterPassGroupId => "MasterPassGroupId",
1749            Self::MaxCertificateChainSize => "MaxCertificateChainSize",
1750            Self::MaxElements => "MaxElements",
1751            Self::MaxEnergyOnInvalidId => "MaxEnergyOnInvalidId",
1752            Self::MaxExternalConstraintsId => "MaxExternalConstraintsId",
1753            Self::MaxPeriodicEventStreams => "MaxPeriodicEventStreams",
1754            Self::MaxPriceElements => "MaxPriceElements",
1755            Self::MaxSoc => "MaxSoc",
1756            Self::Measurands => "Measurands",
1757            Self::Message => "Message",
1758            Self::MessageAttemptInterval => "MessageAttemptInterval",
1759            Self::MessageAttempts => "MessageAttempts",
1760            Self::MessageTimeout => "MessageTimeout",
1761            Self::MinimumStatusDuration => "MinimumStatusDuration",
1762            Self::Mode => "Mode",
1763            Self::Model => "Model",
1764            Self::NetworkAddress => "NetworkAddress",
1765            Self::NetworkConfigurationPriority => "NetworkConfigurationPriority",
1766            Self::NetworkProfileConnectionAttempts => "NetworkProfileConnectionAttempts",
1767            Self::NextTimeOffsetTransitionDateTime => "NextTimeOffsetTransitionDateTime",
1768            Self::NonEvseSpecific => "NonEvseSpecific",
1769            Self::NotificationMaxDelay => "NotificationMaxDelay",
1770            Self::NotifyChargingLimitWithSchedules => "NotifyChargingLimitWithSchedules",
1771            Self::NtpServerUri => "NtpServerUri",
1772            Self::NtpSource => "NtpSource",
1773            Self::OfflineQueuingSeverity => "OfflineQueuingSeverity",
1774            Self::OfflineTariffFallbackMessage => "OfflineTariffFallbackMessage",
1775            Self::OfflineThreshold => "OfflineThreshold",
1776            Self::OfflineTxForUnknownIdEnabled => "OfflineTxForUnknownIdEnabled",
1777            Self::Operated => "Operated",
1778            Self::OperatingTimes => "OperatingTimes",
1779            Self::OrganizationName => "OrganizationName",
1780            Self::Overload => "Overload",
1781            Self::Percent => "Percent",
1782            Self::PeriodsPerSchedule => "PeriodsPerSchedule",
1783            Self::PhaseRotation => "PhaseRotation",
1784            Self::Phases3to1 => "Phases3to1",
1785            Self::PhysicalParent => "PhysicalParent",
1786            Self::PnCEnabled => "PnCEnabled",
1787            Self::Policy => "Policy",
1788            Self::PostChargingTime => "PostChargingTime",
1789            Self::Power => "Power",
1790            Self::Present => "Present",
1791            Self::Problem => "Problem",
1792            Self::ProfileStackLevel => "ProfileStackLevel",
1793            Self::Protecting => "Protecting",
1794            Self::ProtocolAgreed => "ProtocolAgreed",
1795            Self::ProtocolSupported => "ProtocolSupported",
1796            Self::ProtocolSupportedByEV => "ProtocolSupportedByEV",
1797            Self::PublicKey => "PublicKey",
1798            Self::PublicKeyWithSignedMeterValue => "PublicKeyWithSignedMeterValue",
1799            Self::QueueAllMessages => "QueueAllMessages",
1800            Self::RateUnit => "RateUnit",
1801            Self::RegisterValuesWithoutPhases => "RegisterValuesWithoutPhases",
1802            Self::RemainingTimeBulk => "RemainingTimeBulk",
1803            Self::RemainingTimeFull => "RemainingTimeFull",
1804            Self::ReportingValueSize => "ReportingValueSize",
1805            Self::RequestMeteringReceipt => "RequestMeteringReceipt",
1806            Self::ResetRetries => "ResetRetries",
1807            Self::ResumptionTimeout => "ResumptionTimeout",
1808            Self::SampledMeasurands => "SampledMeasurands",
1809            Self::SamplingInterval => "SamplingInterval",
1810            Self::SeccId => "SeccId",
1811            Self::SecurityProfile => "SecurityProfile",
1812            Self::SendDuringIdle => "SendDuringIdle",
1813            Self::SerialNumber => "SerialNumber",
1814            Self::ServiceRenegotiationSupport => "ServiceRenegotiationSupport",
1815            Self::SetpointPriority => "SetpointPriority",
1816            Self::SignReadings => "SignReadings",
1817            Self::SignStartedReadings => "SignStartedReadings",
1818            Self::SignUpdatedReadings => "SignUpdatedReadings",
1819            Self::SignalStrength => "SignalStrength",
1820            Self::SlotStatus => "SlotStatus",
1821            Self::SoC => "SoC",
1822            Self::SoH => "SoH",
1823            Self::State => "State",
1824            Self::StateOfCharge => "StateOfCharge",
1825            Self::StateOfChargeBulk => "StateOfChargeBulk",
1826            Self::StopTxOnEVSideDisconnect => "StopTxOnEVSideDisconnect",
1827            Self::StopTxOnInvalidId => "StopTxOnInvalidId",
1828            Self::Storage => "Storage",
1829            Self::SupplyPhases => "SupplyPhases",
1830            Self::SupportedAdditionalPurposes => "SupportedAdditionalPurposes",
1831            Self::SupportedEnergyTransferModes => "SupportedEnergyTransferModes",
1832            Self::SupportedFormats => "SupportedFormats",
1833            Self::SupportedIdTokenTypes => "SupportedIdTokenTypes",
1834            Self::SupportedLimits => "SupportedLimits",
1835            Self::SupportedOperationModes => "SupportedOperationModes",
1836            Self::SupportedPriorities => "SupportedPriorities",
1837            Self::SupportedProviders => "SupportedProviders",
1838            Self::SupportedStates => "SupportedStates",
1839            Self::SupportsDynamicProfiles => "SupportsDynamicProfiles",
1840            Self::SupportsEvseSleep => "SupportsEvseSleep",
1841            Self::SupportsExpiryDateTime => "SupportsExpiryDateTime",
1842            Self::SupportsLimitAtSoC => "SupportsLimitAtSoC",
1843            Self::SupportsMaxOfflineDuration => "SupportsMaxOfflineDuration",
1844            Self::SupportsRandomizedDelay => "SupportsRandomizedDelay",
1845            Self::SupportsUseLocalTime => "SupportsUseLocalTime",
1846            Self::Suspending => "Suspending",
1847            Self::Suspension => "Suspension",
1848            Self::TargetSoc => "TargetSoc",
1849            Self::TariffFallbackMessage => "TariffFallbackMessage",
1850            Self::Temperature => "Temperature",
1851            Self::Time => "Time",
1852            Self::TimeAdjustmentReportingThreshold => "TimeAdjustmentReportingThreshold",
1853            Self::TimeOffset => "TimeOffset",
1854            Self::TimeSource => "TimeSource",
1855            Self::TimeZone => "TimeZone",
1856            Self::Timeout => "Timeout",
1857            Self::Token => "Token",
1858            Self::TokenType => "TokenType",
1859            Self::TotalCostFallbackMessage => "TotalCostFallbackMessage",
1860            Self::Tries => "Tries",
1861            Self::Tripped => "Tripped",
1862            Self::TxBeforeAcceptedEnabled => "TxBeforeAcceptedEnabled",
1863            Self::TxEndedInterval => "TxEndedInterval",
1864            Self::TxEndedMeasurands => "TxEndedMeasurands",
1865            Self::TxStartPoint => "TxStartPoint",
1866            Self::TxStartedMeasurands => "TxStartedMeasurands",
1867            Self::TxStopPoint => "TxStopPoint",
1868            Self::TxUpdatedInterval => "TxUpdatedInterval",
1869            Self::TxUpdatedMeasurands => "TxUpdatedMeasurands",
1870            Self::UnlockOnEVSideDisconnect => "UnlockOnEVSideDisconnect",
1871            Self::UpstreamInterval => "UpstreamInterval",
1872            Self::UpstreamMeasurands => "UpstreamMeasurands",
1873            Self::V2GCertificateInstallationEnabled => {
1874                "V2GCertificateInstallationEnabled"
1875            }
1876            Self::VehicleCertificate => "VehicleCertificate",
1877            Self::VehicleId => "VehicleId",
1878            Self::VersionDate => "VersionDate",
1879            Self::VersionNumber => "VersionNumber",
1880            Self::VoltageImbalance => "VoltageImbalance",
1881            Self::WorkingMode => "WorkingMode",
1882            Self::VendorName => "VendorName",
1883            Self::SupportedIdTokenType => "SupportedIdTokenType",
1884            Self::SelftestActive => "SelftestActive",
1885            Self::CHAdeMOProtocolNumber => "CHAdeMOProtocolNumber",
1886            Self::VehicleStatus => "VehicleStatus",
1887            Self::DynamicControl => "DynamicControl",
1888            Self::HighCurrentControl => "HighCurrentControl",
1889            Self::HighVoltageControl => "HighVoltageControl",
1890            Self::AutoManufacturerCode => "AutoManufacturerCode",
1891            Self::VehicleID => "VehicleID",
1892            Self::BatteryCapacity => "BatteryCapacity",
1893            Self::ValueSize => "ValueSize",
1894            Self::EvseId => "EvseId",
1895            Self::MaxScheduleEntries => "MaxScheduleEntries",
1896            Self::RequestedEnergyTransferMode => "RequestedEnergyTransferMode",
1897            Self::NotificationDelay => "NotificationDelay",
1898            Self::Capacity => "Capacity",
1899            Self::MonitoringBase => "MonitoringBase",
1900            Self::MonitoringLevel => "MonitoringLevel",
1901            Self::RetryBackOffRandomRange => "RetryBackOffRandomRange",
1902            Self::RetryBackOffRepeatTimes => "RetryBackOffRepeatTimes",
1903            Self::RetryBackOffWaitMinimum => "RetryBackOffWaitMinimum",
1904            Self::WebSocketPingInterval => "WebSocketPingInterval",
1905            Self::EnergyTransferResumptionRandomRange => {
1906                "EnergyTransferResumptionRandomRange"
1907            }
1908            Self::MaxW => "MaxW",
1909            Self::OverExcitedW => "OverExcitedW",
1910            Self::OverExcitedPF => "OverExcitedPF",
1911            Self::UnderExcitedW => "UnderExcitedW",
1912            Self::UnderExcitedPF => "UnderExcitedPF",
1913            Self::MaxVA => "MaxVA",
1914            Self::MaxVar => "MaxVar",
1915            Self::MaxVarNeg => "MaxVarNeg",
1916            Self::MaxChargeRateW => "MaxChargeRateW",
1917            Self::MaxChargeRateVA => "MaxChargeRateVA",
1918            Self::VNom => "VNom",
1919            Self::MaxV => "MaxV",
1920            Self::MinV => "MinV",
1921            Self::ModesSupported => "ModesSupported",
1922            Self::InverterManufacturer => "InverterManufacturer",
1923            Self::InverterModel => "InverterModel",
1924            Self::InverterSerialNumber => "InverterSerialNumber",
1925            Self::InverterSwVersion => "InverterSwVersion",
1926            Self::InverterHwVersion => "InverterHwVersion",
1927            Self::IslandingDetectionMethod => "IslandingDetectionMethod",
1928            Self::IslandingDetectionTripTime => "IslandingDetectionTripTime",
1929            Self::ReactiveSusceptance => "ReactiveSusceptance",
1930            Self::TargetSoC => "TargetSoC",
1931            Self::OcppCsmsUrl => "OcppCsmsUrl",
1932            Self::OcppInterface => "OcppInterface",
1933            Self::OcppTransport => "OcppTransport",
1934            Self::OcppVersion => "OcppVersion",
1935            Self::CsmsRootCertificateHashAlgorithm => "CsmsRootCertificateHashAlgorithm",
1936            Self::CsmsRootCertificateIssuerKeyHash => "CsmsRootCertificateIssuerKeyHash",
1937            Self::CsmsRootCertificateIssuerNameHash => {
1938                "CsmsRootCertificateIssuerNameHash"
1939            }
1940            Self::CsmsRootCertificateSerialNumber => "CsmsRootCertificateSerialNumber",
1941            Self::VpnEnabled => "VpnEnabled",
1942            Self::VpnType => "VpnType",
1943            Self::VpnServer => "VpnServer",
1944            Self::VpnUser => "VpnUser",
1945            Self::VpnGroup => "VpnGroup",
1946            Self::VpnPassword => "VpnPassword",
1947            Self::VpnKey => "VpnKey",
1948            Self::ApnEnabled => "ApnEnabled",
1949            Self::Apn => "Apn",
1950            Self::ApnUserName => "ApnUserName",
1951            Self::ApnPassword => "ApnPassword",
1952            Self::SimPin => "SimPin",
1953            Self::PreferredNetwork => "PreferredNetwork",
1954            Self::UseOnlyPreferredNetwork => "UseOnlyPreferredNetwork",
1955            Self::ApnAuthentication => "ApnAuthentication",
1956            Self::AuthorizeDirectPayment => "AuthorizeDirectPayment",
1957            Self::AuthorizationAmount => "AuthorizationAmount",
1958            Self::IncrementalAuthorizationAmount => "IncrementalAuthorizationAmount",
1959            Self::IncrementalAuthorizationThreshold => {
1960                "IncrementalAuthorizationThreshold"
1961            }
1962            Self::PaymentDetails => "PaymentDetails",
1963            Self::SettlementByCSMS => "SettlementByCSMS",
1964            Self::ReceiptServerUrl => "ReceiptServerUrl",
1965            Self::ReceiptByCSMS => "ReceiptByCSMS",
1966            Self::Merchant => "Merchant",
1967            Self::TerminalID => "TerminalID",
1968            Self::PaymentServiceProvider => "PaymentServiceProvider",
1969            Self::Connected => "Connected",
1970            Self::URLTemplate => "URLTemplate",
1971            Self::URLParameters => "URLParameters",
1972            Self::TOTPVersion => "TOTPVersion",
1973            Self::ChargingStationId => "ChargingStationId",
1974            Self::ValidityTime => "ValidityTime",
1975            Self::SharedSecret => "SharedSecret",
1976            Self::QRCodeQuality => "QRCodeQuality",
1977            Self::Other(value) => value.as_str(),
1978        }
1979    }
1980    /// Parses a wire value, returning `None` for values the
1981    /// specification doesn't define.
1982    ///
1983    /// Use this to ask "is this one of the spec's values?". To accept
1984    /// any value, use [`Self::from_wire_or_other`].
1985    pub fn from_wire(value: &str) -> Option<Self> {
1986        match value {
1987            "ACCurrent" => Some(Self::ACCurrent),
1988            "ACPhaseSwitchingSupported" => Some(Self::ACPhaseSwitchingSupported),
1989            "ACVoltage" => Some(Self::ACVoltage),
1990            "Active" => Some(Self::Active),
1991            "ActiveMonitoringBase" => Some(Self::ActiveMonitoringBase),
1992            "ActiveMonitoringLevel" => Some(Self::ActiveMonitoringLevel),
1993            "ActiveNetworkProfile" => Some(Self::ActiveNetworkProfile),
1994            "ActiveTransactionId" => Some(Self::ActiveTransactionId),
1995            "AdditionalInfoItemsPerMessage" => Some(Self::AdditionalInfoItemsPerMessage),
1996            "AdditionalRootCertificateCheck" => {
1997                Some(Self::AdditionalRootCertificateCheck)
1998            }
1999            "AllowEnergyTransferResumption" => Some(Self::AllowEnergyTransferResumption),
2000            "AllowNewSessionsPendingFirmwareUpdate" => {
2001                Some(Self::AllowNewSessionsPendingFirmwareUpdate)
2002            }
2003            "AllowReset" => Some(Self::AllowReset),
2004            "AllowSecurityProfileDowngrade" => Some(Self::AllowSecurityProfileDowngrade),
2005            "Angle" => Some(Self::Angle),
2006            "Attempts" => Some(Self::Attempts),
2007            "AuthorizeRemoteStart" => Some(Self::AuthorizeRemoteStart),
2008            "AvailabilityState" => Some(Self::AvailabilityState),
2009            "Available" => Some(Self::Available),
2010            "BasicAuthPassword" => Some(Self::BasicAuthPassword),
2011            "BytesPerMessage" => Some(Self::BytesPerMessage),
2012            "CentralContractValidationAllowed" => {
2013                Some(Self::CentralContractValidationAllowed)
2014            }
2015            "CertSigningRepeatTimes" => Some(Self::CertSigningRepeatTimes),
2016            "CertSigningWaitMinimum" => Some(Self::CertSigningWaitMinimum),
2017            "Certificate" => Some(Self::Certificate),
2018            "CertificateEntries" => Some(Self::CertificateEntries),
2019            "CertificateStatusSource" => Some(Self::CertificateStatusSource),
2020            "ChargeProtocol" => Some(Self::ChargeProtocol),
2021            "ChargingCompleteBulk" => Some(Self::ChargingCompleteBulk),
2022            "ChargingCompleteFull" => Some(Self::ChargingCompleteFull),
2023            "ChargingProfilePersistence" => Some(Self::ChargingProfilePersistence),
2024            "ChargingState" => Some(Self::ChargingState),
2025            "ChargingTime" => Some(Self::ChargingTime),
2026            "Color" => Some(Self::Color),
2027            "CommunicationParent" => Some(Self::CommunicationParent),
2028            "Complete" => Some(Self::Complete),
2029            "ConditionsSupported" => Some(Self::ConditionsSupported),
2030            "ConfigurationValueSize" => Some(Self::ConfigurationValueSize),
2031            "ConnectedTime" => Some(Self::ConnectedTime),
2032            "ConnectorType" => Some(Self::ConnectorType),
2033            "ContractCertificateInstallationEnabled" => {
2034                Some(Self::ContractCertificateInstallationEnabled)
2035            }
2036            "ContractValidationOffline" => Some(Self::ContractValidationOffline),
2037            "Count" => Some(Self::Count),
2038            "CountryName" => Some(Self::CountryName),
2039            "Currency" => Some(Self::Currency),
2040            "CurrentImbalance" => Some(Self::CurrentImbalance),
2041            "CustomImplementationEnabled" => Some(Self::CustomImplementationEnabled),
2042            "CustomTriggers" => Some(Self::CustomTriggers),
2043            "DCCurrent" => Some(Self::DCCurrent),
2044            "DCInputPhaseControl" => Some(Self::DCInputPhaseControl),
2045            "DCVoltage" => Some(Self::DCVoltage),
2046            "DataText" => Some(Self::DataText),
2047            "DateTime" => Some(Self::DateTime),
2048            "DepartureTime" => Some(Self::DepartureTime),
2049            "DisablePostAuthorize" => Some(Self::DisablePostAuthorize),
2050            "DisableRemoteAuthorization" => Some(Self::DisableRemoteAuthorization),
2051            "DischargePower" => Some(Self::DischargePower),
2052            "DisplayMessages" => Some(Self::DisplayMessages),
2053            "ECVariant" => Some(Self::ECVariant),
2054            "EVConnectionTimeOut" => Some(Self::EVConnectionTimeOut),
2055            "ElectricalParent" => Some(Self::ElectricalParent),
2056            "Enabled" => Some(Self::Enabled),
2057            "Energy" => Some(Self::Energy),
2058            "EnergyCapacity" => Some(Self::EnergyCapacity),
2059            "EnergyExport" => Some(Self::EnergyExport),
2060            "EnergyExportRegister" => Some(Self::EnergyExportRegister),
2061            "EnergyImport" => Some(Self::EnergyImport),
2062            "EnergyImportRegister" => Some(Self::EnergyImportRegister),
2063            "Entries" => Some(Self::Entries),
2064            "ExternalConfigChangeDate" => Some(Self::ExternalConfigChangeDate),
2065            "ExternalConstraintsProfileDisallowed" => {
2066                Some(Self::ExternalConstraintsProfileDisallowed)
2067            }
2068            "ExternalControlSignalsEnabled" => Some(Self::ExternalControlSignalsEnabled),
2069            "Fallback" => Some(Self::Fallback),
2070            "FanSpeed" => Some(Self::FanSpeed),
2071            "FieldLength" => Some(Self::FieldLength),
2072            "FileTransferProtocols" => Some(Self::FileTransferProtocols),
2073            "FirmwareVersion" => Some(Self::FirmwareVersion),
2074            "Force" => Some(Self::Force),
2075            "Formats" => Some(Self::Formats),
2076            "Frequency" => Some(Self::Frequency),
2077            "FrequencySchedule" => Some(Self::FrequencySchedule),
2078            "FuseRating" => Some(Self::FuseRating),
2079            "HandleFailedTariff" => Some(Self::HandleFailedTariff),
2080            "HeartbeatInterval" => Some(Self::HeartbeatInterval),
2081            "Height" => Some(Self::Height),
2082            "Humidity" => Some(Self::Humidity),
2083            "Hysteresis" => Some(Self::Hysteresis),
2084            "ICCID" => Some(Self::ICCID),
2085            "IMSI" => Some(Self::IMSI),
2086            "ISO15118EvseId" => Some(Self::ISO15118EvseId),
2087            "IdToken" => Some(Self::IdToken),
2088            "Identity" => Some(Self::Identity),
2089            "Impedance" => Some(Self::Impedance),
2090            "Interval" => Some(Self::Interval),
2091            "ItemsPerMessage" => Some(Self::ItemsPerMessage),
2092            "Label" => Some(Self::Label),
2093            "Language" => Some(Self::Language),
2094            "Length" => Some(Self::Length),
2095            "LifeTime" => Some(Self::LifeTime),
2096            "Light" => Some(Self::Light),
2097            "LimitChangeSignificance" => Some(Self::LimitChangeSignificance),
2098            "LocalAuthorizeOffline" => Some(Self::LocalAuthorizeOffline),
2099            "LocalFrequencyUpdateThreshold" => Some(Self::LocalFrequencyUpdateThreshold),
2100            "LocalLoadBalancing" => Some(Self::LocalLoadBalancing),
2101            "LocalPreAuthorize" => Some(Self::LocalPreAuthorize),
2102            "LogicalParent" => Some(Self::LogicalParent),
2103            "Manufacturer" => Some(Self::Manufacturer),
2104            "MasterPassGroupId" => Some(Self::MasterPassGroupId),
2105            "MaxCertificateChainSize" => Some(Self::MaxCertificateChainSize),
2106            "MaxElements" => Some(Self::MaxElements),
2107            "MaxEnergyOnInvalidId" => Some(Self::MaxEnergyOnInvalidId),
2108            "MaxExternalConstraintsId" => Some(Self::MaxExternalConstraintsId),
2109            "MaxPeriodicEventStreams" => Some(Self::MaxPeriodicEventStreams),
2110            "MaxPriceElements" => Some(Self::MaxPriceElements),
2111            "MaxSoc" => Some(Self::MaxSoc),
2112            "Measurands" => Some(Self::Measurands),
2113            "Message" => Some(Self::Message),
2114            "MessageAttemptInterval" => Some(Self::MessageAttemptInterval),
2115            "MessageAttempts" => Some(Self::MessageAttempts),
2116            "MessageTimeout" => Some(Self::MessageTimeout),
2117            "MinimumStatusDuration" => Some(Self::MinimumStatusDuration),
2118            "Mode" => Some(Self::Mode),
2119            "Model" => Some(Self::Model),
2120            "NetworkAddress" => Some(Self::NetworkAddress),
2121            "NetworkConfigurationPriority" => Some(Self::NetworkConfigurationPriority),
2122            "NetworkProfileConnectionAttempts" => {
2123                Some(Self::NetworkProfileConnectionAttempts)
2124            }
2125            "NextTimeOffsetTransitionDateTime" => {
2126                Some(Self::NextTimeOffsetTransitionDateTime)
2127            }
2128            "NonEvseSpecific" => Some(Self::NonEvseSpecific),
2129            "NotificationMaxDelay" => Some(Self::NotificationMaxDelay),
2130            "NotifyChargingLimitWithSchedules" => {
2131                Some(Self::NotifyChargingLimitWithSchedules)
2132            }
2133            "NtpServerUri" => Some(Self::NtpServerUri),
2134            "NtpSource" => Some(Self::NtpSource),
2135            "OfflineQueuingSeverity" => Some(Self::OfflineQueuingSeverity),
2136            "OfflineTariffFallbackMessage" => Some(Self::OfflineTariffFallbackMessage),
2137            "OfflineThreshold" => Some(Self::OfflineThreshold),
2138            "OfflineTxForUnknownIdEnabled" => Some(Self::OfflineTxForUnknownIdEnabled),
2139            "Operated" => Some(Self::Operated),
2140            "OperatingTimes" => Some(Self::OperatingTimes),
2141            "OrganizationName" => Some(Self::OrganizationName),
2142            "Overload" => Some(Self::Overload),
2143            "Percent" => Some(Self::Percent),
2144            "PeriodsPerSchedule" => Some(Self::PeriodsPerSchedule),
2145            "PhaseRotation" => Some(Self::PhaseRotation),
2146            "Phases3to1" => Some(Self::Phases3to1),
2147            "PhysicalParent" => Some(Self::PhysicalParent),
2148            "PnCEnabled" => Some(Self::PnCEnabled),
2149            "Policy" => Some(Self::Policy),
2150            "PostChargingTime" => Some(Self::PostChargingTime),
2151            "Power" => Some(Self::Power),
2152            "Present" => Some(Self::Present),
2153            "Problem" => Some(Self::Problem),
2154            "ProfileStackLevel" => Some(Self::ProfileStackLevel),
2155            "Protecting" => Some(Self::Protecting),
2156            "ProtocolAgreed" => Some(Self::ProtocolAgreed),
2157            "ProtocolSupported" => Some(Self::ProtocolSupported),
2158            "ProtocolSupportedByEV" => Some(Self::ProtocolSupportedByEV),
2159            "PublicKey" => Some(Self::PublicKey),
2160            "PublicKeyWithSignedMeterValue" => Some(Self::PublicKeyWithSignedMeterValue),
2161            "QueueAllMessages" => Some(Self::QueueAllMessages),
2162            "RateUnit" => Some(Self::RateUnit),
2163            "RegisterValuesWithoutPhases" => Some(Self::RegisterValuesWithoutPhases),
2164            "RemainingTimeBulk" => Some(Self::RemainingTimeBulk),
2165            "RemainingTimeFull" => Some(Self::RemainingTimeFull),
2166            "ReportingValueSize" => Some(Self::ReportingValueSize),
2167            "RequestMeteringReceipt" => Some(Self::RequestMeteringReceipt),
2168            "ResetRetries" => Some(Self::ResetRetries),
2169            "ResumptionTimeout" => Some(Self::ResumptionTimeout),
2170            "SampledMeasurands" => Some(Self::SampledMeasurands),
2171            "SamplingInterval" => Some(Self::SamplingInterval),
2172            "SeccId" => Some(Self::SeccId),
2173            "SecurityProfile" => Some(Self::SecurityProfile),
2174            "SendDuringIdle" => Some(Self::SendDuringIdle),
2175            "SerialNumber" => Some(Self::SerialNumber),
2176            "ServiceRenegotiationSupport" => Some(Self::ServiceRenegotiationSupport),
2177            "SetpointPriority" => Some(Self::SetpointPriority),
2178            "SignReadings" => Some(Self::SignReadings),
2179            "SignStartedReadings" => Some(Self::SignStartedReadings),
2180            "SignUpdatedReadings" => Some(Self::SignUpdatedReadings),
2181            "SignalStrength" => Some(Self::SignalStrength),
2182            "SlotStatus" => Some(Self::SlotStatus),
2183            "SoC" => Some(Self::SoC),
2184            "SoH" => Some(Self::SoH),
2185            "State" => Some(Self::State),
2186            "StateOfCharge" => Some(Self::StateOfCharge),
2187            "StateOfChargeBulk" => Some(Self::StateOfChargeBulk),
2188            "StopTxOnEVSideDisconnect" => Some(Self::StopTxOnEVSideDisconnect),
2189            "StopTxOnInvalidId" => Some(Self::StopTxOnInvalidId),
2190            "Storage" => Some(Self::Storage),
2191            "SupplyPhases" => Some(Self::SupplyPhases),
2192            "SupportedAdditionalPurposes" => Some(Self::SupportedAdditionalPurposes),
2193            "SupportedEnergyTransferModes" => Some(Self::SupportedEnergyTransferModes),
2194            "SupportedFormats" => Some(Self::SupportedFormats),
2195            "SupportedIdTokenTypes" => Some(Self::SupportedIdTokenTypes),
2196            "SupportedLimits" => Some(Self::SupportedLimits),
2197            "SupportedOperationModes" => Some(Self::SupportedOperationModes),
2198            "SupportedPriorities" => Some(Self::SupportedPriorities),
2199            "SupportedProviders" => Some(Self::SupportedProviders),
2200            "SupportedStates" => Some(Self::SupportedStates),
2201            "SupportsDynamicProfiles" => Some(Self::SupportsDynamicProfiles),
2202            "SupportsEvseSleep" => Some(Self::SupportsEvseSleep),
2203            "SupportsExpiryDateTime" => Some(Self::SupportsExpiryDateTime),
2204            "SupportsLimitAtSoC" => Some(Self::SupportsLimitAtSoC),
2205            "SupportsMaxOfflineDuration" => Some(Self::SupportsMaxOfflineDuration),
2206            "SupportsRandomizedDelay" => Some(Self::SupportsRandomizedDelay),
2207            "SupportsUseLocalTime" => Some(Self::SupportsUseLocalTime),
2208            "Suspending" => Some(Self::Suspending),
2209            "Suspension" => Some(Self::Suspension),
2210            "TargetSoc" => Some(Self::TargetSoc),
2211            "TariffFallbackMessage" => Some(Self::TariffFallbackMessage),
2212            "Temperature" => Some(Self::Temperature),
2213            "Time" => Some(Self::Time),
2214            "TimeAdjustmentReportingThreshold" => {
2215                Some(Self::TimeAdjustmentReportingThreshold)
2216            }
2217            "TimeOffset" => Some(Self::TimeOffset),
2218            "TimeSource" => Some(Self::TimeSource),
2219            "TimeZone" => Some(Self::TimeZone),
2220            "Timeout" => Some(Self::Timeout),
2221            "Token" => Some(Self::Token),
2222            "TokenType" => Some(Self::TokenType),
2223            "TotalCostFallbackMessage" => Some(Self::TotalCostFallbackMessage),
2224            "Tries" => Some(Self::Tries),
2225            "Tripped" => Some(Self::Tripped),
2226            "TxBeforeAcceptedEnabled" => Some(Self::TxBeforeAcceptedEnabled),
2227            "TxEndedInterval" => Some(Self::TxEndedInterval),
2228            "TxEndedMeasurands" => Some(Self::TxEndedMeasurands),
2229            "TxStartPoint" => Some(Self::TxStartPoint),
2230            "TxStartedMeasurands" => Some(Self::TxStartedMeasurands),
2231            "TxStopPoint" => Some(Self::TxStopPoint),
2232            "TxUpdatedInterval" => Some(Self::TxUpdatedInterval),
2233            "TxUpdatedMeasurands" => Some(Self::TxUpdatedMeasurands),
2234            "UnlockOnEVSideDisconnect" => Some(Self::UnlockOnEVSideDisconnect),
2235            "UpstreamInterval" => Some(Self::UpstreamInterval),
2236            "UpstreamMeasurands" => Some(Self::UpstreamMeasurands),
2237            "V2GCertificateInstallationEnabled" => {
2238                Some(Self::V2GCertificateInstallationEnabled)
2239            }
2240            "VehicleCertificate" => Some(Self::VehicleCertificate),
2241            "VehicleId" => Some(Self::VehicleId),
2242            "VersionDate" => Some(Self::VersionDate),
2243            "VersionNumber" => Some(Self::VersionNumber),
2244            "VoltageImbalance" => Some(Self::VoltageImbalance),
2245            "WorkingMode" => Some(Self::WorkingMode),
2246            "VendorName" => Some(Self::VendorName),
2247            "SupportedIdTokenType" => Some(Self::SupportedIdTokenType),
2248            "SelftestActive" => Some(Self::SelftestActive),
2249            "CHAdeMOProtocolNumber" => Some(Self::CHAdeMOProtocolNumber),
2250            "VehicleStatus" => Some(Self::VehicleStatus),
2251            "DynamicControl" => Some(Self::DynamicControl),
2252            "HighCurrentControl" => Some(Self::HighCurrentControl),
2253            "HighVoltageControl" => Some(Self::HighVoltageControl),
2254            "AutoManufacturerCode" => Some(Self::AutoManufacturerCode),
2255            "VehicleID" => Some(Self::VehicleID),
2256            "BatteryCapacity" => Some(Self::BatteryCapacity),
2257            "ValueSize" => Some(Self::ValueSize),
2258            "EvseId" => Some(Self::EvseId),
2259            "MaxScheduleEntries" => Some(Self::MaxScheduleEntries),
2260            "RequestedEnergyTransferMode" => Some(Self::RequestedEnergyTransferMode),
2261            "NotificationDelay" => Some(Self::NotificationDelay),
2262            "Capacity" => Some(Self::Capacity),
2263            "MonitoringBase" => Some(Self::MonitoringBase),
2264            "MonitoringLevel" => Some(Self::MonitoringLevel),
2265            "RetryBackOffRandomRange" => Some(Self::RetryBackOffRandomRange),
2266            "RetryBackOffRepeatTimes" => Some(Self::RetryBackOffRepeatTimes),
2267            "RetryBackOffWaitMinimum" => Some(Self::RetryBackOffWaitMinimum),
2268            "WebSocketPingInterval" => Some(Self::WebSocketPingInterval),
2269            "EnergyTransferResumptionRandomRange" => {
2270                Some(Self::EnergyTransferResumptionRandomRange)
2271            }
2272            "MaxW" => Some(Self::MaxW),
2273            "OverExcitedW" => Some(Self::OverExcitedW),
2274            "OverExcitedPF" => Some(Self::OverExcitedPF),
2275            "UnderExcitedW" => Some(Self::UnderExcitedW),
2276            "UnderExcitedPF" => Some(Self::UnderExcitedPF),
2277            "MaxVA" => Some(Self::MaxVA),
2278            "MaxVar" => Some(Self::MaxVar),
2279            "MaxVarNeg" => Some(Self::MaxVarNeg),
2280            "MaxChargeRateW" => Some(Self::MaxChargeRateW),
2281            "MaxChargeRateVA" => Some(Self::MaxChargeRateVA),
2282            "VNom" => Some(Self::VNom),
2283            "MaxV" => Some(Self::MaxV),
2284            "MinV" => Some(Self::MinV),
2285            "ModesSupported" => Some(Self::ModesSupported),
2286            "InverterManufacturer" => Some(Self::InverterManufacturer),
2287            "InverterModel" => Some(Self::InverterModel),
2288            "InverterSerialNumber" => Some(Self::InverterSerialNumber),
2289            "InverterSwVersion" => Some(Self::InverterSwVersion),
2290            "InverterHwVersion" => Some(Self::InverterHwVersion),
2291            "IslandingDetectionMethod" => Some(Self::IslandingDetectionMethod),
2292            "IslandingDetectionTripTime" => Some(Self::IslandingDetectionTripTime),
2293            "ReactiveSusceptance" => Some(Self::ReactiveSusceptance),
2294            "TargetSoC" => Some(Self::TargetSoC),
2295            "OcppCsmsUrl" => Some(Self::OcppCsmsUrl),
2296            "OcppInterface" => Some(Self::OcppInterface),
2297            "OcppTransport" => Some(Self::OcppTransport),
2298            "OcppVersion" => Some(Self::OcppVersion),
2299            "CsmsRootCertificateHashAlgorithm" => {
2300                Some(Self::CsmsRootCertificateHashAlgorithm)
2301            }
2302            "CsmsRootCertificateIssuerKeyHash" => {
2303                Some(Self::CsmsRootCertificateIssuerKeyHash)
2304            }
2305            "CsmsRootCertificateIssuerNameHash" => {
2306                Some(Self::CsmsRootCertificateIssuerNameHash)
2307            }
2308            "CsmsRootCertificateSerialNumber" => {
2309                Some(Self::CsmsRootCertificateSerialNumber)
2310            }
2311            "VpnEnabled" => Some(Self::VpnEnabled),
2312            "VpnType" => Some(Self::VpnType),
2313            "VpnServer" => Some(Self::VpnServer),
2314            "VpnUser" => Some(Self::VpnUser),
2315            "VpnGroup" => Some(Self::VpnGroup),
2316            "VpnPassword" => Some(Self::VpnPassword),
2317            "VpnKey" => Some(Self::VpnKey),
2318            "ApnEnabled" => Some(Self::ApnEnabled),
2319            "Apn" => Some(Self::Apn),
2320            "ApnUserName" => Some(Self::ApnUserName),
2321            "ApnPassword" => Some(Self::ApnPassword),
2322            "SimPin" => Some(Self::SimPin),
2323            "PreferredNetwork" => Some(Self::PreferredNetwork),
2324            "UseOnlyPreferredNetwork" => Some(Self::UseOnlyPreferredNetwork),
2325            "ApnAuthentication" => Some(Self::ApnAuthentication),
2326            "AuthorizeDirectPayment" => Some(Self::AuthorizeDirectPayment),
2327            "AuthorizationAmount" => Some(Self::AuthorizationAmount),
2328            "IncrementalAuthorizationAmount" => {
2329                Some(Self::IncrementalAuthorizationAmount)
2330            }
2331            "IncrementalAuthorizationThreshold" => {
2332                Some(Self::IncrementalAuthorizationThreshold)
2333            }
2334            "PaymentDetails" => Some(Self::PaymentDetails),
2335            "SettlementByCSMS" => Some(Self::SettlementByCSMS),
2336            "ReceiptServerUrl" => Some(Self::ReceiptServerUrl),
2337            "ReceiptByCSMS" => Some(Self::ReceiptByCSMS),
2338            "Merchant" => Some(Self::Merchant),
2339            "TerminalID" => Some(Self::TerminalID),
2340            "PaymentServiceProvider" => Some(Self::PaymentServiceProvider),
2341            "Connected" => Some(Self::Connected),
2342            "URLTemplate" => Some(Self::URLTemplate),
2343            "URLParameters" => Some(Self::URLParameters),
2344            "TOTPVersion" => Some(Self::TOTPVersion),
2345            "ChargingStationId" => Some(Self::ChargingStationId),
2346            "ValidityTime" => Some(Self::ValidityTime),
2347            "SharedSecret" => Some(Self::SharedSecret),
2348            "QRCodeQuality" => Some(Self::QRCodeQuality),
2349            _ => None,
2350        }
2351    }
2352    /// Parses any wire value, falling back to [`Self::Other`].
2353    ///
2354    /// Fails only if `value` is longer than the specification's
2355    /// `maxLength` for this field, in which case it isn't a value the
2356    /// field could have carried in the first place.
2357    pub fn from_wire_or_other(value: &str) -> Result<Self, ValueTooLong> {
2358        if let Some(standardized) = Self::from_wire(value) {
2359            return Ok(standardized);
2360        }
2361        heapless::String::try_from(value).map(Self::Other).map_err(|_| ValueTooLong)
2362    }
2363    /// Whether this is one of the values the specification defines,
2364    /// as opposed to a vendor's own.
2365    pub fn is_standardized(&self) -> bool {
2366        !matches!(self, Self::Other(_))
2367    }
2368    /// The spec's data type for this variable, as named in the device model tables (e.g. `decimal`, `OptionList`).
2369    pub fn data_type(&self) -> Option<&'static str> {
2370        match self {
2371            Self::ACCurrent => Some("decimal"),
2372            Self::ACPhaseSwitchingSupported => Some("boolean"),
2373            Self::ACVoltage => Some("decimal"),
2374            Self::Active => Some("boolean"),
2375            Self::ActiveMonitoringBase => Some("OptionList"),
2376            Self::ActiveMonitoringLevel => Some("integer"),
2377            Self::ActiveNetworkProfile => Some("boolean"),
2378            Self::ActiveTransactionId => Some("string"),
2379            Self::AdditionalInfoItemsPerMessage => Some("integer"),
2380            Self::AdditionalRootCertificateCheck => Some("boolean"),
2381            Self::AllowEnergyTransferResumption => Some("boolean"),
2382            Self::AllowNewSessionsPendingFirmwareUpdate => Some("boolean"),
2383            Self::AllowReset => Some("boolean"),
2384            Self::AllowSecurityProfileDowngrade => Some("boolean"),
2385            Self::Angle => Some("decimal"),
2386            Self::Attempts => Some("integer"),
2387            Self::AuthorizeRemoteStart => Some("boolean"),
2388            Self::AvailabilityState => Some("OptionList"),
2389            Self::Available => Some("boolean"),
2390            Self::BasicAuthPassword => Some("string"),
2391            Self::BytesPerMessage => Some("integer"),
2392            Self::CentralContractValidationAllowed => Some("boolean"),
2393            Self::CertSigningRepeatTimes => Some("integer"),
2394            Self::CertSigningWaitMinimum => Some("integer"),
2395            Self::Certificate => Some("string"),
2396            Self::CertificateEntries => Some("integer"),
2397            Self::CertificateStatusSource => Some("string"),
2398            Self::ChargeProtocol => Some("string"),
2399            Self::ChargingCompleteBulk => Some("boolean"),
2400            Self::ChargingCompleteFull => Some("boolean"),
2401            Self::ChargingProfilePersistence => Some("boolean"),
2402            Self::ChargingState => Some("OptionList"),
2403            Self::ChargingTime => Some("decimal"),
2404            Self::Color => Some("string"),
2405            Self::CommunicationParent => Some("string"),
2406            Self::Complete => Some("boolean"),
2407            Self::ConditionsSupported => Some("boolean"),
2408            Self::ConfigurationValueSize => Some("integer"),
2409            Self::ConnectedTime => Some("decimal"),
2410            Self::ConnectorType => Some("OptionList"),
2411            Self::ContractCertificateInstallationEnabled => Some("boolean"),
2412            Self::ContractValidationOffline => Some("boolean"),
2413            Self::Count => Some("integer"),
2414            Self::CountryName => Some("string"),
2415            Self::Currency => Some("string"),
2416            Self::CurrentImbalance => Some("decimal"),
2417            Self::CustomImplementationEnabled => Some("boolean"),
2418            Self::CustomTriggers => Some("MemberList"),
2419            Self::DCCurrent => Some("decimal"),
2420            Self::DCInputPhaseControl => Some("boolean"),
2421            Self::DCVoltage => Some("decimal"),
2422            Self::DataText => Some("string"),
2423            Self::DateTime => Some("dateTime"),
2424            Self::DepartureTime => Some("dateTime"),
2425            Self::DisablePostAuthorize => Some("boolean"),
2426            Self::DisableRemoteAuthorization => Some("boolean"),
2427            Self::DischargePower => Some("decimal"),
2428            Self::DisplayMessages => Some("integer"),
2429            Self::ECVariant => Some("string"),
2430            Self::EVConnectionTimeOut => Some("integer"),
2431            Self::ElectricalParent => Some("string"),
2432            Self::Enabled => Some("boolean"),
2433            Self::Energy => Some("decimal"),
2434            Self::EnergyCapacity => Some("decimal"),
2435            Self::EnergyExport => Some("decimal"),
2436            Self::EnergyExportRegister => Some("decimal"),
2437            Self::EnergyImport => Some("decimal"),
2438            Self::EnergyImportRegister => Some("decimal"),
2439            Self::Entries => Some("integer"),
2440            Self::ExternalConfigChangeDate => Some("DateTime"),
2441            Self::ExternalConstraintsProfileDisallowed => Some("boolean"),
2442            Self::ExternalControlSignalsEnabled => Some("boolean"),
2443            Self::Fallback => Some("boolean"),
2444            Self::FanSpeed => Some("decimal"),
2445            Self::FieldLength => Some("integer"),
2446            Self::FileTransferProtocols => Some("MemberList"),
2447            Self::FirmwareVersion => Some("string"),
2448            Self::Force => Some("decimal"),
2449            Self::Formats => Some("MemberList"),
2450            Self::Frequency => Some("decimal"),
2451            Self::FrequencySchedule => Some("string"),
2452            Self::FuseRating => Some("decimal"),
2453            Self::HandleFailedTariff => Some("OptionList"),
2454            Self::HeartbeatInterval => Some("integer"),
2455            Self::Height => Some("decimal"),
2456            Self::Humidity => Some("decimal"),
2457            Self::Hysteresis => Some("decimal"),
2458            Self::ICCID => Some("string"),
2459            Self::IMSI => Some("string"),
2460            Self::ISO15118EvseId => Some("string"),
2461            Self::IdToken => Some("string"),
2462            Self::Identity => Some("string"),
2463            Self::Impedance => Some("decimal"),
2464            Self::Interval => Some("integer"),
2465            Self::ItemsPerMessage => Some("integer"),
2466            Self::Label => Some("string"),
2467            Self::Language => Some("OptionList"),
2468            Self::Length => Some("decimal"),
2469            Self::LifeTime => Some("integer"),
2470            Self::Light => Some("decimal"),
2471            Self::LimitChangeSignificance => Some("decimal"),
2472            Self::LocalAuthorizeOffline => Some("boolean"),
2473            Self::LocalFrequencyUpdateThreshold => Some("integer"),
2474            Self::LocalLoadBalancing => Some("decimal"),
2475            Self::LocalPreAuthorize => Some("boolean"),
2476            Self::LogicalParent => Some("string"),
2477            Self::Manufacturer => Some("string"),
2478            Self::MasterPassGroupId => Some("string"),
2479            Self::MaxCertificateChainSize => Some("integer"),
2480            Self::MaxElements => Some("integer"),
2481            Self::MaxEnergyOnInvalidId => Some("integer"),
2482            Self::MaxExternalConstraintsId => Some("integer"),
2483            Self::MaxPeriodicEventStreams => Some("integer"),
2484            Self::MaxPriceElements => Some("integer"),
2485            Self::MaxSoc => Some("integer"),
2486            Self::Measurands => Some("MemberList"),
2487            Self::Message => Some("string"),
2488            Self::MessageAttemptInterval => Some("integer"),
2489            Self::MessageAttempts => Some("integer"),
2490            Self::MessageTimeout => Some("integer"),
2491            Self::MinimumStatusDuration => Some("integer"),
2492            Self::Mode => Some("string"),
2493            Self::Model => Some("string"),
2494            Self::NetworkAddress => Some("string"),
2495            Self::NetworkConfigurationPriority => Some("SequenceList"),
2496            Self::NetworkProfileConnectionAttempts => Some("integer"),
2497            Self::NextTimeOffsetTransitionDateTime => Some("DateTime"),
2498            Self::NonEvseSpecific => Some("boolean"),
2499            Self::NotificationMaxDelay => Some("integer"),
2500            Self::NotifyChargingLimitWithSchedules => Some("boolean"),
2501            Self::NtpServerUri => Some("string"),
2502            Self::NtpSource => Some("OptionList"),
2503            Self::OfflineQueuingSeverity => Some("integer"),
2504            Self::OfflineTariffFallbackMessage => Some("string"),
2505            Self::OfflineThreshold => Some("integer"),
2506            Self::OfflineTxForUnknownIdEnabled => Some("boolean"),
2507            Self::Operated => Some("boolean"),
2508            Self::OperatingTimes => Some("string"),
2509            Self::OrganizationName => Some("string"),
2510            Self::Overload => Some("boolean"),
2511            Self::Percent => Some("decimal"),
2512            Self::PeriodsPerSchedule => Some("integer"),
2513            Self::PhaseRotation => Some("string"),
2514            Self::Phases3to1 => Some("boolean"),
2515            Self::PhysicalParent => Some("string"),
2516            Self::PnCEnabled => Some("boolean"),
2517            Self::Policy => Some("OptionList"),
2518            Self::PostChargingTime => Some("decimal"),
2519            Self::Power => Some("decimal"),
2520            Self::Present => Some("boolean"),
2521            Self::Problem => Some("boolean"),
2522            Self::ProfileStackLevel => Some("integer"),
2523            Self::Protecting => Some("boolean"),
2524            Self::ProtocolAgreed => Some("string"),
2525            Self::ProtocolSupported => Some("string"),
2526            Self::ProtocolSupportedByEV => Some("string"),
2527            Self::PublicKey => Some("string"),
2528            Self::PublicKeyWithSignedMeterValue => Some("boolean"),
2529            Self::QueueAllMessages => Some("boolean"),
2530            Self::RateUnit => Some("string"),
2531            Self::RegisterValuesWithoutPhases => Some("boolean"),
2532            Self::RemainingTimeBulk => Some("integer"),
2533            Self::RemainingTimeFull => Some("integer"),
2534            Self::ReportingValueSize => Some("integer"),
2535            Self::RequestMeteringReceipt => Some("boolean"),
2536            Self::ResetRetries => Some("integer"),
2537            Self::ResumptionTimeout => Some("integer"),
2538            Self::SampledMeasurands => Some("MemberList"),
2539            Self::SamplingInterval => Some("decimal"),
2540            Self::SeccId => Some("string"),
2541            Self::SecurityProfile => Some("integer"),
2542            Self::SendDuringIdle => Some("boolean"),
2543            Self::SerialNumber => Some("string"),
2544            Self::ServiceRenegotiationSupport => Some("boolean"),
2545            Self::SetpointPriority => Some("OptionList"),
2546            Self::SignReadings => Some("boolean"),
2547            Self::SignStartedReadings => Some("boolean"),
2548            Self::SignUpdatedReadings => Some("boolean"),
2549            Self::SignalStrength => Some("decimal"),
2550            Self::SlotStatus => Some("OptionList"),
2551            Self::SoC => Some("integer"),
2552            Self::SoH => Some("integer"),
2553            Self::State => Some("string"),
2554            Self::StateOfCharge => Some("decimal"),
2555            Self::StateOfChargeBulk => Some("decimal"),
2556            Self::StopTxOnEVSideDisconnect => Some("boolean"),
2557            Self::StopTxOnInvalidId => Some("boolean"),
2558            Self::Storage => Some("integer"),
2559            Self::SupplyPhases => Some("integer"),
2560            Self::SupportedAdditionalPurposes => Some("MemberList"),
2561            Self::SupportedEnergyTransferModes => Some("MemberList"),
2562            Self::SupportedFormats => Some("MemberList"),
2563            Self::SupportedIdTokenTypes => Some("MemberList"),
2564            Self::SupportedLimits => Some("MemberList"),
2565            Self::SupportedOperationModes => Some("MemberList"),
2566            Self::SupportedPriorities => Some("MemberList"),
2567            Self::SupportedProviders => Some("string"),
2568            Self::SupportedStates => Some("MemberList"),
2569            Self::SupportsDynamicProfiles => Some("boolean"),
2570            Self::SupportsEvseSleep => Some("boolean"),
2571            Self::SupportsExpiryDateTime => Some("boolean"),
2572            Self::SupportsLimitAtSoC => Some("boolean"),
2573            Self::SupportsMaxOfflineDuration => Some("boolean"),
2574            Self::SupportsRandomizedDelay => Some("boolean"),
2575            Self::SupportsUseLocalTime => Some("boolean"),
2576            Self::Suspending => Some("boolean"),
2577            Self::Suspension => Some("boolean"),
2578            Self::TargetSoc => Some("integer"),
2579            Self::TariffFallbackMessage => Some("string"),
2580            Self::Temperature => Some("decimal"),
2581            Self::Time => Some("dateTime"),
2582            Self::TimeAdjustmentReportingThreshold => Some("integer"),
2583            Self::TimeOffset => Some("string"),
2584            Self::TimeSource => Some("SequenceList"),
2585            Self::TimeZone => Some("string"),
2586            Self::Timeout => Some("decimal"),
2587            Self::Token => Some("string"),
2588            Self::TokenType => Some("OptionList"),
2589            Self::TotalCostFallbackMessage => Some("string"),
2590            Self::Tries => Some("integer"),
2591            Self::Tripped => Some("boolean"),
2592            Self::TxBeforeAcceptedEnabled => Some("boolean"),
2593            Self::TxEndedInterval => Some("integer"),
2594            Self::TxEndedMeasurands => Some("MemberList"),
2595            Self::TxStartPoint => Some("MemberList"),
2596            Self::TxStartedMeasurands => Some("MemberList"),
2597            Self::TxStopPoint => Some("MemberList"),
2598            Self::TxUpdatedInterval => Some("integer"),
2599            Self::TxUpdatedMeasurands => Some("MemberList"),
2600            Self::UnlockOnEVSideDisconnect => Some("boolean"),
2601            Self::UpstreamInterval => Some("integer"),
2602            Self::UpstreamMeasurands => Some("MemberList"),
2603            Self::V2GCertificateInstallationEnabled => Some("boolean"),
2604            Self::VehicleCertificate => Some("string"),
2605            Self::VehicleId => Some("string"),
2606            Self::VersionDate => Some("dateTime"),
2607            Self::VersionNumber => Some("string"),
2608            Self::VoltageImbalance => Some("decimal"),
2609            Self::WorkingMode => Some("OptionList"),
2610            Self::VendorName => None,
2611            Self::SupportedIdTokenType => None,
2612            Self::SelftestActive => None,
2613            Self::CHAdeMOProtocolNumber => None,
2614            Self::VehicleStatus => None,
2615            Self::DynamicControl => None,
2616            Self::HighCurrentControl => None,
2617            Self::HighVoltageControl => None,
2618            Self::AutoManufacturerCode => None,
2619            Self::VehicleID => None,
2620            Self::BatteryCapacity => None,
2621            Self::ValueSize => None,
2622            Self::EvseId => None,
2623            Self::MaxScheduleEntries => None,
2624            Self::RequestedEnergyTransferMode => None,
2625            Self::NotificationDelay => None,
2626            Self::Capacity => None,
2627            Self::MonitoringBase => None,
2628            Self::MonitoringLevel => None,
2629            Self::RetryBackOffRandomRange => None,
2630            Self::RetryBackOffRepeatTimes => None,
2631            Self::RetryBackOffWaitMinimum => None,
2632            Self::WebSocketPingInterval => None,
2633            Self::EnergyTransferResumptionRandomRange => None,
2634            Self::MaxW => None,
2635            Self::OverExcitedW => None,
2636            Self::OverExcitedPF => None,
2637            Self::UnderExcitedW => None,
2638            Self::UnderExcitedPF => None,
2639            Self::MaxVA => None,
2640            Self::MaxVar => None,
2641            Self::MaxVarNeg => None,
2642            Self::MaxChargeRateW => None,
2643            Self::MaxChargeRateVA => None,
2644            Self::VNom => None,
2645            Self::MaxV => None,
2646            Self::MinV => None,
2647            Self::ModesSupported => None,
2648            Self::InverterManufacturer => None,
2649            Self::InverterModel => None,
2650            Self::InverterSerialNumber => None,
2651            Self::InverterSwVersion => None,
2652            Self::InverterHwVersion => None,
2653            Self::IslandingDetectionMethod => None,
2654            Self::IslandingDetectionTripTime => None,
2655            Self::ReactiveSusceptance => None,
2656            Self::TargetSoC => None,
2657            Self::OcppCsmsUrl => None,
2658            Self::OcppInterface => None,
2659            Self::OcppTransport => None,
2660            Self::OcppVersion => None,
2661            Self::CsmsRootCertificateHashAlgorithm => None,
2662            Self::CsmsRootCertificateIssuerKeyHash => None,
2663            Self::CsmsRootCertificateIssuerNameHash => None,
2664            Self::CsmsRootCertificateSerialNumber => None,
2665            Self::VpnEnabled => None,
2666            Self::VpnType => None,
2667            Self::VpnServer => None,
2668            Self::VpnUser => None,
2669            Self::VpnGroup => None,
2670            Self::VpnPassword => None,
2671            Self::VpnKey => None,
2672            Self::ApnEnabled => None,
2673            Self::Apn => None,
2674            Self::ApnUserName => None,
2675            Self::ApnPassword => None,
2676            Self::SimPin => None,
2677            Self::PreferredNetwork => None,
2678            Self::UseOnlyPreferredNetwork => None,
2679            Self::ApnAuthentication => None,
2680            Self::AuthorizeDirectPayment => None,
2681            Self::AuthorizationAmount => None,
2682            Self::IncrementalAuthorizationAmount => None,
2683            Self::IncrementalAuthorizationThreshold => None,
2684            Self::PaymentDetails => None,
2685            Self::SettlementByCSMS => None,
2686            Self::ReceiptServerUrl => None,
2687            Self::ReceiptByCSMS => None,
2688            Self::Merchant => None,
2689            Self::TerminalID => None,
2690            Self::PaymentServiceProvider => None,
2691            Self::Connected => None,
2692            Self::URLTemplate => None,
2693            Self::URLParameters => None,
2694            Self::TOTPVersion => None,
2695            Self::ChargingStationId => None,
2696            Self::ValidityTime => None,
2697            Self::SharedSecret => None,
2698            Self::QRCodeQuality => None,
2699            Self::Other(_) => None,
2700        }
2701    }
2702    /// The variable's unit, where the spec states one.
2703    pub fn unit(&self) -> Option<&'static str> {
2704        match self {
2705            Self::ACCurrent => Some("A"),
2706            Self::ACPhaseSwitchingSupported => None,
2707            Self::ACVoltage => Some("V"),
2708            Self::Active => None,
2709            Self::ActiveMonitoringBase => None,
2710            Self::ActiveMonitoringLevel => None,
2711            Self::ActiveNetworkProfile => None,
2712            Self::ActiveTransactionId => None,
2713            Self::AdditionalInfoItemsPerMessage => None,
2714            Self::AdditionalRootCertificateCheck => None,
2715            Self::AllowEnergyTransferResumption => None,
2716            Self::AllowNewSessionsPendingFirmwareUpdate => None,
2717            Self::AllowReset => None,
2718            Self::AllowSecurityProfileDowngrade => None,
2719            Self::Angle => Some("Deg"),
2720            Self::Attempts => None,
2721            Self::AuthorizeRemoteStart => None,
2722            Self::AvailabilityState => None,
2723            Self::Available => None,
2724            Self::BasicAuthPassword => None,
2725            Self::BytesPerMessage => None,
2726            Self::CentralContractValidationAllowed => None,
2727            Self::CertSigningRepeatTimes => None,
2728            Self::CertSigningWaitMinimum => None,
2729            Self::Certificate => None,
2730            Self::CertificateEntries => None,
2731            Self::CertificateStatusSource => None,
2732            Self::ChargeProtocol => None,
2733            Self::ChargingCompleteBulk => None,
2734            Self::ChargingCompleteFull => None,
2735            Self::ChargingProfilePersistence => None,
2736            Self::ChargingState => None,
2737            Self::ChargingTime => Some("s"),
2738            Self::Color => None,
2739            Self::CommunicationParent => None,
2740            Self::Complete => None,
2741            Self::ConditionsSupported => None,
2742            Self::ConfigurationValueSize => None,
2743            Self::ConnectedTime => Some("s"),
2744            Self::ConnectorType => None,
2745            Self::ContractCertificateInstallationEnabled => None,
2746            Self::ContractValidationOffline => None,
2747            Self::Count => None,
2748            Self::CountryName => None,
2749            Self::Currency => None,
2750            Self::CurrentImbalance => Some("Percent"),
2751            Self::CustomImplementationEnabled => None,
2752            Self::CustomTriggers => None,
2753            Self::DCCurrent => Some("A"),
2754            Self::DCInputPhaseControl => None,
2755            Self::DCVoltage => Some("V"),
2756            Self::DataText => None,
2757            Self::DateTime => None,
2758            Self::DepartureTime => None,
2759            Self::DisablePostAuthorize => None,
2760            Self::DisableRemoteAuthorization => None,
2761            Self::DischargePower => None,
2762            Self::DisplayMessages => None,
2763            Self::ECVariant => None,
2764            Self::EVConnectionTimeOut => Some("s"),
2765            Self::ElectricalParent => None,
2766            Self::Enabled => None,
2767            Self::Energy => Some("Wh"),
2768            Self::EnergyCapacity => Some("Wh"),
2769            Self::EnergyExport => Some("Wh"),
2770            Self::EnergyExportRegister => Some("Wh"),
2771            Self::EnergyImport => Some("Wh"),
2772            Self::EnergyImportRegister => Some("Wh"),
2773            Self::Entries => None,
2774            Self::ExternalConfigChangeDate => None,
2775            Self::ExternalConstraintsProfileDisallowed => None,
2776            Self::ExternalControlSignalsEnabled => None,
2777            Self::Fallback => None,
2778            Self::FanSpeed => Some("RPM"),
2779            Self::FieldLength => None,
2780            Self::FileTransferProtocols => None,
2781            Self::FirmwareVersion => None,
2782            Self::Force => Some("N"),
2783            Self::Formats => None,
2784            Self::Frequency => Some("Hz"),
2785            Self::FrequencySchedule => None,
2786            Self::FuseRating => Some("A"),
2787            Self::HandleFailedTariff => None,
2788            Self::HeartbeatInterval => Some("s"),
2789            Self::Height => Some("m"),
2790            Self::Humidity => Some("RH"),
2791            Self::Hysteresis => Some("Percent"),
2792            Self::ICCID => None,
2793            Self::IMSI => None,
2794            Self::ISO15118EvseId => None,
2795            Self::IdToken => None,
2796            Self::Identity => None,
2797            Self::Impedance => Some("Ohm"),
2798            Self::Interval => Some("s"),
2799            Self::ItemsPerMessage => None,
2800            Self::Label => None,
2801            Self::Language => None,
2802            Self::Length => Some("m"),
2803            Self::LifeTime => Some("s"),
2804            Self::Light => Some("lx"),
2805            Self::LimitChangeSignificance => None,
2806            Self::LocalAuthorizeOffline => None,
2807            Self::LocalFrequencyUpdateThreshold => Some("mHz"),
2808            Self::LocalLoadBalancing => None,
2809            Self::LocalPreAuthorize => None,
2810            Self::LogicalParent => None,
2811            Self::Manufacturer => None,
2812            Self::MasterPassGroupId => None,
2813            Self::MaxCertificateChainSize => None,
2814            Self::MaxElements => None,
2815            Self::MaxEnergyOnInvalidId => Some("Wh"),
2816            Self::MaxExternalConstraintsId => None,
2817            Self::MaxPeriodicEventStreams => None,
2818            Self::MaxPriceElements => None,
2819            Self::MaxSoc => None,
2820            Self::Measurands => None,
2821            Self::Message => None,
2822            Self::MessageAttemptInterval => Some("s"),
2823            Self::MessageAttempts => None,
2824            Self::MessageTimeout => Some("s"),
2825            Self::MinimumStatusDuration => Some("s"),
2826            Self::Mode => None,
2827            Self::Model => None,
2828            Self::NetworkAddress => None,
2829            Self::NetworkConfigurationPriority => None,
2830            Self::NetworkProfileConnectionAttempts => None,
2831            Self::NextTimeOffsetTransitionDateTime => None,
2832            Self::NonEvseSpecific => None,
2833            Self::NotificationMaxDelay => Some("s"),
2834            Self::NotifyChargingLimitWithSchedules => None,
2835            Self::NtpServerUri => None,
2836            Self::NtpSource => None,
2837            Self::OfflineQueuingSeverity => None,
2838            Self::OfflineTariffFallbackMessage => None,
2839            Self::OfflineThreshold => Some("s"),
2840            Self::OfflineTxForUnknownIdEnabled => None,
2841            Self::Operated => None,
2842            Self::OperatingTimes => None,
2843            Self::OrganizationName => None,
2844            Self::Overload => None,
2845            Self::Percent => Some("Percent"),
2846            Self::PeriodsPerSchedule => None,
2847            Self::PhaseRotation => None,
2848            Self::Phases3to1 => None,
2849            Self::PhysicalParent => None,
2850            Self::PnCEnabled => None,
2851            Self::Policy => None,
2852            Self::PostChargingTime => Some("s"),
2853            Self::Power => Some("W,kW"),
2854            Self::Present => None,
2855            Self::Problem => None,
2856            Self::ProfileStackLevel => None,
2857            Self::Protecting => None,
2858            Self::ProtocolAgreed => None,
2859            Self::ProtocolSupported => None,
2860            Self::ProtocolSupportedByEV => None,
2861            Self::PublicKey => None,
2862            Self::PublicKeyWithSignedMeterValue => None,
2863            Self::QueueAllMessages => None,
2864            Self::RateUnit => None,
2865            Self::RegisterValuesWithoutPhases => None,
2866            Self::RemainingTimeBulk => Some("s"),
2867            Self::RemainingTimeFull => Some("s"),
2868            Self::ReportingValueSize => None,
2869            Self::RequestMeteringReceipt => None,
2870            Self::ResetRetries => None,
2871            Self::ResumptionTimeout => Some("s"),
2872            Self::SampledMeasurands => None,
2873            Self::SamplingInterval => Some("s"),
2874            Self::SeccId => None,
2875            Self::SecurityProfile => None,
2876            Self::SendDuringIdle => None,
2877            Self::SerialNumber => None,
2878            Self::ServiceRenegotiationSupport => None,
2879            Self::SetpointPriority => None,
2880            Self::SignReadings => None,
2881            Self::SignStartedReadings => None,
2882            Self::SignUpdatedReadings => None,
2883            Self::SignalStrength => Some("dBm"),
2884            Self::SlotStatus => None,
2885            Self::SoC => Some("Percent"),
2886            Self::SoH => Some("Percent"),
2887            Self::State => None,
2888            Self::StateOfCharge => Some("Percent"),
2889            Self::StateOfChargeBulk => Some("Percent"),
2890            Self::StopTxOnEVSideDisconnect => None,
2891            Self::StopTxOnInvalidId => None,
2892            Self::Storage => Some("B"),
2893            Self::SupplyPhases => None,
2894            Self::SupportedAdditionalPurposes => None,
2895            Self::SupportedEnergyTransferModes => None,
2896            Self::SupportedFormats => None,
2897            Self::SupportedIdTokenTypes => None,
2898            Self::SupportedLimits => None,
2899            Self::SupportedOperationModes => None,
2900            Self::SupportedPriorities => None,
2901            Self::SupportedProviders => None,
2902            Self::SupportedStates => None,
2903            Self::SupportsDynamicProfiles => None,
2904            Self::SupportsEvseSleep => None,
2905            Self::SupportsExpiryDateTime => None,
2906            Self::SupportsLimitAtSoC => None,
2907            Self::SupportsMaxOfflineDuration => None,
2908            Self::SupportsRandomizedDelay => None,
2909            Self::SupportsUseLocalTime => None,
2910            Self::Suspending => None,
2911            Self::Suspension => None,
2912            Self::TargetSoc => Some("Percent"),
2913            Self::TariffFallbackMessage => None,
2914            Self::Temperature => Some("Celsius, Fahrenheit"),
2915            Self::Time => None,
2916            Self::TimeAdjustmentReportingThreshold => Some("s"),
2917            Self::TimeOffset => None,
2918            Self::TimeSource => None,
2919            Self::TimeZone => None,
2920            Self::Timeout => Some("s"),
2921            Self::Token => None,
2922            Self::TokenType => None,
2923            Self::TotalCostFallbackMessage => None,
2924            Self::Tries => None,
2925            Self::Tripped => None,
2926            Self::TxBeforeAcceptedEnabled => None,
2927            Self::TxEndedInterval => Some("s"),
2928            Self::TxEndedMeasurands => None,
2929            Self::TxStartPoint => None,
2930            Self::TxStartedMeasurands => None,
2931            Self::TxStopPoint => None,
2932            Self::TxUpdatedInterval => Some("s"),
2933            Self::TxUpdatedMeasurands => None,
2934            Self::UnlockOnEVSideDisconnect => None,
2935            Self::UpstreamInterval => Some("s"),
2936            Self::UpstreamMeasurands => None,
2937            Self::V2GCertificateInstallationEnabled => None,
2938            Self::VehicleCertificate => None,
2939            Self::VehicleId => None,
2940            Self::VersionDate => None,
2941            Self::VersionNumber => None,
2942            Self::VoltageImbalance => Some("Percent"),
2943            Self::WorkingMode => None,
2944            Self::VendorName => None,
2945            Self::SupportedIdTokenType => None,
2946            Self::SelftestActive => None,
2947            Self::CHAdeMOProtocolNumber => None,
2948            Self::VehicleStatus => None,
2949            Self::DynamicControl => None,
2950            Self::HighCurrentControl => None,
2951            Self::HighVoltageControl => None,
2952            Self::AutoManufacturerCode => None,
2953            Self::VehicleID => None,
2954            Self::BatteryCapacity => None,
2955            Self::ValueSize => None,
2956            Self::EvseId => None,
2957            Self::MaxScheduleEntries => None,
2958            Self::RequestedEnergyTransferMode => None,
2959            Self::NotificationDelay => None,
2960            Self::Capacity => None,
2961            Self::MonitoringBase => None,
2962            Self::MonitoringLevel => None,
2963            Self::RetryBackOffRandomRange => None,
2964            Self::RetryBackOffRepeatTimes => None,
2965            Self::RetryBackOffWaitMinimum => None,
2966            Self::WebSocketPingInterval => None,
2967            Self::EnergyTransferResumptionRandomRange => None,
2968            Self::MaxW => None,
2969            Self::OverExcitedW => None,
2970            Self::OverExcitedPF => None,
2971            Self::UnderExcitedW => None,
2972            Self::UnderExcitedPF => None,
2973            Self::MaxVA => None,
2974            Self::MaxVar => None,
2975            Self::MaxVarNeg => None,
2976            Self::MaxChargeRateW => None,
2977            Self::MaxChargeRateVA => None,
2978            Self::VNom => None,
2979            Self::MaxV => None,
2980            Self::MinV => None,
2981            Self::ModesSupported => None,
2982            Self::InverterManufacturer => None,
2983            Self::InverterModel => None,
2984            Self::InverterSerialNumber => None,
2985            Self::InverterSwVersion => None,
2986            Self::InverterHwVersion => None,
2987            Self::IslandingDetectionMethod => None,
2988            Self::IslandingDetectionTripTime => None,
2989            Self::ReactiveSusceptance => None,
2990            Self::TargetSoC => None,
2991            Self::OcppCsmsUrl => None,
2992            Self::OcppInterface => None,
2993            Self::OcppTransport => None,
2994            Self::OcppVersion => None,
2995            Self::CsmsRootCertificateHashAlgorithm => None,
2996            Self::CsmsRootCertificateIssuerKeyHash => None,
2997            Self::CsmsRootCertificateIssuerNameHash => None,
2998            Self::CsmsRootCertificateSerialNumber => None,
2999            Self::VpnEnabled => None,
3000            Self::VpnType => None,
3001            Self::VpnServer => None,
3002            Self::VpnUser => None,
3003            Self::VpnGroup => None,
3004            Self::VpnPassword => None,
3005            Self::VpnKey => None,
3006            Self::ApnEnabled => None,
3007            Self::Apn => None,
3008            Self::ApnUserName => None,
3009            Self::ApnPassword => None,
3010            Self::SimPin => None,
3011            Self::PreferredNetwork => None,
3012            Self::UseOnlyPreferredNetwork => None,
3013            Self::ApnAuthentication => None,
3014            Self::AuthorizeDirectPayment => None,
3015            Self::AuthorizationAmount => None,
3016            Self::IncrementalAuthorizationAmount => None,
3017            Self::IncrementalAuthorizationThreshold => None,
3018            Self::PaymentDetails => None,
3019            Self::SettlementByCSMS => None,
3020            Self::ReceiptServerUrl => None,
3021            Self::ReceiptByCSMS => None,
3022            Self::Merchant => None,
3023            Self::TerminalID => None,
3024            Self::PaymentServiceProvider => None,
3025            Self::Connected => None,
3026            Self::URLTemplate => None,
3027            Self::URLParameters => None,
3028            Self::TOTPVersion => None,
3029            Self::ChargingStationId => None,
3030            Self::ValidityTime => None,
3031            Self::SharedSecret => None,
3032            Self::QRCodeQuality => None,
3033            Self::Other(_) => None,
3034        }
3035    }
3036}
3037impl core::fmt::Display for VariableName {
3038    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
3039        f.write_str(self.as_str())
3040    }
3041}
3042impl core::str::FromStr for VariableName {
3043    type Err = ValueTooLong;
3044    fn from_str(value: &str) -> Result<Self, Self::Err> {
3045        Self::from_wire_or_other(value)
3046    }
3047}
3048impl PartialEq for VariableName {
3049    fn eq(&self, other: &Self) -> bool {
3050        self.as_str() == other.as_str()
3051    }
3052}
3053impl Eq for VariableName {}
3054impl core::hash::Hash for VariableName {
3055    fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
3056        self.as_str().hash(state);
3057    }
3058}
3059impl PartialOrd for VariableName {
3060    fn partial_cmp(&self, other: &Self) -> Option<core::cmp::Ordering> {
3061        Some(self.cmp(other))
3062    }
3063}
3064impl Ord for VariableName {
3065    fn cmp(&self, other: &Self) -> core::cmp::Ordering {
3066        self.as_str().cmp(other.as_str())
3067    }
3068}
3069#[cfg(feature = "serde")]
3070impl serde::Serialize for VariableName {
3071    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
3072        serializer.serialize_str(self.as_str())
3073    }
3074}
3075#[cfg(feature = "serde")]
3076impl<'de> serde::Deserialize<'de> for VariableName {
3077    fn deserialize<D: serde::Deserializer<'de>>(
3078        deserializer: D,
3079    ) -> Result<Self, D::Error> {
3080        struct Visitor;
3081        impl<'v> serde::de::Visitor<'v> for Visitor {
3082            type Value = VariableName;
3083            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
3084                f.write_str("a VariableName string")
3085            }
3086            fn visit_str<E: serde::de::Error>(
3087                self,
3088                value: &str,
3089            ) -> Result<Self::Value, E> {
3090                VariableName::from_wire_or_other(value).map_err(serde::de::Error::custom)
3091            }
3092        }
3093        deserializer.deserialize_str(Visitor)
3094    }
3095}
3096/// Standardized `SecurityEventNotificationRequest.type` values.
3097///
3098/// A *closed* set: it holds only the values the specification
3099/// defines. The wire field is a string, so a deployment can still
3100/// send something else -- `from_wire` returns `None` for that,
3101/// which is not by itself a protocol error.
3102#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
3103#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3104pub enum SecurityEvent {
3105    /// The Charging Station firmware is updated
3106    FirmwareUpdated,
3107    /// The authentication credentials provided by the Charging Station were rejected by the CSMS
3108    FailedToAuthenticateAtCsms,
3109    /// The authentication credentials provided by the CSMS were rejected by the Charging Station
3110    CsmsFailedToAuthenticate,
3111    /// The system time on the Charging Station was changed more than `ClockCtrlr.TimeAdjustmentReportingThreshold` seconds
3112    SettingSystemTime,
3113    /// The Charging Station has booted
3114    StartupOfTheDevice,
3115    /// The Charging Station was rebooted or reset
3116    ResetOrReboot,
3117    /// The security log was cleared
3118    SecurityLogWasCleared,
3119    /// Security parameters, such as keys or the security profile used, were changed
3120    ReconfigurationOfSecurityParameters,
3121    /// The Flash or RAM memory of the Charging Station is getting full
3122    MemoryExhaustion,
3123    /// The Charging Station has received messages that are not valid OCPP messages, if signed messages, signage invalid/incorrect
3124    InvalidMessages,
3125    /// The Charging Station has received a replayed message (other than the CSMS trying to resend a message because it there was for example a network problem)
3126    AttemptedReplayAttacks,
3127    /// The physical tamper detection sensor was triggered
3128    TamperDetectionActivated,
3129    /// The firmware signature is not valid
3130    InvalidFirmwareSignature,
3131    /// The certificate used to verify the firmware signature is not valid
3132    InvalidFirmwareSigningCertificate,
3133    /// The certificate that the CSMS uses was not valid or could not be verified
3134    InvalidCsmsCertificate,
3135    /// The certificate sent to the Charging Station using the CertificateSignedRequest message is not a valid certificate
3136    InvalidChargingStationCertificate,
3137    /// The Charging Station discarded the renewed client certificate, because it was unable to successfully establish a connection using it.
3138    DiscardedRenewedClientCertificate,
3139    /// The TLS version used by the CSMS is lower than 1.2 and is not allowed by the security specification
3140    InvalidTLSVersion,
3141    /// The CSMS did only allow connections using TLS cipher suites that are not allowed by the security specification
3142    InvalidTLSCipherSuite,
3143    /// Successful login to the local maintenance interface. It is recommended to include information like the user identification and the origin of the login attempt, which can be an ip-address or a touch screen for example, to the techInfo field. For this the following format is strongly recommended: '{\'user\': \'...\', \'origin\': \'...\'}'
3144    MaintenanceLoginAccepted,
3145    /// Failed login attempt to the local maintenance interface. It is recommended to include information like the user identification and the origin of the login attempt, which can be an ip-address or a touch screen for example, to the techInfo field. For this the following format is strongly recommended: '{\'user\': \'...\', \'origin\': \'...\'}'
3146    MaintenanceLoginFailed,
3147}
3148impl SecurityEvent {
3149    /// Every value this version's specification defines (21), in spec order.
3150    pub const ALL: &'static [Self] = &[
3151        Self::FirmwareUpdated,
3152        Self::FailedToAuthenticateAtCsms,
3153        Self::CsmsFailedToAuthenticate,
3154        Self::SettingSystemTime,
3155        Self::StartupOfTheDevice,
3156        Self::ResetOrReboot,
3157        Self::SecurityLogWasCleared,
3158        Self::ReconfigurationOfSecurityParameters,
3159        Self::MemoryExhaustion,
3160        Self::InvalidMessages,
3161        Self::AttemptedReplayAttacks,
3162        Self::TamperDetectionActivated,
3163        Self::InvalidFirmwareSignature,
3164        Self::InvalidFirmwareSigningCertificate,
3165        Self::InvalidCsmsCertificate,
3166        Self::InvalidChargingStationCertificate,
3167        Self::DiscardedRenewedClientCertificate,
3168        Self::InvalidTLSVersion,
3169        Self::InvalidTLSCipherSuite,
3170        Self::MaintenanceLoginAccepted,
3171        Self::MaintenanceLoginFailed,
3172    ];
3173    /// This value as it appears on the wire.
3174    pub const fn as_str(&self) -> &'static str {
3175        match self {
3176            Self::FirmwareUpdated => "FirmwareUpdated",
3177            Self::FailedToAuthenticateAtCsms => "FailedToAuthenticateAtCsms",
3178            Self::CsmsFailedToAuthenticate => "CsmsFailedToAuthenticate",
3179            Self::SettingSystemTime => "SettingSystemTime",
3180            Self::StartupOfTheDevice => "StartupOfTheDevice",
3181            Self::ResetOrReboot => "ResetOrReboot",
3182            Self::SecurityLogWasCleared => "SecurityLogWasCleared",
3183            Self::ReconfigurationOfSecurityParameters => {
3184                "ReconfigurationOfSecurityParameters"
3185            }
3186            Self::MemoryExhaustion => "MemoryExhaustion",
3187            Self::InvalidMessages => "InvalidMessages",
3188            Self::AttemptedReplayAttacks => "AttemptedReplayAttacks",
3189            Self::TamperDetectionActivated => "TamperDetectionActivated",
3190            Self::InvalidFirmwareSignature => "InvalidFirmwareSignature",
3191            Self::InvalidFirmwareSigningCertificate => {
3192                "InvalidFirmwareSigningCertificate"
3193            }
3194            Self::InvalidCsmsCertificate => "InvalidCsmsCertificate",
3195            Self::InvalidChargingStationCertificate => {
3196                "InvalidChargingStationCertificate"
3197            }
3198            Self::DiscardedRenewedClientCertificate => {
3199                "DiscardedRenewedClientCertificate"
3200            }
3201            Self::InvalidTLSVersion => "InvalidTLSVersion",
3202            Self::InvalidTLSCipherSuite => "InvalidTLSCipherSuite",
3203            Self::MaintenanceLoginAccepted => "MaintenanceLoginAccepted",
3204            Self::MaintenanceLoginFailed => "MaintenanceLoginFailed",
3205        }
3206    }
3207    /// Parses a wire value, returning `None` for values the
3208    /// specification doesn't define (e.g. a vendor's own).
3209    pub fn from_wire(value: &str) -> Option<Self> {
3210        match value {
3211            "FirmwareUpdated" => Some(Self::FirmwareUpdated),
3212            "FailedToAuthenticateAtCsms" => Some(Self::FailedToAuthenticateAtCsms),
3213            "CsmsFailedToAuthenticate" => Some(Self::CsmsFailedToAuthenticate),
3214            "SettingSystemTime" => Some(Self::SettingSystemTime),
3215            "StartupOfTheDevice" => Some(Self::StartupOfTheDevice),
3216            "ResetOrReboot" => Some(Self::ResetOrReboot),
3217            "SecurityLogWasCleared" => Some(Self::SecurityLogWasCleared),
3218            "ReconfigurationOfSecurityParameters" => {
3219                Some(Self::ReconfigurationOfSecurityParameters)
3220            }
3221            "MemoryExhaustion" => Some(Self::MemoryExhaustion),
3222            "InvalidMessages" => Some(Self::InvalidMessages),
3223            "AttemptedReplayAttacks" => Some(Self::AttemptedReplayAttacks),
3224            "TamperDetectionActivated" => Some(Self::TamperDetectionActivated),
3225            "InvalidFirmwareSignature" => Some(Self::InvalidFirmwareSignature),
3226            "InvalidFirmwareSigningCertificate" => {
3227                Some(Self::InvalidFirmwareSigningCertificate)
3228            }
3229            "InvalidCsmsCertificate" => Some(Self::InvalidCsmsCertificate),
3230            "InvalidChargingStationCertificate" => {
3231                Some(Self::InvalidChargingStationCertificate)
3232            }
3233            "DiscardedRenewedClientCertificate" => {
3234                Some(Self::DiscardedRenewedClientCertificate)
3235            }
3236            "InvalidTLSVersion" => Some(Self::InvalidTLSVersion),
3237            "InvalidTLSCipherSuite" => Some(Self::InvalidTLSCipherSuite),
3238            "MaintenanceLoginAccepted" => Some(Self::MaintenanceLoginAccepted),
3239            "MaintenanceLoginFailed" => Some(Self::MaintenanceLoginFailed),
3240            _ => None,
3241        }
3242    }
3243    /// Whether the spec marks this event critical, meaning it must be reported to the CSMS even when not explicitly monitored.
3244    pub const fn is_critical(&self) -> bool {
3245        match self {
3246            Self::FirmwareUpdated => true,
3247            Self::FailedToAuthenticateAtCsms => false,
3248            Self::CsmsFailedToAuthenticate => false,
3249            Self::SettingSystemTime => true,
3250            Self::StartupOfTheDevice => true,
3251            Self::ResetOrReboot => true,
3252            Self::SecurityLogWasCleared => true,
3253            Self::ReconfigurationOfSecurityParameters => false,
3254            Self::MemoryExhaustion => true,
3255            Self::InvalidMessages => false,
3256            Self::AttemptedReplayAttacks => false,
3257            Self::TamperDetectionActivated => true,
3258            Self::InvalidFirmwareSignature => true,
3259            Self::InvalidFirmwareSigningCertificate => true,
3260            Self::InvalidCsmsCertificate => true,
3261            Self::InvalidChargingStationCertificate => true,
3262            Self::DiscardedRenewedClientCertificate => true,
3263            Self::InvalidTLSVersion => true,
3264            Self::InvalidTLSCipherSuite => true,
3265            Self::MaintenanceLoginAccepted => true,
3266            Self::MaintenanceLoginFailed => true,
3267        }
3268    }
3269}
3270impl core::fmt::Display for SecurityEvent {
3271    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
3272        f.write_str(self.as_str())
3273    }
3274}
3275impl core::str::FromStr for SecurityEvent {
3276    type Err = UnknownValue;
3277    fn from_str(value: &str) -> Result<Self, Self::Err> {
3278        Self::from_wire(value).ok_or(UnknownValue)
3279    }
3280}
3281/// Standardized `StatusInfo.reasonCode` values.
3282///
3283/// A *closed* set: it holds only the values the specification
3284/// defines. The wire field is a string, so a deployment can still
3285/// send something else -- `from_wire` returns `None` for that,
3286/// which is not by itself a protocol error.
3287#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
3288#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3289pub enum ReasonCode {
3290    /// A charging profile with same _stackLevel - chargingProfilePurpose_ combination already exists on the Charging Station and has an overlapping validity period.
3291    ///
3292    /// Spec group: Charging Profiles.
3293    DuplicateProfile,
3294    /// Provided _chargingProfile_ contains invalid elements.
3295    ///
3296    /// Spec group: Charging Profiles.
3297    InvalidProfile,
3298    /// Provided _chargingProfile_ has an id that is within an invalid range.
3299    ///
3300    /// Spec group: Charging Profiles.
3301    InvalidProfileId,
3302    /// Provided _chargingSchedule_ contains invalid elements.
3303    ///
3304    /// Spec group: Charging Profiles.
3305    InvalidSchedule,
3306    /// Provided value for _stackLevel_ is invalid.
3307    ///
3308    /// Spec group: Charging Profiles.
3309    InvalidStackLevel,
3310    /// Provided operationMode is invalid for this chargingProfilePurpose
3311    ///
3312    /// Spec group: Charging Profiles.
3313    InvalidOperationMode,
3314    /// A frequency-watt curve is missing in a charging schedule period with operation mode = LocalFrequency.
3315    ///
3316    /// Spec group: Charging Profiles.
3317    NoFreqWattCurve,
3318    /// Phase selection for a DC EVSE is not supported
3319    ///
3320    /// Spec group: Charging Profiles.
3321    NoPhaseForDC,
3322    /// Phase conflict between applicable charging profiles
3323    ///
3324    /// Spec group: Charging Profiles.
3325    PhaseConflict,
3326    /// A signal-watt curve is missing in a charging schedule period when an AFRRSignalRequest is received.
3327    ///
3328    /// Spec group: Charging Profiles.
3329    NoSignalWattCurve,
3330    /// A charging profile of the same purpose is submitted too frequently
3331    ///
3332    /// Spec group: Charging Profiles.
3333    RateLimitExceeded,
3334    /// The requested charging profile kind is not supported
3335    ///
3336    /// Spec group: Charging Profiles.
3337    UnsupportedKind,
3338    /// The requested charging profile purpose is not supported
3339    ///
3340    /// Spec group: Charging Profiles.
3341    UnsupportedPurpose,
3342    /// A _chargingRateUnit_ is provided that is not supported.
3343    ///
3344    /// Spec group: Charging Profiles.
3345    UnsupportedRateUnit,
3346    /// BootNotification of Charging Station has not (yet) been accepted by CSMS.
3347    ///
3348    /// Spec group: Charging Station.
3349    CSNotAccepted,
3350    /// The connector has its own fixed cable that cannot be unlocked.
3351    ///
3352    /// Spec group: Charging Station.
3353    FixedCable,
3354    /// No cable is connected at this time.
3355    ///
3356    /// Spec group: Charging Station.
3357    NoCable,
3358    /// Connector Id is not known on EVSE
3359    ///
3360    /// Spec group: Charging Station.
3361    UnknownConnectorId,
3362    /// Connector type is not known on EVSE
3363    ///
3364    /// Spec group: Charging Station.
3365    UnknownConnectorType,
3366    /// EVSE is not known on Charging Stations
3367    ///
3368    /// Spec group: Charging Station.
3369    UnknownEvse,
3370    /// Battery State of Health is too low
3371    ///
3372    /// Spec group: Swap Station.
3373    BatterySoHLow,
3374    /// Battery State of Charge has unacceptable value
3375    ///
3376    /// Spec group: Swap Station.
3377    BatterySoC,
3378    /// Battery is damaged
3379    ///
3380    /// Spec group: Swap Station.
3381    BatteryDamaged,
3382    /// Battery has unknown serial number
3383    ///
3384    /// Spec group: Swap Station.
3385    BatteryUnknown,
3386    /// Battery type not accepted
3387    ///
3388    /// Spec group: Swap Station.
3389    BatteryType,
3390    /// No battery available for swapping
3391    ///
3392    /// Spec group: Swap Station.
3393    NoBatteryAvailable,
3394    /// A network configuration variable of an NetworkConfiguration instance present in NetworkConfigurationPriority is not allowed to be changed
3395    ///
3396    /// Spec group: Network Configuration.
3397    PriorityNetworkConf,
3398    /// A value for configurationSlot is used that is not present in NetworkConfigurationPriority.valuesList
3399    ///
3400    /// Spec group: Network Configuration.
3401    InvalidConfSlot,
3402    /// Some values in NetworkConfiguration instance are invalid
3403    ///
3404    /// Spec group: Network Configuration.
3405    InvalidNetworkConf,
3406    /// Security profile downgrade is not allowed
3407    ///
3408    /// Spec group: Network Configuration.
3409    NoSecurityDowngrade,
3410    /// A _requestId_ is provided, that has already been used for this type of request.
3411    ///
3412    /// Spec group: Miscellaneous.
3413    DuplicateRequestId,
3414    /// Message should not be sent at this moment in current scenario.
3415    ///
3416    /// Spec group: Miscellaneous.
3417    InvalidMessageSeq,
3418    /// Information needed for operation is missing from Device Model
3419    ///
3420    /// Spec group: Miscellaneous.
3421    MissingDevModelInfo,
3422    /// No error has occurred, but some extra information is in _additionalInfo_ .
3423    ///
3424    /// Spec group: Miscellaneous.
3425    NoError,
3426    /// No object(s) found that match a provided ID or criteria.
3427    ///
3428    /// Spec group: Miscellaneous.
3429    NotFound,
3430    /// No reason is specified, but some extra information is in _additionalInfo_
3431    ///
3432    /// Spec group: Miscellaneous.
3433    Unspecified,
3434    /// This request is not supported.
3435    ///
3436    /// Spec group: Miscellaneous.
3437    UnsupportedRequest,
3438    /// Operation is not possible, because a firmware update is in progress.
3439    ///
3440    /// Spec group: Operations and Permissions.
3441    FwUpdateInProgress,
3442    /// Feature is not enabled.
3443    ///
3444    /// Spec group: Operations and Permissions.
3445    NotEnabled,
3446    /// Targeted variable is read-only and cannot be set.
3447    ///
3448    /// Spec group: Operations and Permissions.
3449    ReadOnly,
3450    /// Targeted variable is write-only and cannot be read.
3451    ///
3452    /// Spec group: Operations and Permissions.
3453    WriteOnly,
3454    /// Provided CSR is invalid
3455    ///
3456    /// Spec group: Security.
3457    InvalidCSR,
3458    /// Provided certificate is invalid.
3459    ///
3460    /// Spec group: Security.
3461    InvalidCertificate,
3462    /// Provided URL is invalid.
3463    ///
3464    /// Spec group: Security.
3465    InvalidURL,
3466    /// HTTP Redirection is not allowed
3467    ///
3468    /// Spec group: Security.
3469    RedirectNotAllowed,
3470    /// Operation cannot be completed due to an internal error.
3471    ///
3472    /// Spec group: System Errors.
3473    InternalError,
3474    /// Operation not possible, because system does not have enough memory.
3475    ///
3476    /// Spec group: System Errors.
3477    OutOfMemory,
3478    /// Operation not possible, because system does not have enough storage.
3479    ///
3480    /// Spec group: System Errors.
3481    OutOfStorage,
3482    /// Provided _idToken_ is not valid.
3483    ///
3484    /// Spec group: Transactions.
3485    InvalidIdToken,
3486    /// A transaction is in progress.
3487    ///
3488    /// Spec group: Transactions.
3489    TxInProgress,
3490    /// There is no such transaction.
3491    ///
3492    /// Spec group: Transactions.
3493    TxNotFound,
3494    /// A transaction had already started (e.g. due to cable being plugged in).
3495    ///
3496    /// Spec group: Transactions.
3497    TxStarted,
3498    /// An invalid value has been provided.
3499    ///
3500    /// Spec group: Values and Ranges.
3501    InvalidValue,
3502    /// A parameter that is required for the request is missing.
3503    ///
3504    /// Spec group: Values and Ranges.
3505    MissingParam,
3506    /// Provided element is too large to handle.
3507    ///
3508    /// Spec group: Values and Ranges.
3509    TooLargeElement,
3510    /// Too many elements have been provided.
3511    ///
3512    /// Spec group: Values and Ranges.
3513    TooManyElements,
3514    /// A parameter was provided that is not supported.
3515    ///
3516    /// Spec group: Values and Ranges.
3517    UnsupportedParam,
3518    /// Provided value is out of range.
3519    ///
3520    /// Spec group: Values and Ranges.
3521    ValueOutOfRange,
3522    /// Provided value is not greater than zero.
3523    ///
3524    /// Spec group: Values and Ranges.
3525    ValuePositiveOnly,
3526    /// Provided value is too high.
3527    ///
3528    /// Spec group: Values and Ranges.
3529    ValueTooHigh,
3530    /// Provided value is too low.
3531    ///
3532    /// Spec group: Values and Ranges.
3533    ValueTooLow,
3534    /// Provided value cannot be zero.
3535    ///
3536    /// Spec group: Values and Ranges.
3537    ValueZeroNotAllowed,
3538}
3539impl ReasonCode {
3540    /// Every value this version's specification defines (62), in spec order.
3541    pub const ALL: &'static [Self] = &[
3542        Self::DuplicateProfile,
3543        Self::InvalidProfile,
3544        Self::InvalidProfileId,
3545        Self::InvalidSchedule,
3546        Self::InvalidStackLevel,
3547        Self::InvalidOperationMode,
3548        Self::NoFreqWattCurve,
3549        Self::NoPhaseForDC,
3550        Self::PhaseConflict,
3551        Self::NoSignalWattCurve,
3552        Self::RateLimitExceeded,
3553        Self::UnsupportedKind,
3554        Self::UnsupportedPurpose,
3555        Self::UnsupportedRateUnit,
3556        Self::CSNotAccepted,
3557        Self::FixedCable,
3558        Self::NoCable,
3559        Self::UnknownConnectorId,
3560        Self::UnknownConnectorType,
3561        Self::UnknownEvse,
3562        Self::BatterySoHLow,
3563        Self::BatterySoC,
3564        Self::BatteryDamaged,
3565        Self::BatteryUnknown,
3566        Self::BatteryType,
3567        Self::NoBatteryAvailable,
3568        Self::PriorityNetworkConf,
3569        Self::InvalidConfSlot,
3570        Self::InvalidNetworkConf,
3571        Self::NoSecurityDowngrade,
3572        Self::DuplicateRequestId,
3573        Self::InvalidMessageSeq,
3574        Self::MissingDevModelInfo,
3575        Self::NoError,
3576        Self::NotFound,
3577        Self::Unspecified,
3578        Self::UnsupportedRequest,
3579        Self::FwUpdateInProgress,
3580        Self::NotEnabled,
3581        Self::ReadOnly,
3582        Self::WriteOnly,
3583        Self::InvalidCSR,
3584        Self::InvalidCertificate,
3585        Self::InvalidURL,
3586        Self::RedirectNotAllowed,
3587        Self::InternalError,
3588        Self::OutOfMemory,
3589        Self::OutOfStorage,
3590        Self::InvalidIdToken,
3591        Self::TxInProgress,
3592        Self::TxNotFound,
3593        Self::TxStarted,
3594        Self::InvalidValue,
3595        Self::MissingParam,
3596        Self::TooLargeElement,
3597        Self::TooManyElements,
3598        Self::UnsupportedParam,
3599        Self::ValueOutOfRange,
3600        Self::ValuePositiveOnly,
3601        Self::ValueTooHigh,
3602        Self::ValueTooLow,
3603        Self::ValueZeroNotAllowed,
3604    ];
3605    /// This value as it appears on the wire.
3606    pub const fn as_str(&self) -> &'static str {
3607        match self {
3608            Self::DuplicateProfile => "DuplicateProfile",
3609            Self::InvalidProfile => "InvalidProfile",
3610            Self::InvalidProfileId => "InvalidProfileId",
3611            Self::InvalidSchedule => "InvalidSchedule",
3612            Self::InvalidStackLevel => "InvalidStackLevel",
3613            Self::InvalidOperationMode => "InvalidOperationMode",
3614            Self::NoFreqWattCurve => "NoFreqWattCurve",
3615            Self::NoPhaseForDC => "NoPhaseForDC",
3616            Self::PhaseConflict => "PhaseConflict",
3617            Self::NoSignalWattCurve => "NoSignalWattCurve",
3618            Self::RateLimitExceeded => "RateLimitExceeded",
3619            Self::UnsupportedKind => "UnsupportedKind",
3620            Self::UnsupportedPurpose => "UnsupportedPurpose",
3621            Self::UnsupportedRateUnit => "UnsupportedRateUnit",
3622            Self::CSNotAccepted => "CSNotAccepted",
3623            Self::FixedCable => "FixedCable",
3624            Self::NoCable => "NoCable",
3625            Self::UnknownConnectorId => "UnknownConnectorId",
3626            Self::UnknownConnectorType => "UnknownConnectorType",
3627            Self::UnknownEvse => "UnknownEvse",
3628            Self::BatterySoHLow => "BatterySoHLow",
3629            Self::BatterySoC => "BatterySoC",
3630            Self::BatteryDamaged => "BatteryDamaged",
3631            Self::BatteryUnknown => "BatteryUnknown",
3632            Self::BatteryType => "BatteryType",
3633            Self::NoBatteryAvailable => "NoBatteryAvailable",
3634            Self::PriorityNetworkConf => "PriorityNetworkConf",
3635            Self::InvalidConfSlot => "InvalidConfSlot",
3636            Self::InvalidNetworkConf => "InvalidNetworkConf",
3637            Self::NoSecurityDowngrade => "NoSecurityDowngrade",
3638            Self::DuplicateRequestId => "DuplicateRequestId",
3639            Self::InvalidMessageSeq => "InvalidMessageSeq",
3640            Self::MissingDevModelInfo => "MissingDevModelInfo",
3641            Self::NoError => "NoError",
3642            Self::NotFound => "NotFound",
3643            Self::Unspecified => "Unspecified",
3644            Self::UnsupportedRequest => "UnsupportedRequest",
3645            Self::FwUpdateInProgress => "FwUpdateInProgress",
3646            Self::NotEnabled => "NotEnabled",
3647            Self::ReadOnly => "ReadOnly",
3648            Self::WriteOnly => "WriteOnly",
3649            Self::InvalidCSR => "InvalidCSR",
3650            Self::InvalidCertificate => "InvalidCertificate",
3651            Self::InvalidURL => "InvalidURL",
3652            Self::RedirectNotAllowed => "RedirectNotAllowed",
3653            Self::InternalError => "InternalError",
3654            Self::OutOfMemory => "OutOfMemory",
3655            Self::OutOfStorage => "OutOfStorage",
3656            Self::InvalidIdToken => "InvalidIdToken",
3657            Self::TxInProgress => "TxInProgress",
3658            Self::TxNotFound => "TxNotFound",
3659            Self::TxStarted => "TxStarted",
3660            Self::InvalidValue => "InvalidValue",
3661            Self::MissingParam => "MissingParam",
3662            Self::TooLargeElement => "TooLargeElement",
3663            Self::TooManyElements => "TooManyElements",
3664            Self::UnsupportedParam => "UnsupportedParam",
3665            Self::ValueOutOfRange => "ValueOutOfRange",
3666            Self::ValuePositiveOnly => "ValuePositiveOnly",
3667            Self::ValueTooHigh => "ValueTooHigh",
3668            Self::ValueTooLow => "ValueTooLow",
3669            Self::ValueZeroNotAllowed => "ValueZeroNotAllowed",
3670        }
3671    }
3672    /// Parses a wire value, returning `None` for values the
3673    /// specification doesn't define (e.g. a vendor's own).
3674    pub fn from_wire(value: &str) -> Option<Self> {
3675        match value {
3676            "DuplicateProfile" => Some(Self::DuplicateProfile),
3677            "InvalidProfile" => Some(Self::InvalidProfile),
3678            "InvalidProfileId" => Some(Self::InvalidProfileId),
3679            "InvalidSchedule" => Some(Self::InvalidSchedule),
3680            "InvalidStackLevel" => Some(Self::InvalidStackLevel),
3681            "InvalidOperationMode" => Some(Self::InvalidOperationMode),
3682            "NoFreqWattCurve" => Some(Self::NoFreqWattCurve),
3683            "NoPhaseForDC" => Some(Self::NoPhaseForDC),
3684            "PhaseConflict" => Some(Self::PhaseConflict),
3685            "NoSignalWattCurve" => Some(Self::NoSignalWattCurve),
3686            "RateLimitExceeded" => Some(Self::RateLimitExceeded),
3687            "UnsupportedKind" => Some(Self::UnsupportedKind),
3688            "UnsupportedPurpose" => Some(Self::UnsupportedPurpose),
3689            "UnsupportedRateUnit" => Some(Self::UnsupportedRateUnit),
3690            "CSNotAccepted" => Some(Self::CSNotAccepted),
3691            "FixedCable" => Some(Self::FixedCable),
3692            "NoCable" => Some(Self::NoCable),
3693            "UnknownConnectorId" => Some(Self::UnknownConnectorId),
3694            "UnknownConnectorType" => Some(Self::UnknownConnectorType),
3695            "UnknownEvse" => Some(Self::UnknownEvse),
3696            "BatterySoHLow" => Some(Self::BatterySoHLow),
3697            "BatterySoC" => Some(Self::BatterySoC),
3698            "BatteryDamaged" => Some(Self::BatteryDamaged),
3699            "BatteryUnknown" => Some(Self::BatteryUnknown),
3700            "BatteryType" => Some(Self::BatteryType),
3701            "NoBatteryAvailable" => Some(Self::NoBatteryAvailable),
3702            "PriorityNetworkConf" => Some(Self::PriorityNetworkConf),
3703            "InvalidConfSlot" => Some(Self::InvalidConfSlot),
3704            "InvalidNetworkConf" => Some(Self::InvalidNetworkConf),
3705            "NoSecurityDowngrade" => Some(Self::NoSecurityDowngrade),
3706            "DuplicateRequestId" => Some(Self::DuplicateRequestId),
3707            "InvalidMessageSeq" => Some(Self::InvalidMessageSeq),
3708            "MissingDevModelInfo" => Some(Self::MissingDevModelInfo),
3709            "NoError" => Some(Self::NoError),
3710            "NotFound" => Some(Self::NotFound),
3711            "Unspecified" => Some(Self::Unspecified),
3712            "UnsupportedRequest" => Some(Self::UnsupportedRequest),
3713            "FwUpdateInProgress" => Some(Self::FwUpdateInProgress),
3714            "NotEnabled" => Some(Self::NotEnabled),
3715            "ReadOnly" => Some(Self::ReadOnly),
3716            "WriteOnly" => Some(Self::WriteOnly),
3717            "InvalidCSR" => Some(Self::InvalidCSR),
3718            "InvalidCertificate" => Some(Self::InvalidCertificate),
3719            "InvalidURL" => Some(Self::InvalidURL),
3720            "RedirectNotAllowed" => Some(Self::RedirectNotAllowed),
3721            "InternalError" => Some(Self::InternalError),
3722            "OutOfMemory" => Some(Self::OutOfMemory),
3723            "OutOfStorage" => Some(Self::OutOfStorage),
3724            "InvalidIdToken" => Some(Self::InvalidIdToken),
3725            "TxInProgress" => Some(Self::TxInProgress),
3726            "TxNotFound" => Some(Self::TxNotFound),
3727            "TxStarted" => Some(Self::TxStarted),
3728            "InvalidValue" => Some(Self::InvalidValue),
3729            "MissingParam" => Some(Self::MissingParam),
3730            "TooLargeElement" => Some(Self::TooLargeElement),
3731            "TooManyElements" => Some(Self::TooManyElements),
3732            "UnsupportedParam" => Some(Self::UnsupportedParam),
3733            "ValueOutOfRange" => Some(Self::ValueOutOfRange),
3734            "ValuePositiveOnly" => Some(Self::ValuePositiveOnly),
3735            "ValueTooHigh" => Some(Self::ValueTooHigh),
3736            "ValueTooLow" => Some(Self::ValueTooLow),
3737            "ValueZeroNotAllowed" => Some(Self::ValueZeroNotAllowed),
3738            _ => None,
3739        }
3740    }
3741    /// The message(s) the spec expects this reason code on.
3742    pub const fn typically_used_for(&self) -> Option<&'static str> {
3743        match self {
3744            Self::DuplicateProfile => Some("SetChargingProfile"),
3745            Self::InvalidProfile => Some("SetChargingProfile, RequestStartTransaction"),
3746            Self::InvalidProfileId => Some("SetChargingProfile, RequestStartTransaction"),
3747            Self::InvalidSchedule => Some("SetChargingProfile, RequestStartTransaction"),
3748            Self::InvalidStackLevel => Some("SetChargingProfile"),
3749            Self::InvalidOperationMode => Some("SetChargingProfile"),
3750            Self::NoFreqWattCurve => Some("SetChargingProfile"),
3751            Self::NoPhaseForDC => Some("SetChargingProfile"),
3752            Self::PhaseConflict => Some("SetChargingProfile"),
3753            Self::NoSignalWattCurve => Some("AFRRSignal"),
3754            Self::RateLimitExceeded => Some("SetChargingProfile"),
3755            Self::UnsupportedKind => Some("SetChargingProfile"),
3756            Self::UnsupportedPurpose => Some("SetChargingProfile"),
3757            Self::UnsupportedRateUnit => Some("SetChargingProfile"),
3758            Self::CSNotAccepted => {
3759                Some("RequestStartTransaction, RequestStopTransaction")
3760            }
3761            Self::FixedCable => Some("UnlockConnector"),
3762            Self::NoCable => Some("UnlockConnector"),
3763            Self::UnknownConnectorId => Some("ChangeAvailability, UnlockConnector"),
3764            Self::UnknownConnectorType => Some("ReserveNow"),
3765            Self::UnknownEvse => {
3766                Some("ChangeAvailability, ReserveNow, RequestStartTransaction")
3767            }
3768            Self::BatterySoHLow => Some("BatterySwap"),
3769            Self::BatterySoC => Some("BatterySwap"),
3770            Self::BatteryDamaged => Some("BatterySwap"),
3771            Self::BatteryUnknown => Some("BatterySwap"),
3772            Self::BatteryType => Some("BatterySwap"),
3773            Self::NoBatteryAvailable => Some("BatterySwap, RequestBatterySwap"),
3774            Self::PriorityNetworkConf => {
3775                Some("SetVariablesRequest of NetworkConfiguration")
3776            }
3777            Self::InvalidConfSlot => Some("SetNetworkProfileRequest"),
3778            Self::InvalidNetworkConf => {
3779                Some(
3780                    "SetVariablesRequest of NetworkConfigurationPriority,SetNetworkProfileRequest",
3781                )
3782            }
3783            Self::NoSecurityDowngrade => {
3784                Some("SetVariablesRequest of SecurityProfile, SetNetworkProfileRequest")
3785            }
3786            Self::DuplicateRequestId => {
3787                Some("UpdateFirmware, PublishFirmware and requests for reports.")
3788            }
3789            Self::InvalidMessageSeq => {
3790                Some("(generic), SetChargingProfile with ISO15118")
3791            }
3792            Self::MissingDevModelInfo => Some("(generic)"),
3793            Self::NoError => Some("(generic)"),
3794            Self::NotFound => {
3795                Some(
3796                    "ClearVariableMonitoring, CustomerInformation, GetChargingProfiles, GetDisplayMessages, GetInstalledCertificateIds, GetReport",
3797                )
3798            }
3799            Self::Unspecified => Some("(generic)"),
3800            Self::UnsupportedRequest => Some("(generic)"),
3801            Self::FwUpdateInProgress => Some("Reset"),
3802            Self::NotEnabled => Some("ClearCache"),
3803            Self::ReadOnly => Some("SetVariables"),
3804            Self::WriteOnly => Some("GetVariables"),
3805            Self::InvalidCSR => Some("SignCertificate"),
3806            Self::InvalidCertificate => Some("CertificateSigned, InstallCertificate"),
3807            Self::InvalidURL => Some("UpdateFirmware, PublishFirmware"),
3808            Self::RedirectNotAllowed => Some("LogStatusNotification"),
3809            Self::InternalError => Some("(generic)"),
3810            Self::OutOfMemory => Some("(generic)"),
3811            Self::OutOfStorage => Some("(generic)"),
3812            Self::InvalidIdToken => Some("RequestStartTransaction"),
3813            Self::TxInProgress => {
3814                Some("ChangeAvailability, Reset, RequestStartTransaction")
3815            }
3816            Self::TxNotFound => {
3817                Some("RequestStopTransaction, SetChargingProfile, GetVehicleCertificate")
3818            }
3819            Self::TxStarted => Some("RequestStartTransaction"),
3820            Self::InvalidValue => Some("(generic)"),
3821            Self::MissingParam => Some("(generic)"),
3822            Self::TooLargeElement => Some("CertificateSigned, InstallCertificate"),
3823            Self::TooManyElements => {
3824                Some("SetChargingProfile, SetVariables, SendLocalList")
3825            }
3826            Self::UnsupportedParam => Some("(generic)"),
3827            Self::ValueOutOfRange => Some("SetVariables, SetVariableMonitoring"),
3828            Self::ValuePositiveOnly => Some("(generic)"),
3829            Self::ValueTooHigh => Some("(generic)"),
3830            Self::ValueTooLow => Some("(generic)"),
3831            Self::ValueZeroNotAllowed => Some("(generic)"),
3832        }
3833    }
3834}
3835impl core::fmt::Display for ReasonCode {
3836    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
3837        f.write_str(self.as_str())
3838    }
3839}
3840impl core::str::FromStr for ReasonCode {
3841    type Err = UnknownValue;
3842    fn from_str(value: &str) -> Result<Self, Self::Err> {
3843        Self::from_wire(value).ok_or(UnknownValue)
3844    }
3845}
3846/// Standardized `UnitOfMeasure.unit` values.
3847///
3848/// Named `Unit` rather than `UnitOfMeasure` to leave that name to the schema-generated struct of the same name in `common`.
3849///
3850/// A *closed* set: it holds only the values the specification
3851/// defines. The wire field is a string, so a deployment can still
3852/// send something else -- `from_wire` returns `None` for that,
3853/// which is not by itself a protocol error.
3854#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
3855#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3856pub enum Unit {
3857    /// Amperes (current)
3858    A,
3859    /// Arbitrary Strength Unit (Signal Strength)
3860    ASU,
3861    /// Bytes
3862    B,
3863    /// Degrees (temperature)
3864    Celsius,
3865    /// Decibel (for example Signal Strength)
3866    #[cfg_attr(feature = "serde", serde(rename = "dB"))]
3867    DB,
3868    /// Power relative to 1mW (^10^log(P/1mW))
3869    #[cfg_attr(feature = "serde", serde(rename = "dBm"))]
3870    DBm,
3871    /// Degrees (angle/rotation)
3872    Deg,
3873    /// Degrees (temperature)
3874    Fahrenheit,
3875    /// Hertz (frequency)
3876    Hz,
3877    /// milliHertz (frequency)
3878    #[cfg_attr(feature = "serde", serde(rename = "mHz"))]
3879    MHz,
3880    /// Degrees Kelvin (temperature)
3881    K,
3882    /// Lux (Light Intensity)
3883    #[cfg_attr(feature = "serde", serde(rename = "lx"))]
3884    Lx,
3885    /// Meter (length)
3886    #[cfg_attr(feature = "serde", serde(rename = "m"))]
3887    M,
3888    /// m/s^2^ (Acceleration)
3889    #[cfg_attr(feature = "serde", serde(rename = "ms2"))]
3890    Ms2,
3891    /// Newtons (Force)
3892    N,
3893    /// Ohm (Impedance)
3894    Ohm,
3895    /// kiloPascal (Pressure)
3896    #[cfg_attr(feature = "serde", serde(rename = "kPa"))]
3897    KPa,
3898    /// Percentage
3899    Percent,
3900    /// Relative Humidity%
3901    RH,
3902    /// Revolutions per Minute
3903    RPM,
3904    /// Seconds (Time)
3905    #[cfg_attr(feature = "serde", serde(rename = "s"))]
3906    S,
3907    /// Voltage (DC or r.m.s. AC)
3908    V,
3909    /// Volt-Ampere (apparent power)
3910    VA,
3911    /// kiloVolt-Ampere (apparent power)
3912    #[cfg_attr(feature = "serde", serde(rename = "kVA"))]
3913    KVA,
3914    /// Volt-Ampere-hours (apparent energy)
3915    VAh,
3916    /// kiloVolt-Ampere-hours (apparent energy)
3917    #[cfg_attr(feature = "serde", serde(rename = "kVAh"))]
3918    KVAh,
3919    /// vars (reactive power)
3920    #[cfg_attr(feature = "serde", serde(rename = "var"))]
3921    Var,
3922    /// kilovars (reactive power)
3923    #[cfg_attr(feature = "serde", serde(rename = "kvar"))]
3924    Kvar,
3925    /// var-hours (reactive energy)
3926    #[cfg_attr(feature = "serde", serde(rename = "varh"))]
3927    Varh,
3928    /// kilovar-hours (reactive energy)
3929    #[cfg_attr(feature = "serde", serde(rename = "kvarh"))]
3930    Kvarh,
3931    /// Watts (power)
3932    W,
3933    /// kilowatts (power)
3934    #[cfg_attr(feature = "serde", serde(rename = "kW"))]
3935    KW,
3936    /// Watt-hours (energy). Default
3937    Wh,
3938    /// kilowatt-hours (energy)
3939    #[cfg_attr(feature = "serde", serde(rename = "kWh"))]
3940    KWh,
3941}
3942impl Unit {
3943    /// Every value this version's specification defines (34), in spec order.
3944    pub const ALL: &'static [Self] = &[
3945        Self::A,
3946        Self::ASU,
3947        Self::B,
3948        Self::Celsius,
3949        Self::DB,
3950        Self::DBm,
3951        Self::Deg,
3952        Self::Fahrenheit,
3953        Self::Hz,
3954        Self::MHz,
3955        Self::K,
3956        Self::Lx,
3957        Self::M,
3958        Self::Ms2,
3959        Self::N,
3960        Self::Ohm,
3961        Self::KPa,
3962        Self::Percent,
3963        Self::RH,
3964        Self::RPM,
3965        Self::S,
3966        Self::V,
3967        Self::VA,
3968        Self::KVA,
3969        Self::VAh,
3970        Self::KVAh,
3971        Self::Var,
3972        Self::Kvar,
3973        Self::Varh,
3974        Self::Kvarh,
3975        Self::W,
3976        Self::KW,
3977        Self::Wh,
3978        Self::KWh,
3979    ];
3980    /// This value as it appears on the wire.
3981    pub const fn as_str(&self) -> &'static str {
3982        match self {
3983            Self::A => "A",
3984            Self::ASU => "ASU",
3985            Self::B => "B",
3986            Self::Celsius => "Celsius",
3987            Self::DB => "dB",
3988            Self::DBm => "dBm",
3989            Self::Deg => "Deg",
3990            Self::Fahrenheit => "Fahrenheit",
3991            Self::Hz => "Hz",
3992            Self::MHz => "mHz",
3993            Self::K => "K",
3994            Self::Lx => "lx",
3995            Self::M => "m",
3996            Self::Ms2 => "ms2",
3997            Self::N => "N",
3998            Self::Ohm => "Ohm",
3999            Self::KPa => "kPa",
4000            Self::Percent => "Percent",
4001            Self::RH => "RH",
4002            Self::RPM => "RPM",
4003            Self::S => "s",
4004            Self::V => "V",
4005            Self::VA => "VA",
4006            Self::KVA => "kVA",
4007            Self::VAh => "VAh",
4008            Self::KVAh => "kVAh",
4009            Self::Var => "var",
4010            Self::Kvar => "kvar",
4011            Self::Varh => "varh",
4012            Self::Kvarh => "kvarh",
4013            Self::W => "W",
4014            Self::KW => "kW",
4015            Self::Wh => "Wh",
4016            Self::KWh => "kWh",
4017        }
4018    }
4019    /// Parses a wire value, returning `None` for values the
4020    /// specification doesn't define (e.g. a vendor's own).
4021    pub fn from_wire(value: &str) -> Option<Self> {
4022        match value {
4023            "A" => Some(Self::A),
4024            "ASU" => Some(Self::ASU),
4025            "B" => Some(Self::B),
4026            "Celsius" => Some(Self::Celsius),
4027            "dB" => Some(Self::DB),
4028            "dBm" => Some(Self::DBm),
4029            "Deg" => Some(Self::Deg),
4030            "Fahrenheit" => Some(Self::Fahrenheit),
4031            "Hz" => Some(Self::Hz),
4032            "mHz" => Some(Self::MHz),
4033            "K" => Some(Self::K),
4034            "lx" => Some(Self::Lx),
4035            "m" => Some(Self::M),
4036            "ms2" => Some(Self::Ms2),
4037            "N" => Some(Self::N),
4038            "Ohm" => Some(Self::Ohm),
4039            "kPa" => Some(Self::KPa),
4040            "Percent" => Some(Self::Percent),
4041            "RH" => Some(Self::RH),
4042            "RPM" => Some(Self::RPM),
4043            "s" => Some(Self::S),
4044            "V" => Some(Self::V),
4045            "VA" => Some(Self::VA),
4046            "kVA" => Some(Self::KVA),
4047            "VAh" => Some(Self::VAh),
4048            "kVAh" => Some(Self::KVAh),
4049            "var" => Some(Self::Var),
4050            "kvar" => Some(Self::Kvar),
4051            "varh" => Some(Self::Varh),
4052            "kvarh" => Some(Self::Kvarh),
4053            "W" => Some(Self::W),
4054            "kW" => Some(Self::KW),
4055            "Wh" => Some(Self::Wh),
4056            "kWh" => Some(Self::KWh),
4057            _ => None,
4058        }
4059    }
4060}
4061impl core::fmt::Display for Unit {
4062    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4063        f.write_str(self.as_str())
4064    }
4065}
4066impl core::str::FromStr for Unit {
4067    type Err = UnknownValue;
4068    fn from_str(value: &str) -> Result<Self, Self::Err> {
4069        Self::from_wire(value).ok_or(UnknownValue)
4070    }
4071}
4072/// Standardized `Connector` component `ConnectorType` values.
4073///
4074/// A *closed* set: it holds only the values the specification
4075/// defines. The wire field is a string, so a deployment can still
4076/// send something else -- `from_wire` returns `None` for that,
4077/// which is not by itself a protocol error.
4078#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4079#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4080pub enum ConnectorType {
4081    /// Slot of a battery swap station to accept battery cartridges (type unspecified)
4082    #[cfg_attr(feature = "serde", serde(rename = "bBatterySlot"))]
4083    BBatterySlot,
4084    /// Combined Charging System 1 (captive cabled) a.k.a. Combo 1
4085    #[cfg_attr(feature = "serde", serde(rename = "cCCS1"))]
4086    CCCS1,
4087    /// Combined Charging System 2 (captive cabled) a.k.a. Combo 2
4088    #[cfg_attr(feature = "serde", serde(rename = "cCCS2"))]
4089    CCCS2,
4090    /// ChaoJi (captive cabled) a.k.a. CHAdeMO 3.0
4091    #[cfg_attr(feature = "serde", serde(rename = "cChaoJi"))]
4092    CChaoJi,
4093    /// JARI G105-1993 (captive cabled) a.k.a. CHAdeMO (captive cabled)
4094    #[cfg_attr(feature = "serde", serde(rename = "cG105"))]
4095    CG105,
4096    /// GB/T 20234.3 DC connector (captive cabled)
4097    #[cfg_attr(feature = "serde", serde(rename = "cGBT-DC"))]
4098    CGBTDC,
4099    /// Light Equipment Combined Charging System IS17017 (captive cabled)
4100    #[cfg_attr(feature = "serde", serde(rename = "cLECCS"))]
4101    CLECCS,
4102    /// Megawatt Charging System (captive cabled)
4103    #[cfg_attr(feature = "serde", serde(rename = "cMCS"))]
4104    CMCS,
4105    /// North American Charging Standard J3400 (captive cabled)
4106    #[cfg_attr(feature = "serde", serde(rename = "cNACS"))]
4107    CNACS,
4108    /// Built-in NACS to CCS1 adapter (captive cabled)
4109    #[cfg_attr(feature = "serde", serde(rename = "cNACS-CCS1"))]
4110    CNACSCCS1,
4111    /// Built-in CCS1 to NACS adapter (captive cabled)
4112    #[cfg_attr(feature = "serde", serde(rename = "cCCS1-NACS"))]
4113    CCCS1NACS,
4114    /// Tesla Connector (captive cabled)
4115    #[cfg_attr(feature = "serde", serde(rename = "cTesla"))]
4116    CTesla,
4117    /// IEC62196-2 Type 1 connector (captive cabled) a.k.a. J1772
4118    #[cfg_attr(feature = "serde", serde(rename = "cType1"))]
4119    CType1,
4120    /// IEC62196-2 Type 2 connector (captive cabled) a.k.a. Mennekes connector
4121    #[cfg_attr(feature = "serde", serde(rename = "cType2"))]
4122    CType2,
4123    /// Ultra-ChaoJi for megawatt charging (captive cabled)
4124    #[cfg_attr(feature = "serde", serde(rename = "cUltraChaoJi"))]
4125    CUltraChaoJi,
4126    /// 16A 1 phase IEC60309 socket
4127    #[cfg_attr(feature = "serde", serde(rename = "s309-1P-16A"))]
4128    S3091P16A,
4129    /// 32A 1 phase IEC60309 socket
4130    #[cfg_attr(feature = "serde", serde(rename = "s309-1P-32A"))]
4131    S3091P32A,
4132    /// 16A 3 phase IEC60309 socket
4133    #[cfg_attr(feature = "serde", serde(rename = "s309-3P-16A"))]
4134    S3093P16A,
4135    /// 32A 3 phase IEC60309 socket
4136    #[cfg_attr(feature = "serde", serde(rename = "s309-3P-32A"))]
4137    S3093P32A,
4138    /// UK domestic socket a.k.a. 13Amp
4139    #[cfg_attr(feature = "serde", serde(rename = "sBS1361"))]
4140    SBS1361,
4141    /// CEE 7/7 16A socket. May represent 7/4 and 7/5 a.k.a Schuko
4142    #[cfg_attr(feature = "serde", serde(rename = "sCEE-7-7"))]
4143    SCEE77,
4144    /// IEC62196-2 Type 1 socket a.k.a. J1772
4145    #[cfg_attr(feature = "serde", serde(rename = "sType1"))]
4146    SType1,
4147    /// IEC62196-2 Type 2 socket a.k.a. Mennekes connector
4148    #[cfg_attr(feature = "serde", serde(rename = "sType2"))]
4149    SType2,
4150    /// IEC62196-2 Type 3 socket a.k.a. Scame
4151    #[cfg_attr(feature = "serde", serde(rename = "sType3"))]
4152    SType3,
4153    /// Wireless inductively coupled connection (generic)
4154    #[cfg_attr(feature = "serde", serde(rename = "wInductive"))]
4155    WInductive,
4156    /// Wireless resonant coupled connection (generic)
4157    #[cfg_attr(feature = "serde", serde(rename = "wResonant"))]
4158    WResonant,
4159    /// Pantograph down connector
4160    OppCharge,
4161    /// Other single phase (domestic) sockets not mentioned above, rated at no more than 16A. CEE7/17, AS3112, NEMA 5-15, NEMA 5-20, JISC8303, TIS166, SI 32, CPCS-CCC, SEV1011, etc.
4162    Other1PhMax16A,
4163    /// Other single phase sockets not mentioned above (over 16A)
4164    Other1PhOver16A,
4165    /// Other 3 phase sockets not mentioned above. NEMA14-30, NEMA14-50.
4166    Other3Ph,
4167    /// Pantograph up connector
4168    Pan,
4169    /// Yet to be determined (e.g. before plugged in)
4170    Undetermined,
4171    /// Unknown/not determinable
4172    Unknown,
4173}
4174impl ConnectorType {
4175    /// Every value this version's specification defines (33), in spec order.
4176    pub const ALL: &'static [Self] = &[
4177        Self::BBatterySlot,
4178        Self::CCCS1,
4179        Self::CCCS2,
4180        Self::CChaoJi,
4181        Self::CG105,
4182        Self::CGBTDC,
4183        Self::CLECCS,
4184        Self::CMCS,
4185        Self::CNACS,
4186        Self::CNACSCCS1,
4187        Self::CCCS1NACS,
4188        Self::CTesla,
4189        Self::CType1,
4190        Self::CType2,
4191        Self::CUltraChaoJi,
4192        Self::S3091P16A,
4193        Self::S3091P32A,
4194        Self::S3093P16A,
4195        Self::S3093P32A,
4196        Self::SBS1361,
4197        Self::SCEE77,
4198        Self::SType1,
4199        Self::SType2,
4200        Self::SType3,
4201        Self::WInductive,
4202        Self::WResonant,
4203        Self::OppCharge,
4204        Self::Other1PhMax16A,
4205        Self::Other1PhOver16A,
4206        Self::Other3Ph,
4207        Self::Pan,
4208        Self::Undetermined,
4209        Self::Unknown,
4210    ];
4211    /// This value as it appears on the wire.
4212    pub const fn as_str(&self) -> &'static str {
4213        match self {
4214            Self::BBatterySlot => "bBatterySlot",
4215            Self::CCCS1 => "cCCS1",
4216            Self::CCCS2 => "cCCS2",
4217            Self::CChaoJi => "cChaoJi",
4218            Self::CG105 => "cG105",
4219            Self::CGBTDC => "cGBT-DC",
4220            Self::CLECCS => "cLECCS",
4221            Self::CMCS => "cMCS",
4222            Self::CNACS => "cNACS",
4223            Self::CNACSCCS1 => "cNACS-CCS1",
4224            Self::CCCS1NACS => "cCCS1-NACS",
4225            Self::CTesla => "cTesla",
4226            Self::CType1 => "cType1",
4227            Self::CType2 => "cType2",
4228            Self::CUltraChaoJi => "cUltraChaoJi",
4229            Self::S3091P16A => "s309-1P-16A",
4230            Self::S3091P32A => "s309-1P-32A",
4231            Self::S3093P16A => "s309-3P-16A",
4232            Self::S3093P32A => "s309-3P-32A",
4233            Self::SBS1361 => "sBS1361",
4234            Self::SCEE77 => "sCEE-7-7",
4235            Self::SType1 => "sType1",
4236            Self::SType2 => "sType2",
4237            Self::SType3 => "sType3",
4238            Self::WInductive => "wInductive",
4239            Self::WResonant => "wResonant",
4240            Self::OppCharge => "OppCharge",
4241            Self::Other1PhMax16A => "Other1PhMax16A",
4242            Self::Other1PhOver16A => "Other1PhOver16A",
4243            Self::Other3Ph => "Other3Ph",
4244            Self::Pan => "Pan",
4245            Self::Undetermined => "Undetermined",
4246            Self::Unknown => "Unknown",
4247        }
4248    }
4249    /// Parses a wire value, returning `None` for values the
4250    /// specification doesn't define (e.g. a vendor's own).
4251    pub fn from_wire(value: &str) -> Option<Self> {
4252        match value {
4253            "bBatterySlot" => Some(Self::BBatterySlot),
4254            "cCCS1" => Some(Self::CCCS1),
4255            "cCCS2" => Some(Self::CCCS2),
4256            "cChaoJi" => Some(Self::CChaoJi),
4257            "cG105" => Some(Self::CG105),
4258            "cGBT-DC" => Some(Self::CGBTDC),
4259            "cLECCS" => Some(Self::CLECCS),
4260            "cMCS" => Some(Self::CMCS),
4261            "cNACS" => Some(Self::CNACS),
4262            "cNACS-CCS1" => Some(Self::CNACSCCS1),
4263            "cCCS1-NACS" => Some(Self::CCCS1NACS),
4264            "cTesla" => Some(Self::CTesla),
4265            "cType1" => Some(Self::CType1),
4266            "cType2" => Some(Self::CType2),
4267            "cUltraChaoJi" => Some(Self::CUltraChaoJi),
4268            "s309-1P-16A" => Some(Self::S3091P16A),
4269            "s309-1P-32A" => Some(Self::S3091P32A),
4270            "s309-3P-16A" => Some(Self::S3093P16A),
4271            "s309-3P-32A" => Some(Self::S3093P32A),
4272            "sBS1361" => Some(Self::SBS1361),
4273            "sCEE-7-7" => Some(Self::SCEE77),
4274            "sType1" => Some(Self::SType1),
4275            "sType2" => Some(Self::SType2),
4276            "sType3" => Some(Self::SType3),
4277            "wInductive" => Some(Self::WInductive),
4278            "wResonant" => Some(Self::WResonant),
4279            "OppCharge" => Some(Self::OppCharge),
4280            "Other1PhMax16A" => Some(Self::Other1PhMax16A),
4281            "Other1PhOver16A" => Some(Self::Other1PhOver16A),
4282            "Other3Ph" => Some(Self::Other3Ph),
4283            "Pan" => Some(Self::Pan),
4284            "Undetermined" => Some(Self::Undetermined),
4285            "Unknown" => Some(Self::Unknown),
4286            _ => None,
4287        }
4288    }
4289}
4290impl core::fmt::Display for ConnectorType {
4291    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4292        f.write_str(self.as_str())
4293    }
4294}
4295impl core::str::FromStr for ConnectorType {
4296    type Err = UnknownValue;
4297    fn from_str(value: &str) -> Result<Self, Self::Err> {
4298        Self::from_wire(value).ok_or(UnknownValue)
4299    }
4300}
4301/// Standardized `IdToken.type` values.
4302///
4303/// 2.1 widened this field from an enum to a string, so the values are only listed in the spec's appendix rather than in the schema.
4304///
4305/// A *closed* set: it holds only the values the specification
4306/// defines. The wire field is a string, so a deployment can still
4307/// send something else -- `from_wire` returns `None` for that,
4308/// which is not by itself a protocol error.
4309#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4310#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4311pub enum IdTokenType {
4312    /// A centrally, in the CSMS (or other server) generated id (for example used for a remotely started transaction that is activated by SMS). No format defined, might be a UUID.
4313    Central,
4314    /// IdToken from a payment terminal that authorized a payment card. Usually a reference id from payment service provider.
4315    DirectPayment,
4316    /// Electro-mobility account id as defined in ISO 15118
4317    #[cfg_attr(feature = "serde", serde(rename = "eMAID"))]
4318    EMAID,
4319    /// EVCCID of EV. For ISO 15118-2 this is the MAC address. For ISO 15118-20 this is an identifier up to 255 characters.
4320    EVCCID,
4321    /// ISO 14443 UID of RFID card. It is represented as an array of 4 or 7 bytes in hexadecimal representation.
4322    ISO14443,
4323    /// ISO 15693 UID of RFID card. It is represented as an array of 8 bytes in hexadecimal representation.
4324    ISO15693,
4325    /// A private key-code to authorize a charging transaction. For example: Pin-code.
4326    KeyCode,
4327    /// A locally generated id (e.g. internal id created by the Charging Station). Needs no checking by CSMS. No format defined, might be a UUID
4328    Local,
4329    /// MacAddress of the EVCC (Electric Vehicle Communication Controller) that is connected to the EVSE. Used when MAC address is used for authorization (Autocharge).
4330    MacAddress,
4331    /// Transaction is started and no authorization possible. Charging Station only has a start button or mechanical key etc. IdToken field SHALL be left empty.
4332    NoAuthorization,
4333    /// Vehicle Identification Number of EV.
4334    VIN,
4335}
4336impl IdTokenType {
4337    /// Every value this version's specification defines (11), in spec order.
4338    pub const ALL: &'static [Self] = &[
4339        Self::Central,
4340        Self::DirectPayment,
4341        Self::EMAID,
4342        Self::EVCCID,
4343        Self::ISO14443,
4344        Self::ISO15693,
4345        Self::KeyCode,
4346        Self::Local,
4347        Self::MacAddress,
4348        Self::NoAuthorization,
4349        Self::VIN,
4350    ];
4351    /// This value as it appears on the wire.
4352    pub const fn as_str(&self) -> &'static str {
4353        match self {
4354            Self::Central => "Central",
4355            Self::DirectPayment => "DirectPayment",
4356            Self::EMAID => "eMAID",
4357            Self::EVCCID => "EVCCID",
4358            Self::ISO14443 => "ISO14443",
4359            Self::ISO15693 => "ISO15693",
4360            Self::KeyCode => "KeyCode",
4361            Self::Local => "Local",
4362            Self::MacAddress => "MacAddress",
4363            Self::NoAuthorization => "NoAuthorization",
4364            Self::VIN => "VIN",
4365        }
4366    }
4367    /// Parses a wire value, returning `None` for values the
4368    /// specification doesn't define (e.g. a vendor's own).
4369    pub fn from_wire(value: &str) -> Option<Self> {
4370        match value {
4371            "Central" => Some(Self::Central),
4372            "DirectPayment" => Some(Self::DirectPayment),
4373            "eMAID" => Some(Self::EMAID),
4374            "EVCCID" => Some(Self::EVCCID),
4375            "ISO14443" => Some(Self::ISO14443),
4376            "ISO15693" => Some(Self::ISO15693),
4377            "KeyCode" => Some(Self::KeyCode),
4378            "Local" => Some(Self::Local),
4379            "MacAddress" => Some(Self::MacAddress),
4380            "NoAuthorization" => Some(Self::NoAuthorization),
4381            "VIN" => Some(Self::VIN),
4382            _ => None,
4383        }
4384    }
4385}
4386impl core::fmt::Display for IdTokenType {
4387    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4388        f.write_str(self.as_str())
4389    }
4390}
4391impl core::str::FromStr for IdTokenType {
4392    type Err = UnknownValue;
4393    fn from_str(value: &str) -> Result<Self, Self::Err> {
4394        Self::from_wire(value).ok_or(UnknownValue)
4395    }
4396}
4397/// Standardized `chargingLimitSource` values.
4398///
4399/// 2.1 widened this field from an enum to a string, so the values are only listed in the spec's appendix rather than in the schema.
4400///
4401/// A *closed* set: it holds only the values the specification
4402/// defines. The wire field is a string, so a deployment can still
4403/// send something else -- `from_wire` returns `None` for that,
4404/// which is not by itself a protocol error.
4405#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4406#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4407pub enum ChargingLimitSource {
4408    /// Indicates that an Energy Management System has sent a charging limit.
4409    EMS,
4410    /// Indicates that an external source, not being an EMS or system operator, has sent a charging limit.
4411    Other,
4412    /// Indicates that a System Operator (DSO or TSO) has sent a charging limit.
4413    SO,
4414    /// Indicates that the CSO has set this charging profile.
4415    CSO,
4416}
4417impl ChargingLimitSource {
4418    /// Every value this version's specification defines (4), in spec order.
4419    pub const ALL: &'static [Self] = &[Self::EMS, Self::Other, Self::SO, Self::CSO];
4420    /// This value as it appears on the wire.
4421    pub const fn as_str(&self) -> &'static str {
4422        match self {
4423            Self::EMS => "EMS",
4424            Self::Other => "Other",
4425            Self::SO => "SO",
4426            Self::CSO => "CSO",
4427        }
4428    }
4429    /// Parses a wire value, returning `None` for values the
4430    /// specification doesn't define (e.g. a vendor's own).
4431    pub fn from_wire(value: &str) -> Option<Self> {
4432        match value {
4433            "EMS" => Some(Self::EMS),
4434            "Other" => Some(Self::Other),
4435            "SO" => Some(Self::SO),
4436            "CSO" => Some(Self::CSO),
4437            _ => None,
4438        }
4439    }
4440}
4441impl core::fmt::Display for ChargingLimitSource {
4442    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4443        f.write_str(self.as_str())
4444    }
4445}
4446impl core::str::FromStr for ChargingLimitSource {
4447    type Err = UnknownValue;
4448    fn from_str(value: &str) -> Result<Self, Self::Err> {
4449        Self::from_wire(value).ok_or(UnknownValue)
4450    }
4451}
4452/// Standardized `paymentBrand` values, for the ad hoc payment flow.
4453///
4454/// A *closed* set: it holds only the values the specification
4455/// defines. The wire field is a string, so a deployment can still
4456/// send something else -- `from_wire` returns `None` for that,
4457/// which is not by itself a protocol error.
4458#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4459#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4460pub enum PaymentBrand {
4461    AMEX,
4462    ApplePay,
4463    Bancontact,
4464    BankAxept,
4465    Carnet,
4466    CartesBancaires,
4467    Dankort,
4468    Diners,
4469    Discover,
4470    EftposAustralia,
4471    Elo,
4472    Girocard,
4473    GooglePay,
4474    Hipercard,
4475    Interac,
4476    JCB,
4477    Maestro,
4478    Mastercard,
4479    SamsungPay,
4480    UnionPay,
4481    VPay,
4482    Visa,
4483}
4484impl PaymentBrand {
4485    /// Every value this version's specification defines (22), in spec order.
4486    pub const ALL: &'static [Self] = &[
4487        Self::AMEX,
4488        Self::ApplePay,
4489        Self::Bancontact,
4490        Self::BankAxept,
4491        Self::Carnet,
4492        Self::CartesBancaires,
4493        Self::Dankort,
4494        Self::Diners,
4495        Self::Discover,
4496        Self::EftposAustralia,
4497        Self::Elo,
4498        Self::Girocard,
4499        Self::GooglePay,
4500        Self::Hipercard,
4501        Self::Interac,
4502        Self::JCB,
4503        Self::Maestro,
4504        Self::Mastercard,
4505        Self::SamsungPay,
4506        Self::UnionPay,
4507        Self::VPay,
4508        Self::Visa,
4509    ];
4510    /// This value as it appears on the wire.
4511    pub const fn as_str(&self) -> &'static str {
4512        match self {
4513            Self::AMEX => "AMEX",
4514            Self::ApplePay => "ApplePay",
4515            Self::Bancontact => "Bancontact",
4516            Self::BankAxept => "BankAxept",
4517            Self::Carnet => "Carnet",
4518            Self::CartesBancaires => "CartesBancaires",
4519            Self::Dankort => "Dankort",
4520            Self::Diners => "Diners",
4521            Self::Discover => "Discover",
4522            Self::EftposAustralia => "EftposAustralia",
4523            Self::Elo => "Elo",
4524            Self::Girocard => "Girocard",
4525            Self::GooglePay => "GooglePay",
4526            Self::Hipercard => "Hipercard",
4527            Self::Interac => "Interac",
4528            Self::JCB => "JCB",
4529            Self::Maestro => "Maestro",
4530            Self::Mastercard => "Mastercard",
4531            Self::SamsungPay => "SamsungPay",
4532            Self::UnionPay => "UnionPay",
4533            Self::VPay => "VPay",
4534            Self::Visa => "Visa",
4535        }
4536    }
4537    /// Parses a wire value, returning `None` for values the
4538    /// specification doesn't define (e.g. a vendor's own).
4539    pub fn from_wire(value: &str) -> Option<Self> {
4540        match value {
4541            "AMEX" => Some(Self::AMEX),
4542            "ApplePay" => Some(Self::ApplePay),
4543            "Bancontact" => Some(Self::Bancontact),
4544            "BankAxept" => Some(Self::BankAxept),
4545            "Carnet" => Some(Self::Carnet),
4546            "CartesBancaires" => Some(Self::CartesBancaires),
4547            "Dankort" => Some(Self::Dankort),
4548            "Diners" => Some(Self::Diners),
4549            "Discover" => Some(Self::Discover),
4550            "EftposAustralia" => Some(Self::EftposAustralia),
4551            "Elo" => Some(Self::Elo),
4552            "Girocard" => Some(Self::Girocard),
4553            "GooglePay" => Some(Self::GooglePay),
4554            "Hipercard" => Some(Self::Hipercard),
4555            "Interac" => Some(Self::Interac),
4556            "JCB" => Some(Self::JCB),
4557            "Maestro" => Some(Self::Maestro),
4558            "Mastercard" => Some(Self::Mastercard),
4559            "SamsungPay" => Some(Self::SamsungPay),
4560            "UnionPay" => Some(Self::UnionPay),
4561            "VPay" => Some(Self::VPay),
4562            "Visa" => Some(Self::Visa),
4563            _ => None,
4564        }
4565    }
4566}
4567impl core::fmt::Display for PaymentBrand {
4568    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4569        f.write_str(self.as_str())
4570    }
4571}
4572impl core::str::FromStr for PaymentBrand {
4573    type Err = UnknownValue;
4574    fn from_str(value: &str) -> Result<Self, Self::Err> {
4575        Self::from_wire(value).ok_or(UnknownValue)
4576    }
4577}
4578/// Standardized `paymentRecognition` values, for the ad hoc payment flow.
4579///
4580/// A *closed* set: it holds only the values the specification
4581/// defines. The wire field is a string, so a deployment can still
4582/// send something else -- `from_wire` returns `None` for that,
4583/// which is not by itself a protocol error.
4584#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4585#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4586pub enum PaymentRecognition {
4587    /// Credit card
4588    CC,
4589    /// Debit card
4590    Debit,
4591    Alipay,
4592    ApplePay,
4593    GooglePay,
4594    GrabPay,
4595    PayPal,
4596    SamsungPay,
4597    WeChatPay,
4598}
4599impl PaymentRecognition {
4600    /// Every value this version's specification defines (9), in spec order.
4601    pub const ALL: &'static [Self] = &[
4602        Self::CC,
4603        Self::Debit,
4604        Self::Alipay,
4605        Self::ApplePay,
4606        Self::GooglePay,
4607        Self::GrabPay,
4608        Self::PayPal,
4609        Self::SamsungPay,
4610        Self::WeChatPay,
4611    ];
4612    /// This value as it appears on the wire.
4613    pub const fn as_str(&self) -> &'static str {
4614        match self {
4615            Self::CC => "CC",
4616            Self::Debit => "Debit",
4617            Self::Alipay => "Alipay",
4618            Self::ApplePay => "ApplePay",
4619            Self::GooglePay => "GooglePay",
4620            Self::GrabPay => "GrabPay",
4621            Self::PayPal => "PayPal",
4622            Self::SamsungPay => "SamsungPay",
4623            Self::WeChatPay => "WeChatPay",
4624        }
4625    }
4626    /// Parses a wire value, returning `None` for values the
4627    /// specification doesn't define (e.g. a vendor's own).
4628    pub fn from_wire(value: &str) -> Option<Self> {
4629        match value {
4630            "CC" => Some(Self::CC),
4631            "Debit" => Some(Self::Debit),
4632            "Alipay" => Some(Self::Alipay),
4633            "ApplePay" => Some(Self::ApplePay),
4634            "GooglePay" => Some(Self::GooglePay),
4635            "GrabPay" => Some(Self::GrabPay),
4636            "PayPal" => Some(Self::PayPal),
4637            "SamsungPay" => Some(Self::SamsungPay),
4638            "WeChatPay" => Some(Self::WeChatPay),
4639            _ => None,
4640        }
4641    }
4642}
4643impl core::fmt::Display for PaymentRecognition {
4644    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4645        f.write_str(self.as_str())
4646    }
4647}
4648impl core::str::FromStr for PaymentRecognition {
4649    type Err = UnknownValue;
4650    fn from_str(value: &str) -> Result<Self, Self::Err> {
4651        Self::from_wire(value).ok_or(UnknownValue)
4652    }
4653}
4654/// Standardized `signingMethod` values, for ISO 15118 price schedule signatures.
4655///
4656/// A *closed* set: it holds only the values the specification
4657/// defines. The wire field is a string, so a deployment can still
4658/// send something else -- `from_wire` returns `None` for that,
4659/// which is not by itself a protocol error.
4660#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4661#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4662pub enum SigningMethod {
4663    #[cfg_attr(feature = "serde", serde(rename = "ECDSA-secp192k1-SHA256"))]
4664    ECDSAsecp192k1SHA256,
4665    #[cfg_attr(feature = "serde", serde(rename = "ECDSA-secp256k1-SHA256"))]
4666    ECDSAsecp256k1SHA256,
4667    #[cfg_attr(feature = "serde", serde(rename = "ECDSA-secp192r1-SHA256"))]
4668    ECDSAsecp192r1SHA256,
4669    #[cfg_attr(feature = "serde", serde(rename = "ECDSA-secp256r1-SHA256"))]
4670    ECDSAsecp256r1SHA256,
4671    #[cfg_attr(feature = "serde", serde(rename = "ECDSA-brainpool256r1-SHA256"))]
4672    ECDSAbrainpool256r1SHA256,
4673    #[cfg_attr(feature = "serde", serde(rename = "ECDSA-secp384r1-SHA256"))]
4674    ECDSAsecp384r1SHA256,
4675    #[cfg_attr(feature = "serde", serde(rename = "ECDSA-brainpool384r1-SHA256"))]
4676    ECDSAbrainpool384r1SHA256,
4677}
4678impl SigningMethod {
4679    /// Every value this version's specification defines (7), in spec order.
4680    pub const ALL: &'static [Self] = &[
4681        Self::ECDSAsecp192k1SHA256,
4682        Self::ECDSAsecp256k1SHA256,
4683        Self::ECDSAsecp192r1SHA256,
4684        Self::ECDSAsecp256r1SHA256,
4685        Self::ECDSAbrainpool256r1SHA256,
4686        Self::ECDSAsecp384r1SHA256,
4687        Self::ECDSAbrainpool384r1SHA256,
4688    ];
4689    /// This value as it appears on the wire.
4690    pub const fn as_str(&self) -> &'static str {
4691        match self {
4692            Self::ECDSAsecp192k1SHA256 => "ECDSA-secp192k1-SHA256",
4693            Self::ECDSAsecp256k1SHA256 => "ECDSA-secp256k1-SHA256",
4694            Self::ECDSAsecp192r1SHA256 => "ECDSA-secp192r1-SHA256",
4695            Self::ECDSAsecp256r1SHA256 => "ECDSA-secp256r1-SHA256",
4696            Self::ECDSAbrainpool256r1SHA256 => "ECDSA-brainpool256r1-SHA256",
4697            Self::ECDSAsecp384r1SHA256 => "ECDSA-secp384r1-SHA256",
4698            Self::ECDSAbrainpool384r1SHA256 => "ECDSA-brainpool384r1-SHA256",
4699        }
4700    }
4701    /// Parses a wire value, returning `None` for values the
4702    /// specification doesn't define (e.g. a vendor's own).
4703    pub fn from_wire(value: &str) -> Option<Self> {
4704        match value {
4705            "ECDSA-secp192k1-SHA256" => Some(Self::ECDSAsecp192k1SHA256),
4706            "ECDSA-secp256k1-SHA256" => Some(Self::ECDSAsecp256k1SHA256),
4707            "ECDSA-secp192r1-SHA256" => Some(Self::ECDSAsecp192r1SHA256),
4708            "ECDSA-secp256r1-SHA256" => Some(Self::ECDSAsecp256r1SHA256),
4709            "ECDSA-brainpool256r1-SHA256" => Some(Self::ECDSAbrainpool256r1SHA256),
4710            "ECDSA-secp384r1-SHA256" => Some(Self::ECDSAsecp384r1SHA256),
4711            "ECDSA-brainpool384r1-SHA256" => Some(Self::ECDSAbrainpool384r1SHA256),
4712            _ => None,
4713        }
4714    }
4715    /// The signature algorithm.
4716    pub const fn algorithm(&self) -> Option<&'static str> {
4717        match self {
4718            Self::ECDSAsecp192k1SHA256 => Some("ECDSA"),
4719            Self::ECDSAsecp256k1SHA256 => Some("ECDSA"),
4720            Self::ECDSAsecp192r1SHA256 => Some("ECDSA"),
4721            Self::ECDSAsecp256r1SHA256 => Some("ECDSA"),
4722            Self::ECDSAbrainpool256r1SHA256 => Some("ECDSA"),
4723            Self::ECDSAsecp384r1SHA256 => Some("ECDSA"),
4724            Self::ECDSAbrainpool384r1SHA256 => Some("ECDSA"),
4725        }
4726    }
4727    /// The elliptic curve.
4728    pub const fn curve(&self) -> Option<&'static str> {
4729        match self {
4730            Self::ECDSAsecp192k1SHA256 => Some("secp192k1"),
4731            Self::ECDSAsecp256k1SHA256 => Some("secp256k1"),
4732            Self::ECDSAsecp192r1SHA256 => Some("secp192r1"),
4733            Self::ECDSAsecp256r1SHA256 => Some("secp256r1"),
4734            Self::ECDSAbrainpool256r1SHA256 => Some("brainpool256r1"),
4735            Self::ECDSAsecp384r1SHA256 => Some("secp384r1"),
4736            Self::ECDSAbrainpool384r1SHA256 => Some("brainpool384r1"),
4737        }
4738    }
4739    /// The key length, as the spec states it.
4740    pub const fn key_length(&self) -> Option<&'static str> {
4741        match self {
4742            Self::ECDSAsecp192k1SHA256 => Some("192 bits"),
4743            Self::ECDSAsecp256k1SHA256 => Some("256 bits"),
4744            Self::ECDSAsecp192r1SHA256 => Some("192 bits"),
4745            Self::ECDSAsecp256r1SHA256 => Some("256 bits"),
4746            Self::ECDSAbrainpool256r1SHA256 => Some("256 bits"),
4747            Self::ECDSAsecp384r1SHA256 => Some("384 bits"),
4748            Self::ECDSAbrainpool384r1SHA256 => Some("384 bits"),
4749        }
4750    }
4751    /// The hash algorithm paired with the signature.
4752    pub const fn hash_algorithm(&self) -> Option<&'static str> {
4753        match self {
4754            Self::ECDSAsecp192k1SHA256 => Some("SHA-256"),
4755            Self::ECDSAsecp256k1SHA256 => Some("SHA-256"),
4756            Self::ECDSAsecp192r1SHA256 => Some("SHA-256"),
4757            Self::ECDSAsecp256r1SHA256 => Some("SHA-256"),
4758            Self::ECDSAbrainpool256r1SHA256 => Some("SHA-256"),
4759            Self::ECDSAsecp384r1SHA256 => Some("SHA-256"),
4760            Self::ECDSAbrainpool384r1SHA256 => Some("SHA-256"),
4761        }
4762    }
4763}
4764impl core::fmt::Display for SigningMethod {
4765    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4766        f.write_str(self.as_str())
4767    }
4768}
4769impl core::str::FromStr for SigningMethod {
4770    type Err = UnknownValue;
4771    fn from_str(value: &str) -> Result<Self, Self::Err> {
4772        Self::from_wire(value).ok_or(UnknownValue)
4773    }
4774}
4775/// Standardized `AdditionalInfo.type` values.
4776///
4777/// Merged from the spec's general table and its ad hoc payment table, which both populate the same wire field.
4778///
4779/// A *closed* set: it holds only the values the specification
4780/// defines. The wire field is a string, so a deployment can still
4781/// send something else -- `from_wire` returns `None` for that,
4782/// which is not by itself a protocol error.
4783#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
4784#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4785pub enum AdditionalInfoType {
4786    /// The EVCCID of EV is added as additionalInfo to an idToken for ISO 15118-20 sessions.
4787    EVCCID,
4788    /// The subtype of an ISO 14443 RFID card. For example: 'VDE-AR-E-2532-100' (a secure variant of ISO 14443).
4789    ISO14443SubType,
4790    /// Payment Service Provider reference id for payment session. Only use when PspRef is not in _idToken_.
4791    PspRef,
4792    /// Payment session reference id from terminal (not the same as pspRef)
4793    SessionRef,
4794    /// Merchant (CSO) reference id for payment session
4795    MerchantRef,
4796    /// Brand of ad hoc payment card. See predefined list of values in table below.
4797    PaymentBrand,
4798    /// Contactless / Contact / Magstripe
4799    ReadingMethod,
4800    /// Credit/debit card or digital wallet. See predefined list of values in table below.
4801    PaymentRecognition,
4802    /// Card first 6 digits
4803    CardBin,
4804    /// Card last 4 digits
4805    CardLast4Digits,
4806    /// The expiry date of the card. Format: YYYY/MM
4807    CardExpiryDate,
4808    /// The hashed card number.
4809    HashedCardNr,
4810    /// User ID for a digital wallet, e.g. Alipay.
4811    WalletUserId,
4812}
4813impl AdditionalInfoType {
4814    /// Every value this version's specification defines (13), in spec order.
4815    pub const ALL: &'static [Self] = &[
4816        Self::EVCCID,
4817        Self::ISO14443SubType,
4818        Self::PspRef,
4819        Self::SessionRef,
4820        Self::MerchantRef,
4821        Self::PaymentBrand,
4822        Self::ReadingMethod,
4823        Self::PaymentRecognition,
4824        Self::CardBin,
4825        Self::CardLast4Digits,
4826        Self::CardExpiryDate,
4827        Self::HashedCardNr,
4828        Self::WalletUserId,
4829    ];
4830    /// This value as it appears on the wire.
4831    pub const fn as_str(&self) -> &'static str {
4832        match self {
4833            Self::EVCCID => "EVCCID",
4834            Self::ISO14443SubType => "ISO14443SubType",
4835            Self::PspRef => "PspRef",
4836            Self::SessionRef => "SessionRef",
4837            Self::MerchantRef => "MerchantRef",
4838            Self::PaymentBrand => "PaymentBrand",
4839            Self::ReadingMethod => "ReadingMethod",
4840            Self::PaymentRecognition => "PaymentRecognition",
4841            Self::CardBin => "CardBin",
4842            Self::CardLast4Digits => "CardLast4Digits",
4843            Self::CardExpiryDate => "CardExpiryDate",
4844            Self::HashedCardNr => "HashedCardNr",
4845            Self::WalletUserId => "WalletUserId",
4846        }
4847    }
4848    /// Parses a wire value, returning `None` for values the
4849    /// specification doesn't define (e.g. a vendor's own).
4850    pub fn from_wire(value: &str) -> Option<Self> {
4851        match value {
4852            "EVCCID" => Some(Self::EVCCID),
4853            "ISO14443SubType" => Some(Self::ISO14443SubType),
4854            "PspRef" => Some(Self::PspRef),
4855            "SessionRef" => Some(Self::SessionRef),
4856            "MerchantRef" => Some(Self::MerchantRef),
4857            "PaymentBrand" => Some(Self::PaymentBrand),
4858            "ReadingMethod" => Some(Self::ReadingMethod),
4859            "PaymentRecognition" => Some(Self::PaymentRecognition),
4860            "CardBin" => Some(Self::CardBin),
4861            "CardLast4Digits" => Some(Self::CardLast4Digits),
4862            "CardExpiryDate" => Some(Self::CardExpiryDate),
4863            "HashedCardNr" => Some(Self::HashedCardNr),
4864            "WalletUserId" => Some(Self::WalletUserId),
4865            _ => None,
4866        }
4867    }
4868}
4869impl core::fmt::Display for AdditionalInfoType {
4870    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
4871        f.write_str(self.as_str())
4872    }
4873}
4874impl core::str::FromStr for AdditionalInfoType {
4875    type Err = UnknownValue;
4876    fn from_str(value: &str) -> Result<Self, Self::Err> {
4877        Self::from_wire(value).ok_or(UnknownValue)
4878    }
4879}
4880/// One `(component, variable)` pair of the standardized device model.
4881///
4882/// The schemas describe the *shape* of `GetVariables`/`SetVariables`
4883/// but not which pairs are meaningful; the spec states those in its
4884/// device model appendix.
4885#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
4886pub struct DeviceModelEntry {
4887    /// `None` when the variable applies to any component rather
4888    /// than a named one (the spec's `<generic>` rows).
4889    pub component: Option<&'static str>,
4890    pub variable: &'static str,
4891    /// The `VariableAttribute.type` values this row is about, where
4892    /// the spec's table narrowed them -- e.g. `Min/MaxSet` for a row
4893    /// describing only a variable's `MinSet` and `MaxSet`
4894    /// attributes. `None` means the row is about the variable
4895    /// generally.
4896    pub attributes: Option<&'static str>,
4897    /// The `Variable.instance` this row describes, where the spec
4898    /// names one.
4899    pub instance: Option<&'static str>,
4900    /// Whether support is required: `yes`, `no`, or `V2X` (required
4901    /// only for V2X-capable stations). Kept as the spec's own text
4902    /// rather than a bool, since it is not a two-state field.
4903    pub required: Option<&'static str>,
4904    pub data_type: Option<&'static str>,
4905    pub unit: Option<&'static str>,
4906}
4907/// Every `(component, variable)` pair the standardized device model defines (438).
4908pub const DEVICE_MODEL: &[DeviceModelEntry] = &[
4909    DeviceModelEntry {
4910        component: None,
4911        variable: "ACCurrent",
4912        attributes: None,
4913        instance: None,
4914        required: Some("no"),
4915        data_type: Some("decimal"),
4916        unit: Some("A"),
4917    },
4918    DeviceModelEntry {
4919        component: None,
4920        variable: "Active",
4921        attributes: None,
4922        instance: None,
4923        required: Some("no"),
4924        data_type: Some("boolean"),
4925        unit: None,
4926    },
4927    DeviceModelEntry {
4928        component: None,
4929        variable: "ACVoltage",
4930        attributes: None,
4931        instance: None,
4932        required: Some("no"),
4933        data_type: Some("decimal"),
4934        unit: Some("V"),
4935    },
4936    DeviceModelEntry {
4937        component: None,
4938        variable: "AllowReset",
4939        attributes: None,
4940        instance: None,
4941        required: Some("no"),
4942        data_type: Some("boolean"),
4943        unit: None,
4944    },
4945    DeviceModelEntry {
4946        component: None,
4947        variable: "Angle",
4948        attributes: None,
4949        instance: None,
4950        required: Some("no"),
4951        data_type: Some("decimal"),
4952        unit: Some("Deg"),
4953    },
4954    DeviceModelEntry {
4955        component: None,
4956        variable: "Attempts",
4957        attributes: None,
4958        instance: None,
4959        required: Some("no"),
4960        data_type: Some("integer"),
4961        unit: None,
4962    },
4963    DeviceModelEntry {
4964        component: None,
4965        variable: "Available",
4966        attributes: None,
4967        instance: None,
4968        required: Some("no"),
4969        data_type: Some("boolean"),
4970        unit: None,
4971    },
4972    DeviceModelEntry {
4973        component: None,
4974        variable: "Certificate",
4975        attributes: None,
4976        instance: None,
4977        required: Some("no"),
4978        data_type: Some("string"),
4979        unit: None,
4980    },
4981    DeviceModelEntry {
4982        component: None,
4983        variable: "Color",
4984        attributes: None,
4985        instance: None,
4986        required: Some("no"),
4987        data_type: Some("string"),
4988        unit: None,
4989    },
4990    DeviceModelEntry {
4991        component: None,
4992        variable: "Complete",
4993        attributes: None,
4994        instance: None,
4995        required: Some("no"),
4996        data_type: Some("boolean"),
4997        unit: None,
4998    },
4999    DeviceModelEntry {
5000        component: None,
5001        variable: "ConnectedTime",
5002        attributes: None,
5003        instance: None,
5004        required: Some("no"),
5005        data_type: Some("decimal"),
5006        unit: Some("s"),
5007    },
5008    DeviceModelEntry {
5009        component: None,
5010        variable: "Count",
5011        attributes: None,
5012        instance: None,
5013        required: Some("no"),
5014        data_type: Some("integer"),
5015        unit: None,
5016    },
5017    DeviceModelEntry {
5018        component: None,
5019        variable: "CurrentImbalance",
5020        attributes: None,
5021        instance: None,
5022        required: Some("no"),
5023        data_type: Some("decimal"),
5024        unit: Some("Percent"),
5025    },
5026    DeviceModelEntry {
5027        component: None,
5028        variable: "DataText",
5029        attributes: None,
5030        instance: None,
5031        required: Some("no"),
5032        data_type: Some("string"),
5033        unit: None,
5034    },
5035    DeviceModelEntry {
5036        component: None,
5037        variable: "DateTime",
5038        attributes: None,
5039        instance: None,
5040        required: Some("no"),
5041        data_type: Some("dateTime"),
5042        unit: None,
5043    },
5044    DeviceModelEntry {
5045        component: None,
5046        variable: "DCCurrent",
5047        attributes: None,
5048        instance: None,
5049        required: Some("no"),
5050        data_type: Some("decimal"),
5051        unit: Some("A"),
5052    },
5053    DeviceModelEntry {
5054        component: None,
5055        variable: "DCVoltage",
5056        attributes: None,
5057        instance: None,
5058        required: Some("no"),
5059        data_type: Some("decimal"),
5060        unit: Some("V"),
5061    },
5062    DeviceModelEntry {
5063        component: None,
5064        variable: "ECVariant",
5065        attributes: None,
5066        instance: None,
5067        required: Some("no"),
5068        data_type: Some("string"),
5069        unit: None,
5070    },
5071    DeviceModelEntry {
5072        component: None,
5073        variable: "Enabled",
5074        attributes: None,
5075        instance: None,
5076        required: Some("no"),
5077        data_type: Some("boolean"),
5078        unit: None,
5079    },
5080    DeviceModelEntry {
5081        component: None,
5082        variable: "Energy",
5083        attributes: None,
5084        instance: None,
5085        required: Some("no"),
5086        data_type: Some("decimal"),
5087        unit: Some("Wh, kWh"),
5088    },
5089    DeviceModelEntry {
5090        component: None,
5091        variable: "Entries",
5092        attributes: None,
5093        instance: None,
5094        required: Some("no"),
5095        data_type: Some("integer"),
5096        unit: None,
5097    },
5098    DeviceModelEntry {
5099        component: None,
5100        variable: "Fallback",
5101        attributes: None,
5102        instance: None,
5103        required: Some("no"),
5104        data_type: Some("boolean"),
5105        unit: None,
5106    },
5107    DeviceModelEntry {
5108        component: None,
5109        variable: "FanSpeed",
5110        attributes: None,
5111        instance: None,
5112        required: Some("no"),
5113        data_type: Some("decimal"),
5114        unit: Some("RPM"),
5115    },
5116    DeviceModelEntry {
5117        component: None,
5118        variable: "FirmwareVersion",
5119        attributes: None,
5120        instance: None,
5121        required: Some("no"),
5122        data_type: Some("string"),
5123        unit: None,
5124    },
5125    DeviceModelEntry {
5126        component: None,
5127        variable: "Force",
5128        attributes: None,
5129        instance: None,
5130        required: Some("no"),
5131        data_type: Some("decimal"),
5132        unit: Some("N"),
5133    },
5134    DeviceModelEntry {
5135        component: None,
5136        variable: "Formats",
5137        attributes: None,
5138        instance: None,
5139        required: Some("no"),
5140        data_type: Some("MemberList"),
5141        unit: None,
5142    },
5143    DeviceModelEntry {
5144        component: None,
5145        variable: "Frequency",
5146        attributes: None,
5147        instance: None,
5148        required: Some("no"),
5149        data_type: Some("decimal"),
5150        unit: Some("Hz"),
5151    },
5152    DeviceModelEntry {
5153        component: None,
5154        variable: "FuseRating",
5155        attributes: None,
5156        instance: None,
5157        required: Some("no"),
5158        data_type: Some("decimal"),
5159        unit: Some("A"),
5160    },
5161    DeviceModelEntry {
5162        component: None,
5163        variable: "Height",
5164        attributes: None,
5165        instance: None,
5166        required: Some("no"),
5167        data_type: Some("decimal"),
5168        unit: Some("m"),
5169    },
5170    DeviceModelEntry {
5171        component: None,
5172        variable: "Humidity",
5173        attributes: None,
5174        instance: None,
5175        required: Some("no"),
5176        data_type: Some("decimal"),
5177        unit: Some("RH"),
5178    },
5179    DeviceModelEntry {
5180        component: None,
5181        variable: "Hysteresis",
5182        attributes: None,
5183        instance: None,
5184        required: Some("no"),
5185        data_type: Some("decimal"),
5186        unit: Some("Percent"),
5187    },
5188    DeviceModelEntry {
5189        component: None,
5190        variable: "ICCID",
5191        attributes: None,
5192        instance: None,
5193        required: Some("no"),
5194        data_type: Some("string"),
5195        unit: None,
5196    },
5197    DeviceModelEntry {
5198        component: None,
5199        variable: "Impedance",
5200        attributes: None,
5201        instance: None,
5202        required: Some("no"),
5203        data_type: Some("decimal"),
5204        unit: Some("Ohm"),
5205    },
5206    DeviceModelEntry {
5207        component: None,
5208        variable: "IMSI",
5209        attributes: None,
5210        instance: None,
5211        required: Some("no"),
5212        data_type: Some("string"),
5213        unit: None,
5214    },
5215    DeviceModelEntry {
5216        component: None,
5217        variable: "Interval",
5218        attributes: None,
5219        instance: None,
5220        required: Some("no"),
5221        data_type: Some("integer"),
5222        unit: Some("s"),
5223    },
5224    DeviceModelEntry {
5225        component: None,
5226        variable: "Length",
5227        attributes: None,
5228        instance: None,
5229        required: Some("no"),
5230        data_type: Some("decimal"),
5231        unit: Some("m"),
5232    },
5233    DeviceModelEntry {
5234        component: None,
5235        variable: "Light",
5236        attributes: None,
5237        instance: None,
5238        required: Some("no"),
5239        data_type: Some("decimal"),
5240        unit: Some("lx"),
5241    },
5242    DeviceModelEntry {
5243        component: None,
5244        variable: "Manufacturer",
5245        attributes: None,
5246        instance: None,
5247        required: Some("no"),
5248        data_type: Some("string"),
5249        unit: None,
5250    },
5251    DeviceModelEntry {
5252        component: None,
5253        variable: "Message",
5254        attributes: None,
5255        instance: None,
5256        required: Some("no"),
5257        data_type: Some("string"),
5258        unit: None,
5259    },
5260    DeviceModelEntry {
5261        component: None,
5262        variable: "MinimumStatusDuration",
5263        attributes: None,
5264        instance: None,
5265        required: Some("no"),
5266        data_type: Some("integer"),
5267        unit: Some("s"),
5268    },
5269    DeviceModelEntry {
5270        component: None,
5271        variable: "Mode",
5272        attributes: None,
5273        instance: None,
5274        required: Some("no"),
5275        data_type: Some("string"),
5276        unit: None,
5277    },
5278    DeviceModelEntry {
5279        component: None,
5280        variable: "Model",
5281        attributes: None,
5282        instance: None,
5283        required: Some("no"),
5284        data_type: Some("string"),
5285        unit: None,
5286    },
5287    DeviceModelEntry {
5288        component: None,
5289        variable: "NetworkAddress",
5290        attributes: None,
5291        instance: None,
5292        required: Some("no"),
5293        data_type: Some("string"),
5294        unit: None,
5295    },
5296    DeviceModelEntry {
5297        component: None,
5298        variable: "Operated",
5299        attributes: None,
5300        instance: None,
5301        required: Some("no"),
5302        data_type: Some("boolean"),
5303        unit: None,
5304    },
5305    DeviceModelEntry {
5306        component: None,
5307        variable: "OperatingTimes",
5308        attributes: None,
5309        instance: None,
5310        required: Some("no"),
5311        data_type: Some("string"),
5312        unit: None,
5313    },
5314    DeviceModelEntry {
5315        component: None,
5316        variable: "Overload",
5317        attributes: None,
5318        instance: None,
5319        required: Some("no"),
5320        data_type: Some("boolean"),
5321        unit: None,
5322    },
5323    DeviceModelEntry {
5324        component: None,
5325        variable: "Percent",
5326        attributes: None,
5327        instance: None,
5328        required: Some("no"),
5329        data_type: Some("decimal"),
5330        unit: Some("Percent"),
5331    },
5332    DeviceModelEntry {
5333        component: None,
5334        variable: "PhaseRotation",
5335        attributes: None,
5336        instance: None,
5337        required: Some("no"),
5338        data_type: Some("OptionList"),
5339        unit: None,
5340    },
5341    DeviceModelEntry {
5342        component: None,
5343        variable: "PostChargingTime",
5344        attributes: None,
5345        instance: None,
5346        required: Some("no"),
5347        data_type: Some("decimal"),
5348        unit: Some("s"),
5349    },
5350    DeviceModelEntry {
5351        component: None,
5352        variable: "Power",
5353        attributes: None,
5354        instance: None,
5355        required: Some("no"),
5356        data_type: Some("decimal"),
5357        unit: Some("W, kW"),
5358    },
5359    DeviceModelEntry {
5360        component: None,
5361        variable: "Problem",
5362        attributes: None,
5363        instance: None,
5364        required: Some("no"),
5365        data_type: Some("boolean"),
5366        unit: None,
5367    },
5368    DeviceModelEntry {
5369        component: None,
5370        variable: "Protecting",
5371        attributes: None,
5372        instance: None,
5373        required: Some("no"),
5374        data_type: Some("boolean"),
5375        unit: None,
5376    },
5377    DeviceModelEntry {
5378        component: None,
5379        variable: "SerialNumber",
5380        attributes: None,
5381        instance: None,
5382        required: Some("no"),
5383        data_type: Some("string"),
5384        unit: None,
5385    },
5386    DeviceModelEntry {
5387        component: None,
5388        variable: "SignalStrength",
5389        attributes: None,
5390        instance: None,
5391        required: Some("no"),
5392        data_type: Some("decimal"),
5393        unit: Some("dBm"),
5394    },
5395    DeviceModelEntry {
5396        component: None,
5397        variable: "State",
5398        attributes: None,
5399        instance: None,
5400        required: Some("no"),
5401        data_type: Some("string"),
5402        unit: None,
5403    },
5404    DeviceModelEntry {
5405        component: None,
5406        variable: "StateOfCharge",
5407        attributes: None,
5408        instance: None,
5409        required: Some("no"),
5410        data_type: Some("decimal"),
5411        unit: Some("Percent"),
5412    },
5413    DeviceModelEntry {
5414        component: None,
5415        variable: "Storage",
5416        attributes: None,
5417        instance: None,
5418        required: Some("no"),
5419        data_type: Some("integer"),
5420        unit: Some("B"),
5421    },
5422    DeviceModelEntry {
5423        component: None,
5424        variable: "SupplyPhases",
5425        attributes: None,
5426        instance: None,
5427        required: Some("no"),
5428        data_type: Some("integer"),
5429        unit: None,
5430    },
5431    DeviceModelEntry {
5432        component: None,
5433        variable: "Suspending",
5434        attributes: None,
5435        instance: None,
5436        required: Some("no"),
5437        data_type: Some("boolean"),
5438        unit: None,
5439    },
5440    DeviceModelEntry {
5441        component: None,
5442        variable: "Suspension",
5443        attributes: None,
5444        instance: None,
5445        required: Some("no"),
5446        data_type: Some("boolean"),
5447        unit: None,
5448    },
5449    DeviceModelEntry {
5450        component: None,
5451        variable: "Temperature",
5452        attributes: None,
5453        instance: None,
5454        required: Some("no"),
5455        data_type: Some("decimal"),
5456        unit: Some("Celsius, Fahrenheit"),
5457    },
5458    DeviceModelEntry {
5459        component: None,
5460        variable: "Time",
5461        attributes: None,
5462        instance: None,
5463        required: Some("no"),
5464        data_type: Some("dateTime"),
5465        unit: None,
5466    },
5467    DeviceModelEntry {
5468        component: None,
5469        variable: "Timeout",
5470        attributes: None,
5471        instance: None,
5472        required: Some("no"),
5473        data_type: Some("decimal"),
5474        unit: Some("s"),
5475    },
5476    DeviceModelEntry {
5477        component: None,
5478        variable: "Tries",
5479        attributes: None,
5480        instance: None,
5481        required: Some("no"),
5482        data_type: Some("integer"),
5483        unit: None,
5484    },
5485    DeviceModelEntry {
5486        component: None,
5487        variable: "Tripped",
5488        attributes: None,
5489        instance: None,
5490        required: Some("no"),
5491        data_type: Some("boolean"),
5492        unit: None,
5493    },
5494    DeviceModelEntry {
5495        component: None,
5496        variable: "VendorName",
5497        attributes: None,
5498        instance: None,
5499        required: Some("no"),
5500        data_type: Some("string"),
5501        unit: None,
5502    },
5503    DeviceModelEntry {
5504        component: None,
5505        variable: "VersionDate",
5506        attributes: None,
5507        instance: None,
5508        required: Some("no"),
5509        data_type: Some("dateTime"),
5510        unit: None,
5511    },
5512    DeviceModelEntry {
5513        component: None,
5514        variable: "VersionNumber",
5515        attributes: None,
5516        instance: None,
5517        required: Some("no"),
5518        data_type: Some("string"),
5519        unit: None,
5520    },
5521    DeviceModelEntry {
5522        component: None,
5523        variable: "VoltageImbalance",
5524        attributes: None,
5525        instance: None,
5526        required: Some("no"),
5527        data_type: Some("decimal"),
5528        unit: Some("Percent"),
5529    },
5530    DeviceModelEntry {
5531        component: None,
5532        variable: "CommunicationParent",
5533        attributes: None,
5534        instance: None,
5535        required: Some("no"),
5536        data_type: Some("string"),
5537        unit: None,
5538    },
5539    DeviceModelEntry {
5540        component: None,
5541        variable: "ElectricalParent",
5542        attributes: None,
5543        instance: None,
5544        required: Some("no"),
5545        data_type: Some("string"),
5546        unit: None,
5547    },
5548    DeviceModelEntry {
5549        component: None,
5550        variable: "LogicalParent",
5551        attributes: None,
5552        instance: None,
5553        required: Some("no"),
5554        data_type: Some("string"),
5555        unit: None,
5556    },
5557    DeviceModelEntry {
5558        component: None,
5559        variable: "PhysicalParent",
5560        attributes: None,
5561        instance: None,
5562        required: Some("no"),
5563        data_type: Some("string"),
5564        unit: None,
5565    },
5566    DeviceModelEntry {
5567        component: None,
5568        variable: "Label",
5569        attributes: None,
5570        instance: None,
5571        required: Some("no"),
5572        data_type: Some("string"),
5573        unit: None,
5574    },
5575    DeviceModelEntry {
5576        component: Some("AlignedDataCtrlr"),
5577        variable: "Available",
5578        attributes: None,
5579        instance: None,
5580        required: Some("no"),
5581        data_type: Some("boolean"),
5582        unit: None,
5583    },
5584    DeviceModelEntry {
5585        component: Some("AlignedDataCtrlr"),
5586        variable: "Enabled",
5587        attributes: None,
5588        instance: None,
5589        required: Some("no"),
5590        data_type: Some("boolean"),
5591        unit: None,
5592    },
5593    DeviceModelEntry {
5594        component: Some("AlignedDataCtrlr"),
5595        variable: "Interval",
5596        attributes: None,
5597        instance: None,
5598        required: Some("yes"),
5599        data_type: Some("integer"),
5600        unit: Some("s"),
5601    },
5602    DeviceModelEntry {
5603        component: Some("AlignedDataCtrlr"),
5604        variable: "Measurands",
5605        attributes: None,
5606        instance: None,
5607        required: Some("yes"),
5608        data_type: Some("MemberList"),
5609        unit: None,
5610    },
5611    DeviceModelEntry {
5612        component: Some("AlignedDataCtrlr"),
5613        variable: "SendDuringIdle",
5614        attributes: None,
5615        instance: None,
5616        required: Some("no"),
5617        data_type: Some("boolean"),
5618        unit: None,
5619    },
5620    DeviceModelEntry {
5621        component: Some("AlignedDataCtrlr"),
5622        variable: "SignReadings",
5623        attributes: None,
5624        instance: None,
5625        required: Some("no"),
5626        data_type: Some("boolean"),
5627        unit: None,
5628    },
5629    DeviceModelEntry {
5630        component: Some("AlignedDataCtrlr"),
5631        variable: "SignUpdatedReadings",
5632        attributes: None,
5633        instance: None,
5634        required: Some("no"),
5635        data_type: Some("boolean"),
5636        unit: None,
5637    },
5638    DeviceModelEntry {
5639        component: Some("AlignedDataCtrlr"),
5640        variable: "TxEndedInterval",
5641        attributes: None,
5642        instance: None,
5643        required: Some("yes"),
5644        data_type: Some("integer"),
5645        unit: Some("s"),
5646    },
5647    DeviceModelEntry {
5648        component: Some("AlignedDataCtrlr"),
5649        variable: "TxEndedMeasurands",
5650        attributes: None,
5651        instance: None,
5652        required: Some("yes"),
5653        data_type: Some("MemberList"),
5654        unit: None,
5655    },
5656    DeviceModelEntry {
5657        component: Some("AlignedDataCtrlr"),
5658        variable: "UpstreamInterval",
5659        attributes: None,
5660        instance: None,
5661        required: Some("no"),
5662        data_type: Some("integer"),
5663        unit: Some("s"),
5664    },
5665    DeviceModelEntry {
5666        component: Some("AlignedDataCtrlr"),
5667        variable: "UpstreamMeasurands",
5668        attributes: None,
5669        instance: None,
5670        required: Some("no"),
5671        data_type: Some("MemberList"),
5672        unit: None,
5673    },
5674    DeviceModelEntry {
5675        component: Some("AuthCacheCtrlr"),
5676        variable: "Available",
5677        attributes: None,
5678        instance: None,
5679        required: Some("no"),
5680        data_type: Some("boolean"),
5681        unit: None,
5682    },
5683    DeviceModelEntry {
5684        component: Some("AuthCacheCtrlr"),
5685        variable: "Enabled",
5686        attributes: None,
5687        instance: None,
5688        required: Some("no"),
5689        data_type: Some("boolean"),
5690        unit: None,
5691    },
5692    DeviceModelEntry {
5693        component: Some("AuthCacheCtrlr"),
5694        variable: "LifeTime",
5695        attributes: None,
5696        instance: None,
5697        required: Some("no"),
5698        data_type: Some("integer"),
5699        unit: None,
5700    },
5701    DeviceModelEntry {
5702        component: Some("AuthCacheCtrlr"),
5703        variable: "Policy",
5704        attributes: None,
5705        instance: None,
5706        required: Some("no"),
5707        data_type: Some("OptionList"),
5708        unit: None,
5709    },
5710    DeviceModelEntry {
5711        component: Some("AuthCacheCtrlr"),
5712        variable: "Storage",
5713        attributes: None,
5714        instance: None,
5715        required: Some("no"),
5716        data_type: Some("integer"),
5717        unit: Some("B"),
5718    },
5719    DeviceModelEntry {
5720        component: Some("AuthCacheCtrlr"),
5721        variable: "DisablePostAuthorize",
5722        attributes: None,
5723        instance: None,
5724        required: Some("no"),
5725        data_type: Some("boolean"),
5726        unit: None,
5727    },
5728    DeviceModelEntry {
5729        component: Some("AuthCtrlr"),
5730        variable: "AdditionalInfoItemsPerMessage",
5731        attributes: None,
5732        instance: None,
5733        required: Some("no"),
5734        data_type: Some("integer"),
5735        unit: None,
5736    },
5737    DeviceModelEntry {
5738        component: Some("AuthCtrlr"),
5739        variable: "AuthorizeRemoteStart",
5740        attributes: None,
5741        instance: None,
5742        required: Some("yes"),
5743        data_type: Some("boolean"),
5744        unit: None,
5745    },
5746    DeviceModelEntry {
5747        component: Some("AuthCtrlr"),
5748        variable: "Enabled",
5749        attributes: None,
5750        instance: None,
5751        required: Some("no"),
5752        data_type: Some("boolean"),
5753        unit: None,
5754    },
5755    DeviceModelEntry {
5756        component: Some("AuthCtrlr"),
5757        variable: "LocalAuthorizeOffline",
5758        attributes: None,
5759        instance: None,
5760        required: Some("yes"),
5761        data_type: Some("boolean"),
5762        unit: None,
5763    },
5764    DeviceModelEntry {
5765        component: Some("AuthCtrlr"),
5766        variable: "LocalPreAuthorize",
5767        attributes: None,
5768        instance: None,
5769        required: Some("yes"),
5770        data_type: Some("boolean"),
5771        unit: None,
5772    },
5773    DeviceModelEntry {
5774        component: Some("AuthCtrlr"),
5775        variable: "MasterPassGroupId",
5776        attributes: None,
5777        instance: None,
5778        required: Some("no"),
5779        data_type: Some("string"),
5780        unit: None,
5781    },
5782    DeviceModelEntry {
5783        component: Some("AuthCtrlr"),
5784        variable: "OfflineTxForUnknownIdEnabled",
5785        attributes: None,
5786        instance: None,
5787        required: Some("no"),
5788        data_type: Some("boolean"),
5789        unit: None,
5790    },
5791    DeviceModelEntry {
5792        component: Some("AuthCtrlr"),
5793        variable: "DisableRemoteAuthorization",
5794        attributes: None,
5795        instance: None,
5796        required: Some("no"),
5797        data_type: Some("boolean"),
5798        unit: None,
5799    },
5800    DeviceModelEntry {
5801        component: Some("AuthCtrlr"),
5802        variable: "SupportedIdTokenType",
5803        attributes: None,
5804        instance: None,
5805        required: Some("no"),
5806        data_type: Some("MemberList"),
5807        unit: None,
5808    },
5809    DeviceModelEntry {
5810        component: Some("CHAdeMOCtrlr"),
5811        variable: "SelftestActive",
5812        attributes: None,
5813        instance: None,
5814        required: Some("no"),
5815        data_type: Some("boolean"),
5816        unit: None,
5817    },
5818    DeviceModelEntry {
5819        component: Some("CHAdeMOCtrlr"),
5820        variable: "CHAdeMOProtocolNumber",
5821        attributes: None,
5822        instance: None,
5823        required: Some("no"),
5824        data_type: Some("integer"),
5825        unit: None,
5826    },
5827    DeviceModelEntry {
5828        component: Some("CHAdeMOCtrlr"),
5829        variable: "VehicleStatus",
5830        attributes: None,
5831        instance: None,
5832        required: Some("no"),
5833        data_type: Some("boolean"),
5834        unit: None,
5835    },
5836    DeviceModelEntry {
5837        component: Some("CHAdeMOCtrlr"),
5838        variable: "DynamicControl",
5839        attributes: None,
5840        instance: None,
5841        required: Some("no"),
5842        data_type: Some("boolean"),
5843        unit: None,
5844    },
5845    DeviceModelEntry {
5846        component: Some("CHAdeMOCtrlr"),
5847        variable: "HighCurrentControl",
5848        attributes: None,
5849        instance: None,
5850        required: Some("no"),
5851        data_type: Some("boolean"),
5852        unit: None,
5853    },
5854    DeviceModelEntry {
5855        component: Some("CHAdeMOCtrlr"),
5856        variable: "HighVoltageControl",
5857        attributes: None,
5858        instance: None,
5859        required: Some("no"),
5860        data_type: Some("boolean"),
5861        unit: None,
5862    },
5863    DeviceModelEntry {
5864        component: Some("CHAdeMOCtrlr"),
5865        variable: "AutoManufacturerCode",
5866        attributes: None,
5867        instance: None,
5868        required: Some("no"),
5869        data_type: Some("integer"),
5870        unit: None,
5871    },
5872    DeviceModelEntry {
5873        component: Some("ChargingStation"),
5874        variable: "AllowNewSessionsPendingFirmwareUpdate",
5875        attributes: None,
5876        instance: None,
5877        required: Some("no"),
5878        data_type: Some("boolean"),
5879        unit: None,
5880    },
5881    DeviceModelEntry {
5882        component: Some("ChargingStation"),
5883        variable: "AvailabilityState",
5884        attributes: None,
5885        instance: None,
5886        required: Some("yes"),
5887        data_type: Some("OptionList"),
5888        unit: None,
5889    },
5890    DeviceModelEntry {
5891        component: Some("ChargingStation"),
5892        variable: "Available",
5893        attributes: None,
5894        instance: None,
5895        required: Some("yes"),
5896        data_type: Some("boolean"),
5897        unit: None,
5898    },
5899    DeviceModelEntry {
5900        component: Some("ChargingStation"),
5901        variable: "Model",
5902        attributes: None,
5903        instance: None,
5904        required: Some("no"),
5905        data_type: Some("string"),
5906        unit: None,
5907    },
5908    DeviceModelEntry {
5909        component: Some("ChargingStation"),
5910        variable: "SupplyPhases",
5911        attributes: None,
5912        instance: None,
5913        required: Some("yes"),
5914        data_type: Some("integer"),
5915        unit: None,
5916    },
5917    DeviceModelEntry {
5918        component: Some("ChargingStation"),
5919        variable: "VendorName",
5920        attributes: None,
5921        instance: None,
5922        required: Some("no"),
5923        data_type: Some("string"),
5924        unit: None,
5925    },
5926    DeviceModelEntry {
5927        component: Some("ChargingStation"),
5928        variable: "ActiveTransactionId",
5929        attributes: None,
5930        instance: None,
5931        required: Some("no"),
5932        data_type: Some("string"),
5933        unit: None,
5934    },
5935    DeviceModelEntry {
5936        component: Some("ClockCtrlr"),
5937        variable: "DateTime",
5938        attributes: None,
5939        instance: None,
5940        required: Some("yes"),
5941        data_type: Some("dateTime"),
5942        unit: None,
5943    },
5944    DeviceModelEntry {
5945        component: Some("ClockCtrlr"),
5946        variable: "NextTimeOffsetTransitionDateTime",
5947        attributes: None,
5948        instance: None,
5949        required: Some("no"),
5950        data_type: Some("dateTime"),
5951        unit: None,
5952    },
5953    DeviceModelEntry {
5954        component: Some("ClockCtrlr"),
5955        variable: "NtpServerUri",
5956        attributes: None,
5957        instance: None,
5958        required: Some("no"),
5959        data_type: Some("string"),
5960        unit: None,
5961    },
5962    DeviceModelEntry {
5963        component: Some("ClockCtrlr"),
5964        variable: "NtpSource",
5965        attributes: None,
5966        instance: None,
5967        required: Some("no"),
5968        data_type: Some("OptionList"),
5969        unit: None,
5970    },
5971    DeviceModelEntry {
5972        component: Some("ClockCtrlr"),
5973        variable: "TimeAdjustmentReportingThreshold",
5974        attributes: None,
5975        instance: None,
5976        required: Some("no"),
5977        data_type: Some("integer"),
5978        unit: None,
5979    },
5980    DeviceModelEntry {
5981        component: Some("ClockCtrlr"),
5982        variable: "TimeOffset",
5983        attributes: None,
5984        instance: None,
5985        required: Some("no"),
5986        data_type: Some("string"),
5987        unit: None,
5988    },
5989    DeviceModelEntry {
5990        component: Some("ClockCtrlr"),
5991        variable: "TimeSource",
5992        attributes: None,
5993        instance: None,
5994        required: Some("yes"),
5995        data_type: Some("SequenceList"),
5996        unit: None,
5997    },
5998    DeviceModelEntry {
5999        component: Some("ClockCtrlr"),
6000        variable: "TimeZone",
6001        attributes: None,
6002        instance: None,
6003        required: Some("no"),
6004        data_type: Some("string"),
6005        unit: None,
6006    },
6007    DeviceModelEntry {
6008        component: Some("ConnectedEV"),
6009        variable: "ProtocolAgreed",
6010        attributes: None,
6011        instance: None,
6012        required: Some("V2X"),
6013        data_type: Some("string"),
6014        unit: None,
6015    },
6016    DeviceModelEntry {
6017        component: Some("ConnectedEV"),
6018        variable: "ProtocolSupportedByEV",
6019        attributes: None,
6020        instance: Some("<Priority>"),
6021        required: Some("V2X"),
6022        data_type: Some("string"),
6023        unit: None,
6024    },
6025    DeviceModelEntry {
6026        component: Some("ConnectedEV"),
6027        variable: "VehicleID",
6028        attributes: None,
6029        instance: None,
6030        required: Some("V2X"),
6031        data_type: Some("string"),
6032        unit: None,
6033    },
6034    DeviceModelEntry {
6035        component: Some("ConnectedEV"),
6036        variable: "VehicleCertificate",
6037        attributes: None,
6038        instance: Some("Leaf"),
6039        required: Some("V2X"),
6040        data_type: Some("string"),
6041        unit: None,
6042    },
6043    DeviceModelEntry {
6044        component: Some("ConnectedEV"),
6045        variable: "VehicleCertificate",
6046        attributes: None,
6047        instance: Some("SubCA1"),
6048        required: Some("V2X"),
6049        data_type: Some("string"),
6050        unit: None,
6051    },
6052    DeviceModelEntry {
6053        component: Some("ConnectedEV"),
6054        variable: "VehicleCertificate",
6055        attributes: None,
6056        instance: Some("SubCA2"),
6057        required: Some("V2X"),
6058        data_type: Some("string"),
6059        unit: None,
6060    },
6061    DeviceModelEntry {
6062        component: Some("ConnectedEV"),
6063        variable: "VehicleCertificate",
6064        attributes: None,
6065        instance: Some("Root"),
6066        required: Some("V2X"),
6067        data_type: Some("string"),
6068        unit: None,
6069    },
6070    DeviceModelEntry {
6071        component: Some("ConnectedEV"),
6072        variable: "ACCurrent",
6073        attributes: Some("Min/MaxSet"),
6074        instance: None,
6075        required: Some("no"),
6076        data_type: Some("decimal"),
6077        unit: Some("A"),
6078    },
6079    DeviceModelEntry {
6080        component: Some("ConnectedEV"),
6081        variable: "DCCurrent",
6082        attributes: Some("Min/MaxSet"),
6083        instance: None,
6084        required: Some("no"),
6085        data_type: Some("decimal"),
6086        unit: Some("A"),
6087    },
6088    DeviceModelEntry {
6089        component: Some("ConnectedEV"),
6090        variable: "DCCurrent",
6091        attributes: Some("Target"),
6092        instance: None,
6093        required: Some("no"),
6094        data_type: Some("decimal"),
6095        unit: Some("V"),
6096    },
6097    DeviceModelEntry {
6098        component: Some("ConnectedEV"),
6099        variable: "DCVoltage",
6100        attributes: Some("Min/MaxSet"),
6101        instance: None,
6102        required: Some("no"),
6103        data_type: Some("decimal"),
6104        unit: Some("V"),
6105    },
6106    DeviceModelEntry {
6107        component: Some("ConnectedEV"),
6108        variable: "DCVoltage",
6109        attributes: Some("Target"),
6110        instance: None,
6111        required: Some("no"),
6112        data_type: Some("decimal"),
6113        unit: Some("V"),
6114    },
6115    DeviceModelEntry {
6116        component: Some("ConnectedEV"),
6117        variable: "Power",
6118        attributes: Some("MaxSet"),
6119        instance: None,
6120        required: Some("no"),
6121        data_type: Some("decimal"),
6122        unit: Some("W"),
6123    },
6124    DeviceModelEntry {
6125        component: Some("ConnectedEV"),
6126        variable: "DischargePower",
6127        attributes: Some("MaxSet"),
6128        instance: None,
6129        required: Some("no"),
6130        data_type: Some("decimal"),
6131        unit: Some("W"),
6132    },
6133    DeviceModelEntry {
6134        component: Some("ConnectedEV"),
6135        variable: "EnergyImport",
6136        attributes: Some("MaxSet"),
6137        instance: None,
6138        required: Some("no"),
6139        data_type: Some("decimal"),
6140        unit: Some("Wh"),
6141    },
6142    DeviceModelEntry {
6143        component: Some("ConnectedEV"),
6144        variable: "EnergyImport",
6145        attributes: Some("MinSet"),
6146        instance: None,
6147        required: Some("no"),
6148        data_type: Some("decimal"),
6149        unit: Some("Wh"),
6150    },
6151    DeviceModelEntry {
6152        component: Some("ConnectedEV"),
6153        variable: "EnergyImport",
6154        attributes: Some("Target"),
6155        instance: None,
6156        required: Some("no"),
6157        data_type: Some("decimal"),
6158        unit: Some("Wh"),
6159    },
6160    DeviceModelEntry {
6161        component: Some("ConnectedEV"),
6162        variable: "BatteryCapacity",
6163        attributes: None,
6164        instance: None,
6165        required: Some("no"),
6166        data_type: Some("decimal"),
6167        unit: Some("Wh"),
6168    },
6169    DeviceModelEntry {
6170        component: Some("ConnectedEV"),
6171        variable: "DepartureTime",
6172        attributes: None,
6173        instance: None,
6174        required: Some("no"),
6175        data_type: Some("DateTime"),
6176        unit: None,
6177    },
6178    DeviceModelEntry {
6179        component: Some("ConnectedEV"),
6180        variable: "RemainingTimeBulk",
6181        attributes: None,
6182        instance: None,
6183        required: Some("no"),
6184        data_type: Some("integer"),
6185        unit: Some("s"),
6186    },
6187    DeviceModelEntry {
6188        component: Some("ConnectedEV"),
6189        variable: "RemainingTimeFull",
6190        attributes: None,
6191        instance: None,
6192        required: Some("no"),
6193        data_type: Some("integer"),
6194        unit: Some("s"),
6195    },
6196    DeviceModelEntry {
6197        component: Some("ConnectedEV"),
6198        variable: "StateOfChargeBulk",
6199        attributes: None,
6200        instance: None,
6201        required: Some("no"),
6202        data_type: Some("integer"),
6203        unit: Some("%"),
6204    },
6205    DeviceModelEntry {
6206        component: Some("ConnectedEV"),
6207        variable: "StateOfCharge",
6208        attributes: Some("MaxSet"),
6209        instance: None,
6210        required: Some("no"),
6211        data_type: Some("integer"),
6212        unit: Some("%"),
6213    },
6214    DeviceModelEntry {
6215        component: Some("ConnectedEV"),
6216        variable: "StateOfCharge",
6217        attributes: None,
6218        instance: None,
6219        required: Some("no"),
6220        data_type: Some("integer"),
6221        unit: Some("%"),
6222    },
6223    DeviceModelEntry {
6224        component: Some("ConnectedEV"),
6225        variable: "ChargingCompleteBulk",
6226        attributes: None,
6227        instance: None,
6228        required: Some("no"),
6229        data_type: Some("boolean"),
6230        unit: None,
6231    },
6232    DeviceModelEntry {
6233        component: Some("ConnectedEV"),
6234        variable: "ChargingCompleteFull",
6235        attributes: None,
6236        instance: None,
6237        required: Some("no"),
6238        data_type: Some("boolean"),
6239        unit: None,
6240    },
6241    DeviceModelEntry {
6242        component: Some("ConnectedEV"),
6243        variable: "ChargingState",
6244        attributes: None,
6245        instance: None,
6246        required: Some("no"),
6247        data_type: Some("OptionList"),
6248        unit: None,
6249    },
6250    DeviceModelEntry {
6251        component: Some("Connector"),
6252        variable: "AvailabilityState",
6253        attributes: None,
6254        instance: None,
6255        required: Some("no"),
6256        data_type: Some("OptionList"),
6257        unit: None,
6258    },
6259    DeviceModelEntry {
6260        component: Some("Connector"),
6261        variable: "Available",
6262        attributes: None,
6263        instance: None,
6264        required: Some("yes"),
6265        data_type: Some("boolean"),
6266        unit: None,
6267    },
6268    DeviceModelEntry {
6269        component: Some("Connector"),
6270        variable: "ChargeProtocol",
6271        attributes: None,
6272        instance: None,
6273        required: Some("no"),
6274        data_type: Some("string"),
6275        unit: None,
6276    },
6277    DeviceModelEntry {
6278        component: Some("Connector"),
6279        variable: "ConnectorType",
6280        attributes: None,
6281        instance: None,
6282        required: Some("yes"),
6283        data_type: Some("string"),
6284        unit: None,
6285    },
6286    DeviceModelEntry {
6287        component: Some("Connector"),
6288        variable: "SupplyPhases",
6289        attributes: None,
6290        instance: None,
6291        required: Some("yes"),
6292        data_type: Some("integer"),
6293        unit: None,
6294    },
6295    DeviceModelEntry {
6296        component: Some("Connector"),
6297        variable: "SlotStatus",
6298        attributes: None,
6299        instance: None,
6300        required: Some("no"),
6301        data_type: Some("OptionList"),
6302        unit: None,
6303    },
6304    DeviceModelEntry {
6305        component: Some("CPPWMController"),
6306        variable: "State",
6307        attributes: None,
6308        instance: None,
6309        required: Some("no"),
6310        data_type: Some("string"),
6311        unit: None,
6312    },
6313    DeviceModelEntry {
6314        component: Some("CustomizationCtrlr"),
6315        variable: "CustomImplementationEnabled",
6316        attributes: None,
6317        instance: Some("<vendorId>"),
6318        required: Some("no"),
6319        data_type: Some("boolean"),
6320        unit: None,
6321    },
6322    DeviceModelEntry {
6323        component: Some("CustomizationCtrlr"),
6324        variable: "CustomTriggers",
6325        attributes: None,
6326        instance: None,
6327        required: Some("no"),
6328        data_type: Some("MemberList"),
6329        unit: None,
6330    },
6331    DeviceModelEntry {
6332        component: Some("DeviceDataCtrlr"),
6333        variable: "BytesPerMessage",
6334        attributes: None,
6335        instance: Some("GetReport"),
6336        required: Some("yes"),
6337        data_type: Some("integer"),
6338        unit: None,
6339    },
6340    DeviceModelEntry {
6341        component: Some("DeviceDataCtrlr"),
6342        variable: "BytesPerMessage",
6343        attributes: None,
6344        instance: Some("GetVariables"),
6345        required: Some("yes"),
6346        data_type: Some("integer"),
6347        unit: None,
6348    },
6349    DeviceModelEntry {
6350        component: Some("DeviceDataCtrlr"),
6351        variable: "BytesPerMessage",
6352        attributes: None,
6353        instance: Some("SetVariables"),
6354        required: Some("yes"),
6355        data_type: Some("integer"),
6356        unit: None,
6357    },
6358    DeviceModelEntry {
6359        component: Some("DeviceDataCtrlr"),
6360        variable: "ConfigurationValueSize",
6361        attributes: None,
6362        instance: None,
6363        required: Some("no"),
6364        data_type: Some("integer"),
6365        unit: None,
6366    },
6367    DeviceModelEntry {
6368        component: Some("DeviceDataCtrlr"),
6369        variable: "ItemsPerMessage",
6370        attributes: None,
6371        instance: Some("GetReport"),
6372        required: Some("yes"),
6373        data_type: Some("integer"),
6374        unit: None,
6375    },
6376    DeviceModelEntry {
6377        component: Some("DeviceDataCtrlr"),
6378        variable: "ItemsPerMessage",
6379        attributes: None,
6380        instance: Some("GetVariables"),
6381        required: Some("yes"),
6382        data_type: Some("integer"),
6383        unit: None,
6384    },
6385    DeviceModelEntry {
6386        component: Some("DeviceDataCtrlr"),
6387        variable: "ItemsPerMessage",
6388        attributes: None,
6389        instance: Some("SetVariables"),
6390        required: Some("yes"),
6391        data_type: Some("integer"),
6392        unit: None,
6393    },
6394    DeviceModelEntry {
6395        component: Some("DeviceDataCtrlr"),
6396        variable: "ReportingValueSize",
6397        attributes: None,
6398        instance: None,
6399        required: Some("no"),
6400        data_type: Some("integer"),
6401        unit: None,
6402    },
6403    DeviceModelEntry {
6404        component: Some("DeviceDataCtrlr"),
6405        variable: "ValueSize",
6406        attributes: None,
6407        instance: None,
6408        required: Some("no"),
6409        data_type: Some("integer"),
6410        unit: None,
6411    },
6412    DeviceModelEntry {
6413        component: Some("DisplayMessageCtrlr"),
6414        variable: "Available",
6415        attributes: None,
6416        instance: None,
6417        required: Some("no"),
6418        data_type: Some("boolean"),
6419        unit: None,
6420    },
6421    DeviceModelEntry {
6422        component: Some("DisplayMessageCtrlr"),
6423        variable: "DisplayMessages",
6424        attributes: None,
6425        instance: None,
6426        required: Some("yes"),
6427        data_type: Some("integer"),
6428        unit: None,
6429    },
6430    DeviceModelEntry {
6431        component: Some("DisplayMessageCtrlr"),
6432        variable: "Enabled",
6433        attributes: None,
6434        instance: None,
6435        required: Some("no"),
6436        data_type: Some("boolean"),
6437        unit: None,
6438    },
6439    DeviceModelEntry {
6440        component: Some("DisplayMessageCtrlr"),
6441        variable: "SupportedStates",
6442        attributes: None,
6443        instance: None,
6444        required: Some("yes"),
6445        data_type: Some("MemberList"),
6446        unit: None,
6447    },
6448    DeviceModelEntry {
6449        component: Some("DisplayMessageCtrlr"),
6450        variable: "SupportedFormats",
6451        attributes: None,
6452        instance: None,
6453        required: Some("yes"),
6454        data_type: Some("MemberList"),
6455        unit: None,
6456    },
6457    DeviceModelEntry {
6458        component: Some("DisplayMessageCtrlr"),
6459        variable: "SupportedPriorities",
6460        attributes: None,
6461        instance: None,
6462        required: Some("yes"),
6463        data_type: Some("MemberList"),
6464        unit: None,
6465    },
6466    DeviceModelEntry {
6467        component: Some("DisplayMessageCtrlr"),
6468        variable: "Language",
6469        attributes: None,
6470        instance: None,
6471        required: Some("yes"),
6472        data_type: Some("OptionList"),
6473        unit: None,
6474    },
6475    DeviceModelEntry {
6476        component: Some("EVSE"),
6477        variable: "AllowReset",
6478        attributes: None,
6479        instance: None,
6480        required: Some("no"),
6481        data_type: Some("boolean"),
6482        unit: None,
6483    },
6484    DeviceModelEntry {
6485        component: Some("EVSE"),
6486        variable: "AvailabilityState",
6487        attributes: None,
6488        instance: None,
6489        required: Some("yes"),
6490        data_type: Some("OptionList"),
6491        unit: None,
6492    },
6493    DeviceModelEntry {
6494        component: Some("EVSE"),
6495        variable: "Available",
6496        attributes: None,
6497        instance: None,
6498        required: Some("yes"),
6499        data_type: Some("boolean"),
6500        unit: None,
6501    },
6502    DeviceModelEntry {
6503        component: Some("EVSE"),
6504        variable: "EvseId",
6505        attributes: None,
6506        instance: None,
6507        required: Some("no"),
6508        data_type: Some("string"),
6509        unit: None,
6510    },
6511    DeviceModelEntry {
6512        component: Some("EVSE"),
6513        variable: "Power",
6514        attributes: None,
6515        instance: None,
6516        required: Some("yes"),
6517        data_type: Some("decimal"),
6518        unit: Some("W, kW"),
6519    },
6520    DeviceModelEntry {
6521        component: Some("EVSE"),
6522        variable: "DischargePower",
6523        attributes: None,
6524        instance: None,
6525        required: Some("V2X"),
6526        data_type: Some("decimal"),
6527        unit: Some("W, kW"),
6528    },
6529    DeviceModelEntry {
6530        component: Some("EVSE"),
6531        variable: "SupplyPhases",
6532        attributes: None,
6533        instance: None,
6534        required: Some("yes"),
6535        data_type: Some("integer"),
6536        unit: None,
6537    },
6538    DeviceModelEntry {
6539        component: Some("EVSE"),
6540        variable: "DCInputPhaseControl",
6541        attributes: None,
6542        instance: None,
6543        required: Some("no"),
6544        data_type: Some("boolean"),
6545        unit: None,
6546    },
6547    DeviceModelEntry {
6548        component: Some("EVSE"),
6549        variable: "ISO15118EvseId",
6550        attributes: None,
6551        instance: None,
6552        required: Some("no"),
6553        data_type: Some("string"),
6554        unit: None,
6555    },
6556    DeviceModelEntry {
6557        component: Some("EVSE"),
6558        variable: "ChargingState",
6559        attributes: None,
6560        instance: None,
6561        required: Some("no"),
6562        data_type: Some("OptionList"),
6563        unit: None,
6564    },
6565    DeviceModelEntry {
6566        component: Some("EVSE"),
6567        variable: "ActiveTransactionId",
6568        attributes: None,
6569        instance: None,
6570        required: Some("no"),
6571        data_type: Some("string"),
6572        unit: None,
6573    },
6574    DeviceModelEntry {
6575        component: Some("FiscalMetering"),
6576        variable: "EnergyExport",
6577        attributes: None,
6578        instance: None,
6579        required: Some("no"),
6580        data_type: Some("decimal"),
6581        unit: Some("Wh, kWh"),
6582    },
6583    DeviceModelEntry {
6584        component: Some("FiscalMetering"),
6585        variable: "EnergyExportRegister",
6586        attributes: None,
6587        instance: None,
6588        required: Some("no"),
6589        data_type: Some("decimal"),
6590        unit: Some("Wh, kWh"),
6591    },
6592    DeviceModelEntry {
6593        component: Some("FiscalMetering"),
6594        variable: "EnergyImport",
6595        attributes: None,
6596        instance: None,
6597        required: Some("no"),
6598        data_type: Some("decimal"),
6599        unit: Some("Wh, kWh"),
6600    },
6601    DeviceModelEntry {
6602        component: Some("FiscalMetering"),
6603        variable: "EnergyImportRegister",
6604        attributes: None,
6605        instance: None,
6606        required: Some("no"),
6607        data_type: Some("decimal"),
6608        unit: Some("Wh, kWh"),
6609    },
6610    DeviceModelEntry {
6611        component: Some("FiscalMetering"),
6612        variable: "PublicKey",
6613        attributes: None,
6614        instance: None,
6615        required: Some("no"),
6616        data_type: Some("string"),
6617        unit: None,
6618    },
6619    DeviceModelEntry {
6620        component: Some("ISO15118Ctrlr"),
6621        variable: "CentralContractValidationAllowed",
6622        attributes: None,
6623        instance: None,
6624        required: Some("no"),
6625        data_type: Some("boolean"),
6626        unit: None,
6627    },
6628    DeviceModelEntry {
6629        component: Some("ISO15118Ctrlr"),
6630        variable: "ContractValidationOffline",
6631        attributes: None,
6632        instance: None,
6633        required: Some("yes"),
6634        data_type: Some("boolean"),
6635        unit: None,
6636    },
6637    DeviceModelEntry {
6638        component: Some("ISO15118Ctrlr"),
6639        variable: "SeccId",
6640        attributes: None,
6641        instance: None,
6642        required: Some("no"),
6643        data_type: Some("string"),
6644        unit: None,
6645    },
6646    DeviceModelEntry {
6647        component: Some("ISO15118Ctrlr"),
6648        variable: "MaxScheduleEntries",
6649        attributes: None,
6650        instance: None,
6651        required: Some("no"),
6652        data_type: Some("integer"),
6653        unit: None,
6654    },
6655    DeviceModelEntry {
6656        component: Some("ISO15118Ctrlr"),
6657        variable: "RequestedEnergyTransferMode",
6658        attributes: None,
6659        instance: None,
6660        required: Some("no"),
6661        data_type: Some("OptionList"),
6662        unit: None,
6663    },
6664    DeviceModelEntry {
6665        component: Some("ISO15118Ctrlr"),
6666        variable: "RequestMeteringReceipt",
6667        attributes: None,
6668        instance: None,
6669        required: Some("no"),
6670        data_type: Some("boolean"),
6671        unit: None,
6672    },
6673    DeviceModelEntry {
6674        component: Some("ISO15118Ctrlr"),
6675        variable: "CountryName",
6676        attributes: None,
6677        instance: None,
6678        required: Some("no"),
6679        data_type: Some("string"),
6680        unit: None,
6681    },
6682    DeviceModelEntry {
6683        component: Some("ISO15118Ctrlr"),
6684        variable: "OrganizationName",
6685        attributes: None,
6686        instance: None,
6687        required: Some("no"),
6688        data_type: Some("string"),
6689        unit: None,
6690    },
6691    DeviceModelEntry {
6692        component: Some("ISO15118Ctrlr"),
6693        variable: "PnCEnabled",
6694        attributes: None,
6695        instance: None,
6696        required: Some("no"),
6697        data_type: Some("boolean"),
6698        unit: None,
6699    },
6700    DeviceModelEntry {
6701        component: Some("ISO15118Ctrlr"),
6702        variable: "V2GCertificateInstallationEnabled",
6703        attributes: None,
6704        instance: None,
6705        required: Some("no"),
6706        data_type: Some("boolean"),
6707        unit: None,
6708    },
6709    DeviceModelEntry {
6710        component: Some("ISO15118Ctrlr"),
6711        variable: "ContractCertificateInstallationEnabled",
6712        attributes: None,
6713        instance: None,
6714        required: Some("no"),
6715        data_type: Some("boolean"),
6716        unit: None,
6717    },
6718    DeviceModelEntry {
6719        component: Some("ISO15118Ctrlr"),
6720        variable: "CertificateStatusSource",
6721        attributes: None,
6722        instance: None,
6723        required: Some("no"),
6724        data_type: Some("MemberList"),
6725        unit: None,
6726    },
6727    DeviceModelEntry {
6728        component: Some("ISO15118Ctrlr"),
6729        variable: "NotificationDelay",
6730        attributes: None,
6731        instance: None,
6732        required: Some("no"),
6733        data_type: Some("integer"),
6734        unit: Some("s"),
6735    },
6736    DeviceModelEntry {
6737        component: Some("ISO15118Ctrlr"),
6738        variable: "ServiceRenegotiationSupport",
6739        attributes: None,
6740        instance: None,
6741        required: Some("no"),
6742        data_type: Some("boolean"),
6743        unit: None,
6744    },
6745    DeviceModelEntry {
6746        component: Some("ISO15118Ctrlr"),
6747        variable: "SupportedProviders",
6748        attributes: None,
6749        instance: None,
6750        required: Some("no"),
6751        data_type: Some("string"),
6752        unit: None,
6753    },
6754    DeviceModelEntry {
6755        component: Some("ISO15118Ctrlr"),
6756        variable: "MaxPriceElements",
6757        attributes: None,
6758        instance: None,
6759        required: Some("no"),
6760        data_type: Some("integer"),
6761        unit: None,
6762    },
6763    DeviceModelEntry {
6764        component: Some("ISO15118Ctrlr"),
6765        variable: "ProtocolSupported",
6766        attributes: None,
6767        instance: Some("1, 2 .. 20"),
6768        required: Some("no"),
6769        data_type: Some("string"),
6770        unit: None,
6771    },
6772    DeviceModelEntry {
6773        component: Some("LocalAuthListCtrlr"),
6774        variable: "Available",
6775        attributes: None,
6776        instance: None,
6777        required: Some("no"),
6778        data_type: Some("boolean"),
6779        unit: None,
6780    },
6781    DeviceModelEntry {
6782        component: Some("LocalAuthListCtrlr"),
6783        variable: "BytesPerMessage",
6784        attributes: None,
6785        instance: None,
6786        required: Some("yes"),
6787        data_type: Some("integer"),
6788        unit: None,
6789    },
6790    DeviceModelEntry {
6791        component: Some("LocalAuthListCtrlr"),
6792        variable: "Enabled",
6793        attributes: None,
6794        instance: None,
6795        required: Some("no"),
6796        data_type: Some("boolean"),
6797        unit: None,
6798    },
6799    DeviceModelEntry {
6800        component: Some("LocalAuthListCtrlr"),
6801        variable: "Entries",
6802        attributes: None,
6803        instance: None,
6804        required: Some("yes"),
6805        data_type: Some("integer"),
6806        unit: None,
6807    },
6808    DeviceModelEntry {
6809        component: Some("LocalAuthListCtrlr"),
6810        variable: "ItemsPerMessage",
6811        attributes: None,
6812        instance: None,
6813        required: Some("yes"),
6814        data_type: Some("integer"),
6815        unit: None,
6816    },
6817    DeviceModelEntry {
6818        component: Some("LocalAuthListCtrlr"),
6819        variable: "Storage",
6820        attributes: None,
6821        instance: None,
6822        required: Some("no"),
6823        data_type: Some("integer"),
6824        unit: Some("B"),
6825    },
6826    DeviceModelEntry {
6827        component: Some("LocalAuthListCtrlr"),
6828        variable: "DisablePostAuthorize",
6829        attributes: None,
6830        instance: None,
6831        required: Some("no"),
6832        data_type: Some("boolean"),
6833        unit: None,
6834    },
6835    DeviceModelEntry {
6836        component: Some("LocalAuthListCtrlr"),
6837        variable: "SupportsExpiryDateTime",
6838        attributes: None,
6839        instance: None,
6840        required: Some("no"),
6841        data_type: Some("boolean"),
6842        unit: None,
6843    },
6844    DeviceModelEntry {
6845        component: Some("LocalEnergyStorage"),
6846        variable: "Capacity",
6847        attributes: None,
6848        instance: None,
6849        required: Some("no"),
6850        data_type: Some("decimal"),
6851        unit: Some("Wh"),
6852    },
6853    DeviceModelEntry {
6854        component: Some("MonitoringCtrlr"),
6855        variable: "Available",
6856        attributes: None,
6857        instance: None,
6858        required: Some("no"),
6859        data_type: Some("boolean"),
6860        unit: None,
6861    },
6862    DeviceModelEntry {
6863        component: Some("MonitoringCtrlr"),
6864        variable: "BytesPerMessage",
6865        attributes: None,
6866        instance: Some("ClearVariableMonitoring"),
6867        required: Some("no"),
6868        data_type: Some("integer"),
6869        unit: None,
6870    },
6871    DeviceModelEntry {
6872        component: Some("MonitoringCtrlr"),
6873        variable: "BytesPerMessage",
6874        attributes: None,
6875        instance: Some("SetVariableMonitoring"),
6876        required: Some("yes"),
6877        data_type: Some("integer"),
6878        unit: None,
6879    },
6880    DeviceModelEntry {
6881        component: Some("MonitoringCtrlr"),
6882        variable: "Enabled",
6883        attributes: None,
6884        instance: None,
6885        required: Some("no"),
6886        data_type: Some("boolean"),
6887        unit: None,
6888    },
6889    DeviceModelEntry {
6890        component: Some("MonitoringCtrlr"),
6891        variable: "ItemsPerMessage",
6892        attributes: None,
6893        instance: Some("ClearVariableMonitoring"),
6894        required: Some("no"),
6895        data_type: Some("integer"),
6896        unit: None,
6897    },
6898    DeviceModelEntry {
6899        component: Some("MonitoringCtrlr"),
6900        variable: "ItemsPerMessage",
6901        attributes: None,
6902        instance: Some("SetVariableMonitoring"),
6903        required: Some("yes"),
6904        data_type: Some("integer"),
6905        unit: None,
6906    },
6907    DeviceModelEntry {
6908        component: Some("MonitoringCtrlr"),
6909        variable: "OfflineQueuingSeverity",
6910        attributes: None,
6911        instance: None,
6912        required: Some("no"),
6913        data_type: Some("integer"),
6914        unit: None,
6915    },
6916    DeviceModelEntry {
6917        component: Some("MonitoringCtrlr"),
6918        variable: "MonitoringBase",
6919        attributes: None,
6920        instance: None,
6921        required: Some("no"),
6922        data_type: Some("OptionList"),
6923        unit: None,
6924    },
6925    DeviceModelEntry {
6926        component: Some("MonitoringCtrlr"),
6927        variable: "MonitoringLevel",
6928        attributes: None,
6929        instance: None,
6930        required: Some("no"),
6931        data_type: Some("integer"),
6932        unit: None,
6933    },
6934    DeviceModelEntry {
6935        component: Some("MonitoringCtrlr"),
6936        variable: "ActiveMonitoringBase",
6937        attributes: None,
6938        instance: None,
6939        required: Some("no"),
6940        data_type: Some("OptionList"),
6941        unit: None,
6942    },
6943    DeviceModelEntry {
6944        component: Some("MonitoringCtrlr"),
6945        variable: "ActiveMonitoringLevel",
6946        attributes: None,
6947        instance: None,
6948        required: Some("no"),
6949        data_type: Some("integer"),
6950        unit: None,
6951    },
6952    DeviceModelEntry {
6953        component: Some("MonitoringCtrlr"),
6954        variable: "MaxPeriodicEventStreams",
6955        attributes: None,
6956        instance: None,
6957        required: Some("no"),
6958        data_type: Some("integer"),
6959        unit: None,
6960    },
6961    DeviceModelEntry {
6962        component: Some("OCPPCommCtrlr"),
6963        variable: "ActiveNetworkProfile",
6964        attributes: None,
6965        instance: None,
6966        required: Some("no"),
6967        data_type: Some("string"),
6968        unit: None,
6969    },
6970    DeviceModelEntry {
6971        component: Some("OCPPCommCtrlr"),
6972        variable: "FileTransferProtocols",
6973        attributes: None,
6974        instance: None,
6975        required: Some("yes"),
6976        data_type: Some("MemberList"),
6977        unit: None,
6978    },
6979    DeviceModelEntry {
6980        component: Some("OCPPCommCtrlr"),
6981        variable: "HeartbeatInterval",
6982        attributes: None,
6983        instance: None,
6984        required: Some("no"),
6985        data_type: Some("integer"),
6986        unit: Some("s"),
6987    },
6988    DeviceModelEntry {
6989        component: Some("OCPPCommCtrlr"),
6990        variable: "MessageTimeout",
6991        attributes: None,
6992        instance: Some("Default"),
6993        required: Some("yes"),
6994        data_type: Some("integer"),
6995        unit: Some("s"),
6996    },
6997    DeviceModelEntry {
6998        component: Some("OCPPCommCtrlr"),
6999        variable: "MessageAttemptInterval",
7000        attributes: None,
7001        instance: Some("TransactionEvent"),
7002        required: Some("yes"),
7003        data_type: Some("integer"),
7004        unit: None,
7005    },
7006    DeviceModelEntry {
7007        component: Some("OCPPCommCtrlr"),
7008        variable: "MessageAttempts",
7009        attributes: None,
7010        instance: Some("TransactionEvent"),
7011        required: Some("yes"),
7012        data_type: Some("integer"),
7013        unit: None,
7014    },
7015    DeviceModelEntry {
7016        component: Some("OCPPCommCtrlr"),
7017        variable: "NetworkConfigurationPriority",
7018        attributes: None,
7019        instance: None,
7020        required: Some("yes"),
7021        data_type: Some("string"),
7022        unit: None,
7023    },
7024    DeviceModelEntry {
7025        component: Some("OCPPCommCtrlr"),
7026        variable: "NetworkProfileConnectionAttempts",
7027        attributes: None,
7028        instance: None,
7029        required: Some("yes"),
7030        data_type: Some("integer"),
7031        unit: None,
7032    },
7033    DeviceModelEntry {
7034        component: Some("OCPPCommCtrlr"),
7035        variable: "OfflineThreshold",
7036        attributes: None,
7037        instance: None,
7038        required: Some("yes"),
7039        data_type: Some("integer"),
7040        unit: Some("s"),
7041    },
7042    DeviceModelEntry {
7043        component: Some("OCPPCommCtrlr"),
7044        variable: "PublicKeyWithSignedMeterValue",
7045        attributes: None,
7046        instance: None,
7047        required: Some("no"),
7048        data_type: Some("OptionList"),
7049        unit: None,
7050    },
7051    DeviceModelEntry {
7052        component: Some("OCPPCommCtrlr"),
7053        variable: "QueueAllMessages",
7054        attributes: None,
7055        instance: None,
7056        required: Some("no"),
7057        data_type: Some("boolean"),
7058        unit: None,
7059    },
7060    DeviceModelEntry {
7061        component: Some("OCPPCommCtrlr"),
7062        variable: "ResetRetries",
7063        attributes: None,
7064        instance: None,
7065        required: Some("yes"),
7066        data_type: Some("integer"),
7067        unit: None,
7068    },
7069    DeviceModelEntry {
7070        component: Some("OCPPCommCtrlr"),
7071        variable: "RetryBackOffRandomRange",
7072        attributes: None,
7073        instance: None,
7074        required: Some("no"),
7075        data_type: Some("integer"),
7076        unit: None,
7077    },
7078    DeviceModelEntry {
7079        component: Some("OCPPCommCtrlr"),
7080        variable: "RetryBackOffRepeatTimes",
7081        attributes: None,
7082        instance: None,
7083        required: Some("no"),
7084        data_type: Some("integer"),
7085        unit: None,
7086    },
7087    DeviceModelEntry {
7088        component: Some("OCPPCommCtrlr"),
7089        variable: "RetryBackOffWaitMinimum",
7090        attributes: None,
7091        instance: None,
7092        required: Some("no"),
7093        data_type: Some("integer"),
7094        unit: None,
7095    },
7096    DeviceModelEntry {
7097        component: Some("OCPPCommCtrlr"),
7098        variable: "UnlockOnEVSideDisconnect",
7099        attributes: None,
7100        instance: None,
7101        required: Some("yes"),
7102        data_type: Some("boolean"),
7103        unit: None,
7104    },
7105    DeviceModelEntry {
7106        component: Some("OCPPCommCtrlr"),
7107        variable: "WebSocketPingInterval",
7108        attributes: None,
7109        instance: None,
7110        required: Some("no"),
7111        data_type: Some("integer"),
7112        unit: Some("s"),
7113    },
7114    DeviceModelEntry {
7115        component: Some("OCPPCommCtrlr"),
7116        variable: "FieldLength",
7117        attributes: None,
7118        instance: None,
7119        required: Some("no"),
7120        data_type: Some("integer"),
7121        unit: None,
7122    },
7123    DeviceModelEntry {
7124        component: Some("OCPPCommCtrlr"),
7125        variable: "ExternalConfigChangeDate",
7126        attributes: None,
7127        instance: None,
7128        required: Some("no"),
7129        data_type: Some("DateTime"),
7130        unit: None,
7131    },
7132    DeviceModelEntry {
7133        component: Some("ReservationCtrlr"),
7134        variable: "Available",
7135        attributes: None,
7136        instance: None,
7137        required: Some("no"),
7138        data_type: Some("boolean"),
7139        unit: None,
7140    },
7141    DeviceModelEntry {
7142        component: Some("ReservationCtrlr"),
7143        variable: "Enabled",
7144        attributes: None,
7145        instance: None,
7146        required: Some("no"),
7147        data_type: Some("boolean"),
7148        unit: None,
7149    },
7150    DeviceModelEntry {
7151        component: Some("ReservationCtrlr"),
7152        variable: "NonEvseSpecific",
7153        attributes: None,
7154        instance: None,
7155        required: Some("no"),
7156        data_type: Some("boolean"),
7157        unit: None,
7158    },
7159    DeviceModelEntry {
7160        component: Some("SampledDataCtrlr"),
7161        variable: "Available",
7162        attributes: None,
7163        instance: None,
7164        required: Some("no"),
7165        data_type: Some("boolean"),
7166        unit: None,
7167    },
7168    DeviceModelEntry {
7169        component: Some("SampledDataCtrlr"),
7170        variable: "Enabled",
7171        attributes: None,
7172        instance: None,
7173        required: Some("no"),
7174        data_type: Some("boolean"),
7175        unit: None,
7176    },
7177    DeviceModelEntry {
7178        component: Some("SampledDataCtrlr"),
7179        variable: "SignReadings",
7180        attributes: None,
7181        instance: None,
7182        required: Some("no"),
7183        data_type: Some("boolean"),
7184        unit: None,
7185    },
7186    DeviceModelEntry {
7187        component: Some("SampledDataCtrlr"),
7188        variable: "SignStartedReadings",
7189        attributes: None,
7190        instance: None,
7191        required: None,
7192        data_type: None,
7193        unit: None,
7194    },
7195    DeviceModelEntry {
7196        component: Some("SampledDataCtrlr"),
7197        variable: "SignUpdatedReadings",
7198        attributes: None,
7199        instance: None,
7200        required: None,
7201        data_type: None,
7202        unit: None,
7203    },
7204    DeviceModelEntry {
7205        component: Some("SampledDataCtrlr"),
7206        variable: "TxEndedInterval",
7207        attributes: None,
7208        instance: None,
7209        required: Some("yes"),
7210        data_type: Some("integer"),
7211        unit: Some("s"),
7212    },
7213    DeviceModelEntry {
7214        component: Some("SampledDataCtrlr"),
7215        variable: "TxEndedMeasurands",
7216        attributes: None,
7217        instance: None,
7218        required: Some("yes"),
7219        data_type: Some("MemberList"),
7220        unit: None,
7221    },
7222    DeviceModelEntry {
7223        component: Some("SampledDataCtrlr"),
7224        variable: "TxStartedMeasurands",
7225        attributes: None,
7226        instance: None,
7227        required: Some("yes"),
7228        data_type: Some("MemberList"),
7229        unit: None,
7230    },
7231    DeviceModelEntry {
7232        component: Some("SampledDataCtrlr"),
7233        variable: "TxUpdatedInterval",
7234        attributes: None,
7235        instance: None,
7236        required: Some("yes"),
7237        data_type: Some("integer"),
7238        unit: Some("s"),
7239    },
7240    DeviceModelEntry {
7241        component: Some("SampledDataCtrlr"),
7242        variable: "TxUpdatedMeasurands",
7243        attributes: None,
7244        instance: None,
7245        required: Some("yes"),
7246        data_type: Some("MemberList"),
7247        unit: None,
7248    },
7249    DeviceModelEntry {
7250        component: Some("SampledDataCtrlr"),
7251        variable: "RegisterValuesWithoutPhases",
7252        attributes: None,
7253        instance: None,
7254        required: Some("no"),
7255        data_type: Some("boolean"),
7256        unit: None,
7257    },
7258    DeviceModelEntry {
7259        component: Some("SampledDataCtrlr"),
7260        variable: "UpstreamInterval",
7261        attributes: None,
7262        instance: None,
7263        required: Some("no"),
7264        data_type: Some("integer"),
7265        unit: Some("s"),
7266    },
7267    DeviceModelEntry {
7268        component: Some("SampledDataCtrlr"),
7269        variable: "UpstreamMeasurands",
7270        attributes: None,
7271        instance: None,
7272        required: Some("no"),
7273        data_type: Some("MemberList"),
7274        unit: None,
7275    },
7276    DeviceModelEntry {
7277        component: Some("SecurityCtrlr"),
7278        variable: "AllowSecurityProfileDowngrade",
7279        attributes: None,
7280        instance: None,
7281        required: Some("no"),
7282        data_type: Some("boolean"),
7283        unit: None,
7284    },
7285    DeviceModelEntry {
7286        component: Some("SecurityCtrlr"),
7287        variable: "AdditionalRootCertificateCheck",
7288        attributes: None,
7289        instance: None,
7290        required: Some("no"),
7291        data_type: Some("boolean"),
7292        unit: None,
7293    },
7294    DeviceModelEntry {
7295        component: Some("SecurityCtrlr"),
7296        variable: "BasicAuthPassword",
7297        attributes: None,
7298        instance: None,
7299        required: Some("no"),
7300        data_type: Some("passwordString"),
7301        unit: None,
7302    },
7303    DeviceModelEntry {
7304        component: Some("SecurityCtrlr"),
7305        variable: "CertificateEntries",
7306        attributes: None,
7307        instance: None,
7308        required: Some("yes"),
7309        data_type: Some("integer"),
7310        unit: None,
7311    },
7312    DeviceModelEntry {
7313        component: Some("SecurityCtrlr"),
7314        variable: "CertSigningRepeatTimes",
7315        attributes: None,
7316        instance: None,
7317        required: Some("no"),
7318        data_type: Some("integer"),
7319        unit: None,
7320    },
7321    DeviceModelEntry {
7322        component: Some("SecurityCtrlr"),
7323        variable: "CertSigningWaitMinimum",
7324        attributes: None,
7325        instance: None,
7326        required: Some("no"),
7327        data_type: Some("integer"),
7328        unit: Some("s"),
7329    },
7330    DeviceModelEntry {
7331        component: Some("SecurityCtrlr"),
7332        variable: "Identity",
7333        attributes: None,
7334        instance: None,
7335        required: Some("no"),
7336        data_type: Some("identifierString"),
7337        unit: None,
7338    },
7339    DeviceModelEntry {
7340        component: Some("SecurityCtrlr"),
7341        variable: "MaxCertificateChainSize",
7342        attributes: None,
7343        instance: None,
7344        required: Some("no"),
7345        data_type: Some("integer"),
7346        unit: None,
7347    },
7348    DeviceModelEntry {
7349        component: Some("SecurityCtrlr"),
7350        variable: "OrganizationName",
7351        attributes: None,
7352        instance: None,
7353        required: Some("yes"),
7354        data_type: Some("string"),
7355        unit: None,
7356    },
7357    DeviceModelEntry {
7358        component: Some("SecurityCtrlr"),
7359        variable: "SecurityProfile",
7360        attributes: None,
7361        instance: None,
7362        required: Some("yes"),
7363        data_type: Some("integer"),
7364        unit: None,
7365    },
7366    DeviceModelEntry {
7367        component: Some("SmartChargingCtrlr"),
7368        variable: "ACPhaseSwitchingSupported",
7369        attributes: None,
7370        instance: None,
7371        required: Some("no"),
7372        data_type: Some("boolean"),
7373        unit: None,
7374    },
7375    DeviceModelEntry {
7376        component: Some("SmartChargingCtrlr"),
7377        variable: "Available",
7378        attributes: None,
7379        instance: None,
7380        required: Some("no"),
7381        data_type: Some("boolean"),
7382        unit: None,
7383    },
7384    DeviceModelEntry {
7385        component: Some("SmartChargingCtrlr"),
7386        variable: "Enabled",
7387        attributes: None,
7388        instance: None,
7389        required: Some("no"),
7390        data_type: Some("boolean"),
7391        unit: None,
7392    },
7393    DeviceModelEntry {
7394        component: Some("SmartChargingCtrlr"),
7395        variable: "Entries",
7396        attributes: None,
7397        instance: Some("ChargingProfiles"),
7398        required: Some("yes"),
7399        data_type: Some("integer"),
7400        unit: None,
7401    },
7402    DeviceModelEntry {
7403        component: Some("SmartChargingCtrlr"),
7404        variable: "ExternalControlSignalsEnabled",
7405        attributes: None,
7406        instance: None,
7407        required: Some("no"),
7408        data_type: Some("boolean"),
7409        unit: None,
7410    },
7411    DeviceModelEntry {
7412        component: Some("SmartChargingCtrlr"),
7413        variable: "LimitChangeSignificance",
7414        attributes: None,
7415        instance: None,
7416        required: Some("yes"),
7417        data_type: Some("decimal"),
7418        unit: Some("Percent"),
7419    },
7420    DeviceModelEntry {
7421        component: Some("SmartChargingCtrlr"),
7422        variable: "NotifyChargingLimitWithSchedules",
7423        attributes: None,
7424        instance: None,
7425        required: Some("no"),
7426        data_type: Some("boolean"),
7427        unit: None,
7428    },
7429    DeviceModelEntry {
7430        component: Some("SmartChargingCtrlr"),
7431        variable: "PeriodsPerSchedule",
7432        attributes: None,
7433        instance: None,
7434        required: Some("yes"),
7435        data_type: Some("integer"),
7436        unit: None,
7437    },
7438    DeviceModelEntry {
7439        component: Some("SmartChargingCtrlr"),
7440        variable: "Phases3to1",
7441        attributes: None,
7442        instance: None,
7443        required: Some("no"),
7444        data_type: Some("boolean"),
7445        unit: None,
7446    },
7447    DeviceModelEntry {
7448        component: Some("SmartChargingCtrlr"),
7449        variable: "ProfileStackLevel",
7450        attributes: None,
7451        instance: None,
7452        required: Some("yes"),
7453        data_type: Some("integer"),
7454        unit: None,
7455    },
7456    DeviceModelEntry {
7457        component: Some("SmartChargingCtrlr"),
7458        variable: "RateUnit",
7459        attributes: None,
7460        instance: None,
7461        required: Some("yes"),
7462        data_type: Some("MemberList"),
7463        unit: None,
7464    },
7465    DeviceModelEntry {
7466        component: Some("SmartChargingCtrlr"),
7467        variable: "ExternalConstraintsProfileDisallowed",
7468        attributes: None,
7469        instance: None,
7470        required: Some("no"),
7471        data_type: Some("boolean"),
7472        unit: None,
7473    },
7474    DeviceModelEntry {
7475        component: Some("SmartChargingCtrlr"),
7476        variable: "ChargingProfilePersistence",
7477        attributes: None,
7478        instance: Some("TxProfile"),
7479        required: Some("no"),
7480        data_type: Some("boolean"),
7481        unit: None,
7482    },
7483    DeviceModelEntry {
7484        component: Some("SmartChargingCtrlr"),
7485        variable: "ChargingProfilePersistence",
7486        attributes: None,
7487        instance: Some("LocalGeneration"),
7488        required: Some("no"),
7489        data_type: Some("boolean"),
7490        unit: None,
7491    },
7492    DeviceModelEntry {
7493        component: Some("SmartChargingCtrlr"),
7494        variable: "ChargingProfilePersistence",
7495        attributes: None,
7496        instance: Some("ChargingStationExternalConstraints"),
7497        required: Some("no"),
7498        data_type: Some("boolean"),
7499        unit: None,
7500    },
7501    DeviceModelEntry {
7502        component: Some("SmartChargingCtrlr"),
7503        variable: "SetpointPriority",
7504        attributes: None,
7505        instance: None,
7506        required: Some("no"),
7507        data_type: Some("OptionList"),
7508        unit: None,
7509    },
7510    DeviceModelEntry {
7511        component: Some("SmartChargingCtrlr"),
7512        variable: "MaxExternalConstraintsId",
7513        attributes: None,
7514        instance: None,
7515        required: Some("no"),
7516        data_type: Some("integer"),
7517        unit: None,
7518    },
7519    DeviceModelEntry {
7520        component: Some("SmartChargingCtrlr"),
7521        variable: "SupportedAdditionalPurposes",
7522        attributes: None,
7523        instance: None,
7524        required: Some("no"),
7525        data_type: Some("MemberList"),
7526        unit: None,
7527    },
7528    DeviceModelEntry {
7529        component: Some("SmartChargingCtrlr"),
7530        variable: "SupportsDynamicProfiles",
7531        attributes: None,
7532        instance: None,
7533        required: Some("no"),
7534        data_type: Some("boolean"),
7535        unit: None,
7536    },
7537    DeviceModelEntry {
7538        component: Some("SmartChargingCtrlr"),
7539        variable: "SupportsMaxOfflineDuration",
7540        attributes: None,
7541        instance: None,
7542        required: Some("no"),
7543        data_type: Some("boolean"),
7544        unit: None,
7545    },
7546    DeviceModelEntry {
7547        component: Some("SmartChargingCtrlr"),
7548        variable: "SupportsUseLocalTime",
7549        attributes: None,
7550        instance: None,
7551        required: Some("no"),
7552        data_type: Some("boolean"),
7553        unit: None,
7554    },
7555    DeviceModelEntry {
7556        component: Some("SmartChargingCtrlr"),
7557        variable: "SupportsRandomizedDelay",
7558        attributes: None,
7559        instance: None,
7560        required: Some("no"),
7561        data_type: Some("boolean"),
7562        unit: None,
7563    },
7564    DeviceModelEntry {
7565        component: Some("SmartChargingCtrlr"),
7566        variable: "SupportsLimitAtSoC",
7567        attributes: None,
7568        instance: None,
7569        required: Some("no"),
7570        data_type: Some("boolean"),
7571        unit: None,
7572    },
7573    DeviceModelEntry {
7574        component: Some("SmartChargingCtrlr"),
7575        variable: "SupportsEvseSleep",
7576        attributes: None,
7577        instance: None,
7578        required: Some("no"),
7579        data_type: Some("boolean"),
7580        unit: None,
7581    },
7582    DeviceModelEntry {
7583        component: Some("TariffCostCtrlr"),
7584        variable: "Available",
7585        attributes: None,
7586        instance: Some("Tariff"),
7587        required: Some("no"),
7588        data_type: Some("boolean"),
7589        unit: None,
7590    },
7591    DeviceModelEntry {
7592        component: Some("TariffCostCtrlr"),
7593        variable: "Available",
7594        attributes: None,
7595        instance: Some("Cost"),
7596        required: Some("no"),
7597        data_type: Some("boolean"),
7598        unit: None,
7599    },
7600    DeviceModelEntry {
7601        component: Some("TariffCostCtrlr"),
7602        variable: "Currency",
7603        attributes: None,
7604        instance: None,
7605        required: Some("yes"),
7606        data_type: Some("string"),
7607        unit: None,
7608    },
7609    DeviceModelEntry {
7610        component: Some("TariffCostCtrlr"),
7611        variable: "Enabled",
7612        attributes: None,
7613        instance: Some("Tariff"),
7614        required: Some("no"),
7615        data_type: Some("boolean"),
7616        unit: None,
7617    },
7618    DeviceModelEntry {
7619        component: Some("TariffCostCtrlr"),
7620        variable: "Enabled",
7621        attributes: None,
7622        instance: Some("Cost"),
7623        required: Some("no"),
7624        data_type: Some("boolean"),
7625        unit: None,
7626    },
7627    DeviceModelEntry {
7628        component: Some("TariffCostCtrlr"),
7629        variable: "Enabled",
7630        attributes: None,
7631        instance: Some("RunningCost"),
7632        required: Some("no"),
7633        data_type: Some("boolean"),
7634        unit: None,
7635    },
7636    DeviceModelEntry {
7637        component: Some("TariffCostCtrlr"),
7638        variable: "TariffFallbackMessage",
7639        attributes: None,
7640        instance: Some("<language>"),
7641        required: Some("yes"),
7642        data_type: Some("string"),
7643        unit: None,
7644    },
7645    DeviceModelEntry {
7646        component: Some("TariffCostCtrlr"),
7647        variable: "TotalCostFallbackMessage",
7648        attributes: None,
7649        instance: Some("<language>"),
7650        required: Some("yes"),
7651        data_type: Some("string"),
7652        unit: None,
7653    },
7654    DeviceModelEntry {
7655        component: Some("TariffCostCtrlr"),
7656        variable: "OfflineTariffFallbackMessage",
7657        attributes: None,
7658        instance: Some("<language>"),
7659        required: Some("no"),
7660        data_type: Some("string"),
7661        unit: None,
7662    },
7663    DeviceModelEntry {
7664        component: Some("TariffCostCtrlr"),
7665        variable: "Interval",
7666        attributes: None,
7667        instance: Some("Tariff"),
7668        required: Some("no"),
7669        data_type: Some("integer"),
7670        unit: Some("s"),
7671    },
7672    DeviceModelEntry {
7673        component: Some("TariffCostCtrlr"),
7674        variable: "Interval",
7675        attributes: None,
7676        instance: Some("Cost"),
7677        required: Some("no"),
7678        data_type: Some("integer"),
7679        unit: Some("s"),
7680    },
7681    DeviceModelEntry {
7682        component: Some("TariffCostCtrlr"),
7683        variable: "MaxElements",
7684        attributes: None,
7685        instance: Some("Tariff"),
7686        required: Some("no"),
7687        data_type: Some("integer"),
7688        unit: None,
7689    },
7690    DeviceModelEntry {
7691        component: Some("TariffCostCtrlr"),
7692        variable: "ConditionsSupported",
7693        attributes: None,
7694        instance: Some("Tariff"),
7695        required: Some("no"),
7696        data_type: Some("boolean"),
7697        unit: None,
7698    },
7699    DeviceModelEntry {
7700        component: Some("TariffCostCtrlr"),
7701        variable: "HandleFailedTariff",
7702        attributes: None,
7703        instance: Some("Tariff"),
7704        required: Some("no"),
7705        data_type: Some("OptionList"),
7706        unit: None,
7707    },
7708    DeviceModelEntry {
7709        component: Some("TokenReader"),
7710        variable: "Token",
7711        attributes: None,
7712        instance: None,
7713        required: Some("no"),
7714        data_type: Some("string"),
7715        unit: None,
7716    },
7717    DeviceModelEntry {
7718        component: Some("TokenReader"),
7719        variable: "TokenType",
7720        attributes: None,
7721        instance: None,
7722        required: Some("no"),
7723        data_type: Some("OptionList"),
7724        unit: None,
7725    },
7726    DeviceModelEntry {
7727        component: Some("TxCtrlr"),
7728        variable: "ChargingTime",
7729        attributes: None,
7730        instance: None,
7731        required: Some("no"),
7732        data_type: Some("decimal"),
7733        unit: Some("s"),
7734    },
7735    DeviceModelEntry {
7736        component: Some("TxCtrlr"),
7737        variable: "EVConnectionTimeOut",
7738        attributes: None,
7739        instance: None,
7740        required: Some("yes"),
7741        data_type: Some("integer"),
7742        unit: Some("s"),
7743    },
7744    DeviceModelEntry {
7745        component: Some("TxCtrlr"),
7746        variable: "MaxEnergyOnInvalidId",
7747        attributes: None,
7748        instance: None,
7749        required: Some("no"),
7750        data_type: Some("integer"),
7751        unit: None,
7752    },
7753    DeviceModelEntry {
7754        component: Some("TxCtrlr"),
7755        variable: "StopTxOnEVSideDisconnect",
7756        attributes: None,
7757        instance: None,
7758        required: Some("yes"),
7759        data_type: Some("boolean"),
7760        unit: None,
7761    },
7762    DeviceModelEntry {
7763        component: Some("TxCtrlr"),
7764        variable: "StopTxOnInvalidId",
7765        attributes: None,
7766        instance: None,
7767        required: Some("yes"),
7768        data_type: Some("boolean"),
7769        unit: None,
7770    },
7771    DeviceModelEntry {
7772        component: Some("TxCtrlr"),
7773        variable: "TxBeforeAcceptedEnabled",
7774        attributes: None,
7775        instance: None,
7776        required: Some("no"),
7777        data_type: Some("boolean"),
7778        unit: None,
7779    },
7780    DeviceModelEntry {
7781        component: Some("TxCtrlr"),
7782        variable: "TxStartPoint",
7783        attributes: None,
7784        instance: None,
7785        required: Some("yes"),
7786        data_type: Some("MemberList"),
7787        unit: None,
7788    },
7789    DeviceModelEntry {
7790        component: Some("TxCtrlr"),
7791        variable: "TxStopPoint",
7792        attributes: None,
7793        instance: None,
7794        required: Some("yes"),
7795        data_type: Some("MemberList"),
7796        unit: None,
7797    },
7798    DeviceModelEntry {
7799        component: Some("TxCtrlr"),
7800        variable: "ResumptionTimeout",
7801        attributes: None,
7802        instance: None,
7803        required: Some("no"),
7804        data_type: Some("integer"),
7805        unit: Some("s"),
7806    },
7807    DeviceModelEntry {
7808        component: Some("TxCtrlr"),
7809        variable: "EnergyTransferResumptionRandomRange",
7810        attributes: None,
7811        instance: None,
7812        required: Some("no"),
7813        data_type: Some("integer"),
7814        unit: Some("s"),
7815    },
7816    DeviceModelEntry {
7817        component: Some("TxCtrlr"),
7818        variable: "AllowEnergyTransferResumption",
7819        attributes: None,
7820        instance: None,
7821        required: Some("no"),
7822        data_type: Some("boolean"),
7823        unit: None,
7824    },
7825    DeviceModelEntry {
7826        component: Some("TxCtrlr"),
7827        variable: "SupportedLimits",
7828        attributes: None,
7829        instance: None,
7830        required: Some("no"),
7831        data_type: Some("MemberList"),
7832        unit: None,
7833    },
7834    DeviceModelEntry {
7835        component: Some("V2XChargingCtrlr"),
7836        variable: "Enabled",
7837        attributes: None,
7838        instance: None,
7839        required: Some("yes"),
7840        data_type: Some("boolean"),
7841        unit: None,
7842    },
7843    DeviceModelEntry {
7844        component: Some("V2XChargingCtrlr"),
7845        variable: "SupportedEnergyTransferModes",
7846        attributes: None,
7847        instance: None,
7848        required: Some("yes"),
7849        data_type: Some("MemberList"),
7850        unit: None,
7851    },
7852    DeviceModelEntry {
7853        component: Some("V2XChargingCtrlr"),
7854        variable: "SupportedOperationModes",
7855        attributes: None,
7856        instance: None,
7857        required: Some("yes"),
7858        data_type: Some("MemberList"),
7859        unit: None,
7860    },
7861    DeviceModelEntry {
7862        component: Some("V2XChargingCtrlr"),
7863        variable: "LocalFrequencyUpdateThreshold",
7864        attributes: None,
7865        instance: None,
7866        required: Some("no"),
7867        data_type: Some("boolean"),
7868        unit: None,
7869    },
7870    DeviceModelEntry {
7871        component: Some("V2XChargingCtrlr"),
7872        variable: "TxStartedMeasurands",
7873        attributes: None,
7874        instance: Some("<OperationMode>"),
7875        required: Some("no"),
7876        data_type: Some("MemberList"),
7877        unit: None,
7878    },
7879    DeviceModelEntry {
7880        component: Some("V2XChargingCtrlr"),
7881        variable: "TxEndedMeasurands",
7882        attributes: None,
7883        instance: Some("<OperationMode>"),
7884        required: Some("no"),
7885        data_type: Some("MemberList"),
7886        unit: None,
7887    },
7888    DeviceModelEntry {
7889        component: Some("V2XChargingCtrlr"),
7890        variable: "TxUpdatedMeasurands",
7891        attributes: None,
7892        instance: Some("<OperationMode>"),
7893        required: Some("no"),
7894        data_type: Some("MemberList"),
7895        unit: None,
7896    },
7897    DeviceModelEntry {
7898        component: Some("V2XChargingCtrlr"),
7899        variable: "TxEndedInterval",
7900        attributes: None,
7901        instance: Some("<OperationMode>"),
7902        required: Some("no"),
7903        data_type: Some("integer"),
7904        unit: Some("s"),
7905    },
7906    DeviceModelEntry {
7907        component: Some("V2XChargingCtrlr"),
7908        variable: "TxUpdatedInterval",
7909        attributes: None,
7910        instance: Some("<OperationMode>"),
7911        required: Some("no"),
7912        data_type: Some("integer"),
7913        unit: Some("s"),
7914    },
7915    DeviceModelEntry {
7916        component: Some("V2XChargingCtrlr"),
7917        variable: "LocalLoadBalancing",
7918        attributes: None,
7919        instance: Some("UpperThreshold"),
7920        required: Some("no"),
7921        data_type: Some("decimal"),
7922        unit: Some("W"),
7923    },
7924    DeviceModelEntry {
7925        component: Some("V2XChargingCtrlr"),
7926        variable: "LocalLoadBalancing",
7927        attributes: None,
7928        instance: Some("LowerThreshold"),
7929        required: Some("no"),
7930        data_type: Some("decimal"),
7931        unit: Some("W"),
7932    },
7933    DeviceModelEntry {
7934        component: Some("V2XChargingCtrlr"),
7935        variable: "LocalLoadBalancing",
7936        attributes: None,
7937        instance: Some("UpperOffset"),
7938        required: Some("no"),
7939        data_type: Some("decimal"),
7940        unit: Some("W"),
7941    },
7942    DeviceModelEntry {
7943        component: Some("V2XChargingCtrlr"),
7944        variable: "LocalLoadBalancing",
7945        attributes: None,
7946        instance: Some("LowerOffset"),
7947        required: Some("no"),
7948        data_type: Some("decimal"),
7949        unit: Some("W"),
7950    },
7951    DeviceModelEntry {
7952        component: Some("FrequencySimulator"),
7953        variable: "Enabled",
7954        attributes: None,
7955        instance: None,
7956        required: Some("no"),
7957        data_type: Some("boolean"),
7958        unit: None,
7959    },
7960    DeviceModelEntry {
7961        component: Some("FrequencySimulator"),
7962        variable: "DateTime",
7963        attributes: None,
7964        instance: Some("Start"),
7965        required: Some("no"),
7966        data_type: Some("DateTime"),
7967        unit: None,
7968    },
7969    DeviceModelEntry {
7970        component: Some("FrequencySimulator"),
7971        variable: "DateTime",
7972        attributes: None,
7973        instance: Some("End"),
7974        required: Some("no"),
7975        data_type: Some("DateTime"),
7976        unit: None,
7977    },
7978    DeviceModelEntry {
7979        component: Some("FrequencySimulator"),
7980        variable: "FrequencySchedule",
7981        attributes: None,
7982        instance: None,
7983        required: Some("no"),
7984        data_type: Some("string"),
7985        unit: None,
7986    },
7987    DeviceModelEntry {
7988        component: Some("DataCollector"),
7989        variable: "Enabled",
7990        attributes: None,
7991        instance: None,
7992        required: Some("no"),
7993        data_type: Some("boolean"),
7994        unit: None,
7995    },
7996    DeviceModelEntry {
7997        component: Some("DataCollector"),
7998        variable: "DateTime",
7999        attributes: None,
8000        instance: Some("Start"),
8001        required: Some("no"),
8002        data_type: Some("DateTime"),
8003        unit: None,
8004    },
8005    DeviceModelEntry {
8006        component: Some("DataCollector"),
8007        variable: "DateTime",
8008        attributes: None,
8009        instance: Some("End"),
8010        required: Some("no"),
8011        data_type: Some("DateTime"),
8012        unit: None,
8013    },
8014    DeviceModelEntry {
8015        component: Some("DataCollector"),
8016        variable: "SamplingInterval",
8017        attributes: None,
8018        instance: None,
8019        required: Some("no"),
8020        data_type: Some("decimal"),
8021        unit: Some("s"),
8022    },
8023    DeviceModelEntry {
8024        component: Some("DataCollector"),
8025        variable: "SampledMeasurands",
8026        attributes: None,
8027        instance: None,
8028        required: Some("no"),
8029        data_type: Some("MemberList"),
8030        unit: None,
8031    },
8032    DeviceModelEntry {
8033        component: Some("DCDERCtrlr"),
8034        variable: "Enabled",
8035        attributes: None,
8036        instance: None,
8037        required: Some("no"),
8038        data_type: Some("boolean"),
8039        unit: None,
8040    },
8041    DeviceModelEntry {
8042        component: Some("DCDERCtrlr"),
8043        variable: "MaxW",
8044        attributes: None,
8045        instance: None,
8046        required: Some("yes"),
8047        data_type: Some("decimal"),
8048        unit: Some("W"),
8049    },
8050    DeviceModelEntry {
8051        component: Some("DCDERCtrlr"),
8052        variable: "OverExcitedW",
8053        attributes: None,
8054        instance: None,
8055        required: Some("yes"),
8056        data_type: Some("decimal"),
8057        unit: Some("W"),
8058    },
8059    DeviceModelEntry {
8060        component: Some("DCDERCtrlr"),
8061        variable: "OverExcitedPF",
8062        attributes: None,
8063        instance: None,
8064        required: Some("yes"),
8065        data_type: Some("decimal"),
8066        unit: None,
8067    },
8068    DeviceModelEntry {
8069        component: Some("DCDERCtrlr"),
8070        variable: "UnderExcitedW",
8071        attributes: None,
8072        instance: None,
8073        required: Some("yes"),
8074        data_type: Some("decimal"),
8075        unit: Some("W"),
8076    },
8077    DeviceModelEntry {
8078        component: Some("DCDERCtrlr"),
8079        variable: "UnderExcitedPF",
8080        attributes: None,
8081        instance: None,
8082        required: Some("yes"),
8083        data_type: Some("decimal"),
8084        unit: None,
8085    },
8086    DeviceModelEntry {
8087        component: Some("DCDERCtrlr"),
8088        variable: "MaxVA",
8089        attributes: None,
8090        instance: None,
8091        required: Some("yes"),
8092        data_type: Some("decimal"),
8093        unit: Some("VA"),
8094    },
8095    DeviceModelEntry {
8096        component: Some("DCDERCtrlr"),
8097        variable: "MaxVar",
8098        attributes: None,
8099        instance: None,
8100        required: Some("yes"),
8101        data_type: Some("decimal"),
8102        unit: Some("Var"),
8103    },
8104    DeviceModelEntry {
8105        component: Some("DCDERCtrlr"),
8106        variable: "MaxVarNeg",
8107        attributes: None,
8108        instance: None,
8109        required: Some("yes"),
8110        data_type: Some("decimal"),
8111        unit: Some("Var"),
8112    },
8113    DeviceModelEntry {
8114        component: Some("DCDERCtrlr"),
8115        variable: "MaxChargeRateW",
8116        attributes: None,
8117        instance: None,
8118        required: Some("yes"),
8119        data_type: Some("decimal"),
8120        unit: Some("W"),
8121    },
8122    DeviceModelEntry {
8123        component: Some("DCDERCtrlr"),
8124        variable: "MaxChargeRateVA",
8125        attributes: None,
8126        instance: None,
8127        required: Some("yes"),
8128        data_type: Some("decimal"),
8129        unit: Some("VA"),
8130    },
8131    DeviceModelEntry {
8132        component: Some("DCDERCtrlr"),
8133        variable: "VNom",
8134        attributes: None,
8135        instance: None,
8136        required: Some("no"),
8137        data_type: Some("decimal"),
8138        unit: Some("V"),
8139    },
8140    DeviceModelEntry {
8141        component: Some("DCDERCtrlr"),
8142        variable: "MaxV",
8143        attributes: None,
8144        instance: None,
8145        required: Some("no"),
8146        data_type: Some("decimal"),
8147        unit: Some("V"),
8148    },
8149    DeviceModelEntry {
8150        component: Some("DCDERCtrlr"),
8151        variable: "MinV",
8152        attributes: None,
8153        instance: None,
8154        required: Some("no"),
8155        data_type: Some("decimal"),
8156        unit: Some("V"),
8157    },
8158    DeviceModelEntry {
8159        component: Some("DCDERCtrlr"),
8160        variable: "ModesSupported",
8161        attributes: None,
8162        instance: None,
8163        required: Some("yes"),
8164        data_type: Some("MemberList"),
8165        unit: None,
8166    },
8167    DeviceModelEntry {
8168        component: Some("DCDERCtrlr"),
8169        variable: "InverterManufacturer",
8170        attributes: None,
8171        instance: None,
8172        required: Some("yes"),
8173        data_type: Some("string"),
8174        unit: None,
8175    },
8176    DeviceModelEntry {
8177        component: Some("DCDERCtrlr"),
8178        variable: "InverterModel",
8179        attributes: None,
8180        instance: None,
8181        required: Some("yes"),
8182        data_type: Some("string"),
8183        unit: None,
8184    },
8185    DeviceModelEntry {
8186        component: Some("DCDERCtrlr"),
8187        variable: "InverterSerialNumber",
8188        attributes: None,
8189        instance: None,
8190        required: Some("no"),
8191        data_type: Some("string"),
8192        unit: None,
8193    },
8194    DeviceModelEntry {
8195        component: Some("DCDERCtrlr"),
8196        variable: "InverterSwVersion",
8197        attributes: None,
8198        instance: None,
8199        required: Some("yes"),
8200        data_type: Some("string"),
8201        unit: None,
8202    },
8203    DeviceModelEntry {
8204        component: Some("DCDERCtrlr"),
8205        variable: "InverterHwVersion",
8206        attributes: None,
8207        instance: None,
8208        required: Some("yes"),
8209        data_type: Some("string"),
8210        unit: None,
8211    },
8212    DeviceModelEntry {
8213        component: Some("DCDERCtrlr"),
8214        variable: "IslandingDetectionMethod",
8215        attributes: None,
8216        instance: None,
8217        required: Some("no"),
8218        data_type: Some("OptionList"),
8219        unit: None,
8220    },
8221    DeviceModelEntry {
8222        component: Some("DCDERCtrlr"),
8223        variable: "IslandingDetectionTripTime",
8224        attributes: None,
8225        instance: None,
8226        required: Some("no"),
8227        data_type: Some("decimal"),
8228        unit: Some("s"),
8229    },
8230    DeviceModelEntry {
8231        component: Some("DCDERCtrlr"),
8232        variable: "ReactiveSusceptance",
8233        attributes: None,
8234        instance: None,
8235        required: Some("yes"),
8236        data_type: Some("decimal"),
8237        unit: Some("s"),
8238    },
8239    DeviceModelEntry {
8240        component: Some("ACDERCtrlr"),
8241        variable: "ModesSupported",
8242        attributes: None,
8243        instance: None,
8244        required: Some("yes"),
8245        data_type: Some("MemberList"),
8246        unit: None,
8247    },
8248    DeviceModelEntry {
8249        component: Some("BatterySwapCtrlr"),
8250        variable: "TargetSoC",
8251        attributes: None,
8252        instance: None,
8253        required: Some("no"),
8254        data_type: Some("integer"),
8255        unit: Some("%"),
8256    },
8257    DeviceModelEntry {
8258        component: Some("BatterySwapCtrlr"),
8259        variable: "MaxSoc",
8260        attributes: None,
8261        instance: None,
8262        required: Some("no"),
8263        data_type: Some("integer"),
8264        unit: Some("%"),
8265    },
8266    DeviceModelEntry {
8267        component: Some("BatterySwapCtrlr"),
8268        variable: "IdToken",
8269        attributes: None,
8270        instance: None,
8271        required: Some("no"),
8272        data_type: Some("string"),
8273        unit: None,
8274    },
8275    DeviceModelEntry {
8276        component: Some("BatterySwapCtrlr"),
8277        variable: "Timeout",
8278        attributes: None,
8279        instance: Some("In"),
8280        required: Some("no"),
8281        data_type: Some("integer"),
8282        unit: Some("s"),
8283    },
8284    DeviceModelEntry {
8285        component: Some("BatterySwapCtrlr"),
8286        variable: "Timeout",
8287        attributes: None,
8288        instance: Some("Out"),
8289        required: Some("no"),
8290        data_type: Some("integer"),
8291        unit: Some("s"),
8292    },
8293    DeviceModelEntry {
8294        component: Some("BatteryCartridge"),
8295        variable: "SoC",
8296        attributes: None,
8297        instance: None,
8298        required: Some("no"),
8299        data_type: Some("integer"),
8300        unit: Some("%"),
8301    },
8302    DeviceModelEntry {
8303        component: Some("BatteryCartridge"),
8304        variable: "SoH",
8305        attributes: None,
8306        instance: None,
8307        required: Some("no"),
8308        data_type: Some("integer"),
8309        unit: Some("%"),
8310    },
8311    DeviceModelEntry {
8312        component: Some("BatteryCartridge"),
8313        variable: "WorkingMode",
8314        attributes: None,
8315        instance: None,
8316        required: Some("no"),
8317        data_type: Some("OptionList"),
8318        unit: None,
8319    },
8320    DeviceModelEntry {
8321        component: Some("NetworkConfiguration"),
8322        variable: "OcppCsmsUrl",
8323        attributes: None,
8324        instance: None,
8325        required: Some("yes"),
8326        data_type: Some("string"),
8327        unit: None,
8328    },
8329    DeviceModelEntry {
8330        component: Some("NetworkConfiguration"),
8331        variable: "OcppInterface",
8332        attributes: None,
8333        instance: None,
8334        required: Some("yes"),
8335        data_type: Some("OptionList"),
8336        unit: None,
8337    },
8338    DeviceModelEntry {
8339        component: Some("NetworkConfiguration"),
8340        variable: "OcppTransport",
8341        attributes: None,
8342        instance: None,
8343        required: Some("yes"),
8344        data_type: Some("OptionList"),
8345        unit: None,
8346    },
8347    DeviceModelEntry {
8348        component: Some("NetworkConfiguration"),
8349        variable: "OcppVersion",
8350        attributes: None,
8351        instance: None,
8352        required: Some("yes"),
8353        data_type: Some("OptionList"),
8354        unit: None,
8355    },
8356    DeviceModelEntry {
8357        component: Some("NetworkConfiguration"),
8358        variable: "MessageTimeout",
8359        attributes: None,
8360        instance: None,
8361        required: Some("yes"),
8362        data_type: Some("integer"),
8363        unit: None,
8364    },
8365    DeviceModelEntry {
8366        component: Some("NetworkConfiguration"),
8367        variable: "SecurityProfile",
8368        attributes: None,
8369        instance: None,
8370        required: Some("yes"),
8371        data_type: Some("integer"),
8372        unit: None,
8373    },
8374    DeviceModelEntry {
8375        component: Some("NetworkConfiguration"),
8376        variable: "Identity",
8377        attributes: None,
8378        instance: None,
8379        required: Some("no"),
8380        data_type: Some("string"),
8381        unit: None,
8382    },
8383    DeviceModelEntry {
8384        component: Some("NetworkConfiguration"),
8385        variable: "BasicAuthPassword",
8386        attributes: None,
8387        instance: None,
8388        required: Some("yes"),
8389        data_type: Some("string"),
8390        unit: None,
8391    },
8392    DeviceModelEntry {
8393        component: Some("NetworkConfiguration"),
8394        variable: "CsmsRootCertificateHashAlgorithm",
8395        attributes: None,
8396        instance: None,
8397        required: Some("no"),
8398        data_type: Some("string"),
8399        unit: None,
8400    },
8401    DeviceModelEntry {
8402        component: Some("NetworkConfiguration"),
8403        variable: "CsmsRootCertificateIssuerKeyHash",
8404        attributes: None,
8405        instance: None,
8406        required: Some("no"),
8407        data_type: Some("string"),
8408        unit: None,
8409    },
8410    DeviceModelEntry {
8411        component: Some("NetworkConfiguration"),
8412        variable: "CsmsRootCertificateIssuerNameHash",
8413        attributes: None,
8414        instance: None,
8415        required: Some("no"),
8416        data_type: Some("string"),
8417        unit: None,
8418    },
8419    DeviceModelEntry {
8420        component: Some("NetworkConfiguration"),
8421        variable: "CsmsRootCertificateSerialNumber",
8422        attributes: None,
8423        instance: None,
8424        required: Some("no"),
8425        data_type: Some("string"),
8426        unit: None,
8427    },
8428    DeviceModelEntry {
8429        component: Some("NetworkConfiguration"),
8430        variable: "VpnEnabled",
8431        attributes: None,
8432        instance: None,
8433        required: Some("yes"),
8434        data_type: Some("boolean"),
8435        unit: None,
8436    },
8437    DeviceModelEntry {
8438        component: Some("NetworkConfiguration"),
8439        variable: "VpnType",
8440        attributes: None,
8441        instance: None,
8442        required: Some("no"),
8443        data_type: Some("string"),
8444        unit: None,
8445    },
8446    DeviceModelEntry {
8447        component: Some("NetworkConfiguration"),
8448        variable: "VpnServer",
8449        attributes: None,
8450        instance: None,
8451        required: Some("no"),
8452        data_type: Some("string"),
8453        unit: None,
8454    },
8455    DeviceModelEntry {
8456        component: Some("NetworkConfiguration"),
8457        variable: "VpnUser",
8458        attributes: None,
8459        instance: None,
8460        required: Some("no"),
8461        data_type: Some("string"),
8462        unit: None,
8463    },
8464    DeviceModelEntry {
8465        component: Some("NetworkConfiguration"),
8466        variable: "VpnGroup",
8467        attributes: None,
8468        instance: None,
8469        required: Some("no"),
8470        data_type: Some("string"),
8471        unit: None,
8472    },
8473    DeviceModelEntry {
8474        component: Some("NetworkConfiguration"),
8475        variable: "VpnPassword",
8476        attributes: None,
8477        instance: None,
8478        required: Some("no"),
8479        data_type: Some("string"),
8480        unit: None,
8481    },
8482    DeviceModelEntry {
8483        component: Some("NetworkConfiguration"),
8484        variable: "VpnKey",
8485        attributes: None,
8486        instance: None,
8487        required: Some("no"),
8488        data_type: Some("string"),
8489        unit: None,
8490    },
8491    DeviceModelEntry {
8492        component: Some("NetworkConfiguration"),
8493        variable: "ApnEnabled",
8494        attributes: None,
8495        instance: None,
8496        required: Some("yes"),
8497        data_type: Some("boolean"),
8498        unit: None,
8499    },
8500    DeviceModelEntry {
8501        component: Some("NetworkConfiguration"),
8502        variable: "Apn",
8503        attributes: None,
8504        instance: None,
8505        required: Some("no"),
8506        data_type: Some("string"),
8507        unit: None,
8508    },
8509    DeviceModelEntry {
8510        component: Some("NetworkConfiguration"),
8511        variable: "ApnUserName",
8512        attributes: None,
8513        instance: None,
8514        required: Some("no"),
8515        data_type: Some("string"),
8516        unit: None,
8517    },
8518    DeviceModelEntry {
8519        component: Some("NetworkConfiguration"),
8520        variable: "ApnPassword",
8521        attributes: None,
8522        instance: None,
8523        required: Some("no"),
8524        data_type: Some("string"),
8525        unit: None,
8526    },
8527    DeviceModelEntry {
8528        component: Some("NetworkConfiguration"),
8529        variable: "SimPin",
8530        attributes: None,
8531        instance: None,
8532        required: Some("no"),
8533        data_type: Some("string"),
8534        unit: None,
8535    },
8536    DeviceModelEntry {
8537        component: Some("NetworkConfiguration"),
8538        variable: "PreferredNetwork",
8539        attributes: None,
8540        instance: None,
8541        required: Some("no"),
8542        data_type: Some("string"),
8543        unit: None,
8544    },
8545    DeviceModelEntry {
8546        component: Some("NetworkConfiguration"),
8547        variable: "UseOnlyPreferredNetwork",
8548        attributes: None,
8549        instance: None,
8550        required: Some("no"),
8551        data_type: Some("boolean"),
8552        unit: None,
8553    },
8554    DeviceModelEntry {
8555        component: Some("NetworkConfiguration"),
8556        variable: "ApnAuthentication",
8557        attributes: None,
8558        instance: None,
8559        required: Some("no"),
8560        data_type: Some("string"),
8561        unit: None,
8562    },
8563    DeviceModelEntry {
8564        component: Some("PaymentCtrlr"),
8565        variable: "Enabled",
8566        attributes: None,
8567        instance: None,
8568        required: Some("yes"),
8569        data_type: Some("boolean"),
8570        unit: None,
8571    },
8572    DeviceModelEntry {
8573        component: Some("PaymentCtrlr"),
8574        variable: "Problem",
8575        attributes: None,
8576        instance: None,
8577        required: Some("yes"),
8578        data_type: Some("boolean"),
8579        unit: None,
8580    },
8581    DeviceModelEntry {
8582        component: Some("PaymentCtrlr"),
8583        variable: "AuthorizeDirectPayment",
8584        attributes: None,
8585        instance: None,
8586        required: Some("yes"),
8587        data_type: Some("boolean"),
8588        unit: None,
8589    },
8590    DeviceModelEntry {
8591        component: Some("PaymentCtrlr"),
8592        variable: "AuthorizationAmount",
8593        attributes: None,
8594        instance: None,
8595        required: Some("yes"),
8596        data_type: Some("decimal"),
8597        unit: None,
8598    },
8599    DeviceModelEntry {
8600        component: Some("PaymentCtrlr"),
8601        variable: "IncrementalAuthorizationAmount",
8602        attributes: None,
8603        instance: None,
8604        required: Some("no"),
8605        data_type: Some("decimal"),
8606        unit: None,
8607    },
8608    DeviceModelEntry {
8609        component: Some("PaymentCtrlr"),
8610        variable: "IncrementalAuthorizationThreshold",
8611        attributes: None,
8612        instance: None,
8613        required: Some("no"),
8614        data_type: Some("decimal"),
8615        unit: None,
8616    },
8617    DeviceModelEntry {
8618        component: Some("PaymentCtrlr"),
8619        variable: "PaymentDetails",
8620        attributes: None,
8621        instance: None,
8622        required: Some("yes"),
8623        data_type: Some("MemberList"),
8624        unit: None,
8625    },
8626    DeviceModelEntry {
8627        component: Some("PaymentCtrlr"),
8628        variable: "SettlementByCSMS",
8629        attributes: None,
8630        instance: None,
8631        required: Some("yes"),
8632        data_type: Some("boolean"),
8633        unit: None,
8634    },
8635    DeviceModelEntry {
8636        component: Some("PaymentCtrlr"),
8637        variable: "ReceiptServerUrl",
8638        attributes: None,
8639        instance: None,
8640        required: Some("yes"),
8641        data_type: Some("string"),
8642        unit: None,
8643    },
8644    DeviceModelEntry {
8645        component: Some("PaymentCtrlr"),
8646        variable: "ReceiptByCSMS",
8647        attributes: None,
8648        instance: None,
8649        required: Some("yes"),
8650        data_type: Some("boolean"),
8651        unit: None,
8652    },
8653    DeviceModelEntry {
8654        component: Some("PaymentCtrlr"),
8655        variable: "Merchant",
8656        attributes: None,
8657        instance: Some("Id"),
8658        required: Some("yes"),
8659        data_type: Some("string"),
8660        unit: None,
8661    },
8662    DeviceModelEntry {
8663        component: Some("PaymentCtrlr"),
8664        variable: "Merchant",
8665        attributes: None,
8666        instance: Some("TaxId"),
8667        required: Some("yes"),
8668        data_type: Some("string"),
8669        unit: None,
8670    },
8671    DeviceModelEntry {
8672        component: Some("PaymentCtrlr"),
8673        variable: "Merchant",
8674        attributes: None,
8675        instance: Some("Name"),
8676        required: Some("yes"),
8677        data_type: Some("string"),
8678        unit: None,
8679    },
8680    DeviceModelEntry {
8681        component: Some("PaymentCtrlr"),
8682        variable: "Merchant",
8683        attributes: None,
8684        instance: Some("Address"),
8685        required: Some("yes"),
8686        data_type: Some("string"),
8687        unit: None,
8688    },
8689    DeviceModelEntry {
8690        component: Some("PaymentCtrlr"),
8691        variable: "Merchant",
8692        attributes: None,
8693        instance: Some("City"),
8694        required: Some("yes"),
8695        data_type: Some("string"),
8696        unit: None,
8697    },
8698    DeviceModelEntry {
8699        component: Some("PaymentCtrlr"),
8700        variable: "TerminalID",
8701        attributes: None,
8702        instance: None,
8703        required: Some("yes"),
8704        data_type: Some("string"),
8705        unit: None,
8706    },
8707    DeviceModelEntry {
8708        component: Some("PaymentCtrlr"),
8709        variable: "PaymentServiceProvider",
8710        attributes: None,
8711        instance: None,
8712        required: Some("yes"),
8713        data_type: Some("string"),
8714        unit: None,
8715    },
8716    DeviceModelEntry {
8717        component: Some("PaymentCtrlr"),
8718        variable: "VendorName",
8719        attributes: None,
8720        instance: None,
8721        required: Some("yes"),
8722        data_type: Some("string"),
8723        unit: None,
8724    },
8725    DeviceModelEntry {
8726        component: Some("PaymentCtrlr"),
8727        variable: "Model",
8728        attributes: None,
8729        instance: None,
8730        required: Some("yes"),
8731        data_type: Some("string"),
8732        unit: None,
8733    },
8734    DeviceModelEntry {
8735        component: Some("PaymentCtrlr"),
8736        variable: "SerialNumber",
8737        attributes: None,
8738        instance: None,
8739        required: Some("yes"),
8740        data_type: Some("string"),
8741        unit: None,
8742    },
8743    DeviceModelEntry {
8744        component: Some("PaymentCtrlr"),
8745        variable: "FirmwareVersion",
8746        attributes: None,
8747        instance: None,
8748        required: Some("yes"),
8749        data_type: Some("string"),
8750        unit: None,
8751    },
8752    DeviceModelEntry {
8753        component: Some("PaymentCtrlr"),
8754        variable: "IMSI",
8755        attributes: None,
8756        instance: None,
8757        required: Some("yes"),
8758        data_type: Some("string"),
8759        unit: None,
8760    },
8761    DeviceModelEntry {
8762        component: Some("PaymentCtrlr"),
8763        variable: "ICCID",
8764        attributes: None,
8765        instance: None,
8766        required: Some("yes"),
8767        data_type: Some("string"),
8768        unit: None,
8769    },
8770    DeviceModelEntry {
8771        component: Some("PaymentCtrlr"),
8772        variable: "Connected",
8773        attributes: None,
8774        instance: None,
8775        required: Some("yes"),
8776        data_type: Some("boolean"),
8777        unit: None,
8778    },
8779    DeviceModelEntry {
8780        component: Some("WebPaymentsCtrlr"),
8781        variable: "URLTemplate",
8782        attributes: None,
8783        instance: None,
8784        required: Some("yes"),
8785        data_type: Some("string"),
8786        unit: None,
8787    },
8788    DeviceModelEntry {
8789        component: Some("WebPaymentsCtrlr"),
8790        variable: "URLParameters",
8791        attributes: None,
8792        instance: None,
8793        required: Some("no"),
8794        data_type: Some("MemberList"),
8795        unit: None,
8796    },
8797    DeviceModelEntry {
8798        component: Some("WebPaymentsCtrlr"),
8799        variable: "TOTPVersion",
8800        attributes: None,
8801        instance: None,
8802        required: Some("yes"),
8803        data_type: Some("string"),
8804        unit: None,
8805    },
8806    DeviceModelEntry {
8807        component: Some("WebPaymentsCtrlr"),
8808        variable: "ChargingStationId",
8809        attributes: None,
8810        instance: None,
8811        required: Some("no"),
8812        data_type: Some("string"),
8813        unit: None,
8814    },
8815    DeviceModelEntry {
8816        component: Some("WebPaymentsCtrlr"),
8817        variable: "ValidityTime",
8818        attributes: None,
8819        instance: None,
8820        required: Some("yes"),
8821        data_type: Some("integer"),
8822        unit: Some("s"),
8823    },
8824    DeviceModelEntry {
8825        component: Some("WebPaymentsCtrlr"),
8826        variable: "SharedSecret",
8827        attributes: None,
8828        instance: None,
8829        required: Some("yes"),
8830        data_type: Some("string"),
8831        unit: None,
8832    },
8833    DeviceModelEntry {
8834        component: Some("WebPaymentsCtrlr"),
8835        variable: "Length",
8836        attributes: None,
8837        instance: None,
8838        required: Some("yes"),
8839        data_type: Some("integer"),
8840        unit: None,
8841    },
8842    DeviceModelEntry {
8843        component: Some("WebPaymentsCtrlr"),
8844        variable: "QRCodeQuality",
8845        attributes: None,
8846        instance: None,
8847        required: Some("no"),
8848        data_type: Some("OptionList"),
8849        unit: None,
8850    },
8851];