Skip to main content

ocpp_types/v201/
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    /// Logical Component responsible for configuration relating to the reporting of clock-aligned meter data.
87    AlignedDataCtrlr,
88    /// Logical Component responsible for configuration relating to the use of a local cache for authorization for Charging Station use.
89    AuthCacheCtrlr,
90    /// Logical Component responsible for configuration relating to the use of authorization for Charging Station use.
91    AuthCtrlr,
92    /// A CHAdeMO Controller component communicates with an EV using the wired CANbus protocol to exchange information and control charging using the CHAdeMO protocol
93    CHAdeMOCtrlr,
94    /// Provides a means to configure management of time tracking by Charging Station.
95    ClockCtrlr,
96    /// Responsible for configuration relating to custom vendor-specific implementations, like the DataTransfer message and CustomData extensions or CustomTriggers.
97    CustomizationCtrlr,
98    /// Logical Component responsible for configuration relating to the exchange and storage of Charging Station Device Model data.
99    DeviceDataCtrlr,
100    /// Logical Component responsible for configuration relating to the display of messages to Charging Station users.
101    DisplayMessageCtrlr,
102    /// Communicates with an EV to exchange information and control charging using the ISO 15118 protocol.
103    ISO15118Ctrlr,
104    /// Logical Component responsible for configuration relating to the use of Local Authorization Lists for Charging Station use.
105    LocalAuthListCtrlr,
106    /// Logical Component responsible for configuration relating to the exchange of monitoring event data.
107    MonitoringCtrlr,
108    /// Logical Component responsible for configuration relating to information exchange between Charging Station and CSMS.
109    OCPPCommCtrlr,
110    /// Logical Component responsible for configuration relating to reservations.
111    ReservationCtrlr,
112    /// Logical Component responsible for configuration relating to the reporting of sampled meter data.
113    SampledDataCtrlr,
114    /// Logical Component responsible for configuration relating to security of communications between Charging Station and CSMS.
115    SecurityCtrlr,
116    /// Logical Component responsible for configuration relating to smart charging.
117    SmartChargingCtrlr,
118    /// Logical Component responsible for configuration relating to tariff and cost display.
119    TariffCostCtrlr,
120    /// Logical Component responsible for configuration relating to transaction characteristics and behaviour.
121    TxCtrlr,
122    /// Allows physical access of vehicles to a charging site to be controlled.
123    AccessBarrier,
124    /// 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.
125    AcDcConverter,
126    /// 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.
127    AcPhaseSelector,
128    /// 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.
129    Actuator,
130    /// Fans (or equivalent devices) used to provide cooling.
131    AirCoolingSystem,
132    /// Fans (or equivalent devices) used to ensure that EVs that require ventilation during charging
133    AreaVentilation,
134    /// 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
135    BayOccupancySensor,
136    /// Beacon Lighting to help EV drivers to locate nearby charging places, and/or to determine charging availability state, usually by color variation.
137    BeaconLighting,
138    /// A sensor that detects when a charging cable (captive or removable) has been forcibly pulled from the Charging Station.
139    CableBreakawaySensor,
140    /// Reports when an access door/panel is open
141    CaseAccessSensor,
142    /// The entire Charging Station as a logical entity
143    ChargingStation,
144    /// 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.
145    ChargingStatusIndicator,
146    /// 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.
147    ConnectedEV,
148    /// 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.
149    Connector,
150    /// A mechanism present in a connector holster to prevent the connector from being removed inappropriately: typically unlocks connector after authorization.
151    ConnectorHolsterRelease,
152    /// 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.
153    ConnectorHolsterSensor,
154    /// Locking mechanism to retain an inserted plug, both to prevent on-load disconnection, and to prevent theft of charging cables
155    ConnectorPlugRetentionLock,
156    /// 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
157    ConnectorProtectionRelease,
158    /// An embedded logic controller
159    Controller,
160    /// Energy, Power, Electricity meter, used to measure energy, current, voltages etc.
161    ControlMetering,
162    /// 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.
163    CPPWMController,
164    /// 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.
165    DataLink,
166    /// Provides information and feedback to the user.
167    Display,
168    /// Defines the Distribution Panel, with it's fuses and connections to both Charging Stations and other Distribution Panel's.
169    DistributionPanel,
170    /// 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.
171    ElectricalFeed,
172    /// 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.
173    ELVSupply,
174    /// 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).
175    EmergencyStopSensor,
176    /// Provides reporting/control of general illumination lighting in use at Charging Station.
177    EnvironmentalLighting,
178    /// A locking mechanism on the EV side as a safety measure to prevent it being disconnected while high currents are flowing.
179    EVRetentionLock,
180    /// The entire chain of components responsible for transporting energy from the incoming supply to the electric vehicle (or vice versa)
181    EVSE,
182    /// Reports ambient air temperature
183    ExternalTemperatureSensor,
184    /// Provides energy transfer readings that are the basis for billing.
185    FiscalMetering,
186    /// A sensor reporting whether the Charging Station is experiencing water ingress/pooling.
187    FloodSensor,
188    /// An Isolation Tester as part of their own self-test mechanisms, to confirm the isolation of floating circuitry when no Evs are connected
189    GroundIsolationProtection,
190    /// Heater to ensure reliable operation in cold environments
191    Heater,
192    /// Reports relative air humidity
193    HumiditySensor,
194    /// Reports ambient light levels.
195    LightSensor,
196    /// A liquid based cooling system, typically used to cool the connector cables of very high power Charging Stations.
197    LiquidCoolingSystem,
198    /// 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.
199    LocalAvailabilitySensor,
200    /// The entire Local Controller as a logical entity
201    LocalController,
202    /// Energy storage
203    LocalEnergyStorage,
204    /// The instances of component NetworkConfiguration represent network connection configurations.
205    NetworkConfiguration,
206    /// Protects equipment by disconnecting the electrical supply when the current drawn (on any phase) exceeds the rated value to a substantial degree.
207    OverCurrentProtection,
208    /// Recloser mechanism of an OverCurrentProtection to perform re-arm retries after a trip, or may be set for remotely controlled re-arming on command.
209    OverCurrentProtectionRecloser,
210    /// 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.
211    PowerContactor,
212    /// 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.
213    RCD,
214    /// 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.
215    RCDRecloser,
216    /// 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.
217    RealTimeClock,
218    /// Measures impact forces/accelerations experienced, indicative of possible damage.
219    ShockSensor,
220    /// Electronic signage allowing a charging controller for a large charging facility to advertise counts of available spaces to passing traffic.
221    SpacesCountSignage,
222    /// 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.
223    Switch,
224    /// 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.
225    TemperatureSensor,
226    /// Measures Tilt angle from normal reference position (normally 90 degree vertical).
227    TiltSensor,
228    /// An authorization token reader (e.g. RFID)
229    TokenReader,
230    /// Circuitry designed to trigger the disconnection of power to the structure by an upstream protection device after a severe problem has been detected
231    UpstreamProtectionTrigger,
232    /// 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).
233    UIInput,
234    /// 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.
235    VehicleIdSensor,
236    /// Listed in the specification's device model table but not in its dedicated name table.
237    FrequencySimulator,
238    /// Listed in the specification's device model table but not in its dedicated name table.
239    DataCollector,
240    /** A value this version's specification doesn't define -- typically a
241 vendor-specific one, which OCPP explicitly permits.
242
243 Bounded at 50 bytes, the same `maxLength` the wire field carries,
244 so anything the field can hold this can hold. Prefer
245 [`Self::from_wire_or_other`] over constructing this directly: it
246 returns the standardized variant when the value is one, keeping a
247 single representation per wire string.*/
248    Other(heapless::String<50usize>),
249}
250impl ComponentName {
251    /// Every value this version's specification defines (77), in spec order.
252    ///
253    /// Does not include [`Self::Other`], which is unbounded in the
254    /// values it can hold.
255    pub const ALL: &'static [Self] = &[
256        Self::AlignedDataCtrlr,
257        Self::AuthCacheCtrlr,
258        Self::AuthCtrlr,
259        Self::CHAdeMOCtrlr,
260        Self::ClockCtrlr,
261        Self::CustomizationCtrlr,
262        Self::DeviceDataCtrlr,
263        Self::DisplayMessageCtrlr,
264        Self::ISO15118Ctrlr,
265        Self::LocalAuthListCtrlr,
266        Self::MonitoringCtrlr,
267        Self::OCPPCommCtrlr,
268        Self::ReservationCtrlr,
269        Self::SampledDataCtrlr,
270        Self::SecurityCtrlr,
271        Self::SmartChargingCtrlr,
272        Self::TariffCostCtrlr,
273        Self::TxCtrlr,
274        Self::AccessBarrier,
275        Self::AcDcConverter,
276        Self::AcPhaseSelector,
277        Self::Actuator,
278        Self::AirCoolingSystem,
279        Self::AreaVentilation,
280        Self::BayOccupancySensor,
281        Self::BeaconLighting,
282        Self::CableBreakawaySensor,
283        Self::CaseAccessSensor,
284        Self::ChargingStation,
285        Self::ChargingStatusIndicator,
286        Self::ConnectedEV,
287        Self::Connector,
288        Self::ConnectorHolsterRelease,
289        Self::ConnectorHolsterSensor,
290        Self::ConnectorPlugRetentionLock,
291        Self::ConnectorProtectionRelease,
292        Self::Controller,
293        Self::ControlMetering,
294        Self::CPPWMController,
295        Self::DataLink,
296        Self::Display,
297        Self::DistributionPanel,
298        Self::ElectricalFeed,
299        Self::ELVSupply,
300        Self::EmergencyStopSensor,
301        Self::EnvironmentalLighting,
302        Self::EVRetentionLock,
303        Self::EVSE,
304        Self::ExternalTemperatureSensor,
305        Self::FiscalMetering,
306        Self::FloodSensor,
307        Self::GroundIsolationProtection,
308        Self::Heater,
309        Self::HumiditySensor,
310        Self::LightSensor,
311        Self::LiquidCoolingSystem,
312        Self::LocalAvailabilitySensor,
313        Self::LocalController,
314        Self::LocalEnergyStorage,
315        Self::NetworkConfiguration,
316        Self::OverCurrentProtection,
317        Self::OverCurrentProtectionRecloser,
318        Self::PowerContactor,
319        Self::RCD,
320        Self::RCDRecloser,
321        Self::RealTimeClock,
322        Self::ShockSensor,
323        Self::SpacesCountSignage,
324        Self::Switch,
325        Self::TemperatureSensor,
326        Self::TiltSensor,
327        Self::TokenReader,
328        Self::UpstreamProtectionTrigger,
329        Self::UIInput,
330        Self::VehicleIdSensor,
331        Self::FrequencySimulator,
332        Self::DataCollector,
333    ];
334    /// This value as it appears on the wire.
335    pub fn as_str(&self) -> &str {
336        match self {
337            Self::AlignedDataCtrlr => "AlignedDataCtrlr",
338            Self::AuthCacheCtrlr => "AuthCacheCtrlr",
339            Self::AuthCtrlr => "AuthCtrlr",
340            Self::CHAdeMOCtrlr => "CHAdeMOCtrlr",
341            Self::ClockCtrlr => "ClockCtrlr",
342            Self::CustomizationCtrlr => "CustomizationCtrlr",
343            Self::DeviceDataCtrlr => "DeviceDataCtrlr",
344            Self::DisplayMessageCtrlr => "DisplayMessageCtrlr",
345            Self::ISO15118Ctrlr => "ISO15118Ctrlr",
346            Self::LocalAuthListCtrlr => "LocalAuthListCtrlr",
347            Self::MonitoringCtrlr => "MonitoringCtrlr",
348            Self::OCPPCommCtrlr => "OCPPCommCtrlr",
349            Self::ReservationCtrlr => "ReservationCtrlr",
350            Self::SampledDataCtrlr => "SampledDataCtrlr",
351            Self::SecurityCtrlr => "SecurityCtrlr",
352            Self::SmartChargingCtrlr => "SmartChargingCtrlr",
353            Self::TariffCostCtrlr => "TariffCostCtrlr",
354            Self::TxCtrlr => "TxCtrlr",
355            Self::AccessBarrier => "AccessBarrier",
356            Self::AcDcConverter => "AcDcConverter",
357            Self::AcPhaseSelector => "AcPhaseSelector",
358            Self::Actuator => "Actuator",
359            Self::AirCoolingSystem => "AirCoolingSystem",
360            Self::AreaVentilation => "AreaVentilation",
361            Self::BayOccupancySensor => "BayOccupancySensor",
362            Self::BeaconLighting => "BeaconLighting",
363            Self::CableBreakawaySensor => "CableBreakawaySensor",
364            Self::CaseAccessSensor => "CaseAccessSensor",
365            Self::ChargingStation => "ChargingStation",
366            Self::ChargingStatusIndicator => "ChargingStatusIndicator",
367            Self::ConnectedEV => "ConnectedEV",
368            Self::Connector => "Connector",
369            Self::ConnectorHolsterRelease => "ConnectorHolsterRelease",
370            Self::ConnectorHolsterSensor => "ConnectorHolsterSensor",
371            Self::ConnectorPlugRetentionLock => "ConnectorPlugRetentionLock",
372            Self::ConnectorProtectionRelease => "ConnectorProtectionRelease",
373            Self::Controller => "Controller",
374            Self::ControlMetering => "ControlMetering",
375            Self::CPPWMController => "CPPWMController",
376            Self::DataLink => "DataLink",
377            Self::Display => "Display",
378            Self::DistributionPanel => "DistributionPanel",
379            Self::ElectricalFeed => "ElectricalFeed",
380            Self::ELVSupply => "ELVSupply",
381            Self::EmergencyStopSensor => "EmergencyStopSensor",
382            Self::EnvironmentalLighting => "EnvironmentalLighting",
383            Self::EVRetentionLock => "EVRetentionLock",
384            Self::EVSE => "EVSE",
385            Self::ExternalTemperatureSensor => "ExternalTemperatureSensor",
386            Self::FiscalMetering => "FiscalMetering",
387            Self::FloodSensor => "FloodSensor",
388            Self::GroundIsolationProtection => "GroundIsolationProtection",
389            Self::Heater => "Heater",
390            Self::HumiditySensor => "HumiditySensor",
391            Self::LightSensor => "LightSensor",
392            Self::LiquidCoolingSystem => "LiquidCoolingSystem",
393            Self::LocalAvailabilitySensor => "LocalAvailabilitySensor",
394            Self::LocalController => "LocalController",
395            Self::LocalEnergyStorage => "LocalEnergyStorage",
396            Self::NetworkConfiguration => "NetworkConfiguration",
397            Self::OverCurrentProtection => "OverCurrentProtection",
398            Self::OverCurrentProtectionRecloser => "OverCurrentProtectionRecloser",
399            Self::PowerContactor => "PowerContactor",
400            Self::RCD => "RCD",
401            Self::RCDRecloser => "RCDRecloser",
402            Self::RealTimeClock => "RealTimeClock",
403            Self::ShockSensor => "ShockSensor",
404            Self::SpacesCountSignage => "SpacesCountSignage",
405            Self::Switch => "Switch",
406            Self::TemperatureSensor => "TemperatureSensor",
407            Self::TiltSensor => "TiltSensor",
408            Self::TokenReader => "TokenReader",
409            Self::UpstreamProtectionTrigger => "UpstreamProtectionTrigger",
410            Self::UIInput => "UIInput",
411            Self::VehicleIdSensor => "VehicleIdSensor",
412            Self::FrequencySimulator => "FrequencySimulator",
413            Self::DataCollector => "DataCollector",
414            Self::Other(value) => value.as_str(),
415        }
416    }
417    /// Parses a wire value, returning `None` for values the
418    /// specification doesn't define.
419    ///
420    /// Use this to ask "is this one of the spec's values?". To accept
421    /// any value, use [`Self::from_wire_or_other`].
422    pub fn from_wire(value: &str) -> Option<Self> {
423        match value {
424            "AlignedDataCtrlr" => Some(Self::AlignedDataCtrlr),
425            "AuthCacheCtrlr" => Some(Self::AuthCacheCtrlr),
426            "AuthCtrlr" => Some(Self::AuthCtrlr),
427            "CHAdeMOCtrlr" => Some(Self::CHAdeMOCtrlr),
428            "ClockCtrlr" => Some(Self::ClockCtrlr),
429            "CustomizationCtrlr" => Some(Self::CustomizationCtrlr),
430            "DeviceDataCtrlr" => Some(Self::DeviceDataCtrlr),
431            "DisplayMessageCtrlr" => Some(Self::DisplayMessageCtrlr),
432            "ISO15118Ctrlr" => Some(Self::ISO15118Ctrlr),
433            "LocalAuthListCtrlr" => Some(Self::LocalAuthListCtrlr),
434            "MonitoringCtrlr" => Some(Self::MonitoringCtrlr),
435            "OCPPCommCtrlr" => Some(Self::OCPPCommCtrlr),
436            "ReservationCtrlr" => Some(Self::ReservationCtrlr),
437            "SampledDataCtrlr" => Some(Self::SampledDataCtrlr),
438            "SecurityCtrlr" => Some(Self::SecurityCtrlr),
439            "SmartChargingCtrlr" => Some(Self::SmartChargingCtrlr),
440            "TariffCostCtrlr" => Some(Self::TariffCostCtrlr),
441            "TxCtrlr" => Some(Self::TxCtrlr),
442            "AccessBarrier" => Some(Self::AccessBarrier),
443            "AcDcConverter" => Some(Self::AcDcConverter),
444            "AcPhaseSelector" => Some(Self::AcPhaseSelector),
445            "Actuator" => Some(Self::Actuator),
446            "AirCoolingSystem" => Some(Self::AirCoolingSystem),
447            "AreaVentilation" => Some(Self::AreaVentilation),
448            "BayOccupancySensor" => Some(Self::BayOccupancySensor),
449            "BeaconLighting" => Some(Self::BeaconLighting),
450            "CableBreakawaySensor" => Some(Self::CableBreakawaySensor),
451            "CaseAccessSensor" => Some(Self::CaseAccessSensor),
452            "ChargingStation" => Some(Self::ChargingStation),
453            "ChargingStatusIndicator" => Some(Self::ChargingStatusIndicator),
454            "ConnectedEV" => Some(Self::ConnectedEV),
455            "Connector" => Some(Self::Connector),
456            "ConnectorHolsterRelease" => Some(Self::ConnectorHolsterRelease),
457            "ConnectorHolsterSensor" => Some(Self::ConnectorHolsterSensor),
458            "ConnectorPlugRetentionLock" => Some(Self::ConnectorPlugRetentionLock),
459            "ConnectorProtectionRelease" => Some(Self::ConnectorProtectionRelease),
460            "Controller" => Some(Self::Controller),
461            "ControlMetering" => Some(Self::ControlMetering),
462            "CPPWMController" => Some(Self::CPPWMController),
463            "DataLink" => Some(Self::DataLink),
464            "Display" => Some(Self::Display),
465            "DistributionPanel" => Some(Self::DistributionPanel),
466            "ElectricalFeed" => Some(Self::ElectricalFeed),
467            "ELVSupply" => Some(Self::ELVSupply),
468            "EmergencyStopSensor" => Some(Self::EmergencyStopSensor),
469            "EnvironmentalLighting" => Some(Self::EnvironmentalLighting),
470            "EVRetentionLock" => Some(Self::EVRetentionLock),
471            "EVSE" => Some(Self::EVSE),
472            "ExternalTemperatureSensor" => Some(Self::ExternalTemperatureSensor),
473            "FiscalMetering" => Some(Self::FiscalMetering),
474            "FloodSensor" => Some(Self::FloodSensor),
475            "GroundIsolationProtection" => Some(Self::GroundIsolationProtection),
476            "Heater" => Some(Self::Heater),
477            "HumiditySensor" => Some(Self::HumiditySensor),
478            "LightSensor" => Some(Self::LightSensor),
479            "LiquidCoolingSystem" => Some(Self::LiquidCoolingSystem),
480            "LocalAvailabilitySensor" => Some(Self::LocalAvailabilitySensor),
481            "LocalController" => Some(Self::LocalController),
482            "LocalEnergyStorage" => Some(Self::LocalEnergyStorage),
483            "NetworkConfiguration" => Some(Self::NetworkConfiguration),
484            "OverCurrentProtection" => Some(Self::OverCurrentProtection),
485            "OverCurrentProtectionRecloser" => Some(Self::OverCurrentProtectionRecloser),
486            "PowerContactor" => Some(Self::PowerContactor),
487            "RCD" => Some(Self::RCD),
488            "RCDRecloser" => Some(Self::RCDRecloser),
489            "RealTimeClock" => Some(Self::RealTimeClock),
490            "ShockSensor" => Some(Self::ShockSensor),
491            "SpacesCountSignage" => Some(Self::SpacesCountSignage),
492            "Switch" => Some(Self::Switch),
493            "TemperatureSensor" => Some(Self::TemperatureSensor),
494            "TiltSensor" => Some(Self::TiltSensor),
495            "TokenReader" => Some(Self::TokenReader),
496            "UpstreamProtectionTrigger" => Some(Self::UpstreamProtectionTrigger),
497            "UIInput" => Some(Self::UIInput),
498            "VehicleIdSensor" => Some(Self::VehicleIdSensor),
499            "FrequencySimulator" => Some(Self::FrequencySimulator),
500            "DataCollector" => Some(Self::DataCollector),
501            _ => None,
502        }
503    }
504    /// Parses any wire value, falling back to [`Self::Other`].
505    ///
506    /// Fails only if `value` is longer than the specification's
507    /// `maxLength` for this field, in which case it isn't a value the
508    /// field could have carried in the first place.
509    pub fn from_wire_or_other(value: &str) -> Result<Self, ValueTooLong> {
510        if let Some(standardized) = Self::from_wire(value) {
511            return Ok(standardized);
512        }
513        heapless::String::try_from(value).map(Self::Other).map_err(|_| ValueTooLong)
514    }
515    /// Whether this is one of the values the specification defines,
516    /// as opposed to a vendor's own.
517    pub fn is_standardized(&self) -> bool {
518        !matches!(self, Self::Other(_))
519    }
520}
521impl core::fmt::Display for ComponentName {
522    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
523        f.write_str(self.as_str())
524    }
525}
526impl core::str::FromStr for ComponentName {
527    type Err = ValueTooLong;
528    fn from_str(value: &str) -> Result<Self, Self::Err> {
529        Self::from_wire_or_other(value)
530    }
531}
532impl PartialEq for ComponentName {
533    fn eq(&self, other: &Self) -> bool {
534        self.as_str() == other.as_str()
535    }
536}
537impl Eq for ComponentName {}
538impl core::hash::Hash for ComponentName {
539    fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
540        self.as_str().hash(state);
541    }
542}
543impl PartialOrd for ComponentName {
544    fn partial_cmp(&self, other: &Self) -> Option<core::cmp::Ordering> {
545        Some(self.cmp(other))
546    }
547}
548impl Ord for ComponentName {
549    fn cmp(&self, other: &Self) -> core::cmp::Ordering {
550        self.as_str().cmp(other.as_str())
551    }
552}
553#[cfg(feature = "serde")]
554impl serde::Serialize for ComponentName {
555    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
556        serializer.serialize_str(self.as_str())
557    }
558}
559#[cfg(feature = "serde")]
560impl<'de> serde::Deserialize<'de> for ComponentName {
561    fn deserialize<D: serde::Deserializer<'de>>(
562        deserializer: D,
563    ) -> Result<Self, D::Error> {
564        struct Visitor;
565        impl<'v> serde::de::Visitor<'v> for Visitor {
566            type Value = ComponentName;
567            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
568                f.write_str("a ComponentName string")
569            }
570            fn visit_str<E: serde::de::Error>(
571                self,
572                value: &str,
573            ) -> Result<Self::Value, E> {
574                ComponentName::from_wire_or_other(value)
575                    .map_err(serde::de::Error::custom)
576            }
577        }
578        deserializer.deserialize_str(Visitor)
579    }
580}
581/// Standardized `Variable.name` values.
582///
583/// The schema types `Variable.name` as a plain string, since a Charging Station may expose vendor-specific variables alongside these.
584///
585/// An *open* set: values the specification doesn't define are carried
586/// in [`Self::Other`] rather than rejected, so a deployment's own
587/// values survive a deserialize/serialize round trip.
588///
589/// Comparison and hashing go through the wire string, not the variant,
590/// so `Other("...")` holding a standardized value compares equal to
591/// that variant.
592#[derive(Debug, Clone)]
593pub enum VariableName {
594    /// 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
595    ACCurrent,
596    /// If defined and true, this EVSE supports the selection of which phase to use for 1 phase AC charging.
597    ACPhaseSwitchingSupported,
598    /// 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
599    ACVoltage,
600    /// 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.
601    Active,
602    /// Shows the currently used MonitoringBase.
603    ActiveMonitoringBase,
604    /// Shows the currently use MonitoringLevel.
605    ActiveMonitoringLevel,
606    /// Indicates the configuration profile the station uses to connect to the network.
607    ActiveNetworkProfile,
608    /// Active transaction on charging station or EVSE.
609    ActiveTransactionId,
610    /// Maximum number of _additionalInfo_ items that can be sent in one message.
611    AdditionalInfoItemsPerMessage,
612    /// When set to true, only one certificate (plus a temporarily fallback certificate) of certificateType CSMSRootCertificate is allowed to be installed at a time.
613    AdditionalRootCertificateCheck,
614    /// This variable defines whether energy transfer is allowed to be resumed when the transaction is resumed after a reset or power outage.
615    AllowEnergyTransferResumption,
616    /// 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.
617    AllowNewSessionsPendingFirmwareUpdate,
618    /// Component can be reset. Can be used to announce that an EVSE can be reset individually.
619    AllowReset,
620    /// If this variable is implemented and set to _true_, then the Charging Station allows downgrading the security profile from 3 to 2.
621    AllowSecurityProfileDowngrade,
622    /// 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).
623    Angle,
624    /// 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\]
625    Attempts,
626    /// 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.
627    AuthorizeRemoteStart,
628    /// A value of ConnectorStatusEnumType (See part 2): replicates ConnectorStatus values reported in StatusNotification messages.
629    AvailabilityState,
630    /// The Component exists and is locally configured/wired for use, but might not be (remotely) Enabled.
631    Available,
632    /// The basic authentication password is used for HTTP Basic Authentication.
633    BasicAuthPassword,
634    /// Message Size (in bytes) - puts constraint on GetReportRequest, GetMonitoringReportRequest or GetVariableRequest message size.
635    BytesPerMessage,
636    /// 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.
637    CentralContractValidationAllowed,
638    /// 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.
639    CertSigningRepeatTimes,
640    /// 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.
641    CertSigningWaitMinimum,
642    /// Digital Certificate (in Base64 encoding)
643    Certificate,
644    /// Amount of Certificates currently installed on the Charging Station.
645    CertificateEntries,
646    /// When present, this variable tells CSMS whether Charging Station uses OCSP or CRL to check for revoked certificates.
647    CertificateStatusSource,
648    /// 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.
649    ChargeProtocol,
650    /// Charging up to StateOfChargeBulk has completed.
651    ChargingCompleteBulk,
652    /// Charging up to StateOfCharge.maxSet has completed.
653    ChargingCompleteFull,
654    /// 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.
655    ChargingProfilePersistence,
656    /// This variable reports the current transaction charging state for an EVSE.
657    ChargingState,
658    /// Time from earliest to latest substantive energy transfer
659    ChargingTime,
660    /// 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.
661    Color,
662    /// Points to a communication parent component (data flow source), to allow rendering the communication hierarchy in a UI.
663    CommunicationParent,
664    /// Component’s operation cycle has completed. Used only in event notifications, where it is always true.
665    Complete,
666    /// If set to true the Charging Station supports tariffs with conditions.
667    ConditionsSupported,
668    /// This Configuration Variable can be used to limit the following fields: SetVariableData.attributeValue and VariableCharacteristics.valuesList.
669    ConfigurationValueSize,
670    /// Time since logical connection established
671    ConnectedTime,
672    /// 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.
673    ConnectorType,
674    /// If this variable is _true_, then ISO 15118 contract certificate installation/update as described by use case M01 - Certificate installation EV
675    ContractCertificateInstallationEnabled,
676    /// If this variable is _true_, then Charging Station will try to validate a contract certificate when it is offline.
677    ContractValidationOffline,
678    /// General purpose integer count variable for Component state reporting
679    Count,
680    /// The countryName of the SECC in the ISO 3166-1 format.
681    CountryName,
682    /// Currency in a ISO 4217 formatted currency code.
683    Currency,
684    /// Percentage current imbalance in an AC three phase supply.
685    CurrentImbalance,
686    /// This standard configuration variable is used to enable/disable the custom implementation named in the *variableInstance*.
687    CustomImplementationEnabled,
688    /// This variable defines the names of custom triggers that Charging Station supports in a _customTrigger_ field of TriggerMessageRequest.
689    CustomTriggers,
690    /// DC Current (in amperes). May be an instantaneous measurement, or a period average, depending on context/equipment.
691    DCCurrent,
692    /// 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.
693    DCInputPhaseControl,
694    /// DC Voltage (volts). May be an instantaneous measurement, or a period average, depending on context/equipment.
695    DCVoltage,
696    /// Text associated with a Component, e.g. a Display.
697    DataText,
698    /// Point in time value, in \[RFC3339\] datetime format. Time zone optional.
699    DateTime,
700    /// Time in \[RFC3339\] datetime format, when an EV intends to leave the charging station.
701    DepartureTime,
702    /// When set to _true_ this variable disables the behavior to request authorization for an
703    DisablePostAuthorize,
704    /// 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.
705    DisableRemoteAuthorization,
706    /// Maximum number of different messages that can configured in this Charging Station simultaneous, via SetDisplayMessageRequest.
707    DisplayMessages,
708    /// Production series variants reflecting internal design changes or sub-component substitutions not affecting external functionality.
709    ECVariant,
710    /// 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).
711    EVConnectionTimeOut,
712    /// Points to a electrical parent component (energy flow source), to allow rendering the electrical hierarchy in a UI.
713    ElectricalParent,
714    /// 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
715    Enabled,
716    /// Energy quantity (in Wh) for reporting/configuring values related to stored energy (i.e. not transferred energy).
717    Energy,
718    /// Energy capacity in Wh of an energy storage device.
719    EnergyCapacity,
720    /// Total energy transferred: e.g. from EV during (ongoing or terminated) charging session (in wH by default)
721    EnergyExport,
722    /// Cumulative export kWh register value, such as from a (certified) fiscal energy meter.
723    EnergyExportRegister,
724    /// Total energy transferred.
725    EnergyImport,
726    /// Cumulative export kWh register value, such as from a (certified) fiscal energy meter.
727    EnergyImportRegister,
728    /// General purpose variable for reporting/managing numbers of entries in repetitive data structures. maxLimit characteristic reports maximum possible entries.
729    Entries,
730    /// Date/time when the configuration was changed externally, i.e. outside of CSMS, for example by a local service action.
731    ExternalConfigChangeDate,
732    /// Indicates whether a Charging Station allows an external system to submit a `ChargingStationExternalConstraints` charging profile.
733    ExternalConstraintsProfileDisallowed,
734    /// 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`.
735    ExternalControlSignalsEnabled,
736    /// 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).
737    Fallback,
738    /// Fan Speed (in RPM). A value of 0 represents stopped/stalled. An empty value indicates that fan speed cannot be read.
739    FanSpeed,
740    /// This variable is used to report the length of \<field\> in \<message\> when it is larger
741    FieldLength,
742    /// List of supported file transfer protocols.
743    FileTransferProtocols,
744    /// Version number of firmware.
745    FirmwareVersion,
746    /// 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.
747    Force,
748    /// List of message formats supported by this Charging Station. Possible values: ASCII, HTML, URI, UTF-8.
749    Formats,
750    /// Frequency of AC power, signal, or component operation.
751    Frequency,
752    /// A JSON-formatted string with an array of { _time, freq_ } pairs, in which _time_ is
753    FrequencySchedule,
754    /// Current rating of a fuse/breaker. Variable instances keyed by phase identifier (L1/L2/L3/N).
755    FuseRating,
756    /// Interval of inactivity (no OCPP exchanges) with CSMS after which the Charging Station should send HeartbeatRequest.
757    HeartbeatInterval,
758    /// Height above(+)/below(-) reference level (ground level unless context demands otherwise).
759    Height,
760    /// The relative humidity in %.
761    Humidity,
762    /// 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.
763    Hysteresis,
764    /// ICCID (Integrated Circuit Card IDentifier) of mobile data SIM card.
765    ICCID,
766    /// IMSI (International Mobile Subscriber Identity) number of mobile data SIM card
767    IMSI,
768    /// EVSE ID in string format as used in ISO 15118 and IEC 63119-2
769    ISO15118EvseId,
770    /// The IdToken used to authorize a charging transaction.
771    IdToken,
772    /// The Charging Station identity.
773    Identity,
774    /// 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).
775    Impedance,
776    /// Minimum Interval (in seconds) between (attempted) operations.
777    Interval,
778    /// Maximum number of ComponentVariable entries that can be sent in one GetReportRequest or GetMonitoringReportRequest message.
779    ItemsPerMessage,
780    /// 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
781    Label,
782    /// Default language code, per RFC 5646, of this Charging Station.
783    Language,
784    /// General Purpose linear distance measure.
785    Length,
786    /// Indicates how long it takes until a token expires in the authorization cache since it is last used.
787    LifeTime,
788    /// (Ambient) light level. The value is in Lux.
789    Light,
790    /// 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.
791    LimitChangeSignificance,
792    /// Whether the Charging Station, when _Offline_, will start a transaction for locally-authorized identifiers.
793    LocalAuthorizeOffline,
794    /// Variable with instances to control local load-balancing.
795    LocalLoadBalancing,
796    /// Whether the Charging Station, when online, will start a transaction for locally-authorized identifiers without waiting for or requesting an AuthorizeResponse from the CSMS.
797    LocalPreAuthorize,
798    /// Points to a logical parent component, to allow rendering a comprehensive overview of the Charging Station components in a UI.
799    LogicalParent,
800    /// Component Manufacturer name
801    Manufacturer,
802    /// IdTokens that have this id as groupId belong to the Master Pass Group.
803    MasterPassGroupId,
804    /// This configuration variable can be used to limit the size of the 'certificateChain' field from the CertificateSignedRequest PDU.
805    MaxCertificateChainSize,
806    /// Maximum amount of energy in Wh delivered when an identifier is deauthorized by the CSMS after start of a transaction.
807    MaxEnergyOnInvalidId,
808    /// Defines the highest value that a charging profile id of a `ChargingStationExternalConstraints` profile in the Charging Station can have.
809    MaxExternalConstraintsId,
810    /// For ISO15118Ctrlr: The maximum number of _priceRuleStacks_ and _priceLevelScheduleEntries_ that Charging Station is able to accept in a ChargingScheduleType.
811    MaxPriceElements,
812    /// Measurand(s) to be included in \<\<metervaluesrequest,MeterValuesRequest\>\> or \<\<transactioneventrequest,TransactionEventRequest\>\>
813    Measurands,
814    /// Specific stored message for display.
815    Message,
816    /// How long the Charging Station should wait before resubmitting a TransactionEventRequest message that the CSMS failed to process.
817    MessageAttemptInterval,
818    /// How often the Charging Station should try to submit a TransactionEventRequest message when the CSMS fails to process it.
819    MessageAttempts,
820    /// 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.
821    MessageTimeout,
822    /// Minimum duration that a Charging Station or EVSE status is stable before StatusNotificationRequest is sent to the CSMS.
823    MinimumStatusDuration,
824    /// Operating mode string from among valid options (communicated by OptionList, etc. during capability/configuration discovery).
825    Mode,
826    /// 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.
827    Model,
828    /// Current network address of a Component.
829    NetworkAddress,
830    /// 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.
831    NetworkConfigurationPriority,
832    /// Specifies the number of connection attempts the Charging Station executes before switching to a different profile.
833    NetworkProfileConnectionAttempts,
834    /// 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`.
835    NextTimeOffsetTransitionDateTime,
836    /// For ReservationCtrlr: If this configuration variable is present and set to _true_: Charging Station supports reservation where EVSE id is not specified.
837    NonEvseSpecific,
838    /// 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.
839    NotificationMaxDelay,
840    /// Indicates if the Charging Station should include the externally set charging limit/schedule in the message when it sends a NotifyChargingLimitRequest message.
841    NotifyChargingLimitWithSchedules,
842    /// This contains the address of the NTP server.
843    NtpServerUri,
844    /// Use the NTP server provided via DHCP, or use the manually configured NTP server.
845    NtpSource,
846    /// 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.
847    OfflineQueuingSeverity,
848    /// Message (and/or tariff information) to be shown to an EV Driver when Charging Station is offline.
849    OfflineTariffFallbackMessage,
850    /// 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.
851    OfflineThreshold,
852    /// If this key exists and is true, the Charging Station supports Unknown Offline Authorization.
853    OfflineTxForUnknownIdEnabled,
854    /// The Component operated in an instantaneous, transient, or immediately self-resetting pattern. Used only in event notifications, where it is always true.
855    Operated,
856    /// Recurring operating times in iCalendar RRULE format.
857    OperatingTimes,
858    /// The organizationName of the CSO operating the charging station.
859    OrganizationName,
860    /// Component is in Overload state.
861    Overload,
862    /// Generic dimensionless value reporting/setting value.
863    Percent,
864    /// Maximum number of periods that may be defined per ChargingSchedule.
865    PeriodsPerSchedule,
866    /// This variable describes the phase rotation of a Component relative to its parent Component, using a
867    PhaseRotation,
868    /// If defined and true, this Charging Station supports switching from 3 to 1 phase during a transaction.
869    Phases3to1,
870    /// Points to a physical parent component (container), to allow rendering an overview of the Charging Station component locations in a UI.
871    PhysicalParent,
872    /// If this variable is _true_, then ISO 15118 plug and charge as described by use case C07 - Authorization using Contract Certificates is enabled.
873    PnCEnabled,
874    /// Cache Entry Replacement Policy: least recently used, least frequently used, first in first out, other custom mechanism.
875    Policy,
876    /// Elapsed time in seconds since last substantive energy transfer
877    PostChargingTime,
878    /// 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.
879    Power,
880    /// Component exists, but might not be locally configured/wired for use, nor (remotely) Enabled.
881    Present,
882    /// 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.
883    Problem,
884    /// Maximum acceptable value for _stackLevel_ in a ChargingProfile.
885    ProfileStackLevel,
886    /// 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.
887    Protecting,
888    /// 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.
889    ProtocolAgreed,
890    /// 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.
891    ProtocolSupported,
892    /// 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.
893    ProtocolSupportedByEV,
894    /// Configuration variable that can be used to retrieve the public key for a meter connected to a specific EVSE.
895    PublicKey,
896    /// This Configuration Variable can be used to configure whether a public key needs to be sent with a signed meter value.
897    PublicKeyWithSignedMeterValue,
898    /// When this variable is set to _true_, the Charging Station will queue all message until they are delivered to the CSMS.
899    QueueAllMessages,
900    /// A list of supported quantities (A, W) for use in a ChargingSchedule.
901    RateUnit,
902    /// 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.
903    RegisterValuesWithoutPhases,
904    /// Number of seconds remaining to charge to bulk state of charge, given by StateOfChargeBulk.
905    RemainingTimeBulk,
906    /// Number of seconds remaining to charge to 100% state of charge.
907    RemainingTimeFull,
908    /// This Configuration Variable can be used to limit the following fields: GetVariableResult.attributeValue, VariableAttribute.value and EventData.actualValue.
909    ReportingValueSize,
910    /// For ISO15118Ctrlr: If this variable is _true_, then Charging Station shall request a metering receipt
911    RequestMeteringReceipt,
912    /// Number of times to retry a reset of the Charging Station when a reset was unsuccessful.
913    ResetRetries,
914    /// This variable defines the maximum number of seconds that a transaction may be interrupted by a power outage and still be resumed afterwards.
915    ResumptionTimeout,
916    /// The set of measurands to be sampled by the DataCollector component.
917    SampledMeasurands,
918    /// The sampling interval in *seconds*.
919    SamplingInterval,
920    /// The name of the SECC in the string format as required by ISO 15118.
921    SeccId,
922    /// This configuration variable is used to report the security profile used by the Charging Station.
923    SecurityProfile,
924    /// For AlignedDataCtrlr: If set to _true_, the Charging Station SHALL only send clock aligned meter values when there is no transaction ongoing.
925    SendDuringIdle,
926    /// Serial number of Component.
927    SerialNumber,
928    /// For ISO15118Ctrlr: If set to 'True' the SECC (EVSE) is capable of ServiceRenegotiation.
929    ServiceRenegotiationSupport,
930    /// If set to _true_, the Charging Station SHALL include signed meter values in the TransactionEventRequest(Ended).
931    SignReadings,
932    /// 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).
933    SignStartedReadings,
934    /// If set to _true_, the Charging Station SHALL include signed meter values in the _metervalues_ field in the TransactionEventRequest(Updated).
935    SignUpdatedReadings,
936    /// (Radio/Wired/Optical) data signal strength, in ASU (typically 0-31 or 99 for unknown). Or dbmW (typically -140 to -50).
937    SignalStrength,
938    /// This variable represents the status of the door of the battery slot.
939    SlotStatus,
940    /// SoC of the component BatteryCartridge which refers to the battery that is inserted at the EVSE.
941    SoC,
942    /// SoH of the component BatteryCartridge which refers to the battery that is inserted at the EVSE.
943    SoH,
944    /// A state code or name identifier string, to allow the internal state of components to be reported and/or controlled
945    State,
946    /// 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%.
947    StateOfCharge,
948    /// Energy Storage Device (e.g. battery) state of charge up to which fast charging is possible. Above this percentage charging speed will drop significantly.
949    StateOfChargeBulk,
950    /// When set to _true_, the Charging Station SHALL deauthorize the transaction when the cable is unplugged from the EV.
951    StopTxOnEVSideDisconnect,
952    /// Whether the Charging Station will deauthorize an ongoing transaction when it receives a non- _Accepted_ authorization status in TransactionEventResponse for this transaction.
953    StopTxOnInvalidId,
954    /// In bytes. Amount of storage occupied. Storage(maxLimit) specifies absolute limit Storage(MaxSet) restricts usage to specified Max, if supported.
955    Storage,
956    /// 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.
957    SupplyPhases,
958    /// 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_.
959    SupportsExpiryDateTime,
960    /// If Suspending is true, the Component can is currently suspending charging.
961    Suspending,
962    /// 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.
963    Suspension,
964    /// Message (and/or tariff information) to be shown to an EV Driver when there is no driver specific tariff information available.
965    TariffFallbackMessage,
966    /// Temperature(s) of component (in Celsius, by default). Components may have multiple indexed temperature sensors.
967    Temperature,
968    /// Point in time value, in ISO 8601 datetime format. Time zone optional.
969    Time,
970    /// 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.
971    TimeAdjustmentReportingThreshold,
972    /// 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.
973    TimeOffset,
974    /// Via this variable, the Charging Station provides the CSMS with the option to configure a clock source.
975    TimeSource,
976    /// Configured current local time zone in the format: 'Europe/Oslo', 'Asia/Singapore' etc.
977    TimeZone,
978    /// Generic timeout value for Component operation (in seconds).
979    ///
980    /// Also listed as: For BatterySwapCtrlr: Timeout in seconds in which a set of batteries must be inserted or removed after successful authorization.
981    Timeout,
982    /// String of bytes representing an ID token.
983    Token,
984    /// Type of Token. Value is one of IdTokenEnumStringType (See Appendix 7).
985    TokenType,
986    /// 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.
987    TotalCostFallbackMessage,
988    /// Number of attempts done by a Component.
989    Tries,
990    /// Single-shot device requires explicit intervention to re-prime/activate to normal.
991    Tripped,
992    /// With this configuration variable the Charging Station can be configured to allow charging before having received a BootNotificationResponse with status: Accepted.
993    TxBeforeAcceptedEnabled,
994    /// Interval between sampling of metering (or other) data, intended to be transmitted in the TransactionEventRequest(Ended) message.
995    TxEndedInterval,
996    /// Sampled measurands to be included in the _meterValues_ element of TransactionEventRequest(Ended).
997    TxEndedMeasurands,
998    /// Start points for a transaction.
999    TxStartPoint,
1000    /// Sampled measurands to be included in the _meterValues_ element of TransactionEventRequest(Started).
1001    TxStartedMeasurands,
1002    /// Stop points of a transaction.
1003    TxStopPoint,
1004    /// Interval between sampling of metering (or other) data, intended to be transmitted in the TransactionEventRequest(Updated) message.
1005    TxUpdatedInterval,
1006    /// Sampled measurands to be included in the _meterValues_ element of TransactionEventRequest(Updated).
1007    TxUpdatedMeasurands,
1008    /// When set to true, the Charging Station SHALL unlock the cable on the Charging Station side when the cable is unplugged at the EV.
1009    UnlockOnEVSideDisconnect,
1010    /// 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
1011    V2GCertificateInstallationEnabled,
1012    /// For ConnectedEV: The PEM encoded X.509 leaf/intermediate/root certificate when present in the vehicle certificate chain.
1013    VehicleCertificate,
1014    /// 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.
1015    VehicleId,
1016    /// \[RFC3339\]
1017    VersionDate,
1018    /// Version number of hardware
1019    VersionNumber,
1020    /// Percentage voltage imbalance in three phase supply.
1021    VoltageImbalance,
1022    /// Listed in the specification's device model table but not in its dedicated name table.
1023    VendorName,
1024    /// Listed in the specification's device model table but not in its dedicated name table.
1025    SupportedIdTokenType,
1026    /// Listed in the specification's device model table but not in its dedicated name table.
1027    SelftestActive,
1028    /// Listed in the specification's device model table but not in its dedicated name table.
1029    CHAdeMOProtocolNumber,
1030    /// Listed in the specification's device model table but not in its dedicated name table.
1031    VehicleStatus,
1032    /// Listed in the specification's device model table but not in its dedicated name table.
1033    DynamicControl,
1034    /// Listed in the specification's device model table but not in its dedicated name table.
1035    HighCurrentControl,
1036    /// Listed in the specification's device model table but not in its dedicated name table.
1037    HighVoltageControl,
1038    /// Listed in the specification's device model table but not in its dedicated name table.
1039    AutoManufacturerCode,
1040    /// Listed in the specification's device model table but not in its dedicated name table.
1041    VehicleID,
1042    /// Listed in the specification's device model table but not in its dedicated name table.
1043    BatteryCapacity,
1044    /// Listed in the specification's device model table but not in its dedicated name table.
1045    ValueSize,
1046    /// Listed in the specification's device model table but not in its dedicated name table.
1047    EvseId,
1048    /// Listed in the specification's device model table but not in its dedicated name table.
1049    MaxScheduleEntries,
1050    /// Listed in the specification's device model table but not in its dedicated name table.
1051    RequestedEnergyTransferMode,
1052    /// Listed in the specification's device model table but not in its dedicated name table.
1053    NotificationDelay,
1054    /// Listed in the specification's device model table but not in its dedicated name table.
1055    Capacity,
1056    /// Listed in the specification's device model table but not in its dedicated name table.
1057    MonitoringBase,
1058    /// Listed in the specification's device model table but not in its dedicated name table.
1059    MonitoringLevel,
1060    /// Listed in the specification's device model table but not in its dedicated name table.
1061    RetryBackOffRandomRange,
1062    /// Listed in the specification's device model table but not in its dedicated name table.
1063    RetryBackOffRepeatTimes,
1064    /// Listed in the specification's device model table but not in its dedicated name table.
1065    RetryBackOffWaitMinimum,
1066    /// Listed in the specification's device model table but not in its dedicated name table.
1067    WebSocketPingInterval,
1068    /// Listed in the specification's device model table but not in its dedicated name table.
1069    EnergyTransferResumptionRandomRange,
1070    /// Listed in the specification's device model table but not in its dedicated name table.
1071    OcppCsmsUrl,
1072    /// Listed in the specification's device model table but not in its dedicated name table.
1073    OcppInterface,
1074    /// Listed in the specification's device model table but not in its dedicated name table.
1075    OcppTransport,
1076    /// Listed in the specification's device model table but not in its dedicated name table.
1077    OcppVersion,
1078    /// Listed in the specification's device model table but not in its dedicated name table.
1079    CsmsRootCertificateHashAlgorithm,
1080    /// Listed in the specification's device model table but not in its dedicated name table.
1081    CsmsRootCertificateIssuerKeyHash,
1082    /// Listed in the specification's device model table but not in its dedicated name table.
1083    CsmsRootCertificateIssuerNameHash,
1084    /// Listed in the specification's device model table but not in its dedicated name table.
1085    CsmsRootCertificateSerialNumber,
1086    /// Listed in the specification's device model table but not in its dedicated name table.
1087    VpnEnabled,
1088    /// Listed in the specification's device model table but not in its dedicated name table.
1089    VpnType,
1090    /// Listed in the specification's device model table but not in its dedicated name table.
1091    VpnServer,
1092    /// Listed in the specification's device model table but not in its dedicated name table.
1093    VpnUser,
1094    /// Listed in the specification's device model table but not in its dedicated name table.
1095    VpnGroup,
1096    /// Listed in the specification's device model table but not in its dedicated name table.
1097    VpnPassword,
1098    /// Listed in the specification's device model table but not in its dedicated name table.
1099    VpnKey,
1100    /// Listed in the specification's device model table but not in its dedicated name table.
1101    ApnEnabled,
1102    /// Listed in the specification's device model table but not in its dedicated name table.
1103    Apn,
1104    /// Listed in the specification's device model table but not in its dedicated name table.
1105    ApnUserName,
1106    /// Listed in the specification's device model table but not in its dedicated name table.
1107    ApnPassword,
1108    /// Listed in the specification's device model table but not in its dedicated name table.
1109    SimPin,
1110    /// Listed in the specification's device model table but not in its dedicated name table.
1111    PreferredNetwork,
1112    /// Listed in the specification's device model table but not in its dedicated name table.
1113    UseOnlyPreferredNetwork,
1114    /// Listed in the specification's device model table but not in its dedicated name table.
1115    ApnAuthentication,
1116    /** A value this version's specification doesn't define -- typically a
1117 vendor-specific one, which OCPP explicitly permits.
1118
1119 Bounded at 50 bytes, the same `maxLength` the wire field carries,
1120 so anything the field can hold this can hold. Prefer
1121 [`Self::from_wire_or_other`] over constructing this directly: it
1122 returns the standardized variant when the value is one, keeping a
1123 single representation per wire string.*/
1124    Other(heapless::String<50usize>),
1125}
1126impl VariableName {
1127    /// Every value this version's specification defines (260), in spec order.
1128    ///
1129    /// Does not include [`Self::Other`], which is unbounded in the
1130    /// values it can hold.
1131    pub const ALL: &'static [Self] = &[
1132        Self::ACCurrent,
1133        Self::ACPhaseSwitchingSupported,
1134        Self::ACVoltage,
1135        Self::Active,
1136        Self::ActiveMonitoringBase,
1137        Self::ActiveMonitoringLevel,
1138        Self::ActiveNetworkProfile,
1139        Self::ActiveTransactionId,
1140        Self::AdditionalInfoItemsPerMessage,
1141        Self::AdditionalRootCertificateCheck,
1142        Self::AllowEnergyTransferResumption,
1143        Self::AllowNewSessionsPendingFirmwareUpdate,
1144        Self::AllowReset,
1145        Self::AllowSecurityProfileDowngrade,
1146        Self::Angle,
1147        Self::Attempts,
1148        Self::AuthorizeRemoteStart,
1149        Self::AvailabilityState,
1150        Self::Available,
1151        Self::BasicAuthPassword,
1152        Self::BytesPerMessage,
1153        Self::CentralContractValidationAllowed,
1154        Self::CertSigningRepeatTimes,
1155        Self::CertSigningWaitMinimum,
1156        Self::Certificate,
1157        Self::CertificateEntries,
1158        Self::CertificateStatusSource,
1159        Self::ChargeProtocol,
1160        Self::ChargingCompleteBulk,
1161        Self::ChargingCompleteFull,
1162        Self::ChargingProfilePersistence,
1163        Self::ChargingState,
1164        Self::ChargingTime,
1165        Self::Color,
1166        Self::CommunicationParent,
1167        Self::Complete,
1168        Self::ConditionsSupported,
1169        Self::ConfigurationValueSize,
1170        Self::ConnectedTime,
1171        Self::ConnectorType,
1172        Self::ContractCertificateInstallationEnabled,
1173        Self::ContractValidationOffline,
1174        Self::Count,
1175        Self::CountryName,
1176        Self::Currency,
1177        Self::CurrentImbalance,
1178        Self::CustomImplementationEnabled,
1179        Self::CustomTriggers,
1180        Self::DCCurrent,
1181        Self::DCInputPhaseControl,
1182        Self::DCVoltage,
1183        Self::DataText,
1184        Self::DateTime,
1185        Self::DepartureTime,
1186        Self::DisablePostAuthorize,
1187        Self::DisableRemoteAuthorization,
1188        Self::DisplayMessages,
1189        Self::ECVariant,
1190        Self::EVConnectionTimeOut,
1191        Self::ElectricalParent,
1192        Self::Enabled,
1193        Self::Energy,
1194        Self::EnergyCapacity,
1195        Self::EnergyExport,
1196        Self::EnergyExportRegister,
1197        Self::EnergyImport,
1198        Self::EnergyImportRegister,
1199        Self::Entries,
1200        Self::ExternalConfigChangeDate,
1201        Self::ExternalConstraintsProfileDisallowed,
1202        Self::ExternalControlSignalsEnabled,
1203        Self::Fallback,
1204        Self::FanSpeed,
1205        Self::FieldLength,
1206        Self::FileTransferProtocols,
1207        Self::FirmwareVersion,
1208        Self::Force,
1209        Self::Formats,
1210        Self::Frequency,
1211        Self::FrequencySchedule,
1212        Self::FuseRating,
1213        Self::HeartbeatInterval,
1214        Self::Height,
1215        Self::Humidity,
1216        Self::Hysteresis,
1217        Self::ICCID,
1218        Self::IMSI,
1219        Self::ISO15118EvseId,
1220        Self::IdToken,
1221        Self::Identity,
1222        Self::Impedance,
1223        Self::Interval,
1224        Self::ItemsPerMessage,
1225        Self::Label,
1226        Self::Language,
1227        Self::Length,
1228        Self::LifeTime,
1229        Self::Light,
1230        Self::LimitChangeSignificance,
1231        Self::LocalAuthorizeOffline,
1232        Self::LocalLoadBalancing,
1233        Self::LocalPreAuthorize,
1234        Self::LogicalParent,
1235        Self::Manufacturer,
1236        Self::MasterPassGroupId,
1237        Self::MaxCertificateChainSize,
1238        Self::MaxEnergyOnInvalidId,
1239        Self::MaxExternalConstraintsId,
1240        Self::MaxPriceElements,
1241        Self::Measurands,
1242        Self::Message,
1243        Self::MessageAttemptInterval,
1244        Self::MessageAttempts,
1245        Self::MessageTimeout,
1246        Self::MinimumStatusDuration,
1247        Self::Mode,
1248        Self::Model,
1249        Self::NetworkAddress,
1250        Self::NetworkConfigurationPriority,
1251        Self::NetworkProfileConnectionAttempts,
1252        Self::NextTimeOffsetTransitionDateTime,
1253        Self::NonEvseSpecific,
1254        Self::NotificationMaxDelay,
1255        Self::NotifyChargingLimitWithSchedules,
1256        Self::NtpServerUri,
1257        Self::NtpSource,
1258        Self::OfflineQueuingSeverity,
1259        Self::OfflineTariffFallbackMessage,
1260        Self::OfflineThreshold,
1261        Self::OfflineTxForUnknownIdEnabled,
1262        Self::Operated,
1263        Self::OperatingTimes,
1264        Self::OrganizationName,
1265        Self::Overload,
1266        Self::Percent,
1267        Self::PeriodsPerSchedule,
1268        Self::PhaseRotation,
1269        Self::Phases3to1,
1270        Self::PhysicalParent,
1271        Self::PnCEnabled,
1272        Self::Policy,
1273        Self::PostChargingTime,
1274        Self::Power,
1275        Self::Present,
1276        Self::Problem,
1277        Self::ProfileStackLevel,
1278        Self::Protecting,
1279        Self::ProtocolAgreed,
1280        Self::ProtocolSupported,
1281        Self::ProtocolSupportedByEV,
1282        Self::PublicKey,
1283        Self::PublicKeyWithSignedMeterValue,
1284        Self::QueueAllMessages,
1285        Self::RateUnit,
1286        Self::RegisterValuesWithoutPhases,
1287        Self::RemainingTimeBulk,
1288        Self::RemainingTimeFull,
1289        Self::ReportingValueSize,
1290        Self::RequestMeteringReceipt,
1291        Self::ResetRetries,
1292        Self::ResumptionTimeout,
1293        Self::SampledMeasurands,
1294        Self::SamplingInterval,
1295        Self::SeccId,
1296        Self::SecurityProfile,
1297        Self::SendDuringIdle,
1298        Self::SerialNumber,
1299        Self::ServiceRenegotiationSupport,
1300        Self::SignReadings,
1301        Self::SignStartedReadings,
1302        Self::SignUpdatedReadings,
1303        Self::SignalStrength,
1304        Self::SlotStatus,
1305        Self::SoC,
1306        Self::SoH,
1307        Self::State,
1308        Self::StateOfCharge,
1309        Self::StateOfChargeBulk,
1310        Self::StopTxOnEVSideDisconnect,
1311        Self::StopTxOnInvalidId,
1312        Self::Storage,
1313        Self::SupplyPhases,
1314        Self::SupportsExpiryDateTime,
1315        Self::Suspending,
1316        Self::Suspension,
1317        Self::TariffFallbackMessage,
1318        Self::Temperature,
1319        Self::Time,
1320        Self::TimeAdjustmentReportingThreshold,
1321        Self::TimeOffset,
1322        Self::TimeSource,
1323        Self::TimeZone,
1324        Self::Timeout,
1325        Self::Token,
1326        Self::TokenType,
1327        Self::TotalCostFallbackMessage,
1328        Self::Tries,
1329        Self::Tripped,
1330        Self::TxBeforeAcceptedEnabled,
1331        Self::TxEndedInterval,
1332        Self::TxEndedMeasurands,
1333        Self::TxStartPoint,
1334        Self::TxStartedMeasurands,
1335        Self::TxStopPoint,
1336        Self::TxUpdatedInterval,
1337        Self::TxUpdatedMeasurands,
1338        Self::UnlockOnEVSideDisconnect,
1339        Self::V2GCertificateInstallationEnabled,
1340        Self::VehicleCertificate,
1341        Self::VehicleId,
1342        Self::VersionDate,
1343        Self::VersionNumber,
1344        Self::VoltageImbalance,
1345        Self::VendorName,
1346        Self::SupportedIdTokenType,
1347        Self::SelftestActive,
1348        Self::CHAdeMOProtocolNumber,
1349        Self::VehicleStatus,
1350        Self::DynamicControl,
1351        Self::HighCurrentControl,
1352        Self::HighVoltageControl,
1353        Self::AutoManufacturerCode,
1354        Self::VehicleID,
1355        Self::BatteryCapacity,
1356        Self::ValueSize,
1357        Self::EvseId,
1358        Self::MaxScheduleEntries,
1359        Self::RequestedEnergyTransferMode,
1360        Self::NotificationDelay,
1361        Self::Capacity,
1362        Self::MonitoringBase,
1363        Self::MonitoringLevel,
1364        Self::RetryBackOffRandomRange,
1365        Self::RetryBackOffRepeatTimes,
1366        Self::RetryBackOffWaitMinimum,
1367        Self::WebSocketPingInterval,
1368        Self::EnergyTransferResumptionRandomRange,
1369        Self::OcppCsmsUrl,
1370        Self::OcppInterface,
1371        Self::OcppTransport,
1372        Self::OcppVersion,
1373        Self::CsmsRootCertificateHashAlgorithm,
1374        Self::CsmsRootCertificateIssuerKeyHash,
1375        Self::CsmsRootCertificateIssuerNameHash,
1376        Self::CsmsRootCertificateSerialNumber,
1377        Self::VpnEnabled,
1378        Self::VpnType,
1379        Self::VpnServer,
1380        Self::VpnUser,
1381        Self::VpnGroup,
1382        Self::VpnPassword,
1383        Self::VpnKey,
1384        Self::ApnEnabled,
1385        Self::Apn,
1386        Self::ApnUserName,
1387        Self::ApnPassword,
1388        Self::SimPin,
1389        Self::PreferredNetwork,
1390        Self::UseOnlyPreferredNetwork,
1391        Self::ApnAuthentication,
1392    ];
1393    /// This value as it appears on the wire.
1394    pub fn as_str(&self) -> &str {
1395        match self {
1396            Self::ACCurrent => "ACCurrent",
1397            Self::ACPhaseSwitchingSupported => "ACPhaseSwitchingSupported",
1398            Self::ACVoltage => "ACVoltage",
1399            Self::Active => "Active",
1400            Self::ActiveMonitoringBase => "ActiveMonitoringBase",
1401            Self::ActiveMonitoringLevel => "ActiveMonitoringLevel",
1402            Self::ActiveNetworkProfile => "ActiveNetworkProfile",
1403            Self::ActiveTransactionId => "ActiveTransactionId",
1404            Self::AdditionalInfoItemsPerMessage => "AdditionalInfoItemsPerMessage",
1405            Self::AdditionalRootCertificateCheck => "AdditionalRootCertificateCheck",
1406            Self::AllowEnergyTransferResumption => "AllowEnergyTransferResumption",
1407            Self::AllowNewSessionsPendingFirmwareUpdate => {
1408                "AllowNewSessionsPendingFirmwareUpdate"
1409            }
1410            Self::AllowReset => "AllowReset",
1411            Self::AllowSecurityProfileDowngrade => "AllowSecurityProfileDowngrade",
1412            Self::Angle => "Angle",
1413            Self::Attempts => "Attempts",
1414            Self::AuthorizeRemoteStart => "AuthorizeRemoteStart",
1415            Self::AvailabilityState => "AvailabilityState",
1416            Self::Available => "Available",
1417            Self::BasicAuthPassword => "BasicAuthPassword",
1418            Self::BytesPerMessage => "BytesPerMessage",
1419            Self::CentralContractValidationAllowed => "CentralContractValidationAllowed",
1420            Self::CertSigningRepeatTimes => "CertSigningRepeatTimes",
1421            Self::CertSigningWaitMinimum => "CertSigningWaitMinimum",
1422            Self::Certificate => "Certificate",
1423            Self::CertificateEntries => "CertificateEntries",
1424            Self::CertificateStatusSource => "CertificateStatusSource",
1425            Self::ChargeProtocol => "ChargeProtocol",
1426            Self::ChargingCompleteBulk => "ChargingCompleteBulk",
1427            Self::ChargingCompleteFull => "ChargingCompleteFull",
1428            Self::ChargingProfilePersistence => "ChargingProfilePersistence",
1429            Self::ChargingState => "ChargingState",
1430            Self::ChargingTime => "ChargingTime",
1431            Self::Color => "Color",
1432            Self::CommunicationParent => "CommunicationParent",
1433            Self::Complete => "Complete",
1434            Self::ConditionsSupported => "ConditionsSupported",
1435            Self::ConfigurationValueSize => "ConfigurationValueSize",
1436            Self::ConnectedTime => "ConnectedTime",
1437            Self::ConnectorType => "ConnectorType",
1438            Self::ContractCertificateInstallationEnabled => {
1439                "ContractCertificateInstallationEnabled"
1440            }
1441            Self::ContractValidationOffline => "ContractValidationOffline",
1442            Self::Count => "Count",
1443            Self::CountryName => "CountryName",
1444            Self::Currency => "Currency",
1445            Self::CurrentImbalance => "CurrentImbalance",
1446            Self::CustomImplementationEnabled => "CustomImplementationEnabled",
1447            Self::CustomTriggers => "CustomTriggers",
1448            Self::DCCurrent => "DCCurrent",
1449            Self::DCInputPhaseControl => "DCInputPhaseControl",
1450            Self::DCVoltage => "DCVoltage",
1451            Self::DataText => "DataText",
1452            Self::DateTime => "DateTime",
1453            Self::DepartureTime => "DepartureTime",
1454            Self::DisablePostAuthorize => "DisablePostAuthorize",
1455            Self::DisableRemoteAuthorization => "DisableRemoteAuthorization",
1456            Self::DisplayMessages => "DisplayMessages",
1457            Self::ECVariant => "ECVariant",
1458            Self::EVConnectionTimeOut => "EVConnectionTimeOut",
1459            Self::ElectricalParent => "ElectricalParent",
1460            Self::Enabled => "Enabled",
1461            Self::Energy => "Energy",
1462            Self::EnergyCapacity => "EnergyCapacity",
1463            Self::EnergyExport => "EnergyExport",
1464            Self::EnergyExportRegister => "EnergyExportRegister",
1465            Self::EnergyImport => "EnergyImport",
1466            Self::EnergyImportRegister => "EnergyImportRegister",
1467            Self::Entries => "Entries",
1468            Self::ExternalConfigChangeDate => "ExternalConfigChangeDate",
1469            Self::ExternalConstraintsProfileDisallowed => {
1470                "ExternalConstraintsProfileDisallowed"
1471            }
1472            Self::ExternalControlSignalsEnabled => "ExternalControlSignalsEnabled",
1473            Self::Fallback => "Fallback",
1474            Self::FanSpeed => "FanSpeed",
1475            Self::FieldLength => "FieldLength",
1476            Self::FileTransferProtocols => "FileTransferProtocols",
1477            Self::FirmwareVersion => "FirmwareVersion",
1478            Self::Force => "Force",
1479            Self::Formats => "Formats",
1480            Self::Frequency => "Frequency",
1481            Self::FrequencySchedule => "FrequencySchedule",
1482            Self::FuseRating => "FuseRating",
1483            Self::HeartbeatInterval => "HeartbeatInterval",
1484            Self::Height => "Height",
1485            Self::Humidity => "Humidity",
1486            Self::Hysteresis => "Hysteresis",
1487            Self::ICCID => "ICCID",
1488            Self::IMSI => "IMSI",
1489            Self::ISO15118EvseId => "ISO15118EvseId",
1490            Self::IdToken => "IdToken",
1491            Self::Identity => "Identity",
1492            Self::Impedance => "Impedance",
1493            Self::Interval => "Interval",
1494            Self::ItemsPerMessage => "ItemsPerMessage",
1495            Self::Label => "Label",
1496            Self::Language => "Language",
1497            Self::Length => "Length",
1498            Self::LifeTime => "LifeTime",
1499            Self::Light => "Light",
1500            Self::LimitChangeSignificance => "LimitChangeSignificance",
1501            Self::LocalAuthorizeOffline => "LocalAuthorizeOffline",
1502            Self::LocalLoadBalancing => "LocalLoadBalancing",
1503            Self::LocalPreAuthorize => "LocalPreAuthorize",
1504            Self::LogicalParent => "LogicalParent",
1505            Self::Manufacturer => "Manufacturer",
1506            Self::MasterPassGroupId => "MasterPassGroupId",
1507            Self::MaxCertificateChainSize => "MaxCertificateChainSize",
1508            Self::MaxEnergyOnInvalidId => "MaxEnergyOnInvalidId",
1509            Self::MaxExternalConstraintsId => "MaxExternalConstraintsId",
1510            Self::MaxPriceElements => "MaxPriceElements",
1511            Self::Measurands => "Measurands",
1512            Self::Message => "Message",
1513            Self::MessageAttemptInterval => "MessageAttemptInterval",
1514            Self::MessageAttempts => "MessageAttempts",
1515            Self::MessageTimeout => "MessageTimeout",
1516            Self::MinimumStatusDuration => "MinimumStatusDuration",
1517            Self::Mode => "Mode",
1518            Self::Model => "Model",
1519            Self::NetworkAddress => "NetworkAddress",
1520            Self::NetworkConfigurationPriority => "NetworkConfigurationPriority",
1521            Self::NetworkProfileConnectionAttempts => "NetworkProfileConnectionAttempts",
1522            Self::NextTimeOffsetTransitionDateTime => "NextTimeOffsetTransitionDateTime",
1523            Self::NonEvseSpecific => "NonEvseSpecific",
1524            Self::NotificationMaxDelay => "NotificationMaxDelay",
1525            Self::NotifyChargingLimitWithSchedules => "NotifyChargingLimitWithSchedules",
1526            Self::NtpServerUri => "NtpServerUri",
1527            Self::NtpSource => "NtpSource",
1528            Self::OfflineQueuingSeverity => "OfflineQueuingSeverity",
1529            Self::OfflineTariffFallbackMessage => "OfflineTariffFallbackMessage",
1530            Self::OfflineThreshold => "OfflineThreshold",
1531            Self::OfflineTxForUnknownIdEnabled => "OfflineTxForUnknownIdEnabled",
1532            Self::Operated => "Operated",
1533            Self::OperatingTimes => "OperatingTimes",
1534            Self::OrganizationName => "OrganizationName",
1535            Self::Overload => "Overload",
1536            Self::Percent => "Percent",
1537            Self::PeriodsPerSchedule => "PeriodsPerSchedule",
1538            Self::PhaseRotation => "PhaseRotation",
1539            Self::Phases3to1 => "Phases3to1",
1540            Self::PhysicalParent => "PhysicalParent",
1541            Self::PnCEnabled => "PnCEnabled",
1542            Self::Policy => "Policy",
1543            Self::PostChargingTime => "PostChargingTime",
1544            Self::Power => "Power",
1545            Self::Present => "Present",
1546            Self::Problem => "Problem",
1547            Self::ProfileStackLevel => "ProfileStackLevel",
1548            Self::Protecting => "Protecting",
1549            Self::ProtocolAgreed => "ProtocolAgreed",
1550            Self::ProtocolSupported => "ProtocolSupported",
1551            Self::ProtocolSupportedByEV => "ProtocolSupportedByEV",
1552            Self::PublicKey => "PublicKey",
1553            Self::PublicKeyWithSignedMeterValue => "PublicKeyWithSignedMeterValue",
1554            Self::QueueAllMessages => "QueueAllMessages",
1555            Self::RateUnit => "RateUnit",
1556            Self::RegisterValuesWithoutPhases => "RegisterValuesWithoutPhases",
1557            Self::RemainingTimeBulk => "RemainingTimeBulk",
1558            Self::RemainingTimeFull => "RemainingTimeFull",
1559            Self::ReportingValueSize => "ReportingValueSize",
1560            Self::RequestMeteringReceipt => "RequestMeteringReceipt",
1561            Self::ResetRetries => "ResetRetries",
1562            Self::ResumptionTimeout => "ResumptionTimeout",
1563            Self::SampledMeasurands => "SampledMeasurands",
1564            Self::SamplingInterval => "SamplingInterval",
1565            Self::SeccId => "SeccId",
1566            Self::SecurityProfile => "SecurityProfile",
1567            Self::SendDuringIdle => "SendDuringIdle",
1568            Self::SerialNumber => "SerialNumber",
1569            Self::ServiceRenegotiationSupport => "ServiceRenegotiationSupport",
1570            Self::SignReadings => "SignReadings",
1571            Self::SignStartedReadings => "SignStartedReadings",
1572            Self::SignUpdatedReadings => "SignUpdatedReadings",
1573            Self::SignalStrength => "SignalStrength",
1574            Self::SlotStatus => "SlotStatus",
1575            Self::SoC => "SoC",
1576            Self::SoH => "SoH",
1577            Self::State => "State",
1578            Self::StateOfCharge => "StateOfCharge",
1579            Self::StateOfChargeBulk => "StateOfChargeBulk",
1580            Self::StopTxOnEVSideDisconnect => "StopTxOnEVSideDisconnect",
1581            Self::StopTxOnInvalidId => "StopTxOnInvalidId",
1582            Self::Storage => "Storage",
1583            Self::SupplyPhases => "SupplyPhases",
1584            Self::SupportsExpiryDateTime => "SupportsExpiryDateTime",
1585            Self::Suspending => "Suspending",
1586            Self::Suspension => "Suspension",
1587            Self::TariffFallbackMessage => "TariffFallbackMessage",
1588            Self::Temperature => "Temperature",
1589            Self::Time => "Time",
1590            Self::TimeAdjustmentReportingThreshold => "TimeAdjustmentReportingThreshold",
1591            Self::TimeOffset => "TimeOffset",
1592            Self::TimeSource => "TimeSource",
1593            Self::TimeZone => "TimeZone",
1594            Self::Timeout => "Timeout",
1595            Self::Token => "Token",
1596            Self::TokenType => "TokenType",
1597            Self::TotalCostFallbackMessage => "TotalCostFallbackMessage",
1598            Self::Tries => "Tries",
1599            Self::Tripped => "Tripped",
1600            Self::TxBeforeAcceptedEnabled => "TxBeforeAcceptedEnabled",
1601            Self::TxEndedInterval => "TxEndedInterval",
1602            Self::TxEndedMeasurands => "TxEndedMeasurands",
1603            Self::TxStartPoint => "TxStartPoint",
1604            Self::TxStartedMeasurands => "TxStartedMeasurands",
1605            Self::TxStopPoint => "TxStopPoint",
1606            Self::TxUpdatedInterval => "TxUpdatedInterval",
1607            Self::TxUpdatedMeasurands => "TxUpdatedMeasurands",
1608            Self::UnlockOnEVSideDisconnect => "UnlockOnEVSideDisconnect",
1609            Self::V2GCertificateInstallationEnabled => {
1610                "V2GCertificateInstallationEnabled"
1611            }
1612            Self::VehicleCertificate => "VehicleCertificate",
1613            Self::VehicleId => "VehicleId",
1614            Self::VersionDate => "VersionDate",
1615            Self::VersionNumber => "VersionNumber",
1616            Self::VoltageImbalance => "VoltageImbalance",
1617            Self::VendorName => "VendorName",
1618            Self::SupportedIdTokenType => "SupportedIdTokenType",
1619            Self::SelftestActive => "SelftestActive",
1620            Self::CHAdeMOProtocolNumber => "CHAdeMOProtocolNumber",
1621            Self::VehicleStatus => "VehicleStatus",
1622            Self::DynamicControl => "DynamicControl",
1623            Self::HighCurrentControl => "HighCurrentControl",
1624            Self::HighVoltageControl => "HighVoltageControl",
1625            Self::AutoManufacturerCode => "AutoManufacturerCode",
1626            Self::VehicleID => "VehicleID",
1627            Self::BatteryCapacity => "BatteryCapacity",
1628            Self::ValueSize => "ValueSize",
1629            Self::EvseId => "EvseId",
1630            Self::MaxScheduleEntries => "MaxScheduleEntries",
1631            Self::RequestedEnergyTransferMode => "RequestedEnergyTransferMode",
1632            Self::NotificationDelay => "NotificationDelay",
1633            Self::Capacity => "Capacity",
1634            Self::MonitoringBase => "MonitoringBase",
1635            Self::MonitoringLevel => "MonitoringLevel",
1636            Self::RetryBackOffRandomRange => "RetryBackOffRandomRange",
1637            Self::RetryBackOffRepeatTimes => "RetryBackOffRepeatTimes",
1638            Self::RetryBackOffWaitMinimum => "RetryBackOffWaitMinimum",
1639            Self::WebSocketPingInterval => "WebSocketPingInterval",
1640            Self::EnergyTransferResumptionRandomRange => {
1641                "EnergyTransferResumptionRandomRange"
1642            }
1643            Self::OcppCsmsUrl => "OcppCsmsUrl",
1644            Self::OcppInterface => "OcppInterface",
1645            Self::OcppTransport => "OcppTransport",
1646            Self::OcppVersion => "OcppVersion",
1647            Self::CsmsRootCertificateHashAlgorithm => "CsmsRootCertificateHashAlgorithm",
1648            Self::CsmsRootCertificateIssuerKeyHash => "CsmsRootCertificateIssuerKeyHash",
1649            Self::CsmsRootCertificateIssuerNameHash => {
1650                "CsmsRootCertificateIssuerNameHash"
1651            }
1652            Self::CsmsRootCertificateSerialNumber => "CsmsRootCertificateSerialNumber",
1653            Self::VpnEnabled => "VpnEnabled",
1654            Self::VpnType => "VpnType",
1655            Self::VpnServer => "VpnServer",
1656            Self::VpnUser => "VpnUser",
1657            Self::VpnGroup => "VpnGroup",
1658            Self::VpnPassword => "VpnPassword",
1659            Self::VpnKey => "VpnKey",
1660            Self::ApnEnabled => "ApnEnabled",
1661            Self::Apn => "Apn",
1662            Self::ApnUserName => "ApnUserName",
1663            Self::ApnPassword => "ApnPassword",
1664            Self::SimPin => "SimPin",
1665            Self::PreferredNetwork => "PreferredNetwork",
1666            Self::UseOnlyPreferredNetwork => "UseOnlyPreferredNetwork",
1667            Self::ApnAuthentication => "ApnAuthentication",
1668            Self::Other(value) => value.as_str(),
1669        }
1670    }
1671    /// Parses a wire value, returning `None` for values the
1672    /// specification doesn't define.
1673    ///
1674    /// Use this to ask "is this one of the spec's values?". To accept
1675    /// any value, use [`Self::from_wire_or_other`].
1676    pub fn from_wire(value: &str) -> Option<Self> {
1677        match value {
1678            "ACCurrent" => Some(Self::ACCurrent),
1679            "ACPhaseSwitchingSupported" => Some(Self::ACPhaseSwitchingSupported),
1680            "ACVoltage" => Some(Self::ACVoltage),
1681            "Active" => Some(Self::Active),
1682            "ActiveMonitoringBase" => Some(Self::ActiveMonitoringBase),
1683            "ActiveMonitoringLevel" => Some(Self::ActiveMonitoringLevel),
1684            "ActiveNetworkProfile" => Some(Self::ActiveNetworkProfile),
1685            "ActiveTransactionId" => Some(Self::ActiveTransactionId),
1686            "AdditionalInfoItemsPerMessage" => Some(Self::AdditionalInfoItemsPerMessage),
1687            "AdditionalRootCertificateCheck" => {
1688                Some(Self::AdditionalRootCertificateCheck)
1689            }
1690            "AllowEnergyTransferResumption" => Some(Self::AllowEnergyTransferResumption),
1691            "AllowNewSessionsPendingFirmwareUpdate" => {
1692                Some(Self::AllowNewSessionsPendingFirmwareUpdate)
1693            }
1694            "AllowReset" => Some(Self::AllowReset),
1695            "AllowSecurityProfileDowngrade" => Some(Self::AllowSecurityProfileDowngrade),
1696            "Angle" => Some(Self::Angle),
1697            "Attempts" => Some(Self::Attempts),
1698            "AuthorizeRemoteStart" => Some(Self::AuthorizeRemoteStart),
1699            "AvailabilityState" => Some(Self::AvailabilityState),
1700            "Available" => Some(Self::Available),
1701            "BasicAuthPassword" => Some(Self::BasicAuthPassword),
1702            "BytesPerMessage" => Some(Self::BytesPerMessage),
1703            "CentralContractValidationAllowed" => {
1704                Some(Self::CentralContractValidationAllowed)
1705            }
1706            "CertSigningRepeatTimes" => Some(Self::CertSigningRepeatTimes),
1707            "CertSigningWaitMinimum" => Some(Self::CertSigningWaitMinimum),
1708            "Certificate" => Some(Self::Certificate),
1709            "CertificateEntries" => Some(Self::CertificateEntries),
1710            "CertificateStatusSource" => Some(Self::CertificateStatusSource),
1711            "ChargeProtocol" => Some(Self::ChargeProtocol),
1712            "ChargingCompleteBulk" => Some(Self::ChargingCompleteBulk),
1713            "ChargingCompleteFull" => Some(Self::ChargingCompleteFull),
1714            "ChargingProfilePersistence" => Some(Self::ChargingProfilePersistence),
1715            "ChargingState" => Some(Self::ChargingState),
1716            "ChargingTime" => Some(Self::ChargingTime),
1717            "Color" => Some(Self::Color),
1718            "CommunicationParent" => Some(Self::CommunicationParent),
1719            "Complete" => Some(Self::Complete),
1720            "ConditionsSupported" => Some(Self::ConditionsSupported),
1721            "ConfigurationValueSize" => Some(Self::ConfigurationValueSize),
1722            "ConnectedTime" => Some(Self::ConnectedTime),
1723            "ConnectorType" => Some(Self::ConnectorType),
1724            "ContractCertificateInstallationEnabled" => {
1725                Some(Self::ContractCertificateInstallationEnabled)
1726            }
1727            "ContractValidationOffline" => Some(Self::ContractValidationOffline),
1728            "Count" => Some(Self::Count),
1729            "CountryName" => Some(Self::CountryName),
1730            "Currency" => Some(Self::Currency),
1731            "CurrentImbalance" => Some(Self::CurrentImbalance),
1732            "CustomImplementationEnabled" => Some(Self::CustomImplementationEnabled),
1733            "CustomTriggers" => Some(Self::CustomTriggers),
1734            "DCCurrent" => Some(Self::DCCurrent),
1735            "DCInputPhaseControl" => Some(Self::DCInputPhaseControl),
1736            "DCVoltage" => Some(Self::DCVoltage),
1737            "DataText" => Some(Self::DataText),
1738            "DateTime" => Some(Self::DateTime),
1739            "DepartureTime" => Some(Self::DepartureTime),
1740            "DisablePostAuthorize" => Some(Self::DisablePostAuthorize),
1741            "DisableRemoteAuthorization" => Some(Self::DisableRemoteAuthorization),
1742            "DisplayMessages" => Some(Self::DisplayMessages),
1743            "ECVariant" => Some(Self::ECVariant),
1744            "EVConnectionTimeOut" => Some(Self::EVConnectionTimeOut),
1745            "ElectricalParent" => Some(Self::ElectricalParent),
1746            "Enabled" => Some(Self::Enabled),
1747            "Energy" => Some(Self::Energy),
1748            "EnergyCapacity" => Some(Self::EnergyCapacity),
1749            "EnergyExport" => Some(Self::EnergyExport),
1750            "EnergyExportRegister" => Some(Self::EnergyExportRegister),
1751            "EnergyImport" => Some(Self::EnergyImport),
1752            "EnergyImportRegister" => Some(Self::EnergyImportRegister),
1753            "Entries" => Some(Self::Entries),
1754            "ExternalConfigChangeDate" => Some(Self::ExternalConfigChangeDate),
1755            "ExternalConstraintsProfileDisallowed" => {
1756                Some(Self::ExternalConstraintsProfileDisallowed)
1757            }
1758            "ExternalControlSignalsEnabled" => Some(Self::ExternalControlSignalsEnabled),
1759            "Fallback" => Some(Self::Fallback),
1760            "FanSpeed" => Some(Self::FanSpeed),
1761            "FieldLength" => Some(Self::FieldLength),
1762            "FileTransferProtocols" => Some(Self::FileTransferProtocols),
1763            "FirmwareVersion" => Some(Self::FirmwareVersion),
1764            "Force" => Some(Self::Force),
1765            "Formats" => Some(Self::Formats),
1766            "Frequency" => Some(Self::Frequency),
1767            "FrequencySchedule" => Some(Self::FrequencySchedule),
1768            "FuseRating" => Some(Self::FuseRating),
1769            "HeartbeatInterval" => Some(Self::HeartbeatInterval),
1770            "Height" => Some(Self::Height),
1771            "Humidity" => Some(Self::Humidity),
1772            "Hysteresis" => Some(Self::Hysteresis),
1773            "ICCID" => Some(Self::ICCID),
1774            "IMSI" => Some(Self::IMSI),
1775            "ISO15118EvseId" => Some(Self::ISO15118EvseId),
1776            "IdToken" => Some(Self::IdToken),
1777            "Identity" => Some(Self::Identity),
1778            "Impedance" => Some(Self::Impedance),
1779            "Interval" => Some(Self::Interval),
1780            "ItemsPerMessage" => Some(Self::ItemsPerMessage),
1781            "Label" => Some(Self::Label),
1782            "Language" => Some(Self::Language),
1783            "Length" => Some(Self::Length),
1784            "LifeTime" => Some(Self::LifeTime),
1785            "Light" => Some(Self::Light),
1786            "LimitChangeSignificance" => Some(Self::LimitChangeSignificance),
1787            "LocalAuthorizeOffline" => Some(Self::LocalAuthorizeOffline),
1788            "LocalLoadBalancing" => Some(Self::LocalLoadBalancing),
1789            "LocalPreAuthorize" => Some(Self::LocalPreAuthorize),
1790            "LogicalParent" => Some(Self::LogicalParent),
1791            "Manufacturer" => Some(Self::Manufacturer),
1792            "MasterPassGroupId" => Some(Self::MasterPassGroupId),
1793            "MaxCertificateChainSize" => Some(Self::MaxCertificateChainSize),
1794            "MaxEnergyOnInvalidId" => Some(Self::MaxEnergyOnInvalidId),
1795            "MaxExternalConstraintsId" => Some(Self::MaxExternalConstraintsId),
1796            "MaxPriceElements" => Some(Self::MaxPriceElements),
1797            "Measurands" => Some(Self::Measurands),
1798            "Message" => Some(Self::Message),
1799            "MessageAttemptInterval" => Some(Self::MessageAttemptInterval),
1800            "MessageAttempts" => Some(Self::MessageAttempts),
1801            "MessageTimeout" => Some(Self::MessageTimeout),
1802            "MinimumStatusDuration" => Some(Self::MinimumStatusDuration),
1803            "Mode" => Some(Self::Mode),
1804            "Model" => Some(Self::Model),
1805            "NetworkAddress" => Some(Self::NetworkAddress),
1806            "NetworkConfigurationPriority" => Some(Self::NetworkConfigurationPriority),
1807            "NetworkProfileConnectionAttempts" => {
1808                Some(Self::NetworkProfileConnectionAttempts)
1809            }
1810            "NextTimeOffsetTransitionDateTime" => {
1811                Some(Self::NextTimeOffsetTransitionDateTime)
1812            }
1813            "NonEvseSpecific" => Some(Self::NonEvseSpecific),
1814            "NotificationMaxDelay" => Some(Self::NotificationMaxDelay),
1815            "NotifyChargingLimitWithSchedules" => {
1816                Some(Self::NotifyChargingLimitWithSchedules)
1817            }
1818            "NtpServerUri" => Some(Self::NtpServerUri),
1819            "NtpSource" => Some(Self::NtpSource),
1820            "OfflineQueuingSeverity" => Some(Self::OfflineQueuingSeverity),
1821            "OfflineTariffFallbackMessage" => Some(Self::OfflineTariffFallbackMessage),
1822            "OfflineThreshold" => Some(Self::OfflineThreshold),
1823            "OfflineTxForUnknownIdEnabled" => Some(Self::OfflineTxForUnknownIdEnabled),
1824            "Operated" => Some(Self::Operated),
1825            "OperatingTimes" => Some(Self::OperatingTimes),
1826            "OrganizationName" => Some(Self::OrganizationName),
1827            "Overload" => Some(Self::Overload),
1828            "Percent" => Some(Self::Percent),
1829            "PeriodsPerSchedule" => Some(Self::PeriodsPerSchedule),
1830            "PhaseRotation" => Some(Self::PhaseRotation),
1831            "Phases3to1" => Some(Self::Phases3to1),
1832            "PhysicalParent" => Some(Self::PhysicalParent),
1833            "PnCEnabled" => Some(Self::PnCEnabled),
1834            "Policy" => Some(Self::Policy),
1835            "PostChargingTime" => Some(Self::PostChargingTime),
1836            "Power" => Some(Self::Power),
1837            "Present" => Some(Self::Present),
1838            "Problem" => Some(Self::Problem),
1839            "ProfileStackLevel" => Some(Self::ProfileStackLevel),
1840            "Protecting" => Some(Self::Protecting),
1841            "ProtocolAgreed" => Some(Self::ProtocolAgreed),
1842            "ProtocolSupported" => Some(Self::ProtocolSupported),
1843            "ProtocolSupportedByEV" => Some(Self::ProtocolSupportedByEV),
1844            "PublicKey" => Some(Self::PublicKey),
1845            "PublicKeyWithSignedMeterValue" => Some(Self::PublicKeyWithSignedMeterValue),
1846            "QueueAllMessages" => Some(Self::QueueAllMessages),
1847            "RateUnit" => Some(Self::RateUnit),
1848            "RegisterValuesWithoutPhases" => Some(Self::RegisterValuesWithoutPhases),
1849            "RemainingTimeBulk" => Some(Self::RemainingTimeBulk),
1850            "RemainingTimeFull" => Some(Self::RemainingTimeFull),
1851            "ReportingValueSize" => Some(Self::ReportingValueSize),
1852            "RequestMeteringReceipt" => Some(Self::RequestMeteringReceipt),
1853            "ResetRetries" => Some(Self::ResetRetries),
1854            "ResumptionTimeout" => Some(Self::ResumptionTimeout),
1855            "SampledMeasurands" => Some(Self::SampledMeasurands),
1856            "SamplingInterval" => Some(Self::SamplingInterval),
1857            "SeccId" => Some(Self::SeccId),
1858            "SecurityProfile" => Some(Self::SecurityProfile),
1859            "SendDuringIdle" => Some(Self::SendDuringIdle),
1860            "SerialNumber" => Some(Self::SerialNumber),
1861            "ServiceRenegotiationSupport" => Some(Self::ServiceRenegotiationSupport),
1862            "SignReadings" => Some(Self::SignReadings),
1863            "SignStartedReadings" => Some(Self::SignStartedReadings),
1864            "SignUpdatedReadings" => Some(Self::SignUpdatedReadings),
1865            "SignalStrength" => Some(Self::SignalStrength),
1866            "SlotStatus" => Some(Self::SlotStatus),
1867            "SoC" => Some(Self::SoC),
1868            "SoH" => Some(Self::SoH),
1869            "State" => Some(Self::State),
1870            "StateOfCharge" => Some(Self::StateOfCharge),
1871            "StateOfChargeBulk" => Some(Self::StateOfChargeBulk),
1872            "StopTxOnEVSideDisconnect" => Some(Self::StopTxOnEVSideDisconnect),
1873            "StopTxOnInvalidId" => Some(Self::StopTxOnInvalidId),
1874            "Storage" => Some(Self::Storage),
1875            "SupplyPhases" => Some(Self::SupplyPhases),
1876            "SupportsExpiryDateTime" => Some(Self::SupportsExpiryDateTime),
1877            "Suspending" => Some(Self::Suspending),
1878            "Suspension" => Some(Self::Suspension),
1879            "TariffFallbackMessage" => Some(Self::TariffFallbackMessage),
1880            "Temperature" => Some(Self::Temperature),
1881            "Time" => Some(Self::Time),
1882            "TimeAdjustmentReportingThreshold" => {
1883                Some(Self::TimeAdjustmentReportingThreshold)
1884            }
1885            "TimeOffset" => Some(Self::TimeOffset),
1886            "TimeSource" => Some(Self::TimeSource),
1887            "TimeZone" => Some(Self::TimeZone),
1888            "Timeout" => Some(Self::Timeout),
1889            "Token" => Some(Self::Token),
1890            "TokenType" => Some(Self::TokenType),
1891            "TotalCostFallbackMessage" => Some(Self::TotalCostFallbackMessage),
1892            "Tries" => Some(Self::Tries),
1893            "Tripped" => Some(Self::Tripped),
1894            "TxBeforeAcceptedEnabled" => Some(Self::TxBeforeAcceptedEnabled),
1895            "TxEndedInterval" => Some(Self::TxEndedInterval),
1896            "TxEndedMeasurands" => Some(Self::TxEndedMeasurands),
1897            "TxStartPoint" => Some(Self::TxStartPoint),
1898            "TxStartedMeasurands" => Some(Self::TxStartedMeasurands),
1899            "TxStopPoint" => Some(Self::TxStopPoint),
1900            "TxUpdatedInterval" => Some(Self::TxUpdatedInterval),
1901            "TxUpdatedMeasurands" => Some(Self::TxUpdatedMeasurands),
1902            "UnlockOnEVSideDisconnect" => Some(Self::UnlockOnEVSideDisconnect),
1903            "V2GCertificateInstallationEnabled" => {
1904                Some(Self::V2GCertificateInstallationEnabled)
1905            }
1906            "VehicleCertificate" => Some(Self::VehicleCertificate),
1907            "VehicleId" => Some(Self::VehicleId),
1908            "VersionDate" => Some(Self::VersionDate),
1909            "VersionNumber" => Some(Self::VersionNumber),
1910            "VoltageImbalance" => Some(Self::VoltageImbalance),
1911            "VendorName" => Some(Self::VendorName),
1912            "SupportedIdTokenType" => Some(Self::SupportedIdTokenType),
1913            "SelftestActive" => Some(Self::SelftestActive),
1914            "CHAdeMOProtocolNumber" => Some(Self::CHAdeMOProtocolNumber),
1915            "VehicleStatus" => Some(Self::VehicleStatus),
1916            "DynamicControl" => Some(Self::DynamicControl),
1917            "HighCurrentControl" => Some(Self::HighCurrentControl),
1918            "HighVoltageControl" => Some(Self::HighVoltageControl),
1919            "AutoManufacturerCode" => Some(Self::AutoManufacturerCode),
1920            "VehicleID" => Some(Self::VehicleID),
1921            "BatteryCapacity" => Some(Self::BatteryCapacity),
1922            "ValueSize" => Some(Self::ValueSize),
1923            "EvseId" => Some(Self::EvseId),
1924            "MaxScheduleEntries" => Some(Self::MaxScheduleEntries),
1925            "RequestedEnergyTransferMode" => Some(Self::RequestedEnergyTransferMode),
1926            "NotificationDelay" => Some(Self::NotificationDelay),
1927            "Capacity" => Some(Self::Capacity),
1928            "MonitoringBase" => Some(Self::MonitoringBase),
1929            "MonitoringLevel" => Some(Self::MonitoringLevel),
1930            "RetryBackOffRandomRange" => Some(Self::RetryBackOffRandomRange),
1931            "RetryBackOffRepeatTimes" => Some(Self::RetryBackOffRepeatTimes),
1932            "RetryBackOffWaitMinimum" => Some(Self::RetryBackOffWaitMinimum),
1933            "WebSocketPingInterval" => Some(Self::WebSocketPingInterval),
1934            "EnergyTransferResumptionRandomRange" => {
1935                Some(Self::EnergyTransferResumptionRandomRange)
1936            }
1937            "OcppCsmsUrl" => Some(Self::OcppCsmsUrl),
1938            "OcppInterface" => Some(Self::OcppInterface),
1939            "OcppTransport" => Some(Self::OcppTransport),
1940            "OcppVersion" => Some(Self::OcppVersion),
1941            "CsmsRootCertificateHashAlgorithm" => {
1942                Some(Self::CsmsRootCertificateHashAlgorithm)
1943            }
1944            "CsmsRootCertificateIssuerKeyHash" => {
1945                Some(Self::CsmsRootCertificateIssuerKeyHash)
1946            }
1947            "CsmsRootCertificateIssuerNameHash" => {
1948                Some(Self::CsmsRootCertificateIssuerNameHash)
1949            }
1950            "CsmsRootCertificateSerialNumber" => {
1951                Some(Self::CsmsRootCertificateSerialNumber)
1952            }
1953            "VpnEnabled" => Some(Self::VpnEnabled),
1954            "VpnType" => Some(Self::VpnType),
1955            "VpnServer" => Some(Self::VpnServer),
1956            "VpnUser" => Some(Self::VpnUser),
1957            "VpnGroup" => Some(Self::VpnGroup),
1958            "VpnPassword" => Some(Self::VpnPassword),
1959            "VpnKey" => Some(Self::VpnKey),
1960            "ApnEnabled" => Some(Self::ApnEnabled),
1961            "Apn" => Some(Self::Apn),
1962            "ApnUserName" => Some(Self::ApnUserName),
1963            "ApnPassword" => Some(Self::ApnPassword),
1964            "SimPin" => Some(Self::SimPin),
1965            "PreferredNetwork" => Some(Self::PreferredNetwork),
1966            "UseOnlyPreferredNetwork" => Some(Self::UseOnlyPreferredNetwork),
1967            "ApnAuthentication" => Some(Self::ApnAuthentication),
1968            _ => None,
1969        }
1970    }
1971    /// Parses any wire value, falling back to [`Self::Other`].
1972    ///
1973    /// Fails only if `value` is longer than the specification's
1974    /// `maxLength` for this field, in which case it isn't a value the
1975    /// field could have carried in the first place.
1976    pub fn from_wire_or_other(value: &str) -> Result<Self, ValueTooLong> {
1977        if let Some(standardized) = Self::from_wire(value) {
1978            return Ok(standardized);
1979        }
1980        heapless::String::try_from(value).map(Self::Other).map_err(|_| ValueTooLong)
1981    }
1982    /// Whether this is one of the values the specification defines,
1983    /// as opposed to a vendor's own.
1984    pub fn is_standardized(&self) -> bool {
1985        !matches!(self, Self::Other(_))
1986    }
1987    /// The spec's data type for this variable, as named in the device model tables (e.g. `decimal`, `OptionList`).
1988    pub fn data_type(&self) -> Option<&'static str> {
1989        match self {
1990            Self::ACCurrent => Some("decimal"),
1991            Self::ACPhaseSwitchingSupported => Some("boolean"),
1992            Self::ACVoltage => Some("decimal"),
1993            Self::Active => Some("boolean"),
1994            Self::ActiveMonitoringBase => Some("OptionList"),
1995            Self::ActiveMonitoringLevel => Some("integer"),
1996            Self::ActiveNetworkProfile => Some("boolean"),
1997            Self::ActiveTransactionId => Some("string"),
1998            Self::AdditionalInfoItemsPerMessage => Some("integer"),
1999            Self::AdditionalRootCertificateCheck => Some("boolean"),
2000            Self::AllowEnergyTransferResumption => Some("boolean"),
2001            Self::AllowNewSessionsPendingFirmwareUpdate => Some("boolean"),
2002            Self::AllowReset => Some("boolean"),
2003            Self::AllowSecurityProfileDowngrade => Some("boolean"),
2004            Self::Angle => Some("decimal"),
2005            Self::Attempts => Some("integer"),
2006            Self::AuthorizeRemoteStart => Some("boolean"),
2007            Self::AvailabilityState => Some("OptionList"),
2008            Self::Available => Some("boolean"),
2009            Self::BasicAuthPassword => Some("string"),
2010            Self::BytesPerMessage => Some("integer"),
2011            Self::CentralContractValidationAllowed => Some("boolean"),
2012            Self::CertSigningRepeatTimes => Some("integer"),
2013            Self::CertSigningWaitMinimum => Some("integer"),
2014            Self::Certificate => Some("string"),
2015            Self::CertificateEntries => Some("integer"),
2016            Self::CertificateStatusSource => Some("string"),
2017            Self::ChargeProtocol => Some("string"),
2018            Self::ChargingCompleteBulk => Some("boolean"),
2019            Self::ChargingCompleteFull => Some("boolean"),
2020            Self::ChargingProfilePersistence => Some("boolean"),
2021            Self::ChargingState => Some("OptionList"),
2022            Self::ChargingTime => Some("decimal"),
2023            Self::Color => Some("string"),
2024            Self::CommunicationParent => Some("string"),
2025            Self::Complete => Some("boolean"),
2026            Self::ConditionsSupported => Some("boolean"),
2027            Self::ConfigurationValueSize => Some("integer"),
2028            Self::ConnectedTime => Some("decimal"),
2029            Self::ConnectorType => Some("OptionList"),
2030            Self::ContractCertificateInstallationEnabled => Some("boolean"),
2031            Self::ContractValidationOffline => Some("boolean"),
2032            Self::Count => Some("integer"),
2033            Self::CountryName => Some("string"),
2034            Self::Currency => Some("string"),
2035            Self::CurrentImbalance => Some("decimal"),
2036            Self::CustomImplementationEnabled => Some("boolean"),
2037            Self::CustomTriggers => Some("MemberList"),
2038            Self::DCCurrent => Some("decimal"),
2039            Self::DCInputPhaseControl => Some("boolean"),
2040            Self::DCVoltage => Some("decimal"),
2041            Self::DataText => Some("string"),
2042            Self::DateTime => Some("dateTime"),
2043            Self::DepartureTime => Some("dateTime"),
2044            Self::DisablePostAuthorize => Some("boolean"),
2045            Self::DisableRemoteAuthorization => Some("boolean"),
2046            Self::DisplayMessages => Some("integer"),
2047            Self::ECVariant => Some("string"),
2048            Self::EVConnectionTimeOut => Some("integer"),
2049            Self::ElectricalParent => Some("string"),
2050            Self::Enabled => Some("boolean"),
2051            Self::Energy => Some("decimal"),
2052            Self::EnergyCapacity => Some("decimal"),
2053            Self::EnergyExport => Some("decimal"),
2054            Self::EnergyExportRegister => Some("decimal"),
2055            Self::EnergyImport => Some("decimal"),
2056            Self::EnergyImportRegister => Some("decimal"),
2057            Self::Entries => Some("integer"),
2058            Self::ExternalConfigChangeDate => Some("DateTime"),
2059            Self::ExternalConstraintsProfileDisallowed => Some("boolean"),
2060            Self::ExternalControlSignalsEnabled => Some("boolean"),
2061            Self::Fallback => Some("boolean"),
2062            Self::FanSpeed => Some("decimal"),
2063            Self::FieldLength => Some("integer"),
2064            Self::FileTransferProtocols => Some("MemberList"),
2065            Self::FirmwareVersion => Some("string"),
2066            Self::Force => Some("decimal"),
2067            Self::Formats => Some("MemberList"),
2068            Self::Frequency => Some("decimal"),
2069            Self::FrequencySchedule => Some("string"),
2070            Self::FuseRating => Some("decimal"),
2071            Self::HeartbeatInterval => Some("integer"),
2072            Self::Height => Some("decimal"),
2073            Self::Humidity => Some("decimal"),
2074            Self::Hysteresis => Some("decimal"),
2075            Self::ICCID => Some("string"),
2076            Self::IMSI => Some("string"),
2077            Self::ISO15118EvseId => Some("string"),
2078            Self::IdToken => Some("string"),
2079            Self::Identity => Some("string"),
2080            Self::Impedance => Some("decimal"),
2081            Self::Interval => Some("integer"),
2082            Self::ItemsPerMessage => Some("integer"),
2083            Self::Label => Some("string"),
2084            Self::Language => Some("OptionList"),
2085            Self::Length => Some("decimal"),
2086            Self::LifeTime => Some("integer"),
2087            Self::Light => Some("decimal"),
2088            Self::LimitChangeSignificance => Some("decimal"),
2089            Self::LocalAuthorizeOffline => Some("boolean"),
2090            Self::LocalLoadBalancing => Some("decimal"),
2091            Self::LocalPreAuthorize => Some("boolean"),
2092            Self::LogicalParent => Some("string"),
2093            Self::Manufacturer => Some("string"),
2094            Self::MasterPassGroupId => Some("string"),
2095            Self::MaxCertificateChainSize => Some("integer"),
2096            Self::MaxEnergyOnInvalidId => Some("integer"),
2097            Self::MaxExternalConstraintsId => Some("integer"),
2098            Self::MaxPriceElements => Some("integer"),
2099            Self::Measurands => Some("MemberList"),
2100            Self::Message => Some("string"),
2101            Self::MessageAttemptInterval => Some("integer"),
2102            Self::MessageAttempts => Some("integer"),
2103            Self::MessageTimeout => Some("integer"),
2104            Self::MinimumStatusDuration => Some("integer"),
2105            Self::Mode => Some("string"),
2106            Self::Model => Some("string"),
2107            Self::NetworkAddress => Some("string"),
2108            Self::NetworkConfigurationPriority => Some("SequenceList"),
2109            Self::NetworkProfileConnectionAttempts => Some("integer"),
2110            Self::NextTimeOffsetTransitionDateTime => Some("DateTime"),
2111            Self::NonEvseSpecific => Some("boolean"),
2112            Self::NotificationMaxDelay => Some("integer"),
2113            Self::NotifyChargingLimitWithSchedules => Some("boolean"),
2114            Self::NtpServerUri => Some("string"),
2115            Self::NtpSource => Some("OptionList"),
2116            Self::OfflineQueuingSeverity => Some("integer"),
2117            Self::OfflineTariffFallbackMessage => Some("string"),
2118            Self::OfflineThreshold => Some("integer"),
2119            Self::OfflineTxForUnknownIdEnabled => Some("boolean"),
2120            Self::Operated => Some("boolean"),
2121            Self::OperatingTimes => Some("string"),
2122            Self::OrganizationName => Some("string"),
2123            Self::Overload => Some("boolean"),
2124            Self::Percent => Some("decimal"),
2125            Self::PeriodsPerSchedule => Some("integer"),
2126            Self::PhaseRotation => Some("string"),
2127            Self::Phases3to1 => Some("boolean"),
2128            Self::PhysicalParent => Some("string"),
2129            Self::PnCEnabled => Some("boolean"),
2130            Self::Policy => Some("OptionList"),
2131            Self::PostChargingTime => Some("decimal"),
2132            Self::Power => Some("decimal"),
2133            Self::Present => Some("boolean"),
2134            Self::Problem => Some("boolean"),
2135            Self::ProfileStackLevel => Some("integer"),
2136            Self::Protecting => Some("boolean"),
2137            Self::ProtocolAgreed => Some("string"),
2138            Self::ProtocolSupported => Some("string"),
2139            Self::ProtocolSupportedByEV => Some("string"),
2140            Self::PublicKey => Some("string"),
2141            Self::PublicKeyWithSignedMeterValue => Some("boolean"),
2142            Self::QueueAllMessages => Some("boolean"),
2143            Self::RateUnit => Some("string"),
2144            Self::RegisterValuesWithoutPhases => Some("boolean"),
2145            Self::RemainingTimeBulk => Some("integer"),
2146            Self::RemainingTimeFull => Some("integer"),
2147            Self::ReportingValueSize => Some("integer"),
2148            Self::RequestMeteringReceipt => Some("boolean"),
2149            Self::ResetRetries => Some("integer"),
2150            Self::ResumptionTimeout => Some("integer"),
2151            Self::SampledMeasurands => Some("MemberList"),
2152            Self::SamplingInterval => Some("decimal"),
2153            Self::SeccId => Some("string"),
2154            Self::SecurityProfile => Some("integer"),
2155            Self::SendDuringIdle => Some("boolean"),
2156            Self::SerialNumber => Some("string"),
2157            Self::ServiceRenegotiationSupport => Some("boolean"),
2158            Self::SignReadings => Some("boolean"),
2159            Self::SignStartedReadings => Some("boolean"),
2160            Self::SignUpdatedReadings => Some("boolean"),
2161            Self::SignalStrength => Some("decimal"),
2162            Self::SlotStatus => Some("OptionList"),
2163            Self::SoC => Some("integer"),
2164            Self::SoH => Some("integer"),
2165            Self::State => Some("string"),
2166            Self::StateOfCharge => Some("decimal"),
2167            Self::StateOfChargeBulk => Some("decimal"),
2168            Self::StopTxOnEVSideDisconnect => Some("boolean"),
2169            Self::StopTxOnInvalidId => Some("boolean"),
2170            Self::Storage => Some("integer"),
2171            Self::SupplyPhases => Some("integer"),
2172            Self::SupportsExpiryDateTime => Some("boolean"),
2173            Self::Suspending => Some("boolean"),
2174            Self::Suspension => Some("boolean"),
2175            Self::TariffFallbackMessage => Some("string"),
2176            Self::Temperature => Some("decimal"),
2177            Self::Time => Some("dateTime"),
2178            Self::TimeAdjustmentReportingThreshold => Some("integer"),
2179            Self::TimeOffset => Some("string"),
2180            Self::TimeSource => Some("SequenceList"),
2181            Self::TimeZone => Some("string"),
2182            Self::Timeout => Some("decimal"),
2183            Self::Token => Some("string"),
2184            Self::TokenType => Some("OptionList"),
2185            Self::TotalCostFallbackMessage => Some("string"),
2186            Self::Tries => Some("integer"),
2187            Self::Tripped => Some("boolean"),
2188            Self::TxBeforeAcceptedEnabled => Some("boolean"),
2189            Self::TxEndedInterval => Some("integer"),
2190            Self::TxEndedMeasurands => Some("MemberList"),
2191            Self::TxStartPoint => Some("MemberList"),
2192            Self::TxStartedMeasurands => Some("MemberList"),
2193            Self::TxStopPoint => Some("MemberList"),
2194            Self::TxUpdatedInterval => Some("integer"),
2195            Self::TxUpdatedMeasurands => Some("MemberList"),
2196            Self::UnlockOnEVSideDisconnect => Some("boolean"),
2197            Self::V2GCertificateInstallationEnabled => Some("boolean"),
2198            Self::VehicleCertificate => Some("string"),
2199            Self::VehicleId => Some("string"),
2200            Self::VersionDate => Some("dateTime"),
2201            Self::VersionNumber => Some("string"),
2202            Self::VoltageImbalance => Some("decimal"),
2203            Self::VendorName => None,
2204            Self::SupportedIdTokenType => None,
2205            Self::SelftestActive => None,
2206            Self::CHAdeMOProtocolNumber => None,
2207            Self::VehicleStatus => None,
2208            Self::DynamicControl => None,
2209            Self::HighCurrentControl => None,
2210            Self::HighVoltageControl => None,
2211            Self::AutoManufacturerCode => None,
2212            Self::VehicleID => None,
2213            Self::BatteryCapacity => None,
2214            Self::ValueSize => None,
2215            Self::EvseId => None,
2216            Self::MaxScheduleEntries => None,
2217            Self::RequestedEnergyTransferMode => None,
2218            Self::NotificationDelay => None,
2219            Self::Capacity => None,
2220            Self::MonitoringBase => None,
2221            Self::MonitoringLevel => None,
2222            Self::RetryBackOffRandomRange => None,
2223            Self::RetryBackOffRepeatTimes => None,
2224            Self::RetryBackOffWaitMinimum => None,
2225            Self::WebSocketPingInterval => None,
2226            Self::EnergyTransferResumptionRandomRange => None,
2227            Self::OcppCsmsUrl => None,
2228            Self::OcppInterface => None,
2229            Self::OcppTransport => None,
2230            Self::OcppVersion => None,
2231            Self::CsmsRootCertificateHashAlgorithm => None,
2232            Self::CsmsRootCertificateIssuerKeyHash => None,
2233            Self::CsmsRootCertificateIssuerNameHash => None,
2234            Self::CsmsRootCertificateSerialNumber => None,
2235            Self::VpnEnabled => None,
2236            Self::VpnType => None,
2237            Self::VpnServer => None,
2238            Self::VpnUser => None,
2239            Self::VpnGroup => None,
2240            Self::VpnPassword => None,
2241            Self::VpnKey => None,
2242            Self::ApnEnabled => None,
2243            Self::Apn => None,
2244            Self::ApnUserName => None,
2245            Self::ApnPassword => None,
2246            Self::SimPin => None,
2247            Self::PreferredNetwork => None,
2248            Self::UseOnlyPreferredNetwork => None,
2249            Self::ApnAuthentication => None,
2250            Self::Other(_) => None,
2251        }
2252    }
2253    /// The variable's unit, where the spec states one.
2254    pub fn unit(&self) -> Option<&'static str> {
2255        match self {
2256            Self::ACCurrent => Some("A"),
2257            Self::ACPhaseSwitchingSupported => None,
2258            Self::ACVoltage => Some("V"),
2259            Self::Active => None,
2260            Self::ActiveMonitoringBase => None,
2261            Self::ActiveMonitoringLevel => None,
2262            Self::ActiveNetworkProfile => None,
2263            Self::ActiveTransactionId => None,
2264            Self::AdditionalInfoItemsPerMessage => None,
2265            Self::AdditionalRootCertificateCheck => None,
2266            Self::AllowEnergyTransferResumption => None,
2267            Self::AllowNewSessionsPendingFirmwareUpdate => None,
2268            Self::AllowReset => None,
2269            Self::AllowSecurityProfileDowngrade => None,
2270            Self::Angle => Some("Deg"),
2271            Self::Attempts => None,
2272            Self::AuthorizeRemoteStart => None,
2273            Self::AvailabilityState => None,
2274            Self::Available => None,
2275            Self::BasicAuthPassword => None,
2276            Self::BytesPerMessage => None,
2277            Self::CentralContractValidationAllowed => None,
2278            Self::CertSigningRepeatTimes => None,
2279            Self::CertSigningWaitMinimum => None,
2280            Self::Certificate => None,
2281            Self::CertificateEntries => None,
2282            Self::CertificateStatusSource => None,
2283            Self::ChargeProtocol => None,
2284            Self::ChargingCompleteBulk => None,
2285            Self::ChargingCompleteFull => None,
2286            Self::ChargingProfilePersistence => None,
2287            Self::ChargingState => None,
2288            Self::ChargingTime => Some("s"),
2289            Self::Color => None,
2290            Self::CommunicationParent => None,
2291            Self::Complete => None,
2292            Self::ConditionsSupported => None,
2293            Self::ConfigurationValueSize => None,
2294            Self::ConnectedTime => Some("s"),
2295            Self::ConnectorType => None,
2296            Self::ContractCertificateInstallationEnabled => None,
2297            Self::ContractValidationOffline => None,
2298            Self::Count => None,
2299            Self::CountryName => None,
2300            Self::Currency => None,
2301            Self::CurrentImbalance => Some("Percent"),
2302            Self::CustomImplementationEnabled => None,
2303            Self::CustomTriggers => None,
2304            Self::DCCurrent => Some("A"),
2305            Self::DCInputPhaseControl => None,
2306            Self::DCVoltage => Some("V"),
2307            Self::DataText => None,
2308            Self::DateTime => None,
2309            Self::DepartureTime => None,
2310            Self::DisablePostAuthorize => None,
2311            Self::DisableRemoteAuthorization => None,
2312            Self::DisplayMessages => None,
2313            Self::ECVariant => None,
2314            Self::EVConnectionTimeOut => Some("s"),
2315            Self::ElectricalParent => None,
2316            Self::Enabled => None,
2317            Self::Energy => Some("Wh"),
2318            Self::EnergyCapacity => Some("Wh"),
2319            Self::EnergyExport => Some("Wh"),
2320            Self::EnergyExportRegister => Some("Wh"),
2321            Self::EnergyImport => Some("Wh"),
2322            Self::EnergyImportRegister => Some("Wh"),
2323            Self::Entries => None,
2324            Self::ExternalConfigChangeDate => None,
2325            Self::ExternalConstraintsProfileDisallowed => None,
2326            Self::ExternalControlSignalsEnabled => None,
2327            Self::Fallback => None,
2328            Self::FanSpeed => Some("RPM"),
2329            Self::FieldLength => None,
2330            Self::FileTransferProtocols => None,
2331            Self::FirmwareVersion => None,
2332            Self::Force => Some("N"),
2333            Self::Formats => None,
2334            Self::Frequency => Some("Hz"),
2335            Self::FrequencySchedule => None,
2336            Self::FuseRating => Some("A"),
2337            Self::HeartbeatInterval => Some("s"),
2338            Self::Height => Some("m"),
2339            Self::Humidity => Some("RH"),
2340            Self::Hysteresis => Some("Percent"),
2341            Self::ICCID => None,
2342            Self::IMSI => None,
2343            Self::ISO15118EvseId => None,
2344            Self::IdToken => None,
2345            Self::Identity => None,
2346            Self::Impedance => Some("Ohm"),
2347            Self::Interval => Some("s"),
2348            Self::ItemsPerMessage => None,
2349            Self::Label => None,
2350            Self::Language => None,
2351            Self::Length => Some("m"),
2352            Self::LifeTime => Some("s"),
2353            Self::Light => Some("lx"),
2354            Self::LimitChangeSignificance => None,
2355            Self::LocalAuthorizeOffline => None,
2356            Self::LocalLoadBalancing => None,
2357            Self::LocalPreAuthorize => None,
2358            Self::LogicalParent => None,
2359            Self::Manufacturer => None,
2360            Self::MasterPassGroupId => None,
2361            Self::MaxCertificateChainSize => None,
2362            Self::MaxEnergyOnInvalidId => Some("Wh"),
2363            Self::MaxExternalConstraintsId => None,
2364            Self::MaxPriceElements => None,
2365            Self::Measurands => None,
2366            Self::Message => None,
2367            Self::MessageAttemptInterval => Some("s"),
2368            Self::MessageAttempts => None,
2369            Self::MessageTimeout => Some("s"),
2370            Self::MinimumStatusDuration => Some("s"),
2371            Self::Mode => None,
2372            Self::Model => None,
2373            Self::NetworkAddress => None,
2374            Self::NetworkConfigurationPriority => None,
2375            Self::NetworkProfileConnectionAttempts => None,
2376            Self::NextTimeOffsetTransitionDateTime => None,
2377            Self::NonEvseSpecific => None,
2378            Self::NotificationMaxDelay => Some("s"),
2379            Self::NotifyChargingLimitWithSchedules => None,
2380            Self::NtpServerUri => None,
2381            Self::NtpSource => None,
2382            Self::OfflineQueuingSeverity => None,
2383            Self::OfflineTariffFallbackMessage => None,
2384            Self::OfflineThreshold => Some("s"),
2385            Self::OfflineTxForUnknownIdEnabled => None,
2386            Self::Operated => None,
2387            Self::OperatingTimes => None,
2388            Self::OrganizationName => None,
2389            Self::Overload => None,
2390            Self::Percent => Some("Percent"),
2391            Self::PeriodsPerSchedule => None,
2392            Self::PhaseRotation => None,
2393            Self::Phases3to1 => None,
2394            Self::PhysicalParent => None,
2395            Self::PnCEnabled => None,
2396            Self::Policy => None,
2397            Self::PostChargingTime => Some("s"),
2398            Self::Power => Some("W,kW"),
2399            Self::Present => None,
2400            Self::Problem => None,
2401            Self::ProfileStackLevel => None,
2402            Self::Protecting => None,
2403            Self::ProtocolAgreed => None,
2404            Self::ProtocolSupported => None,
2405            Self::ProtocolSupportedByEV => None,
2406            Self::PublicKey => None,
2407            Self::PublicKeyWithSignedMeterValue => None,
2408            Self::QueueAllMessages => None,
2409            Self::RateUnit => None,
2410            Self::RegisterValuesWithoutPhases => None,
2411            Self::RemainingTimeBulk => Some("s"),
2412            Self::RemainingTimeFull => Some("s"),
2413            Self::ReportingValueSize => None,
2414            Self::RequestMeteringReceipt => None,
2415            Self::ResetRetries => None,
2416            Self::ResumptionTimeout => Some("s"),
2417            Self::SampledMeasurands => None,
2418            Self::SamplingInterval => Some("s"),
2419            Self::SeccId => None,
2420            Self::SecurityProfile => None,
2421            Self::SendDuringIdle => None,
2422            Self::SerialNumber => None,
2423            Self::ServiceRenegotiationSupport => None,
2424            Self::SignReadings => None,
2425            Self::SignStartedReadings => None,
2426            Self::SignUpdatedReadings => None,
2427            Self::SignalStrength => Some("dBm"),
2428            Self::SlotStatus => None,
2429            Self::SoC => Some("Percent"),
2430            Self::SoH => Some("Percent"),
2431            Self::State => None,
2432            Self::StateOfCharge => Some("Percent"),
2433            Self::StateOfChargeBulk => Some("Percent"),
2434            Self::StopTxOnEVSideDisconnect => None,
2435            Self::StopTxOnInvalidId => None,
2436            Self::Storage => Some("B"),
2437            Self::SupplyPhases => None,
2438            Self::SupportsExpiryDateTime => None,
2439            Self::Suspending => None,
2440            Self::Suspension => None,
2441            Self::TariffFallbackMessage => None,
2442            Self::Temperature => Some("Celsius, Fahrenheit"),
2443            Self::Time => None,
2444            Self::TimeAdjustmentReportingThreshold => Some("s"),
2445            Self::TimeOffset => None,
2446            Self::TimeSource => None,
2447            Self::TimeZone => None,
2448            Self::Timeout => Some("s"),
2449            Self::Token => None,
2450            Self::TokenType => None,
2451            Self::TotalCostFallbackMessage => None,
2452            Self::Tries => None,
2453            Self::Tripped => None,
2454            Self::TxBeforeAcceptedEnabled => None,
2455            Self::TxEndedInterval => Some("s"),
2456            Self::TxEndedMeasurands => None,
2457            Self::TxStartPoint => None,
2458            Self::TxStartedMeasurands => None,
2459            Self::TxStopPoint => None,
2460            Self::TxUpdatedInterval => Some("s"),
2461            Self::TxUpdatedMeasurands => None,
2462            Self::UnlockOnEVSideDisconnect => None,
2463            Self::V2GCertificateInstallationEnabled => None,
2464            Self::VehicleCertificate => None,
2465            Self::VehicleId => None,
2466            Self::VersionDate => None,
2467            Self::VersionNumber => None,
2468            Self::VoltageImbalance => Some("Percent"),
2469            Self::VendorName => None,
2470            Self::SupportedIdTokenType => None,
2471            Self::SelftestActive => None,
2472            Self::CHAdeMOProtocolNumber => None,
2473            Self::VehicleStatus => None,
2474            Self::DynamicControl => None,
2475            Self::HighCurrentControl => None,
2476            Self::HighVoltageControl => None,
2477            Self::AutoManufacturerCode => None,
2478            Self::VehicleID => None,
2479            Self::BatteryCapacity => None,
2480            Self::ValueSize => None,
2481            Self::EvseId => None,
2482            Self::MaxScheduleEntries => None,
2483            Self::RequestedEnergyTransferMode => None,
2484            Self::NotificationDelay => None,
2485            Self::Capacity => None,
2486            Self::MonitoringBase => None,
2487            Self::MonitoringLevel => None,
2488            Self::RetryBackOffRandomRange => None,
2489            Self::RetryBackOffRepeatTimes => None,
2490            Self::RetryBackOffWaitMinimum => None,
2491            Self::WebSocketPingInterval => None,
2492            Self::EnergyTransferResumptionRandomRange => None,
2493            Self::OcppCsmsUrl => None,
2494            Self::OcppInterface => None,
2495            Self::OcppTransport => None,
2496            Self::OcppVersion => None,
2497            Self::CsmsRootCertificateHashAlgorithm => None,
2498            Self::CsmsRootCertificateIssuerKeyHash => None,
2499            Self::CsmsRootCertificateIssuerNameHash => None,
2500            Self::CsmsRootCertificateSerialNumber => None,
2501            Self::VpnEnabled => None,
2502            Self::VpnType => None,
2503            Self::VpnServer => None,
2504            Self::VpnUser => None,
2505            Self::VpnGroup => None,
2506            Self::VpnPassword => None,
2507            Self::VpnKey => None,
2508            Self::ApnEnabled => None,
2509            Self::Apn => None,
2510            Self::ApnUserName => None,
2511            Self::ApnPassword => None,
2512            Self::SimPin => None,
2513            Self::PreferredNetwork => None,
2514            Self::UseOnlyPreferredNetwork => None,
2515            Self::ApnAuthentication => None,
2516            Self::Other(_) => None,
2517        }
2518    }
2519}
2520impl core::fmt::Display for VariableName {
2521    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2522        f.write_str(self.as_str())
2523    }
2524}
2525impl core::str::FromStr for VariableName {
2526    type Err = ValueTooLong;
2527    fn from_str(value: &str) -> Result<Self, Self::Err> {
2528        Self::from_wire_or_other(value)
2529    }
2530}
2531impl PartialEq for VariableName {
2532    fn eq(&self, other: &Self) -> bool {
2533        self.as_str() == other.as_str()
2534    }
2535}
2536impl Eq for VariableName {}
2537impl core::hash::Hash for VariableName {
2538    fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
2539        self.as_str().hash(state);
2540    }
2541}
2542impl PartialOrd for VariableName {
2543    fn partial_cmp(&self, other: &Self) -> Option<core::cmp::Ordering> {
2544        Some(self.cmp(other))
2545    }
2546}
2547impl Ord for VariableName {
2548    fn cmp(&self, other: &Self) -> core::cmp::Ordering {
2549        self.as_str().cmp(other.as_str())
2550    }
2551}
2552#[cfg(feature = "serde")]
2553impl serde::Serialize for VariableName {
2554    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
2555        serializer.serialize_str(self.as_str())
2556    }
2557}
2558#[cfg(feature = "serde")]
2559impl<'de> serde::Deserialize<'de> for VariableName {
2560    fn deserialize<D: serde::Deserializer<'de>>(
2561        deserializer: D,
2562    ) -> Result<Self, D::Error> {
2563        struct Visitor;
2564        impl<'v> serde::de::Visitor<'v> for Visitor {
2565            type Value = VariableName;
2566            fn expecting(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2567                f.write_str("a VariableName string")
2568            }
2569            fn visit_str<E: serde::de::Error>(
2570                self,
2571                value: &str,
2572            ) -> Result<Self::Value, E> {
2573                VariableName::from_wire_or_other(value).map_err(serde::de::Error::custom)
2574            }
2575        }
2576        deserializer.deserialize_str(Visitor)
2577    }
2578}
2579/// Standardized `SecurityEventNotificationRequest.type` values.
2580///
2581/// A *closed* set: it holds only the values the specification
2582/// defines. The wire field is a string, so a deployment can still
2583/// send something else -- `from_wire` returns `None` for that,
2584/// which is not by itself a protocol error.
2585#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
2586#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2587pub enum SecurityEvent {
2588    /// The Charging Station firmware is updated
2589    FirmwareUpdated,
2590    /// The authentication credentials provided by the Charging Station were rejected by the CSMS
2591    FailedToAuthenticateAtCsms,
2592    /// The authentication credentials provided by the CSMS were rejected by the Charging Station
2593    CsmsFailedToAuthenticate,
2594    /// The system time on the Charging Station was changed more than `ClockCtrlr.TimeAdjustmentReportingThreshold` seconds
2595    SettingSystemTime,
2596    /// The Charging Station has booted
2597    StartupOfTheDevice,
2598    /// The Charging Station was rebooted or reset
2599    ResetOrReboot,
2600    /// The security log was cleared
2601    SecurityLogWasCleared,
2602    /// Security parameters, such as keys or the security profile used, were changed
2603    ReconfigurationOfSecurityParameters,
2604    /// The Flash or RAM memory of the Charging Station is getting full
2605    MemoryExhaustion,
2606    /// The Charging Station has received messages that are not valid OCPP messages, if signed messages, signage invalid/incorrect
2607    InvalidMessages,
2608    /// 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)
2609    AttemptedReplayAttacks,
2610    /// The physical tamper detection sensor was triggered
2611    TamperDetectionActivated,
2612    /// The firmware signature is not valid
2613    InvalidFirmwareSignature,
2614    /// The certificate used to verify the firmware signature is not valid
2615    InvalidFirmwareSigningCertificate,
2616    /// The certificate that the CSMS uses was not valid or could not be verified
2617    InvalidCsmsCertificate,
2618    /// The certificate sent to the Charging Station using the CertificateSignedRequest message is not a valid certificate
2619    InvalidChargingStationCertificate,
2620    /// The Charging Station discarded the renewed client certificate, because it was unable to successfully establish a connection using it.
2621    DiscardedRenewedClientCertificate,
2622    /// The TLS version used by the CSMS is lower than 1.2 and is not allowed by the security specification
2623    InvalidTLSVersion,
2624    /// The CSMS did only allow connections using TLS cipher suites that are not allowed by the security specification
2625    InvalidTLSCipherSuite,
2626    /// 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\': \'...\'}'
2627    MaintenanceLoginAccepted,
2628    /// 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\': \'...\'}'
2629    MaintenanceLoginFailed,
2630}
2631impl SecurityEvent {
2632    /// Every value this version's specification defines (21), in spec order.
2633    pub const ALL: &'static [Self] = &[
2634        Self::FirmwareUpdated,
2635        Self::FailedToAuthenticateAtCsms,
2636        Self::CsmsFailedToAuthenticate,
2637        Self::SettingSystemTime,
2638        Self::StartupOfTheDevice,
2639        Self::ResetOrReboot,
2640        Self::SecurityLogWasCleared,
2641        Self::ReconfigurationOfSecurityParameters,
2642        Self::MemoryExhaustion,
2643        Self::InvalidMessages,
2644        Self::AttemptedReplayAttacks,
2645        Self::TamperDetectionActivated,
2646        Self::InvalidFirmwareSignature,
2647        Self::InvalidFirmwareSigningCertificate,
2648        Self::InvalidCsmsCertificate,
2649        Self::InvalidChargingStationCertificate,
2650        Self::DiscardedRenewedClientCertificate,
2651        Self::InvalidTLSVersion,
2652        Self::InvalidTLSCipherSuite,
2653        Self::MaintenanceLoginAccepted,
2654        Self::MaintenanceLoginFailed,
2655    ];
2656    /// This value as it appears on the wire.
2657    pub const fn as_str(&self) -> &'static str {
2658        match self {
2659            Self::FirmwareUpdated => "FirmwareUpdated",
2660            Self::FailedToAuthenticateAtCsms => "FailedToAuthenticateAtCsms",
2661            Self::CsmsFailedToAuthenticate => "CsmsFailedToAuthenticate",
2662            Self::SettingSystemTime => "SettingSystemTime",
2663            Self::StartupOfTheDevice => "StartupOfTheDevice",
2664            Self::ResetOrReboot => "ResetOrReboot",
2665            Self::SecurityLogWasCleared => "SecurityLogWasCleared",
2666            Self::ReconfigurationOfSecurityParameters => {
2667                "ReconfigurationOfSecurityParameters"
2668            }
2669            Self::MemoryExhaustion => "MemoryExhaustion",
2670            Self::InvalidMessages => "InvalidMessages",
2671            Self::AttemptedReplayAttacks => "AttemptedReplayAttacks",
2672            Self::TamperDetectionActivated => "TamperDetectionActivated",
2673            Self::InvalidFirmwareSignature => "InvalidFirmwareSignature",
2674            Self::InvalidFirmwareSigningCertificate => {
2675                "InvalidFirmwareSigningCertificate"
2676            }
2677            Self::InvalidCsmsCertificate => "InvalidCsmsCertificate",
2678            Self::InvalidChargingStationCertificate => {
2679                "InvalidChargingStationCertificate"
2680            }
2681            Self::DiscardedRenewedClientCertificate => {
2682                "DiscardedRenewedClientCertificate"
2683            }
2684            Self::InvalidTLSVersion => "InvalidTLSVersion",
2685            Self::InvalidTLSCipherSuite => "InvalidTLSCipherSuite",
2686            Self::MaintenanceLoginAccepted => "MaintenanceLoginAccepted",
2687            Self::MaintenanceLoginFailed => "MaintenanceLoginFailed",
2688        }
2689    }
2690    /// Parses a wire value, returning `None` for values the
2691    /// specification doesn't define (e.g. a vendor's own).
2692    pub fn from_wire(value: &str) -> Option<Self> {
2693        match value {
2694            "FirmwareUpdated" => Some(Self::FirmwareUpdated),
2695            "FailedToAuthenticateAtCsms" => Some(Self::FailedToAuthenticateAtCsms),
2696            "CsmsFailedToAuthenticate" => Some(Self::CsmsFailedToAuthenticate),
2697            "SettingSystemTime" => Some(Self::SettingSystemTime),
2698            "StartupOfTheDevice" => Some(Self::StartupOfTheDevice),
2699            "ResetOrReboot" => Some(Self::ResetOrReboot),
2700            "SecurityLogWasCleared" => Some(Self::SecurityLogWasCleared),
2701            "ReconfigurationOfSecurityParameters" => {
2702                Some(Self::ReconfigurationOfSecurityParameters)
2703            }
2704            "MemoryExhaustion" => Some(Self::MemoryExhaustion),
2705            "InvalidMessages" => Some(Self::InvalidMessages),
2706            "AttemptedReplayAttacks" => Some(Self::AttemptedReplayAttacks),
2707            "TamperDetectionActivated" => Some(Self::TamperDetectionActivated),
2708            "InvalidFirmwareSignature" => Some(Self::InvalidFirmwareSignature),
2709            "InvalidFirmwareSigningCertificate" => {
2710                Some(Self::InvalidFirmwareSigningCertificate)
2711            }
2712            "InvalidCsmsCertificate" => Some(Self::InvalidCsmsCertificate),
2713            "InvalidChargingStationCertificate" => {
2714                Some(Self::InvalidChargingStationCertificate)
2715            }
2716            "DiscardedRenewedClientCertificate" => {
2717                Some(Self::DiscardedRenewedClientCertificate)
2718            }
2719            "InvalidTLSVersion" => Some(Self::InvalidTLSVersion),
2720            "InvalidTLSCipherSuite" => Some(Self::InvalidTLSCipherSuite),
2721            "MaintenanceLoginAccepted" => Some(Self::MaintenanceLoginAccepted),
2722            "MaintenanceLoginFailed" => Some(Self::MaintenanceLoginFailed),
2723            _ => None,
2724        }
2725    }
2726    /// Whether the spec marks this event critical, meaning it must be reported to the CSMS even when not explicitly monitored.
2727    pub const fn is_critical(&self) -> bool {
2728        match self {
2729            Self::FirmwareUpdated => true,
2730            Self::FailedToAuthenticateAtCsms => false,
2731            Self::CsmsFailedToAuthenticate => false,
2732            Self::SettingSystemTime => true,
2733            Self::StartupOfTheDevice => true,
2734            Self::ResetOrReboot => true,
2735            Self::SecurityLogWasCleared => true,
2736            Self::ReconfigurationOfSecurityParameters => false,
2737            Self::MemoryExhaustion => true,
2738            Self::InvalidMessages => false,
2739            Self::AttemptedReplayAttacks => false,
2740            Self::TamperDetectionActivated => true,
2741            Self::InvalidFirmwareSignature => true,
2742            Self::InvalidFirmwareSigningCertificate => true,
2743            Self::InvalidCsmsCertificate => true,
2744            Self::InvalidChargingStationCertificate => true,
2745            Self::DiscardedRenewedClientCertificate => true,
2746            Self::InvalidTLSVersion => true,
2747            Self::InvalidTLSCipherSuite => true,
2748            Self::MaintenanceLoginAccepted => true,
2749            Self::MaintenanceLoginFailed => true,
2750        }
2751    }
2752}
2753impl core::fmt::Display for SecurityEvent {
2754    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
2755        f.write_str(self.as_str())
2756    }
2757}
2758impl core::str::FromStr for SecurityEvent {
2759    type Err = UnknownValue;
2760    fn from_str(value: &str) -> Result<Self, Self::Err> {
2761        Self::from_wire(value).ok_or(UnknownValue)
2762    }
2763}
2764/// Standardized `StatusInfo.reasonCode` values.
2765///
2766/// A *closed* set: it holds only the values the specification
2767/// defines. The wire field is a string, so a deployment can still
2768/// send something else -- `from_wire` returns `None` for that,
2769/// which is not by itself a protocol error.
2770#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
2771#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
2772pub enum ReasonCode {
2773    /// A charging profile with same _stackLevel - chargingProfilePurpose_ combination already exists on the Charging Station and has an overlapping validity period.
2774    ///
2775    /// Spec group: Charging Profiles.
2776    DuplicateProfile,
2777    /// Provided _chargingProfile_ contains invalid elements.
2778    ///
2779    /// Spec group: Charging Profiles.
2780    InvalidProfile,
2781    /// Provided _chargingProfile_ has an id that is within an invalid range.
2782    ///
2783    /// Spec group: Charging Profiles.
2784    InvalidProfileId,
2785    /// Provided _chargingSchedule_ contains invalid elements.
2786    ///
2787    /// Spec group: Charging Profiles.
2788    InvalidSchedule,
2789    /// Provided value for _stackLevel_ is invalid.
2790    ///
2791    /// Spec group: Charging Profiles.
2792    InvalidStackLevel,
2793    /// Phase selection for a DC EVSE is not supported
2794    ///
2795    /// Spec group: Charging Profiles.
2796    NoPhaseForDC,
2797    /// Phase conflict between applicable charging profiles
2798    ///
2799    /// Spec group: Charging Profiles.
2800    PhaseConflict,
2801    /// A charging profile of the same purpose is submitted too frequently
2802    ///
2803    /// Spec group: Charging Profiles.
2804    RateLimitExceeded,
2805    /// The requested charging profile kind is not supported
2806    ///
2807    /// Spec group: Charging Profiles.
2808    UnsupportedKind,
2809    /// The requested charging profile purpose is not supported
2810    ///
2811    /// Spec group: Charging Profiles.
2812    UnsupportedPurpose,
2813    /// A _chargingRateUnit_ is provided that is not supported.
2814    ///
2815    /// Spec group: Charging Profiles.
2816    UnsupportedRateUnit,
2817    /// BootNotification of Charging Station has not (yet) been accepted by CSMS.
2818    ///
2819    /// Spec group: Charging Station.
2820    CSNotAccepted,
2821    /// The connector has its own fixed cable that cannot be unlocked.
2822    ///
2823    /// Spec group: Charging Station.
2824    FixedCable,
2825    /// No cable is connected at this time.
2826    ///
2827    /// Spec group: Charging Station.
2828    NoCable,
2829    /// Connector Id is not known on EVSE
2830    ///
2831    /// Spec group: Charging Station.
2832    UnknownConnectorId,
2833    /// Connector type is not known on EVSE
2834    ///
2835    /// Spec group: Charging Station.
2836    UnknownConnectorType,
2837    /// EVSE is not known on Charging Stations
2838    ///
2839    /// Spec group: Charging Station.
2840    UnknownEvse,
2841    /// Some values in NetworkConfiguration instance are invalid
2842    ///
2843    /// Spec group: Network Configuration.
2844    InvalidNetworkConf,
2845    /// Security profile downgrade is not allowed
2846    ///
2847    /// Spec group: Network Configuration.
2848    NoSecurityDowngrade,
2849    /// A _requestId_ is provided, that has already been used for this type of request.
2850    ///
2851    /// Spec group: Miscellaneous.
2852    DuplicateRequestId,
2853    /// Message should not be sent at this moment in current scenario.
2854    ///
2855    /// Spec group: Miscellaneous.
2856    InvalidMessageSeq,
2857    /// Information needed for operation is missing from Device Model
2858    ///
2859    /// Spec group: Miscellaneous.
2860    MissingDevModelInfo,
2861    /// No error has occurred, but some extra information is in _additionalInfo_ .
2862    ///
2863    /// Spec group: Miscellaneous.
2864    NoError,
2865    /// No object(s) found that match a provided ID or criteria.
2866    ///
2867    /// Spec group: Miscellaneous.
2868    NotFound,
2869    /// No reason is specified, but some extra information is in _additionalInfo_
2870    ///
2871    /// Spec group: Miscellaneous.
2872    Unspecified,
2873    /// This request is not supported.
2874    ///
2875    /// Spec group: Miscellaneous.
2876    UnsupportedRequest,
2877    /// Operation is not possible, because a firmware update is in progress.
2878    ///
2879    /// Spec group: Operations and Permissions.
2880    FwUpdateInProgress,
2881    /// Feature is not enabled.
2882    ///
2883    /// Spec group: Operations and Permissions.
2884    NotEnabled,
2885    /// Targeted variable is read-only and cannot be set.
2886    ///
2887    /// Spec group: Operations and Permissions.
2888    ReadOnly,
2889    /// Targeted variable is write-only and cannot be read.
2890    ///
2891    /// Spec group: Operations and Permissions.
2892    WriteOnly,
2893    /// Provided CSR is invalid
2894    ///
2895    /// Spec group: Security.
2896    InvalidCSR,
2897    /// Provided certificate is invalid.
2898    ///
2899    /// Spec group: Security.
2900    InvalidCertificate,
2901    /// Provided URL is invalid.
2902    ///
2903    /// Spec group: Security.
2904    InvalidURL,
2905    /// HTTP Redirection is not allowed
2906    ///
2907    /// Spec group: Security.
2908    RedirectNotAllowed,
2909    /// Operation cannot be completed due to an internal error.
2910    ///
2911    /// Spec group: System Errors.
2912    InternalError,
2913    /// Operation not possible, because system does not have enough memory.
2914    ///
2915    /// Spec group: System Errors.
2916    OutOfMemory,
2917    /// Operation not possible, because system does not have enough storage.
2918    ///
2919    /// Spec group: System Errors.
2920    OutOfStorage,
2921    /// Provided _idToken_ is not valid.
2922    ///
2923    /// Spec group: Transactions.
2924    InvalidIdToken,
2925    /// A transaction is in progress.
2926    ///
2927    /// Spec group: Transactions.
2928    TxInProgress,
2929    /// There is no such transaction.
2930    ///
2931    /// Spec group: Transactions.
2932    TxNotFound,
2933    /// A transaction had already started (e.g. due to cable being plugged in).
2934    ///
2935    /// Spec group: Transactions.
2936    TxStarted,
2937    /// An invalid value has been provided.
2938    ///
2939    /// Spec group: Values and Ranges.
2940    InvalidValue,
2941    /// A parameter that is required for the request is missing.
2942    ///
2943    /// Spec group: Values and Ranges.
2944    MissingParam,
2945    /// Provided element is too large to handle.
2946    ///
2947    /// Spec group: Values and Ranges.
2948    TooLargeElement,
2949    /// Too many elements have been provided.
2950    ///
2951    /// Spec group: Values and Ranges.
2952    TooManyElements,
2953    /// A parameter was provided that is not supported.
2954    ///
2955    /// Spec group: Values and Ranges.
2956    UnsupportedParam,
2957    /// Provided value is out of range.
2958    ///
2959    /// Spec group: Values and Ranges.
2960    ValueOutOfRange,
2961    /// Provided value is not greater than zero.
2962    ///
2963    /// Spec group: Values and Ranges.
2964    ValuePositiveOnly,
2965    /// Provided value is too high.
2966    ///
2967    /// Spec group: Values and Ranges.
2968    ValueTooHigh,
2969    /// Provided value is too low.
2970    ///
2971    /// Spec group: Values and Ranges.
2972    ValueTooLow,
2973    /// Provided value cannot be zero.
2974    ///
2975    /// Spec group: Values and Ranges.
2976    ValueZeroNotAllowed,
2977}
2978impl ReasonCode {
2979    /// Every value this version's specification defines (51), in spec order.
2980    pub const ALL: &'static [Self] = &[
2981        Self::DuplicateProfile,
2982        Self::InvalidProfile,
2983        Self::InvalidProfileId,
2984        Self::InvalidSchedule,
2985        Self::InvalidStackLevel,
2986        Self::NoPhaseForDC,
2987        Self::PhaseConflict,
2988        Self::RateLimitExceeded,
2989        Self::UnsupportedKind,
2990        Self::UnsupportedPurpose,
2991        Self::UnsupportedRateUnit,
2992        Self::CSNotAccepted,
2993        Self::FixedCable,
2994        Self::NoCable,
2995        Self::UnknownConnectorId,
2996        Self::UnknownConnectorType,
2997        Self::UnknownEvse,
2998        Self::InvalidNetworkConf,
2999        Self::NoSecurityDowngrade,
3000        Self::DuplicateRequestId,
3001        Self::InvalidMessageSeq,
3002        Self::MissingDevModelInfo,
3003        Self::NoError,
3004        Self::NotFound,
3005        Self::Unspecified,
3006        Self::UnsupportedRequest,
3007        Self::FwUpdateInProgress,
3008        Self::NotEnabled,
3009        Self::ReadOnly,
3010        Self::WriteOnly,
3011        Self::InvalidCSR,
3012        Self::InvalidCertificate,
3013        Self::InvalidURL,
3014        Self::RedirectNotAllowed,
3015        Self::InternalError,
3016        Self::OutOfMemory,
3017        Self::OutOfStorage,
3018        Self::InvalidIdToken,
3019        Self::TxInProgress,
3020        Self::TxNotFound,
3021        Self::TxStarted,
3022        Self::InvalidValue,
3023        Self::MissingParam,
3024        Self::TooLargeElement,
3025        Self::TooManyElements,
3026        Self::UnsupportedParam,
3027        Self::ValueOutOfRange,
3028        Self::ValuePositiveOnly,
3029        Self::ValueTooHigh,
3030        Self::ValueTooLow,
3031        Self::ValueZeroNotAllowed,
3032    ];
3033    /// This value as it appears on the wire.
3034    pub const fn as_str(&self) -> &'static str {
3035        match self {
3036            Self::DuplicateProfile => "DuplicateProfile",
3037            Self::InvalidProfile => "InvalidProfile",
3038            Self::InvalidProfileId => "InvalidProfileId",
3039            Self::InvalidSchedule => "InvalidSchedule",
3040            Self::InvalidStackLevel => "InvalidStackLevel",
3041            Self::NoPhaseForDC => "NoPhaseForDC",
3042            Self::PhaseConflict => "PhaseConflict",
3043            Self::RateLimitExceeded => "RateLimitExceeded",
3044            Self::UnsupportedKind => "UnsupportedKind",
3045            Self::UnsupportedPurpose => "UnsupportedPurpose",
3046            Self::UnsupportedRateUnit => "UnsupportedRateUnit",
3047            Self::CSNotAccepted => "CSNotAccepted",
3048            Self::FixedCable => "FixedCable",
3049            Self::NoCable => "NoCable",
3050            Self::UnknownConnectorId => "UnknownConnectorId",
3051            Self::UnknownConnectorType => "UnknownConnectorType",
3052            Self::UnknownEvse => "UnknownEvse",
3053            Self::InvalidNetworkConf => "InvalidNetworkConf",
3054            Self::NoSecurityDowngrade => "NoSecurityDowngrade",
3055            Self::DuplicateRequestId => "DuplicateRequestId",
3056            Self::InvalidMessageSeq => "InvalidMessageSeq",
3057            Self::MissingDevModelInfo => "MissingDevModelInfo",
3058            Self::NoError => "NoError",
3059            Self::NotFound => "NotFound",
3060            Self::Unspecified => "Unspecified",
3061            Self::UnsupportedRequest => "UnsupportedRequest",
3062            Self::FwUpdateInProgress => "FwUpdateInProgress",
3063            Self::NotEnabled => "NotEnabled",
3064            Self::ReadOnly => "ReadOnly",
3065            Self::WriteOnly => "WriteOnly",
3066            Self::InvalidCSR => "InvalidCSR",
3067            Self::InvalidCertificate => "InvalidCertificate",
3068            Self::InvalidURL => "InvalidURL",
3069            Self::RedirectNotAllowed => "RedirectNotAllowed",
3070            Self::InternalError => "InternalError",
3071            Self::OutOfMemory => "OutOfMemory",
3072            Self::OutOfStorage => "OutOfStorage",
3073            Self::InvalidIdToken => "InvalidIdToken",
3074            Self::TxInProgress => "TxInProgress",
3075            Self::TxNotFound => "TxNotFound",
3076            Self::TxStarted => "TxStarted",
3077            Self::InvalidValue => "InvalidValue",
3078            Self::MissingParam => "MissingParam",
3079            Self::TooLargeElement => "TooLargeElement",
3080            Self::TooManyElements => "TooManyElements",
3081            Self::UnsupportedParam => "UnsupportedParam",
3082            Self::ValueOutOfRange => "ValueOutOfRange",
3083            Self::ValuePositiveOnly => "ValuePositiveOnly",
3084            Self::ValueTooHigh => "ValueTooHigh",
3085            Self::ValueTooLow => "ValueTooLow",
3086            Self::ValueZeroNotAllowed => "ValueZeroNotAllowed",
3087        }
3088    }
3089    /// Parses a wire value, returning `None` for values the
3090    /// specification doesn't define (e.g. a vendor's own).
3091    pub fn from_wire(value: &str) -> Option<Self> {
3092        match value {
3093            "DuplicateProfile" => Some(Self::DuplicateProfile),
3094            "InvalidProfile" => Some(Self::InvalidProfile),
3095            "InvalidProfileId" => Some(Self::InvalidProfileId),
3096            "InvalidSchedule" => Some(Self::InvalidSchedule),
3097            "InvalidStackLevel" => Some(Self::InvalidStackLevel),
3098            "NoPhaseForDC" => Some(Self::NoPhaseForDC),
3099            "PhaseConflict" => Some(Self::PhaseConflict),
3100            "RateLimitExceeded" => Some(Self::RateLimitExceeded),
3101            "UnsupportedKind" => Some(Self::UnsupportedKind),
3102            "UnsupportedPurpose" => Some(Self::UnsupportedPurpose),
3103            "UnsupportedRateUnit" => Some(Self::UnsupportedRateUnit),
3104            "CSNotAccepted" => Some(Self::CSNotAccepted),
3105            "FixedCable" => Some(Self::FixedCable),
3106            "NoCable" => Some(Self::NoCable),
3107            "UnknownConnectorId" => Some(Self::UnknownConnectorId),
3108            "UnknownConnectorType" => Some(Self::UnknownConnectorType),
3109            "UnknownEvse" => Some(Self::UnknownEvse),
3110            "InvalidNetworkConf" => Some(Self::InvalidNetworkConf),
3111            "NoSecurityDowngrade" => Some(Self::NoSecurityDowngrade),
3112            "DuplicateRequestId" => Some(Self::DuplicateRequestId),
3113            "InvalidMessageSeq" => Some(Self::InvalidMessageSeq),
3114            "MissingDevModelInfo" => Some(Self::MissingDevModelInfo),
3115            "NoError" => Some(Self::NoError),
3116            "NotFound" => Some(Self::NotFound),
3117            "Unspecified" => Some(Self::Unspecified),
3118            "UnsupportedRequest" => Some(Self::UnsupportedRequest),
3119            "FwUpdateInProgress" => Some(Self::FwUpdateInProgress),
3120            "NotEnabled" => Some(Self::NotEnabled),
3121            "ReadOnly" => Some(Self::ReadOnly),
3122            "WriteOnly" => Some(Self::WriteOnly),
3123            "InvalidCSR" => Some(Self::InvalidCSR),
3124            "InvalidCertificate" => Some(Self::InvalidCertificate),
3125            "InvalidURL" => Some(Self::InvalidURL),
3126            "RedirectNotAllowed" => Some(Self::RedirectNotAllowed),
3127            "InternalError" => Some(Self::InternalError),
3128            "OutOfMemory" => Some(Self::OutOfMemory),
3129            "OutOfStorage" => Some(Self::OutOfStorage),
3130            "InvalidIdToken" => Some(Self::InvalidIdToken),
3131            "TxInProgress" => Some(Self::TxInProgress),
3132            "TxNotFound" => Some(Self::TxNotFound),
3133            "TxStarted" => Some(Self::TxStarted),
3134            "InvalidValue" => Some(Self::InvalidValue),
3135            "MissingParam" => Some(Self::MissingParam),
3136            "TooLargeElement" => Some(Self::TooLargeElement),
3137            "TooManyElements" => Some(Self::TooManyElements),
3138            "UnsupportedParam" => Some(Self::UnsupportedParam),
3139            "ValueOutOfRange" => Some(Self::ValueOutOfRange),
3140            "ValuePositiveOnly" => Some(Self::ValuePositiveOnly),
3141            "ValueTooHigh" => Some(Self::ValueTooHigh),
3142            "ValueTooLow" => Some(Self::ValueTooLow),
3143            "ValueZeroNotAllowed" => Some(Self::ValueZeroNotAllowed),
3144            _ => None,
3145        }
3146    }
3147    /// The message(s) the spec expects this reason code on.
3148    pub const fn typically_used_for(&self) -> Option<&'static str> {
3149        match self {
3150            Self::DuplicateProfile => Some("SetChargingProfile"),
3151            Self::InvalidProfile => Some("SetChargingProfile, RequestStartTransaction"),
3152            Self::InvalidProfileId => Some("SetChargingProfile, RequestStartTransaction"),
3153            Self::InvalidSchedule => Some("SetChargingProfile, RequestStartTransaction"),
3154            Self::InvalidStackLevel => Some("SetChargingProfile"),
3155            Self::NoPhaseForDC => Some("SetChargingProfile"),
3156            Self::PhaseConflict => Some("SetChargingProfile"),
3157            Self::RateLimitExceeded => Some("SetChargingProfile"),
3158            Self::UnsupportedKind => Some("SetChargingProfile"),
3159            Self::UnsupportedPurpose => Some("SetChargingProfile"),
3160            Self::UnsupportedRateUnit => Some("SetChargingProfile"),
3161            Self::CSNotAccepted => {
3162                Some("RequestStartTransaction, RequestStopTransaction")
3163            }
3164            Self::FixedCable => Some("UnlockConnector"),
3165            Self::NoCable => Some("UnlockConnector"),
3166            Self::UnknownConnectorId => Some("ChangeAvailability, UnlockConnector"),
3167            Self::UnknownConnectorType => Some("ReserveNow"),
3168            Self::UnknownEvse => {
3169                Some("ChangeAvailability, ReserveNow, RequestStartTransaction")
3170            }
3171            Self::InvalidNetworkConf => {
3172                Some(
3173                    "SetVariablesRequest of NetworkConfigurationPriority,SetNetworkProfileRequest",
3174                )
3175            }
3176            Self::NoSecurityDowngrade => {
3177                Some("SetVariablesRequest of SecurityProfile, SetNetworkProfileRequest")
3178            }
3179            Self::DuplicateRequestId => {
3180                Some("UpdateFirmware, PublishFirmware and requests for reports.")
3181            }
3182            Self::InvalidMessageSeq => {
3183                Some("(generic), SetChargingProfile with ISO15118")
3184            }
3185            Self::MissingDevModelInfo => Some("(generic)"),
3186            Self::NoError => Some("(generic)"),
3187            Self::NotFound => {
3188                Some(
3189                    "ClearVariableMonitoring, CustomerInformation, GetChargingProfiles, GetDisplayMessages, GetInstalledCertificateIds, GetReport",
3190                )
3191            }
3192            Self::Unspecified => Some("(generic)"),
3193            Self::UnsupportedRequest => Some("(generic)"),
3194            Self::FwUpdateInProgress => Some("Reset"),
3195            Self::NotEnabled => Some("ClearCache"),
3196            Self::ReadOnly => Some("SetVariables"),
3197            Self::WriteOnly => Some("GetVariables"),
3198            Self::InvalidCSR => Some("SignCertificate"),
3199            Self::InvalidCertificate => Some("CertificateSigned, InstallCertificate"),
3200            Self::InvalidURL => Some("UpdateFirmware, PublishFirmware"),
3201            Self::RedirectNotAllowed => Some("LogStatusNotification"),
3202            Self::InternalError => Some("(generic)"),
3203            Self::OutOfMemory => Some("(generic)"),
3204            Self::OutOfStorage => Some("(generic)"),
3205            Self::InvalidIdToken => Some("RequestStartTransaction"),
3206            Self::TxInProgress => {
3207                Some("ChangeAvailability, Reset, RequestStartTransaction")
3208            }
3209            Self::TxNotFound => {
3210                Some("RequestStopTransaction, SetChargingProfile, GetVehicleCertificate")
3211            }
3212            Self::TxStarted => Some("RequestStartTransaction"),
3213            Self::InvalidValue => Some("(generic)"),
3214            Self::MissingParam => Some("(generic)"),
3215            Self::TooLargeElement => Some("CertificateSigned, InstallCertificate"),
3216            Self::TooManyElements => {
3217                Some("SetChargingProfile, SetVariables, SendLocalList")
3218            }
3219            Self::UnsupportedParam => Some("(generic)"),
3220            Self::ValueOutOfRange => Some("SetVariables, SetVariableMonitoring"),
3221            Self::ValuePositiveOnly => Some("(generic)"),
3222            Self::ValueTooHigh => Some("(generic)"),
3223            Self::ValueTooLow => Some("(generic)"),
3224            Self::ValueZeroNotAllowed => Some("(generic)"),
3225        }
3226    }
3227}
3228impl core::fmt::Display for ReasonCode {
3229    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
3230        f.write_str(self.as_str())
3231    }
3232}
3233impl core::str::FromStr for ReasonCode {
3234    type Err = UnknownValue;
3235    fn from_str(value: &str) -> Result<Self, Self::Err> {
3236        Self::from_wire(value).ok_or(UnknownValue)
3237    }
3238}
3239/// Standardized `UnitOfMeasure.unit` values.
3240///
3241/// Named `Unit` rather than `UnitOfMeasure` to leave that name to the schema-generated struct of the same name in `common`.
3242///
3243/// A *closed* set: it holds only the values the specification
3244/// defines. The wire field is a string, so a deployment can still
3245/// send something else -- `from_wire` returns `None` for that,
3246/// which is not by itself a protocol error.
3247#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
3248#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
3249pub enum Unit {
3250    /// Amperes (current)
3251    A,
3252    /// Arbitrary Strength Unit (Signal Strength)
3253    ASU,
3254    /// Bytes
3255    B,
3256    /// Degrees (temperature)
3257    Celsius,
3258    /// Decibel (for example Signal Strength)
3259    #[cfg_attr(feature = "serde", serde(rename = "dB"))]
3260    DB,
3261    /// Power relative to 1mW (^10^log(P/1mW))
3262    #[cfg_attr(feature = "serde", serde(rename = "dBm"))]
3263    DBm,
3264    /// Degrees (angle/rotation)
3265    Deg,
3266    /// Degrees (temperature)
3267    Fahrenheit,
3268    /// Hertz (frequency)
3269    Hz,
3270    /// milliHertz (frequency)
3271    #[cfg_attr(feature = "serde", serde(rename = "mHz"))]
3272    MHz,
3273    /// Degrees Kelvin (temperature)
3274    K,
3275    /// Lux (Light Intensity)
3276    #[cfg_attr(feature = "serde", serde(rename = "lx"))]
3277    Lx,
3278    /// Meter (length)
3279    #[cfg_attr(feature = "serde", serde(rename = "m"))]
3280    M,
3281    /// m/s^2^ (Acceleration)
3282    #[cfg_attr(feature = "serde", serde(rename = "ms2"))]
3283    Ms2,
3284    /// Newtons (Force)
3285    N,
3286    /// Ohm (Impedance)
3287    Ohm,
3288    /// kiloPascal (Pressure)
3289    #[cfg_attr(feature = "serde", serde(rename = "kPa"))]
3290    KPa,
3291    /// Percentage
3292    Percent,
3293    /// Relative Humidity%
3294    RH,
3295    /// Revolutions per Minute
3296    RPM,
3297    /// Seconds (Time)
3298    #[cfg_attr(feature = "serde", serde(rename = "s"))]
3299    S,
3300    /// Voltage (DC or r.m.s. AC)
3301    V,
3302    /// Volt-Ampere (apparent power)
3303    VA,
3304    /// kiloVolt-Ampere (apparent power)
3305    #[cfg_attr(feature = "serde", serde(rename = "kVA"))]
3306    KVA,
3307    /// Volt-Ampere-hours (apparent energy)
3308    VAh,
3309    /// kiloVolt-Ampere-hours (apparent energy)
3310    #[cfg_attr(feature = "serde", serde(rename = "kVAh"))]
3311    KVAh,
3312    /// vars (reactive power)
3313    #[cfg_attr(feature = "serde", serde(rename = "var"))]
3314    Var,
3315    /// kilovars (reactive power)
3316    #[cfg_attr(feature = "serde", serde(rename = "kvar"))]
3317    Kvar,
3318    /// var-hours (reactive energy)
3319    #[cfg_attr(feature = "serde", serde(rename = "varh"))]
3320    Varh,
3321    /// kilovar-hours (reactive energy)
3322    #[cfg_attr(feature = "serde", serde(rename = "kvarh"))]
3323    Kvarh,
3324    /// Watts (power)
3325    W,
3326    /// kilowatts (power)
3327    #[cfg_attr(feature = "serde", serde(rename = "kW"))]
3328    KW,
3329    /// Watt-hours (energy). Default
3330    Wh,
3331    /// kilowatt-hours (energy)
3332    #[cfg_attr(feature = "serde", serde(rename = "kWh"))]
3333    KWh,
3334}
3335impl Unit {
3336    /// Every value this version's specification defines (34), in spec order.
3337    pub const ALL: &'static [Self] = &[
3338        Self::A,
3339        Self::ASU,
3340        Self::B,
3341        Self::Celsius,
3342        Self::DB,
3343        Self::DBm,
3344        Self::Deg,
3345        Self::Fahrenheit,
3346        Self::Hz,
3347        Self::MHz,
3348        Self::K,
3349        Self::Lx,
3350        Self::M,
3351        Self::Ms2,
3352        Self::N,
3353        Self::Ohm,
3354        Self::KPa,
3355        Self::Percent,
3356        Self::RH,
3357        Self::RPM,
3358        Self::S,
3359        Self::V,
3360        Self::VA,
3361        Self::KVA,
3362        Self::VAh,
3363        Self::KVAh,
3364        Self::Var,
3365        Self::Kvar,
3366        Self::Varh,
3367        Self::Kvarh,
3368        Self::W,
3369        Self::KW,
3370        Self::Wh,
3371        Self::KWh,
3372    ];
3373    /// This value as it appears on the wire.
3374    pub const fn as_str(&self) -> &'static str {
3375        match self {
3376            Self::A => "A",
3377            Self::ASU => "ASU",
3378            Self::B => "B",
3379            Self::Celsius => "Celsius",
3380            Self::DB => "dB",
3381            Self::DBm => "dBm",
3382            Self::Deg => "Deg",
3383            Self::Fahrenheit => "Fahrenheit",
3384            Self::Hz => "Hz",
3385            Self::MHz => "mHz",
3386            Self::K => "K",
3387            Self::Lx => "lx",
3388            Self::M => "m",
3389            Self::Ms2 => "ms2",
3390            Self::N => "N",
3391            Self::Ohm => "Ohm",
3392            Self::KPa => "kPa",
3393            Self::Percent => "Percent",
3394            Self::RH => "RH",
3395            Self::RPM => "RPM",
3396            Self::S => "s",
3397            Self::V => "V",
3398            Self::VA => "VA",
3399            Self::KVA => "kVA",
3400            Self::VAh => "VAh",
3401            Self::KVAh => "kVAh",
3402            Self::Var => "var",
3403            Self::Kvar => "kvar",
3404            Self::Varh => "varh",
3405            Self::Kvarh => "kvarh",
3406            Self::W => "W",
3407            Self::KW => "kW",
3408            Self::Wh => "Wh",
3409            Self::KWh => "kWh",
3410        }
3411    }
3412    /// Parses a wire value, returning `None` for values the
3413    /// specification doesn't define (e.g. a vendor's own).
3414    pub fn from_wire(value: &str) -> Option<Self> {
3415        match value {
3416            "A" => Some(Self::A),
3417            "ASU" => Some(Self::ASU),
3418            "B" => Some(Self::B),
3419            "Celsius" => Some(Self::Celsius),
3420            "dB" => Some(Self::DB),
3421            "dBm" => Some(Self::DBm),
3422            "Deg" => Some(Self::Deg),
3423            "Fahrenheit" => Some(Self::Fahrenheit),
3424            "Hz" => Some(Self::Hz),
3425            "mHz" => Some(Self::MHz),
3426            "K" => Some(Self::K),
3427            "lx" => Some(Self::Lx),
3428            "m" => Some(Self::M),
3429            "ms2" => Some(Self::Ms2),
3430            "N" => Some(Self::N),
3431            "Ohm" => Some(Self::Ohm),
3432            "kPa" => Some(Self::KPa),
3433            "Percent" => Some(Self::Percent),
3434            "RH" => Some(Self::RH),
3435            "RPM" => Some(Self::RPM),
3436            "s" => Some(Self::S),
3437            "V" => Some(Self::V),
3438            "VA" => Some(Self::VA),
3439            "kVA" => Some(Self::KVA),
3440            "VAh" => Some(Self::VAh),
3441            "kVAh" => Some(Self::KVAh),
3442            "var" => Some(Self::Var),
3443            "kvar" => Some(Self::Kvar),
3444            "varh" => Some(Self::Varh),
3445            "kvarh" => Some(Self::Kvarh),
3446            "W" => Some(Self::W),
3447            "kW" => Some(Self::KW),
3448            "Wh" => Some(Self::Wh),
3449            "kWh" => Some(Self::KWh),
3450            _ => None,
3451        }
3452    }
3453}
3454impl core::fmt::Display for Unit {
3455    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
3456        f.write_str(self.as_str())
3457    }
3458}
3459impl core::str::FromStr for Unit {
3460    type Err = UnknownValue;
3461    fn from_str(value: &str) -> Result<Self, Self::Err> {
3462        Self::from_wire(value).ok_or(UnknownValue)
3463    }
3464}
3465/// One `(component, variable)` pair of the standardized device model.
3466///
3467/// The schemas describe the *shape* of `GetVariables`/`SetVariables`
3468/// but not which pairs are meaningful; the spec states those in its
3469/// device model appendix.
3470#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
3471pub struct DeviceModelEntry {
3472    /// `None` when the variable applies to any component rather
3473    /// than a named one (the spec's `<generic>` rows).
3474    pub component: Option<&'static str>,
3475    pub variable: &'static str,
3476    /// The `VariableAttribute.type` values this row is about, where
3477    /// the spec's table narrowed them -- e.g. `Min/MaxSet` for a row
3478    /// describing only a variable's `MinSet` and `MaxSet`
3479    /// attributes. `None` means the row is about the variable
3480    /// generally.
3481    pub attributes: Option<&'static str>,
3482    /// The `Variable.instance` this row describes, where the spec
3483    /// names one.
3484    pub instance: Option<&'static str>,
3485    /// Whether support is required: `yes`, `no`, or `V2X` (required
3486    /// only for V2X-capable stations). Kept as the spec's own text
3487    /// rather than a bool, since it is not a two-state field.
3488    pub required: Option<&'static str>,
3489    pub data_type: Option<&'static str>,
3490    pub unit: Option<&'static str>,
3491}
3492/// Every `(component, variable)` pair the standardized device model defines (339).
3493pub const DEVICE_MODEL: &[DeviceModelEntry] = &[
3494    DeviceModelEntry {
3495        component: None,
3496        variable: "ACCurrent",
3497        attributes: None,
3498        instance: None,
3499        required: Some("no"),
3500        data_type: Some("decimal"),
3501        unit: Some("A"),
3502    },
3503    DeviceModelEntry {
3504        component: None,
3505        variable: "Active",
3506        attributes: None,
3507        instance: None,
3508        required: Some("no"),
3509        data_type: Some("boolean"),
3510        unit: None,
3511    },
3512    DeviceModelEntry {
3513        component: None,
3514        variable: "ACVoltage",
3515        attributes: None,
3516        instance: None,
3517        required: Some("no"),
3518        data_type: Some("decimal"),
3519        unit: Some("V"),
3520    },
3521    DeviceModelEntry {
3522        component: None,
3523        variable: "AllowReset",
3524        attributes: None,
3525        instance: None,
3526        required: Some("no"),
3527        data_type: Some("boolean"),
3528        unit: None,
3529    },
3530    DeviceModelEntry {
3531        component: None,
3532        variable: "Angle",
3533        attributes: None,
3534        instance: None,
3535        required: Some("no"),
3536        data_type: Some("decimal"),
3537        unit: Some("Deg"),
3538    },
3539    DeviceModelEntry {
3540        component: None,
3541        variable: "Attempts",
3542        attributes: None,
3543        instance: None,
3544        required: Some("no"),
3545        data_type: Some("integer"),
3546        unit: None,
3547    },
3548    DeviceModelEntry {
3549        component: None,
3550        variable: "Available",
3551        attributes: None,
3552        instance: None,
3553        required: Some("no"),
3554        data_type: Some("boolean"),
3555        unit: None,
3556    },
3557    DeviceModelEntry {
3558        component: None,
3559        variable: "Certificate",
3560        attributes: None,
3561        instance: None,
3562        required: Some("no"),
3563        data_type: Some("string"),
3564        unit: None,
3565    },
3566    DeviceModelEntry {
3567        component: None,
3568        variable: "Color",
3569        attributes: None,
3570        instance: None,
3571        required: Some("no"),
3572        data_type: Some("string"),
3573        unit: None,
3574    },
3575    DeviceModelEntry {
3576        component: None,
3577        variable: "Complete",
3578        attributes: None,
3579        instance: None,
3580        required: Some("no"),
3581        data_type: Some("boolean"),
3582        unit: None,
3583    },
3584    DeviceModelEntry {
3585        component: None,
3586        variable: "ConnectedTime",
3587        attributes: None,
3588        instance: None,
3589        required: Some("no"),
3590        data_type: Some("decimal"),
3591        unit: Some("s"),
3592    },
3593    DeviceModelEntry {
3594        component: None,
3595        variable: "Count",
3596        attributes: None,
3597        instance: None,
3598        required: Some("no"),
3599        data_type: Some("integer"),
3600        unit: None,
3601    },
3602    DeviceModelEntry {
3603        component: None,
3604        variable: "CurrentImbalance",
3605        attributes: None,
3606        instance: None,
3607        required: Some("no"),
3608        data_type: Some("decimal"),
3609        unit: Some("Percent"),
3610    },
3611    DeviceModelEntry {
3612        component: None,
3613        variable: "DataText",
3614        attributes: None,
3615        instance: None,
3616        required: Some("no"),
3617        data_type: Some("string"),
3618        unit: None,
3619    },
3620    DeviceModelEntry {
3621        component: None,
3622        variable: "DateTime",
3623        attributes: None,
3624        instance: None,
3625        required: Some("no"),
3626        data_type: Some("dateTime"),
3627        unit: None,
3628    },
3629    DeviceModelEntry {
3630        component: None,
3631        variable: "DCCurrent",
3632        attributes: None,
3633        instance: None,
3634        required: Some("no"),
3635        data_type: Some("decimal"),
3636        unit: Some("A"),
3637    },
3638    DeviceModelEntry {
3639        component: None,
3640        variable: "DCVoltage",
3641        attributes: None,
3642        instance: None,
3643        required: Some("no"),
3644        data_type: Some("decimal"),
3645        unit: Some("V"),
3646    },
3647    DeviceModelEntry {
3648        component: None,
3649        variable: "ECVariant",
3650        attributes: None,
3651        instance: None,
3652        required: Some("no"),
3653        data_type: Some("string"),
3654        unit: None,
3655    },
3656    DeviceModelEntry {
3657        component: None,
3658        variable: "Enabled",
3659        attributes: None,
3660        instance: None,
3661        required: Some("no"),
3662        data_type: Some("boolean"),
3663        unit: None,
3664    },
3665    DeviceModelEntry {
3666        component: None,
3667        variable: "Energy",
3668        attributes: None,
3669        instance: None,
3670        required: Some("no"),
3671        data_type: Some("decimal"),
3672        unit: Some("Wh, kWh"),
3673    },
3674    DeviceModelEntry {
3675        component: None,
3676        variable: "Entries",
3677        attributes: None,
3678        instance: None,
3679        required: Some("no"),
3680        data_type: Some("integer"),
3681        unit: None,
3682    },
3683    DeviceModelEntry {
3684        component: None,
3685        variable: "Fallback",
3686        attributes: None,
3687        instance: None,
3688        required: Some("no"),
3689        data_type: Some("boolean"),
3690        unit: None,
3691    },
3692    DeviceModelEntry {
3693        component: None,
3694        variable: "FanSpeed",
3695        attributes: None,
3696        instance: None,
3697        required: Some("no"),
3698        data_type: Some("decimal"),
3699        unit: Some("RPM"),
3700    },
3701    DeviceModelEntry {
3702        component: None,
3703        variable: "FirmwareVersion",
3704        attributes: None,
3705        instance: None,
3706        required: Some("no"),
3707        data_type: Some("string"),
3708        unit: None,
3709    },
3710    DeviceModelEntry {
3711        component: None,
3712        variable: "Force",
3713        attributes: None,
3714        instance: None,
3715        required: Some("no"),
3716        data_type: Some("decimal"),
3717        unit: Some("N"),
3718    },
3719    DeviceModelEntry {
3720        component: None,
3721        variable: "Formats",
3722        attributes: None,
3723        instance: None,
3724        required: Some("no"),
3725        data_type: Some("MemberList"),
3726        unit: None,
3727    },
3728    DeviceModelEntry {
3729        component: None,
3730        variable: "Frequency",
3731        attributes: None,
3732        instance: None,
3733        required: Some("no"),
3734        data_type: Some("decimal"),
3735        unit: Some("Hz"),
3736    },
3737    DeviceModelEntry {
3738        component: None,
3739        variable: "FuseRating",
3740        attributes: None,
3741        instance: None,
3742        required: Some("no"),
3743        data_type: Some("decimal"),
3744        unit: Some("A"),
3745    },
3746    DeviceModelEntry {
3747        component: None,
3748        variable: "Height",
3749        attributes: None,
3750        instance: None,
3751        required: Some("no"),
3752        data_type: Some("decimal"),
3753        unit: Some("m"),
3754    },
3755    DeviceModelEntry {
3756        component: None,
3757        variable: "Humidity",
3758        attributes: None,
3759        instance: None,
3760        required: Some("no"),
3761        data_type: Some("decimal"),
3762        unit: Some("RH"),
3763    },
3764    DeviceModelEntry {
3765        component: None,
3766        variable: "Hysteresis",
3767        attributes: None,
3768        instance: None,
3769        required: Some("no"),
3770        data_type: Some("decimal"),
3771        unit: Some("Percent"),
3772    },
3773    DeviceModelEntry {
3774        component: None,
3775        variable: "ICCID",
3776        attributes: None,
3777        instance: None,
3778        required: Some("no"),
3779        data_type: Some("string"),
3780        unit: None,
3781    },
3782    DeviceModelEntry {
3783        component: None,
3784        variable: "Impedance",
3785        attributes: None,
3786        instance: None,
3787        required: Some("no"),
3788        data_type: Some("decimal"),
3789        unit: Some("Ohm"),
3790    },
3791    DeviceModelEntry {
3792        component: None,
3793        variable: "IMSI",
3794        attributes: None,
3795        instance: None,
3796        required: Some("no"),
3797        data_type: Some("string"),
3798        unit: None,
3799    },
3800    DeviceModelEntry {
3801        component: None,
3802        variable: "Interval",
3803        attributes: None,
3804        instance: None,
3805        required: Some("no"),
3806        data_type: Some("integer"),
3807        unit: Some("s"),
3808    },
3809    DeviceModelEntry {
3810        component: None,
3811        variable: "Length",
3812        attributes: None,
3813        instance: None,
3814        required: Some("no"),
3815        data_type: Some("decimal"),
3816        unit: Some("m"),
3817    },
3818    DeviceModelEntry {
3819        component: None,
3820        variable: "Light",
3821        attributes: None,
3822        instance: None,
3823        required: Some("no"),
3824        data_type: Some("decimal"),
3825        unit: Some("lx"),
3826    },
3827    DeviceModelEntry {
3828        component: None,
3829        variable: "Manufacturer",
3830        attributes: None,
3831        instance: None,
3832        required: Some("no"),
3833        data_type: Some("string"),
3834        unit: None,
3835    },
3836    DeviceModelEntry {
3837        component: None,
3838        variable: "Message",
3839        attributes: None,
3840        instance: None,
3841        required: Some("no"),
3842        data_type: Some("string"),
3843        unit: None,
3844    },
3845    DeviceModelEntry {
3846        component: None,
3847        variable: "MinimumStatusDuration",
3848        attributes: None,
3849        instance: None,
3850        required: Some("no"),
3851        data_type: Some("integer"),
3852        unit: Some("s"),
3853    },
3854    DeviceModelEntry {
3855        component: None,
3856        variable: "Mode",
3857        attributes: None,
3858        instance: None,
3859        required: Some("no"),
3860        data_type: Some("string"),
3861        unit: None,
3862    },
3863    DeviceModelEntry {
3864        component: None,
3865        variable: "Model",
3866        attributes: None,
3867        instance: None,
3868        required: Some("no"),
3869        data_type: Some("string"),
3870        unit: None,
3871    },
3872    DeviceModelEntry {
3873        component: None,
3874        variable: "NetworkAddress",
3875        attributes: None,
3876        instance: None,
3877        required: Some("no"),
3878        data_type: Some("string"),
3879        unit: None,
3880    },
3881    DeviceModelEntry {
3882        component: None,
3883        variable: "Operated",
3884        attributes: None,
3885        instance: None,
3886        required: Some("no"),
3887        data_type: Some("boolean"),
3888        unit: None,
3889    },
3890    DeviceModelEntry {
3891        component: None,
3892        variable: "OperatingTimes",
3893        attributes: None,
3894        instance: None,
3895        required: Some("no"),
3896        data_type: Some("string"),
3897        unit: None,
3898    },
3899    DeviceModelEntry {
3900        component: None,
3901        variable: "Overload",
3902        attributes: None,
3903        instance: None,
3904        required: Some("no"),
3905        data_type: Some("boolean"),
3906        unit: None,
3907    },
3908    DeviceModelEntry {
3909        component: None,
3910        variable: "Percent",
3911        attributes: None,
3912        instance: None,
3913        required: Some("no"),
3914        data_type: Some("decimal"),
3915        unit: Some("Percent"),
3916    },
3917    DeviceModelEntry {
3918        component: None,
3919        variable: "PhaseRotation",
3920        attributes: None,
3921        instance: None,
3922        required: Some("no"),
3923        data_type: Some("OptionList"),
3924        unit: None,
3925    },
3926    DeviceModelEntry {
3927        component: None,
3928        variable: "PostChargingTime",
3929        attributes: None,
3930        instance: None,
3931        required: Some("no"),
3932        data_type: Some("decimal"),
3933        unit: Some("s"),
3934    },
3935    DeviceModelEntry {
3936        component: None,
3937        variable: "Power",
3938        attributes: None,
3939        instance: None,
3940        required: Some("no"),
3941        data_type: Some("decimal"),
3942        unit: Some("W, kW"),
3943    },
3944    DeviceModelEntry {
3945        component: None,
3946        variable: "Problem",
3947        attributes: None,
3948        instance: None,
3949        required: Some("no"),
3950        data_type: Some("boolean"),
3951        unit: None,
3952    },
3953    DeviceModelEntry {
3954        component: None,
3955        variable: "Protecting",
3956        attributes: None,
3957        instance: None,
3958        required: Some("no"),
3959        data_type: Some("boolean"),
3960        unit: None,
3961    },
3962    DeviceModelEntry {
3963        component: None,
3964        variable: "SerialNumber",
3965        attributes: None,
3966        instance: None,
3967        required: Some("no"),
3968        data_type: Some("string"),
3969        unit: None,
3970    },
3971    DeviceModelEntry {
3972        component: None,
3973        variable: "SignalStrength",
3974        attributes: None,
3975        instance: None,
3976        required: Some("no"),
3977        data_type: Some("decimal"),
3978        unit: Some("dBm"),
3979    },
3980    DeviceModelEntry {
3981        component: None,
3982        variable: "State",
3983        attributes: None,
3984        instance: None,
3985        required: Some("no"),
3986        data_type: Some("string"),
3987        unit: None,
3988    },
3989    DeviceModelEntry {
3990        component: None,
3991        variable: "StateOfCharge",
3992        attributes: None,
3993        instance: None,
3994        required: Some("no"),
3995        data_type: Some("decimal"),
3996        unit: Some("Percent"),
3997    },
3998    DeviceModelEntry {
3999        component: None,
4000        variable: "Storage",
4001        attributes: None,
4002        instance: None,
4003        required: Some("no"),
4004        data_type: Some("integer"),
4005        unit: Some("B"),
4006    },
4007    DeviceModelEntry {
4008        component: None,
4009        variable: "SupplyPhases",
4010        attributes: None,
4011        instance: None,
4012        required: Some("no"),
4013        data_type: Some("integer"),
4014        unit: None,
4015    },
4016    DeviceModelEntry {
4017        component: None,
4018        variable: "Suspending",
4019        attributes: None,
4020        instance: None,
4021        required: Some("no"),
4022        data_type: Some("boolean"),
4023        unit: None,
4024    },
4025    DeviceModelEntry {
4026        component: None,
4027        variable: "Suspension",
4028        attributes: None,
4029        instance: None,
4030        required: Some("no"),
4031        data_type: Some("boolean"),
4032        unit: None,
4033    },
4034    DeviceModelEntry {
4035        component: None,
4036        variable: "Temperature",
4037        attributes: None,
4038        instance: None,
4039        required: Some("no"),
4040        data_type: Some("decimal"),
4041        unit: Some("Celsius, Fahrenheit"),
4042    },
4043    DeviceModelEntry {
4044        component: None,
4045        variable: "Time",
4046        attributes: None,
4047        instance: None,
4048        required: Some("no"),
4049        data_type: Some("dateTime"),
4050        unit: None,
4051    },
4052    DeviceModelEntry {
4053        component: None,
4054        variable: "Timeout",
4055        attributes: None,
4056        instance: None,
4057        required: Some("no"),
4058        data_type: Some("decimal"),
4059        unit: Some("s"),
4060    },
4061    DeviceModelEntry {
4062        component: None,
4063        variable: "Tries",
4064        attributes: None,
4065        instance: None,
4066        required: Some("no"),
4067        data_type: Some("integer"),
4068        unit: None,
4069    },
4070    DeviceModelEntry {
4071        component: None,
4072        variable: "Tripped",
4073        attributes: None,
4074        instance: None,
4075        required: Some("no"),
4076        data_type: Some("boolean"),
4077        unit: None,
4078    },
4079    DeviceModelEntry {
4080        component: None,
4081        variable: "VendorName",
4082        attributes: None,
4083        instance: None,
4084        required: Some("no"),
4085        data_type: Some("string"),
4086        unit: None,
4087    },
4088    DeviceModelEntry {
4089        component: None,
4090        variable: "VersionDate",
4091        attributes: None,
4092        instance: None,
4093        required: Some("no"),
4094        data_type: Some("dateTime"),
4095        unit: None,
4096    },
4097    DeviceModelEntry {
4098        component: None,
4099        variable: "VersionNumber",
4100        attributes: None,
4101        instance: None,
4102        required: Some("no"),
4103        data_type: Some("string"),
4104        unit: None,
4105    },
4106    DeviceModelEntry {
4107        component: None,
4108        variable: "VoltageImbalance",
4109        attributes: None,
4110        instance: None,
4111        required: Some("no"),
4112        data_type: Some("decimal"),
4113        unit: Some("Percent"),
4114    },
4115    DeviceModelEntry {
4116        component: None,
4117        variable: "CommunicationParent",
4118        attributes: None,
4119        instance: None,
4120        required: Some("no"),
4121        data_type: Some("string"),
4122        unit: None,
4123    },
4124    DeviceModelEntry {
4125        component: None,
4126        variable: "ElectricalParent",
4127        attributes: None,
4128        instance: None,
4129        required: Some("no"),
4130        data_type: Some("string"),
4131        unit: None,
4132    },
4133    DeviceModelEntry {
4134        component: None,
4135        variable: "LogicalParent",
4136        attributes: None,
4137        instance: None,
4138        required: Some("no"),
4139        data_type: Some("string"),
4140        unit: None,
4141    },
4142    DeviceModelEntry {
4143        component: None,
4144        variable: "PhysicalParent",
4145        attributes: None,
4146        instance: None,
4147        required: Some("no"),
4148        data_type: Some("string"),
4149        unit: None,
4150    },
4151    DeviceModelEntry {
4152        component: None,
4153        variable: "Label",
4154        attributes: None,
4155        instance: None,
4156        required: Some("no"),
4157        data_type: Some("string"),
4158        unit: None,
4159    },
4160    DeviceModelEntry {
4161        component: Some("AlignedDataCtrlr"),
4162        variable: "Available",
4163        attributes: None,
4164        instance: None,
4165        required: Some("no"),
4166        data_type: Some("boolean"),
4167        unit: None,
4168    },
4169    DeviceModelEntry {
4170        component: Some("AlignedDataCtrlr"),
4171        variable: "Enabled",
4172        attributes: None,
4173        instance: None,
4174        required: Some("no"),
4175        data_type: Some("boolean"),
4176        unit: None,
4177    },
4178    DeviceModelEntry {
4179        component: Some("AlignedDataCtrlr"),
4180        variable: "Interval",
4181        attributes: None,
4182        instance: None,
4183        required: Some("yes"),
4184        data_type: Some("integer"),
4185        unit: Some("s"),
4186    },
4187    DeviceModelEntry {
4188        component: Some("AlignedDataCtrlr"),
4189        variable: "Measurands",
4190        attributes: None,
4191        instance: None,
4192        required: Some("yes"),
4193        data_type: Some("MemberList"),
4194        unit: None,
4195    },
4196    DeviceModelEntry {
4197        component: Some("AlignedDataCtrlr"),
4198        variable: "SendDuringIdle",
4199        attributes: None,
4200        instance: None,
4201        required: Some("no"),
4202        data_type: Some("boolean"),
4203        unit: None,
4204    },
4205    DeviceModelEntry {
4206        component: Some("AlignedDataCtrlr"),
4207        variable: "SignReadings",
4208        attributes: None,
4209        instance: None,
4210        required: Some("no"),
4211        data_type: Some("boolean"),
4212        unit: None,
4213    },
4214    DeviceModelEntry {
4215        component: Some("AlignedDataCtrlr"),
4216        variable: "SignUpdatedReadings",
4217        attributes: None,
4218        instance: None,
4219        required: Some("no"),
4220        data_type: Some("boolean"),
4221        unit: None,
4222    },
4223    DeviceModelEntry {
4224        component: Some("AlignedDataCtrlr"),
4225        variable: "TxEndedInterval",
4226        attributes: None,
4227        instance: None,
4228        required: Some("yes"),
4229        data_type: Some("integer"),
4230        unit: Some("s"),
4231    },
4232    DeviceModelEntry {
4233        component: Some("AlignedDataCtrlr"),
4234        variable: "TxEndedMeasurands",
4235        attributes: None,
4236        instance: None,
4237        required: Some("yes"),
4238        data_type: Some("MemberList"),
4239        unit: None,
4240    },
4241    DeviceModelEntry {
4242        component: Some("AuthCacheCtrlr"),
4243        variable: "Available",
4244        attributes: None,
4245        instance: None,
4246        required: Some("no"),
4247        data_type: Some("boolean"),
4248        unit: None,
4249    },
4250    DeviceModelEntry {
4251        component: Some("AuthCacheCtrlr"),
4252        variable: "Enabled",
4253        attributes: None,
4254        instance: None,
4255        required: Some("no"),
4256        data_type: Some("boolean"),
4257        unit: None,
4258    },
4259    DeviceModelEntry {
4260        component: Some("AuthCacheCtrlr"),
4261        variable: "LifeTime",
4262        attributes: None,
4263        instance: None,
4264        required: Some("no"),
4265        data_type: Some("integer"),
4266        unit: None,
4267    },
4268    DeviceModelEntry {
4269        component: Some("AuthCacheCtrlr"),
4270        variable: "Policy",
4271        attributes: None,
4272        instance: None,
4273        required: Some("no"),
4274        data_type: Some("OptionList"),
4275        unit: None,
4276    },
4277    DeviceModelEntry {
4278        component: Some("AuthCacheCtrlr"),
4279        variable: "Storage",
4280        attributes: None,
4281        instance: None,
4282        required: Some("no"),
4283        data_type: Some("integer"),
4284        unit: Some("B"),
4285    },
4286    DeviceModelEntry {
4287        component: Some("AuthCacheCtrlr"),
4288        variable: "DisablePostAuthorize",
4289        attributes: None,
4290        instance: None,
4291        required: Some("no"),
4292        data_type: Some("boolean"),
4293        unit: None,
4294    },
4295    DeviceModelEntry {
4296        component: Some("AuthCtrlr"),
4297        variable: "AdditionalInfoItemsPerMessage",
4298        attributes: None,
4299        instance: None,
4300        required: Some("no"),
4301        data_type: Some("integer"),
4302        unit: None,
4303    },
4304    DeviceModelEntry {
4305        component: Some("AuthCtrlr"),
4306        variable: "AuthorizeRemoteStart",
4307        attributes: None,
4308        instance: None,
4309        required: Some("yes"),
4310        data_type: Some("boolean"),
4311        unit: None,
4312    },
4313    DeviceModelEntry {
4314        component: Some("AuthCtrlr"),
4315        variable: "Enabled",
4316        attributes: None,
4317        instance: None,
4318        required: Some("no"),
4319        data_type: Some("boolean"),
4320        unit: None,
4321    },
4322    DeviceModelEntry {
4323        component: Some("AuthCtrlr"),
4324        variable: "LocalAuthorizeOffline",
4325        attributes: None,
4326        instance: None,
4327        required: Some("yes"),
4328        data_type: Some("boolean"),
4329        unit: None,
4330    },
4331    DeviceModelEntry {
4332        component: Some("AuthCtrlr"),
4333        variable: "LocalPreAuthorize",
4334        attributes: None,
4335        instance: None,
4336        required: Some("yes"),
4337        data_type: Some("boolean"),
4338        unit: None,
4339    },
4340    DeviceModelEntry {
4341        component: Some("AuthCtrlr"),
4342        variable: "MasterPassGroupId",
4343        attributes: None,
4344        instance: None,
4345        required: Some("no"),
4346        data_type: Some("string"),
4347        unit: None,
4348    },
4349    DeviceModelEntry {
4350        component: Some("AuthCtrlr"),
4351        variable: "OfflineTxForUnknownIdEnabled",
4352        attributes: None,
4353        instance: None,
4354        required: Some("no"),
4355        data_type: Some("boolean"),
4356        unit: None,
4357    },
4358    DeviceModelEntry {
4359        component: Some("AuthCtrlr"),
4360        variable: "DisableRemoteAuthorization",
4361        attributes: None,
4362        instance: None,
4363        required: Some("no"),
4364        data_type: Some("boolean"),
4365        unit: None,
4366    },
4367    DeviceModelEntry {
4368        component: Some("AuthCtrlr"),
4369        variable: "SupportedIdTokenType",
4370        attributes: None,
4371        instance: None,
4372        required: Some("no"),
4373        data_type: Some("MemberList"),
4374        unit: None,
4375    },
4376    DeviceModelEntry {
4377        component: Some("CHAdeMOCtrlr"),
4378        variable: "SelftestActive",
4379        attributes: None,
4380        instance: None,
4381        required: Some("no"),
4382        data_type: Some("boolean"),
4383        unit: None,
4384    },
4385    DeviceModelEntry {
4386        component: Some("CHAdeMOCtrlr"),
4387        variable: "CHAdeMOProtocolNumber",
4388        attributes: None,
4389        instance: None,
4390        required: Some("no"),
4391        data_type: Some("integer"),
4392        unit: None,
4393    },
4394    DeviceModelEntry {
4395        component: Some("CHAdeMOCtrlr"),
4396        variable: "VehicleStatus",
4397        attributes: None,
4398        instance: None,
4399        required: Some("no"),
4400        data_type: Some("boolean"),
4401        unit: None,
4402    },
4403    DeviceModelEntry {
4404        component: Some("CHAdeMOCtrlr"),
4405        variable: "DynamicControl",
4406        attributes: None,
4407        instance: None,
4408        required: Some("no"),
4409        data_type: Some("boolean"),
4410        unit: None,
4411    },
4412    DeviceModelEntry {
4413        component: Some("CHAdeMOCtrlr"),
4414        variable: "HighCurrentControl",
4415        attributes: None,
4416        instance: None,
4417        required: Some("no"),
4418        data_type: Some("boolean"),
4419        unit: None,
4420    },
4421    DeviceModelEntry {
4422        component: Some("CHAdeMOCtrlr"),
4423        variable: "HighVoltageControl",
4424        attributes: None,
4425        instance: None,
4426        required: Some("no"),
4427        data_type: Some("boolean"),
4428        unit: None,
4429    },
4430    DeviceModelEntry {
4431        component: Some("CHAdeMOCtrlr"),
4432        variable: "AutoManufacturerCode",
4433        attributes: None,
4434        instance: None,
4435        required: Some("no"),
4436        data_type: Some("integer"),
4437        unit: None,
4438    },
4439    DeviceModelEntry {
4440        component: Some("ChargingStation"),
4441        variable: "AllowNewSessionsPendingFirmwareUpdate",
4442        attributes: None,
4443        instance: None,
4444        required: Some("no"),
4445        data_type: Some("boolean"),
4446        unit: None,
4447    },
4448    DeviceModelEntry {
4449        component: Some("ChargingStation"),
4450        variable: "AvailabilityState",
4451        attributes: None,
4452        instance: None,
4453        required: Some("yes"),
4454        data_type: Some("OptionList"),
4455        unit: None,
4456    },
4457    DeviceModelEntry {
4458        component: Some("ChargingStation"),
4459        variable: "Available",
4460        attributes: None,
4461        instance: None,
4462        required: Some("yes"),
4463        data_type: Some("boolean"),
4464        unit: None,
4465    },
4466    DeviceModelEntry {
4467        component: Some("ChargingStation"),
4468        variable: "Model",
4469        attributes: None,
4470        instance: None,
4471        required: Some("no"),
4472        data_type: Some("string"),
4473        unit: None,
4474    },
4475    DeviceModelEntry {
4476        component: Some("ChargingStation"),
4477        variable: "SupplyPhases",
4478        attributes: None,
4479        instance: None,
4480        required: Some("yes"),
4481        data_type: Some("integer"),
4482        unit: None,
4483    },
4484    DeviceModelEntry {
4485        component: Some("ChargingStation"),
4486        variable: "VendorName",
4487        attributes: None,
4488        instance: None,
4489        required: Some("no"),
4490        data_type: Some("string"),
4491        unit: None,
4492    },
4493    DeviceModelEntry {
4494        component: Some("ChargingStation"),
4495        variable: "ActiveTransactionId",
4496        attributes: None,
4497        instance: None,
4498        required: Some("no"),
4499        data_type: Some("string"),
4500        unit: None,
4501    },
4502    DeviceModelEntry {
4503        component: Some("ClockCtrlr"),
4504        variable: "DateTime",
4505        attributes: None,
4506        instance: None,
4507        required: Some("yes"),
4508        data_type: Some("dateTime"),
4509        unit: None,
4510    },
4511    DeviceModelEntry {
4512        component: Some("ClockCtrlr"),
4513        variable: "NextTimeOffsetTransitionDateTime",
4514        attributes: None,
4515        instance: None,
4516        required: Some("no"),
4517        data_type: Some("dateTime"),
4518        unit: None,
4519    },
4520    DeviceModelEntry {
4521        component: Some("ClockCtrlr"),
4522        variable: "NtpServerUri",
4523        attributes: None,
4524        instance: None,
4525        required: Some("no"),
4526        data_type: Some("string"),
4527        unit: None,
4528    },
4529    DeviceModelEntry {
4530        component: Some("ClockCtrlr"),
4531        variable: "NtpSource",
4532        attributes: None,
4533        instance: None,
4534        required: Some("no"),
4535        data_type: Some("OptionList"),
4536        unit: None,
4537    },
4538    DeviceModelEntry {
4539        component: Some("ClockCtrlr"),
4540        variable: "TimeAdjustmentReportingThreshold",
4541        attributes: None,
4542        instance: None,
4543        required: Some("no"),
4544        data_type: Some("integer"),
4545        unit: None,
4546    },
4547    DeviceModelEntry {
4548        component: Some("ClockCtrlr"),
4549        variable: "TimeOffset",
4550        attributes: None,
4551        instance: None,
4552        required: Some("no"),
4553        data_type: Some("string"),
4554        unit: None,
4555    },
4556    DeviceModelEntry {
4557        component: Some("ClockCtrlr"),
4558        variable: "TimeSource",
4559        attributes: None,
4560        instance: None,
4561        required: Some("yes"),
4562        data_type: Some("SequenceList"),
4563        unit: None,
4564    },
4565    DeviceModelEntry {
4566        component: Some("ClockCtrlr"),
4567        variable: "TimeZone",
4568        attributes: None,
4569        instance: None,
4570        required: Some("no"),
4571        data_type: Some("string"),
4572        unit: None,
4573    },
4574    DeviceModelEntry {
4575        component: Some("ConnectedEV"),
4576        variable: "ProtocolAgreed",
4577        attributes: None,
4578        instance: None,
4579        required: Some("V2X"),
4580        data_type: Some("string"),
4581        unit: None,
4582    },
4583    DeviceModelEntry {
4584        component: Some("ConnectedEV"),
4585        variable: "ProtocolSupportedByEV",
4586        attributes: None,
4587        instance: Some("<Priority>"),
4588        required: Some("V2X"),
4589        data_type: Some("string"),
4590        unit: None,
4591    },
4592    DeviceModelEntry {
4593        component: Some("ConnectedEV"),
4594        variable: "VehicleID",
4595        attributes: None,
4596        instance: None,
4597        required: Some("V2X"),
4598        data_type: Some("string"),
4599        unit: None,
4600    },
4601    DeviceModelEntry {
4602        component: Some("ConnectedEV"),
4603        variable: "VehicleCertificate",
4604        attributes: None,
4605        instance: Some("Leaf"),
4606        required: Some("V2X"),
4607        data_type: Some("string"),
4608        unit: None,
4609    },
4610    DeviceModelEntry {
4611        component: Some("ConnectedEV"),
4612        variable: "VehicleCertificate",
4613        attributes: None,
4614        instance: Some("SubCA1"),
4615        required: Some("V2X"),
4616        data_type: Some("string"),
4617        unit: None,
4618    },
4619    DeviceModelEntry {
4620        component: Some("ConnectedEV"),
4621        variable: "VehicleCertificate",
4622        attributes: None,
4623        instance: Some("SubCA2"),
4624        required: Some("V2X"),
4625        data_type: Some("string"),
4626        unit: None,
4627    },
4628    DeviceModelEntry {
4629        component: Some("ConnectedEV"),
4630        variable: "VehicleCertificate",
4631        attributes: None,
4632        instance: Some("Root"),
4633        required: Some("V2X"),
4634        data_type: Some("string"),
4635        unit: None,
4636    },
4637    DeviceModelEntry {
4638        component: Some("ConnectedEV"),
4639        variable: "ACCurrent",
4640        attributes: Some("Min/MaxSet"),
4641        instance: None,
4642        required: Some("no"),
4643        data_type: Some("decimal"),
4644        unit: Some("A"),
4645    },
4646    DeviceModelEntry {
4647        component: Some("ConnectedEV"),
4648        variable: "DCCurrent",
4649        attributes: Some("Min/MaxSet"),
4650        instance: None,
4651        required: Some("no"),
4652        data_type: Some("decimal"),
4653        unit: Some("A"),
4654    },
4655    DeviceModelEntry {
4656        component: Some("ConnectedEV"),
4657        variable: "DCCurrent",
4658        attributes: Some("Target"),
4659        instance: None,
4660        required: Some("no"),
4661        data_type: Some("decimal"),
4662        unit: Some("V"),
4663    },
4664    DeviceModelEntry {
4665        component: Some("ConnectedEV"),
4666        variable: "DCVoltage",
4667        attributes: Some("Min/MaxSet"),
4668        instance: None,
4669        required: Some("no"),
4670        data_type: Some("decimal"),
4671        unit: Some("V"),
4672    },
4673    DeviceModelEntry {
4674        component: Some("ConnectedEV"),
4675        variable: "DCVoltage",
4676        attributes: Some("Target"),
4677        instance: None,
4678        required: Some("no"),
4679        data_type: Some("decimal"),
4680        unit: Some("V"),
4681    },
4682    DeviceModelEntry {
4683        component: Some("ConnectedEV"),
4684        variable: "Power",
4685        attributes: Some("MaxSet"),
4686        instance: None,
4687        required: Some("no"),
4688        data_type: Some("decimal"),
4689        unit: Some("W"),
4690    },
4691    DeviceModelEntry {
4692        component: Some("ConnectedEV"),
4693        variable: "EnergyImport",
4694        attributes: Some("MaxSet"),
4695        instance: None,
4696        required: Some("no"),
4697        data_type: Some("decimal"),
4698        unit: Some("Wh"),
4699    },
4700    DeviceModelEntry {
4701        component: Some("ConnectedEV"),
4702        variable: "EnergyImport",
4703        attributes: Some("MinSet"),
4704        instance: None,
4705        required: Some("no"),
4706        data_type: Some("decimal"),
4707        unit: Some("Wh"),
4708    },
4709    DeviceModelEntry {
4710        component: Some("ConnectedEV"),
4711        variable: "EnergyImport",
4712        attributes: Some("Target"),
4713        instance: None,
4714        required: Some("no"),
4715        data_type: Some("decimal"),
4716        unit: Some("Wh"),
4717    },
4718    DeviceModelEntry {
4719        component: Some("ConnectedEV"),
4720        variable: "BatteryCapacity",
4721        attributes: None,
4722        instance: None,
4723        required: Some("no"),
4724        data_type: Some("decimal"),
4725        unit: Some("Wh"),
4726    },
4727    DeviceModelEntry {
4728        component: Some("ConnectedEV"),
4729        variable: "DepartureTime",
4730        attributes: None,
4731        instance: None,
4732        required: Some("no"),
4733        data_type: Some("DateTime"),
4734        unit: None,
4735    },
4736    DeviceModelEntry {
4737        component: Some("ConnectedEV"),
4738        variable: "RemainingTimeBulk",
4739        attributes: None,
4740        instance: None,
4741        required: Some("no"),
4742        data_type: Some("integer"),
4743        unit: Some("s"),
4744    },
4745    DeviceModelEntry {
4746        component: Some("ConnectedEV"),
4747        variable: "RemainingTimeFull",
4748        attributes: None,
4749        instance: None,
4750        required: Some("no"),
4751        data_type: Some("integer"),
4752        unit: Some("s"),
4753    },
4754    DeviceModelEntry {
4755        component: Some("ConnectedEV"),
4756        variable: "StateOfChargeBulk",
4757        attributes: None,
4758        instance: None,
4759        required: Some("no"),
4760        data_type: Some("integer"),
4761        unit: Some("%"),
4762    },
4763    DeviceModelEntry {
4764        component: Some("ConnectedEV"),
4765        variable: "StateOfCharge",
4766        attributes: Some("MaxSet"),
4767        instance: None,
4768        required: Some("no"),
4769        data_type: Some("integer"),
4770        unit: Some("%"),
4771    },
4772    DeviceModelEntry {
4773        component: Some("ConnectedEV"),
4774        variable: "StateOfCharge",
4775        attributes: None,
4776        instance: None,
4777        required: Some("no"),
4778        data_type: Some("integer"),
4779        unit: Some("%"),
4780    },
4781    DeviceModelEntry {
4782        component: Some("ConnectedEV"),
4783        variable: "ChargingCompleteBulk",
4784        attributes: None,
4785        instance: None,
4786        required: Some("no"),
4787        data_type: Some("boolean"),
4788        unit: None,
4789    },
4790    DeviceModelEntry {
4791        component: Some("ConnectedEV"),
4792        variable: "ChargingCompleteFull",
4793        attributes: None,
4794        instance: None,
4795        required: Some("no"),
4796        data_type: Some("boolean"),
4797        unit: None,
4798    },
4799    DeviceModelEntry {
4800        component: Some("ConnectedEV"),
4801        variable: "ChargingState",
4802        attributes: None,
4803        instance: None,
4804        required: Some("no"),
4805        data_type: Some("OptionList"),
4806        unit: None,
4807    },
4808    DeviceModelEntry {
4809        component: Some("Connector"),
4810        variable: "AvailabilityState",
4811        attributes: None,
4812        instance: None,
4813        required: Some("no"),
4814        data_type: Some("OptionList"),
4815        unit: None,
4816    },
4817    DeviceModelEntry {
4818        component: Some("Connector"),
4819        variable: "Available",
4820        attributes: None,
4821        instance: None,
4822        required: Some("yes"),
4823        data_type: Some("boolean"),
4824        unit: None,
4825    },
4826    DeviceModelEntry {
4827        component: Some("Connector"),
4828        variable: "ChargeProtocol",
4829        attributes: None,
4830        instance: None,
4831        required: Some("no"),
4832        data_type: Some("string"),
4833        unit: None,
4834    },
4835    DeviceModelEntry {
4836        component: Some("Connector"),
4837        variable: "ConnectorType",
4838        attributes: None,
4839        instance: None,
4840        required: Some("yes"),
4841        data_type: Some("string"),
4842        unit: None,
4843    },
4844    DeviceModelEntry {
4845        component: Some("Connector"),
4846        variable: "SupplyPhases",
4847        attributes: None,
4848        instance: None,
4849        required: Some("yes"),
4850        data_type: Some("integer"),
4851        unit: None,
4852    },
4853    DeviceModelEntry {
4854        component: Some("Connector"),
4855        variable: "SlotStatus",
4856        attributes: None,
4857        instance: None,
4858        required: Some("no"),
4859        data_type: Some("OptionList"),
4860        unit: None,
4861    },
4862    DeviceModelEntry {
4863        component: Some("CPPWMController"),
4864        variable: "State",
4865        attributes: None,
4866        instance: None,
4867        required: Some("no"),
4868        data_type: Some("string"),
4869        unit: None,
4870    },
4871    DeviceModelEntry {
4872        component: Some("CustomizationCtrlr"),
4873        variable: "CustomImplementationEnabled",
4874        attributes: None,
4875        instance: Some("<vendorId>"),
4876        required: Some("no"),
4877        data_type: Some("boolean"),
4878        unit: None,
4879    },
4880    DeviceModelEntry {
4881        component: Some("CustomizationCtrlr"),
4882        variable: "CustomTriggers",
4883        attributes: None,
4884        instance: None,
4885        required: Some("no"),
4886        data_type: Some("MemberList"),
4887        unit: None,
4888    },
4889    DeviceModelEntry {
4890        component: Some("DeviceDataCtrlr"),
4891        variable: "BytesPerMessage",
4892        attributes: None,
4893        instance: Some("GetReport"),
4894        required: Some("yes"),
4895        data_type: Some("integer"),
4896        unit: None,
4897    },
4898    DeviceModelEntry {
4899        component: Some("DeviceDataCtrlr"),
4900        variable: "BytesPerMessage",
4901        attributes: None,
4902        instance: Some("GetVariables"),
4903        required: Some("yes"),
4904        data_type: Some("integer"),
4905        unit: None,
4906    },
4907    DeviceModelEntry {
4908        component: Some("DeviceDataCtrlr"),
4909        variable: "BytesPerMessage",
4910        attributes: None,
4911        instance: Some("SetVariables"),
4912        required: Some("yes"),
4913        data_type: Some("integer"),
4914        unit: None,
4915    },
4916    DeviceModelEntry {
4917        component: Some("DeviceDataCtrlr"),
4918        variable: "ConfigurationValueSize",
4919        attributes: None,
4920        instance: None,
4921        required: Some("no"),
4922        data_type: Some("integer"),
4923        unit: None,
4924    },
4925    DeviceModelEntry {
4926        component: Some("DeviceDataCtrlr"),
4927        variable: "ItemsPerMessage",
4928        attributes: None,
4929        instance: Some("GetReport"),
4930        required: Some("yes"),
4931        data_type: Some("integer"),
4932        unit: None,
4933    },
4934    DeviceModelEntry {
4935        component: Some("DeviceDataCtrlr"),
4936        variable: "ItemsPerMessage",
4937        attributes: None,
4938        instance: Some("GetVariables"),
4939        required: Some("yes"),
4940        data_type: Some("integer"),
4941        unit: None,
4942    },
4943    DeviceModelEntry {
4944        component: Some("DeviceDataCtrlr"),
4945        variable: "ItemsPerMessage",
4946        attributes: None,
4947        instance: Some("SetVariables"),
4948        required: Some("yes"),
4949        data_type: Some("integer"),
4950        unit: None,
4951    },
4952    DeviceModelEntry {
4953        component: Some("DeviceDataCtrlr"),
4954        variable: "ReportingValueSize",
4955        attributes: None,
4956        instance: None,
4957        required: Some("no"),
4958        data_type: Some("integer"),
4959        unit: None,
4960    },
4961    DeviceModelEntry {
4962        component: Some("DeviceDataCtrlr"),
4963        variable: "ValueSize",
4964        attributes: None,
4965        instance: None,
4966        required: Some("no"),
4967        data_type: Some("integer"),
4968        unit: None,
4969    },
4970    DeviceModelEntry {
4971        component: Some("DisplayMessageCtrlr"),
4972        variable: "Available",
4973        attributes: None,
4974        instance: None,
4975        required: Some("no"),
4976        data_type: Some("boolean"),
4977        unit: None,
4978    },
4979    DeviceModelEntry {
4980        component: Some("DisplayMessageCtrlr"),
4981        variable: "DisplayMessages",
4982        attributes: None,
4983        instance: None,
4984        required: Some("yes"),
4985        data_type: Some("integer"),
4986        unit: None,
4987    },
4988    DeviceModelEntry {
4989        component: Some("DisplayMessageCtrlr"),
4990        variable: "Enabled",
4991        attributes: None,
4992        instance: None,
4993        required: Some("no"),
4994        data_type: Some("boolean"),
4995        unit: None,
4996    },
4997    DeviceModelEntry {
4998        component: Some("DisplayMessageCtrlr"),
4999        variable: "Language",
5000        attributes: None,
5001        instance: None,
5002        required: Some("yes"),
5003        data_type: Some("OptionList"),
5004        unit: None,
5005    },
5006    DeviceModelEntry {
5007        component: Some("EVSE"),
5008        variable: "AllowReset",
5009        attributes: None,
5010        instance: None,
5011        required: Some("no"),
5012        data_type: Some("boolean"),
5013        unit: None,
5014    },
5015    DeviceModelEntry {
5016        component: Some("EVSE"),
5017        variable: "AvailabilityState",
5018        attributes: None,
5019        instance: None,
5020        required: Some("yes"),
5021        data_type: Some("OptionList"),
5022        unit: None,
5023    },
5024    DeviceModelEntry {
5025        component: Some("EVSE"),
5026        variable: "Available",
5027        attributes: None,
5028        instance: None,
5029        required: Some("yes"),
5030        data_type: Some("boolean"),
5031        unit: None,
5032    },
5033    DeviceModelEntry {
5034        component: Some("EVSE"),
5035        variable: "EvseId",
5036        attributes: None,
5037        instance: None,
5038        required: Some("no"),
5039        data_type: Some("string"),
5040        unit: None,
5041    },
5042    DeviceModelEntry {
5043        component: Some("EVSE"),
5044        variable: "Power",
5045        attributes: None,
5046        instance: None,
5047        required: Some("yes"),
5048        data_type: Some("decimal"),
5049        unit: Some("W, kW"),
5050    },
5051    DeviceModelEntry {
5052        component: Some("EVSE"),
5053        variable: "SupplyPhases",
5054        attributes: None,
5055        instance: None,
5056        required: Some("yes"),
5057        data_type: Some("integer"),
5058        unit: None,
5059    },
5060    DeviceModelEntry {
5061        component: Some("EVSE"),
5062        variable: "DCInputPhaseControl",
5063        attributes: None,
5064        instance: None,
5065        required: Some("no"),
5066        data_type: Some("boolean"),
5067        unit: None,
5068    },
5069    DeviceModelEntry {
5070        component: Some("EVSE"),
5071        variable: "ISO15118EvseId",
5072        attributes: None,
5073        instance: None,
5074        required: Some("no"),
5075        data_type: Some("string"),
5076        unit: None,
5077    },
5078    DeviceModelEntry {
5079        component: Some("EVSE"),
5080        variable: "ChargingState",
5081        attributes: None,
5082        instance: None,
5083        required: Some("no"),
5084        data_type: Some("OptionList"),
5085        unit: None,
5086    },
5087    DeviceModelEntry {
5088        component: Some("EVSE"),
5089        variable: "ActiveTransactionId",
5090        attributes: None,
5091        instance: None,
5092        required: Some("no"),
5093        data_type: Some("string"),
5094        unit: None,
5095    },
5096    DeviceModelEntry {
5097        component: Some("FiscalMetering"),
5098        variable: "EnergyExport",
5099        attributes: None,
5100        instance: None,
5101        required: Some("no"),
5102        data_type: Some("decimal"),
5103        unit: Some("Wh, kWh"),
5104    },
5105    DeviceModelEntry {
5106        component: Some("FiscalMetering"),
5107        variable: "EnergyExportRegister",
5108        attributes: None,
5109        instance: None,
5110        required: Some("no"),
5111        data_type: Some("decimal"),
5112        unit: Some("Wh, kWh"),
5113    },
5114    DeviceModelEntry {
5115        component: Some("FiscalMetering"),
5116        variable: "EnergyImport",
5117        attributes: None,
5118        instance: None,
5119        required: Some("no"),
5120        data_type: Some("decimal"),
5121        unit: Some("Wh, kWh"),
5122    },
5123    DeviceModelEntry {
5124        component: Some("FiscalMetering"),
5125        variable: "EnergyImportRegister",
5126        attributes: None,
5127        instance: None,
5128        required: Some("no"),
5129        data_type: Some("decimal"),
5130        unit: Some("Wh, kWh"),
5131    },
5132    DeviceModelEntry {
5133        component: Some("FiscalMetering"),
5134        variable: "PublicKey",
5135        attributes: None,
5136        instance: None,
5137        required: Some("no"),
5138        data_type: Some("string"),
5139        unit: None,
5140    },
5141    DeviceModelEntry {
5142        component: Some("ISO15118Ctrlr"),
5143        variable: "CentralContractValidationAllowed",
5144        attributes: None,
5145        instance: None,
5146        required: Some("no"),
5147        data_type: Some("boolean"),
5148        unit: None,
5149    },
5150    DeviceModelEntry {
5151        component: Some("ISO15118Ctrlr"),
5152        variable: "ContractValidationOffline",
5153        attributes: None,
5154        instance: None,
5155        required: Some("yes"),
5156        data_type: Some("boolean"),
5157        unit: None,
5158    },
5159    DeviceModelEntry {
5160        component: Some("ISO15118Ctrlr"),
5161        variable: "SeccId",
5162        attributes: None,
5163        instance: None,
5164        required: Some("no"),
5165        data_type: Some("string"),
5166        unit: None,
5167    },
5168    DeviceModelEntry {
5169        component: Some("ISO15118Ctrlr"),
5170        variable: "MaxScheduleEntries",
5171        attributes: None,
5172        instance: None,
5173        required: Some("no"),
5174        data_type: Some("integer"),
5175        unit: None,
5176    },
5177    DeviceModelEntry {
5178        component: Some("ISO15118Ctrlr"),
5179        variable: "RequestedEnergyTransferMode",
5180        attributes: None,
5181        instance: None,
5182        required: Some("no"),
5183        data_type: Some("OptionList"),
5184        unit: None,
5185    },
5186    DeviceModelEntry {
5187        component: Some("ISO15118Ctrlr"),
5188        variable: "RequestMeteringReceipt",
5189        attributes: None,
5190        instance: None,
5191        required: Some("no"),
5192        data_type: Some("boolean"),
5193        unit: None,
5194    },
5195    DeviceModelEntry {
5196        component: Some("ISO15118Ctrlr"),
5197        variable: "CountryName",
5198        attributes: None,
5199        instance: None,
5200        required: Some("no"),
5201        data_type: Some("string"),
5202        unit: None,
5203    },
5204    DeviceModelEntry {
5205        component: Some("ISO15118Ctrlr"),
5206        variable: "OrganizationName",
5207        attributes: None,
5208        instance: None,
5209        required: Some("no"),
5210        data_type: Some("string"),
5211        unit: None,
5212    },
5213    DeviceModelEntry {
5214        component: Some("ISO15118Ctrlr"),
5215        variable: "PnCEnabled",
5216        attributes: None,
5217        instance: None,
5218        required: Some("no"),
5219        data_type: Some("boolean"),
5220        unit: None,
5221    },
5222    DeviceModelEntry {
5223        component: Some("ISO15118Ctrlr"),
5224        variable: "V2GCertificateInstallationEnabled",
5225        attributes: None,
5226        instance: None,
5227        required: Some("no"),
5228        data_type: Some("boolean"),
5229        unit: None,
5230    },
5231    DeviceModelEntry {
5232        component: Some("ISO15118Ctrlr"),
5233        variable: "ContractCertificateInstallationEnabled",
5234        attributes: None,
5235        instance: None,
5236        required: Some("no"),
5237        data_type: Some("boolean"),
5238        unit: None,
5239    },
5240    DeviceModelEntry {
5241        component: Some("ISO15118Ctrlr"),
5242        variable: "CertificateStatusSource",
5243        attributes: None,
5244        instance: None,
5245        required: Some("no"),
5246        data_type: Some("MemberList"),
5247        unit: None,
5248    },
5249    DeviceModelEntry {
5250        component: Some("ISO15118Ctrlr"),
5251        variable: "NotificationDelay",
5252        attributes: None,
5253        instance: None,
5254        required: Some("no"),
5255        data_type: Some("integer"),
5256        unit: Some("s"),
5257    },
5258    DeviceModelEntry {
5259        component: Some("ISO15118Ctrlr"),
5260        variable: "ServiceRenegotiationSupport",
5261        attributes: None,
5262        instance: None,
5263        required: Some("no"),
5264        data_type: Some("boolean"),
5265        unit: None,
5266    },
5267    DeviceModelEntry {
5268        component: Some("ISO15118Ctrlr"),
5269        variable: "MaxPriceElements",
5270        attributes: None,
5271        instance: None,
5272        required: Some("no"),
5273        data_type: Some("integer"),
5274        unit: None,
5275    },
5276    DeviceModelEntry {
5277        component: Some("ISO15118Ctrlr"),
5278        variable: "ProtocolSupported",
5279        attributes: None,
5280        instance: Some("1, 2 .. 20"),
5281        required: Some("no"),
5282        data_type: Some("string"),
5283        unit: None,
5284    },
5285    DeviceModelEntry {
5286        component: Some("LocalAuthListCtrlr"),
5287        variable: "Available",
5288        attributes: None,
5289        instance: None,
5290        required: Some("no"),
5291        data_type: Some("boolean"),
5292        unit: None,
5293    },
5294    DeviceModelEntry {
5295        component: Some("LocalAuthListCtrlr"),
5296        variable: "BytesPerMessage",
5297        attributes: None,
5298        instance: None,
5299        required: Some("yes"),
5300        data_type: Some("integer"),
5301        unit: None,
5302    },
5303    DeviceModelEntry {
5304        component: Some("LocalAuthListCtrlr"),
5305        variable: "Enabled",
5306        attributes: None,
5307        instance: None,
5308        required: Some("no"),
5309        data_type: Some("boolean"),
5310        unit: None,
5311    },
5312    DeviceModelEntry {
5313        component: Some("LocalAuthListCtrlr"),
5314        variable: "Entries",
5315        attributes: None,
5316        instance: None,
5317        required: Some("yes"),
5318        data_type: Some("integer"),
5319        unit: None,
5320    },
5321    DeviceModelEntry {
5322        component: Some("LocalAuthListCtrlr"),
5323        variable: "ItemsPerMessage",
5324        attributes: None,
5325        instance: None,
5326        required: Some("yes"),
5327        data_type: Some("integer"),
5328        unit: None,
5329    },
5330    DeviceModelEntry {
5331        component: Some("LocalAuthListCtrlr"),
5332        variable: "Storage",
5333        attributes: None,
5334        instance: None,
5335        required: Some("no"),
5336        data_type: Some("integer"),
5337        unit: Some("B"),
5338    },
5339    DeviceModelEntry {
5340        component: Some("LocalAuthListCtrlr"),
5341        variable: "DisablePostAuthorize",
5342        attributes: None,
5343        instance: None,
5344        required: Some("no"),
5345        data_type: Some("boolean"),
5346        unit: None,
5347    },
5348    DeviceModelEntry {
5349        component: Some("LocalAuthListCtrlr"),
5350        variable: "SupportsExpiryDateTime",
5351        attributes: None,
5352        instance: None,
5353        required: Some("no"),
5354        data_type: Some("boolean"),
5355        unit: None,
5356    },
5357    DeviceModelEntry {
5358        component: Some("LocalEnergyStorage"),
5359        variable: "Capacity",
5360        attributes: None,
5361        instance: None,
5362        required: Some("no"),
5363        data_type: Some("decimal"),
5364        unit: Some("Wh"),
5365    },
5366    DeviceModelEntry {
5367        component: Some("MonitoringCtrlr"),
5368        variable: "Available",
5369        attributes: None,
5370        instance: None,
5371        required: Some("no"),
5372        data_type: Some("boolean"),
5373        unit: None,
5374    },
5375    DeviceModelEntry {
5376        component: Some("MonitoringCtrlr"),
5377        variable: "BytesPerMessage",
5378        attributes: None,
5379        instance: Some("ClearVariableMonitoring"),
5380        required: Some("no"),
5381        data_type: Some("integer"),
5382        unit: None,
5383    },
5384    DeviceModelEntry {
5385        component: Some("MonitoringCtrlr"),
5386        variable: "BytesPerMessage",
5387        attributes: None,
5388        instance: Some("SetVariableMonitoring"),
5389        required: Some("yes"),
5390        data_type: Some("integer"),
5391        unit: None,
5392    },
5393    DeviceModelEntry {
5394        component: Some("MonitoringCtrlr"),
5395        variable: "Enabled",
5396        attributes: None,
5397        instance: None,
5398        required: Some("no"),
5399        data_type: Some("boolean"),
5400        unit: None,
5401    },
5402    DeviceModelEntry {
5403        component: Some("MonitoringCtrlr"),
5404        variable: "ItemsPerMessage",
5405        attributes: None,
5406        instance: Some("ClearVariableMonitoring"),
5407        required: Some("no"),
5408        data_type: Some("integer"),
5409        unit: None,
5410    },
5411    DeviceModelEntry {
5412        component: Some("MonitoringCtrlr"),
5413        variable: "ItemsPerMessage",
5414        attributes: None,
5415        instance: Some("SetVariableMonitoring"),
5416        required: Some("yes"),
5417        data_type: Some("integer"),
5418        unit: None,
5419    },
5420    DeviceModelEntry {
5421        component: Some("MonitoringCtrlr"),
5422        variable: "OfflineQueuingSeverity",
5423        attributes: None,
5424        instance: None,
5425        required: Some("no"),
5426        data_type: Some("integer"),
5427        unit: None,
5428    },
5429    DeviceModelEntry {
5430        component: Some("MonitoringCtrlr"),
5431        variable: "MonitoringBase",
5432        attributes: None,
5433        instance: None,
5434        required: Some("no"),
5435        data_type: Some("OptionList"),
5436        unit: None,
5437    },
5438    DeviceModelEntry {
5439        component: Some("MonitoringCtrlr"),
5440        variable: "MonitoringLevel",
5441        attributes: None,
5442        instance: None,
5443        required: Some("no"),
5444        data_type: Some("integer"),
5445        unit: None,
5446    },
5447    DeviceModelEntry {
5448        component: Some("MonitoringCtrlr"),
5449        variable: "ActiveMonitoringBase",
5450        attributes: None,
5451        instance: None,
5452        required: Some("no"),
5453        data_type: Some("OptionList"),
5454        unit: None,
5455    },
5456    DeviceModelEntry {
5457        component: Some("MonitoringCtrlr"),
5458        variable: "ActiveMonitoringLevel",
5459        attributes: None,
5460        instance: None,
5461        required: Some("no"),
5462        data_type: Some("integer"),
5463        unit: None,
5464    },
5465    DeviceModelEntry {
5466        component: Some("OCPPCommCtrlr"),
5467        variable: "ActiveNetworkProfile",
5468        attributes: None,
5469        instance: None,
5470        required: Some("no"),
5471        data_type: Some("string"),
5472        unit: None,
5473    },
5474    DeviceModelEntry {
5475        component: Some("OCPPCommCtrlr"),
5476        variable: "FileTransferProtocols",
5477        attributes: None,
5478        instance: None,
5479        required: Some("yes"),
5480        data_type: Some("MemberList"),
5481        unit: None,
5482    },
5483    DeviceModelEntry {
5484        component: Some("OCPPCommCtrlr"),
5485        variable: "HeartbeatInterval",
5486        attributes: None,
5487        instance: None,
5488        required: Some("no"),
5489        data_type: Some("integer"),
5490        unit: Some("s"),
5491    },
5492    DeviceModelEntry {
5493        component: Some("OCPPCommCtrlr"),
5494        variable: "MessageTimeout",
5495        attributes: None,
5496        instance: Some("Default"),
5497        required: Some("yes"),
5498        data_type: Some("integer"),
5499        unit: Some("s"),
5500    },
5501    DeviceModelEntry {
5502        component: Some("OCPPCommCtrlr"),
5503        variable: "MessageAttemptInterval",
5504        attributes: None,
5505        instance: Some("TransactionEvent"),
5506        required: Some("yes"),
5507        data_type: Some("integer"),
5508        unit: None,
5509    },
5510    DeviceModelEntry {
5511        component: Some("OCPPCommCtrlr"),
5512        variable: "MessageAttempts",
5513        attributes: None,
5514        instance: Some("TransactionEvent"),
5515        required: Some("yes"),
5516        data_type: Some("integer"),
5517        unit: None,
5518    },
5519    DeviceModelEntry {
5520        component: Some("OCPPCommCtrlr"),
5521        variable: "NetworkConfigurationPriority",
5522        attributes: None,
5523        instance: None,
5524        required: Some("yes"),
5525        data_type: Some("string"),
5526        unit: None,
5527    },
5528    DeviceModelEntry {
5529        component: Some("OCPPCommCtrlr"),
5530        variable: "NetworkProfileConnectionAttempts",
5531        attributes: None,
5532        instance: None,
5533        required: Some("yes"),
5534        data_type: Some("integer"),
5535        unit: None,
5536    },
5537    DeviceModelEntry {
5538        component: Some("OCPPCommCtrlr"),
5539        variable: "OfflineThreshold",
5540        attributes: None,
5541        instance: None,
5542        required: Some("yes"),
5543        data_type: Some("integer"),
5544        unit: Some("s"),
5545    },
5546    DeviceModelEntry {
5547        component: Some("OCPPCommCtrlr"),
5548        variable: "PublicKeyWithSignedMeterValue",
5549        attributes: None,
5550        instance: None,
5551        required: Some("no"),
5552        data_type: Some("OptionList"),
5553        unit: None,
5554    },
5555    DeviceModelEntry {
5556        component: Some("OCPPCommCtrlr"),
5557        variable: "QueueAllMessages",
5558        attributes: None,
5559        instance: None,
5560        required: Some("no"),
5561        data_type: Some("boolean"),
5562        unit: None,
5563    },
5564    DeviceModelEntry {
5565        component: Some("OCPPCommCtrlr"),
5566        variable: "ResetRetries",
5567        attributes: None,
5568        instance: None,
5569        required: Some("yes"),
5570        data_type: Some("integer"),
5571        unit: None,
5572    },
5573    DeviceModelEntry {
5574        component: Some("OCPPCommCtrlr"),
5575        variable: "RetryBackOffRandomRange",
5576        attributes: None,
5577        instance: None,
5578        required: Some("no"),
5579        data_type: Some("integer"),
5580        unit: None,
5581    },
5582    DeviceModelEntry {
5583        component: Some("OCPPCommCtrlr"),
5584        variable: "RetryBackOffRepeatTimes",
5585        attributes: None,
5586        instance: None,
5587        required: Some("no"),
5588        data_type: Some("integer"),
5589        unit: None,
5590    },
5591    DeviceModelEntry {
5592        component: Some("OCPPCommCtrlr"),
5593        variable: "RetryBackOffWaitMinimum",
5594        attributes: None,
5595        instance: None,
5596        required: Some("no"),
5597        data_type: Some("integer"),
5598        unit: None,
5599    },
5600    DeviceModelEntry {
5601        component: Some("OCPPCommCtrlr"),
5602        variable: "UnlockOnEVSideDisconnect",
5603        attributes: None,
5604        instance: None,
5605        required: Some("yes"),
5606        data_type: Some("boolean"),
5607        unit: None,
5608    },
5609    DeviceModelEntry {
5610        component: Some("OCPPCommCtrlr"),
5611        variable: "WebSocketPingInterval",
5612        attributes: None,
5613        instance: None,
5614        required: Some("no"),
5615        data_type: Some("integer"),
5616        unit: Some("s"),
5617    },
5618    DeviceModelEntry {
5619        component: Some("OCPPCommCtrlr"),
5620        variable: "FieldLength",
5621        attributes: None,
5622        instance: None,
5623        required: Some("no"),
5624        data_type: Some("integer"),
5625        unit: None,
5626    },
5627    DeviceModelEntry {
5628        component: Some("OCPPCommCtrlr"),
5629        variable: "ExternalConfigChangeDate",
5630        attributes: None,
5631        instance: None,
5632        required: Some("no"),
5633        data_type: Some("DateTime"),
5634        unit: None,
5635    },
5636    DeviceModelEntry {
5637        component: Some("ReservationCtrlr"),
5638        variable: "Available",
5639        attributes: None,
5640        instance: None,
5641        required: Some("no"),
5642        data_type: Some("boolean"),
5643        unit: None,
5644    },
5645    DeviceModelEntry {
5646        component: Some("ReservationCtrlr"),
5647        variable: "Enabled",
5648        attributes: None,
5649        instance: None,
5650        required: Some("no"),
5651        data_type: Some("boolean"),
5652        unit: None,
5653    },
5654    DeviceModelEntry {
5655        component: Some("ReservationCtrlr"),
5656        variable: "NonEvseSpecific",
5657        attributes: None,
5658        instance: None,
5659        required: Some("no"),
5660        data_type: Some("boolean"),
5661        unit: None,
5662    },
5663    DeviceModelEntry {
5664        component: Some("SampledDataCtrlr"),
5665        variable: "Available",
5666        attributes: None,
5667        instance: None,
5668        required: Some("no"),
5669        data_type: Some("boolean"),
5670        unit: None,
5671    },
5672    DeviceModelEntry {
5673        component: Some("SampledDataCtrlr"),
5674        variable: "Enabled",
5675        attributes: None,
5676        instance: None,
5677        required: Some("no"),
5678        data_type: Some("boolean"),
5679        unit: None,
5680    },
5681    DeviceModelEntry {
5682        component: Some("SampledDataCtrlr"),
5683        variable: "SignReadings",
5684        attributes: None,
5685        instance: None,
5686        required: Some("no"),
5687        data_type: Some("boolean"),
5688        unit: None,
5689    },
5690    DeviceModelEntry {
5691        component: Some("SampledDataCtrlr"),
5692        variable: "SignStartedReadings",
5693        attributes: None,
5694        instance: None,
5695        required: None,
5696        data_type: None,
5697        unit: None,
5698    },
5699    DeviceModelEntry {
5700        component: Some("SampledDataCtrlr"),
5701        variable: "SignUpdatedReadings",
5702        attributes: None,
5703        instance: None,
5704        required: None,
5705        data_type: None,
5706        unit: None,
5707    },
5708    DeviceModelEntry {
5709        component: Some("SampledDataCtrlr"),
5710        variable: "TxEndedInterval",
5711        attributes: None,
5712        instance: None,
5713        required: Some("yes"),
5714        data_type: Some("integer"),
5715        unit: Some("s"),
5716    },
5717    DeviceModelEntry {
5718        component: Some("SampledDataCtrlr"),
5719        variable: "TxEndedMeasurands",
5720        attributes: None,
5721        instance: None,
5722        required: Some("yes"),
5723        data_type: Some("MemberList"),
5724        unit: None,
5725    },
5726    DeviceModelEntry {
5727        component: Some("SampledDataCtrlr"),
5728        variable: "TxStartedMeasurands",
5729        attributes: None,
5730        instance: None,
5731        required: Some("yes"),
5732        data_type: Some("MemberList"),
5733        unit: None,
5734    },
5735    DeviceModelEntry {
5736        component: Some("SampledDataCtrlr"),
5737        variable: "TxUpdatedInterval",
5738        attributes: None,
5739        instance: None,
5740        required: Some("yes"),
5741        data_type: Some("integer"),
5742        unit: Some("s"),
5743    },
5744    DeviceModelEntry {
5745        component: Some("SampledDataCtrlr"),
5746        variable: "TxUpdatedMeasurands",
5747        attributes: None,
5748        instance: None,
5749        required: Some("yes"),
5750        data_type: Some("MemberList"),
5751        unit: None,
5752    },
5753    DeviceModelEntry {
5754        component: Some("SampledDataCtrlr"),
5755        variable: "RegisterValuesWithoutPhases",
5756        attributes: None,
5757        instance: None,
5758        required: Some("no"),
5759        data_type: Some("boolean"),
5760        unit: None,
5761    },
5762    DeviceModelEntry {
5763        component: Some("SecurityCtrlr"),
5764        variable: "AllowSecurityProfileDowngrade",
5765        attributes: None,
5766        instance: None,
5767        required: Some("no"),
5768        data_type: Some("boolean"),
5769        unit: None,
5770    },
5771    DeviceModelEntry {
5772        component: Some("SecurityCtrlr"),
5773        variable: "AdditionalRootCertificateCheck",
5774        attributes: None,
5775        instance: None,
5776        required: Some("no"),
5777        data_type: Some("boolean"),
5778        unit: None,
5779    },
5780    DeviceModelEntry {
5781        component: Some("SecurityCtrlr"),
5782        variable: "BasicAuthPassword",
5783        attributes: None,
5784        instance: None,
5785        required: Some("no"),
5786        data_type: Some("passwordString"),
5787        unit: None,
5788    },
5789    DeviceModelEntry {
5790        component: Some("SecurityCtrlr"),
5791        variable: "CertificateEntries",
5792        attributes: None,
5793        instance: None,
5794        required: Some("yes"),
5795        data_type: Some("integer"),
5796        unit: None,
5797    },
5798    DeviceModelEntry {
5799        component: Some("SecurityCtrlr"),
5800        variable: "CertSigningRepeatTimes",
5801        attributes: None,
5802        instance: None,
5803        required: Some("no"),
5804        data_type: Some("integer"),
5805        unit: None,
5806    },
5807    DeviceModelEntry {
5808        component: Some("SecurityCtrlr"),
5809        variable: "CertSigningWaitMinimum",
5810        attributes: None,
5811        instance: None,
5812        required: Some("no"),
5813        data_type: Some("integer"),
5814        unit: Some("s"),
5815    },
5816    DeviceModelEntry {
5817        component: Some("SecurityCtrlr"),
5818        variable: "Identity",
5819        attributes: None,
5820        instance: None,
5821        required: Some("no"),
5822        data_type: Some("identifierString"),
5823        unit: None,
5824    },
5825    DeviceModelEntry {
5826        component: Some("SecurityCtrlr"),
5827        variable: "MaxCertificateChainSize",
5828        attributes: None,
5829        instance: None,
5830        required: Some("no"),
5831        data_type: Some("integer"),
5832        unit: None,
5833    },
5834    DeviceModelEntry {
5835        component: Some("SecurityCtrlr"),
5836        variable: "OrganizationName",
5837        attributes: None,
5838        instance: None,
5839        required: Some("yes"),
5840        data_type: Some("string"),
5841        unit: None,
5842    },
5843    DeviceModelEntry {
5844        component: Some("SecurityCtrlr"),
5845        variable: "SecurityProfile",
5846        attributes: None,
5847        instance: None,
5848        required: Some("yes"),
5849        data_type: Some("integer"),
5850        unit: None,
5851    },
5852    DeviceModelEntry {
5853        component: Some("SmartChargingCtrlr"),
5854        variable: "ACPhaseSwitchingSupported",
5855        attributes: None,
5856        instance: None,
5857        required: Some("no"),
5858        data_type: Some("boolean"),
5859        unit: None,
5860    },
5861    DeviceModelEntry {
5862        component: Some("SmartChargingCtrlr"),
5863        variable: "Available",
5864        attributes: None,
5865        instance: None,
5866        required: Some("no"),
5867        data_type: Some("boolean"),
5868        unit: None,
5869    },
5870    DeviceModelEntry {
5871        component: Some("SmartChargingCtrlr"),
5872        variable: "Enabled",
5873        attributes: None,
5874        instance: None,
5875        required: Some("no"),
5876        data_type: Some("boolean"),
5877        unit: None,
5878    },
5879    DeviceModelEntry {
5880        component: Some("SmartChargingCtrlr"),
5881        variable: "Entries",
5882        attributes: None,
5883        instance: Some("ChargingProfiles"),
5884        required: Some("yes"),
5885        data_type: Some("integer"),
5886        unit: None,
5887    },
5888    DeviceModelEntry {
5889        component: Some("SmartChargingCtrlr"),
5890        variable: "ExternalControlSignalsEnabled",
5891        attributes: None,
5892        instance: None,
5893        required: Some("no"),
5894        data_type: Some("boolean"),
5895        unit: None,
5896    },
5897    DeviceModelEntry {
5898        component: Some("SmartChargingCtrlr"),
5899        variable: "LimitChangeSignificance",
5900        attributes: None,
5901        instance: None,
5902        required: Some("yes"),
5903        data_type: Some("decimal"),
5904        unit: Some("Percent"),
5905    },
5906    DeviceModelEntry {
5907        component: Some("SmartChargingCtrlr"),
5908        variable: "NotifyChargingLimitWithSchedules",
5909        attributes: None,
5910        instance: None,
5911        required: Some("no"),
5912        data_type: Some("boolean"),
5913        unit: None,
5914    },
5915    DeviceModelEntry {
5916        component: Some("SmartChargingCtrlr"),
5917        variable: "PeriodsPerSchedule",
5918        attributes: None,
5919        instance: None,
5920        required: Some("yes"),
5921        data_type: Some("integer"),
5922        unit: None,
5923    },
5924    DeviceModelEntry {
5925        component: Some("SmartChargingCtrlr"),
5926        variable: "Phases3to1",
5927        attributes: None,
5928        instance: None,
5929        required: Some("no"),
5930        data_type: Some("boolean"),
5931        unit: None,
5932    },
5933    DeviceModelEntry {
5934        component: Some("SmartChargingCtrlr"),
5935        variable: "ProfileStackLevel",
5936        attributes: None,
5937        instance: None,
5938        required: Some("yes"),
5939        data_type: Some("integer"),
5940        unit: None,
5941    },
5942    DeviceModelEntry {
5943        component: Some("SmartChargingCtrlr"),
5944        variable: "RateUnit",
5945        attributes: None,
5946        instance: None,
5947        required: Some("yes"),
5948        data_type: Some("MemberList"),
5949        unit: None,
5950    },
5951    DeviceModelEntry {
5952        component: Some("SmartChargingCtrlr"),
5953        variable: "ExternalConstraintsProfileDisallowed",
5954        attributes: None,
5955        instance: None,
5956        required: Some("no"),
5957        data_type: Some("boolean"),
5958        unit: None,
5959    },
5960    DeviceModelEntry {
5961        component: Some("SmartChargingCtrlr"),
5962        variable: "ChargingProfilePersistence",
5963        attributes: None,
5964        instance: Some("TxProfile"),
5965        required: Some("no"),
5966        data_type: Some("boolean"),
5967        unit: None,
5968    },
5969    DeviceModelEntry {
5970        component: Some("SmartChargingCtrlr"),
5971        variable: "ChargingProfilePersistence",
5972        attributes: None,
5973        instance: Some("LocalGeneration"),
5974        required: Some("no"),
5975        data_type: Some("boolean"),
5976        unit: None,
5977    },
5978    DeviceModelEntry {
5979        component: Some("SmartChargingCtrlr"),
5980        variable: "ChargingProfilePersistence",
5981        attributes: None,
5982        instance: Some("ChargingStationExternalConstraints"),
5983        required: Some("no"),
5984        data_type: Some("boolean"),
5985        unit: None,
5986    },
5987    DeviceModelEntry {
5988        component: Some("SmartChargingCtrlr"),
5989        variable: "MaxExternalConstraintsId",
5990        attributes: None,
5991        instance: None,
5992        required: Some("no"),
5993        data_type: Some("integer"),
5994        unit: None,
5995    },
5996    DeviceModelEntry {
5997        component: Some("TariffCostCtrlr"),
5998        variable: "Available",
5999        attributes: None,
6000        instance: Some("Tariff"),
6001        required: Some("no"),
6002        data_type: Some("boolean"),
6003        unit: None,
6004    },
6005    DeviceModelEntry {
6006        component: Some("TariffCostCtrlr"),
6007        variable: "Available",
6008        attributes: None,
6009        instance: Some("Cost"),
6010        required: Some("no"),
6011        data_type: Some("boolean"),
6012        unit: None,
6013    },
6014    DeviceModelEntry {
6015        component: Some("TariffCostCtrlr"),
6016        variable: "Currency",
6017        attributes: None,
6018        instance: None,
6019        required: Some("yes"),
6020        data_type: Some("string"),
6021        unit: None,
6022    },
6023    DeviceModelEntry {
6024        component: Some("TariffCostCtrlr"),
6025        variable: "Enabled",
6026        attributes: None,
6027        instance: Some("Tariff"),
6028        required: Some("no"),
6029        data_type: Some("boolean"),
6030        unit: None,
6031    },
6032    DeviceModelEntry {
6033        component: Some("TariffCostCtrlr"),
6034        variable: "Enabled",
6035        attributes: None,
6036        instance: Some("Cost"),
6037        required: Some("no"),
6038        data_type: Some("boolean"),
6039        unit: None,
6040    },
6041    DeviceModelEntry {
6042        component: Some("TariffCostCtrlr"),
6043        variable: "Enabled",
6044        attributes: None,
6045        instance: Some("RunningCost"),
6046        required: Some("no"),
6047        data_type: Some("boolean"),
6048        unit: None,
6049    },
6050    DeviceModelEntry {
6051        component: Some("TariffCostCtrlr"),
6052        variable: "TariffFallbackMessage",
6053        attributes: None,
6054        instance: Some("<language>"),
6055        required: Some("yes"),
6056        data_type: Some("string"),
6057        unit: None,
6058    },
6059    DeviceModelEntry {
6060        component: Some("TariffCostCtrlr"),
6061        variable: "TotalCostFallbackMessage",
6062        attributes: None,
6063        instance: Some("<language>"),
6064        required: Some("yes"),
6065        data_type: Some("string"),
6066        unit: None,
6067    },
6068    DeviceModelEntry {
6069        component: Some("TariffCostCtrlr"),
6070        variable: "OfflineTariffFallbackMessage",
6071        attributes: None,
6072        instance: Some("<language>"),
6073        required: Some("no"),
6074        data_type: Some("string"),
6075        unit: None,
6076    },
6077    DeviceModelEntry {
6078        component: Some("TariffCostCtrlr"),
6079        variable: "Interval",
6080        attributes: None,
6081        instance: Some("Tariff"),
6082        required: Some("no"),
6083        data_type: Some("integer"),
6084        unit: Some("s"),
6085    },
6086    DeviceModelEntry {
6087        component: Some("TariffCostCtrlr"),
6088        variable: "Interval",
6089        attributes: None,
6090        instance: Some("Cost"),
6091        required: Some("no"),
6092        data_type: Some("integer"),
6093        unit: Some("s"),
6094    },
6095    DeviceModelEntry {
6096        component: Some("TariffCostCtrlr"),
6097        variable: "ConditionsSupported",
6098        attributes: None,
6099        instance: Some("Tariff"),
6100        required: Some("no"),
6101        data_type: Some("boolean"),
6102        unit: None,
6103    },
6104    DeviceModelEntry {
6105        component: Some("TokenReader"),
6106        variable: "Token",
6107        attributes: None,
6108        instance: None,
6109        required: Some("no"),
6110        data_type: Some("string"),
6111        unit: None,
6112    },
6113    DeviceModelEntry {
6114        component: Some("TokenReader"),
6115        variable: "TokenType",
6116        attributes: None,
6117        instance: None,
6118        required: Some("no"),
6119        data_type: Some("OptionList"),
6120        unit: None,
6121    },
6122    DeviceModelEntry {
6123        component: Some("TxCtrlr"),
6124        variable: "ChargingTime",
6125        attributes: None,
6126        instance: None,
6127        required: Some("no"),
6128        data_type: Some("decimal"),
6129        unit: Some("s"),
6130    },
6131    DeviceModelEntry {
6132        component: Some("TxCtrlr"),
6133        variable: "EVConnectionTimeOut",
6134        attributes: None,
6135        instance: None,
6136        required: Some("yes"),
6137        data_type: Some("integer"),
6138        unit: Some("s"),
6139    },
6140    DeviceModelEntry {
6141        component: Some("TxCtrlr"),
6142        variable: "MaxEnergyOnInvalidId",
6143        attributes: None,
6144        instance: None,
6145        required: Some("no"),
6146        data_type: Some("integer"),
6147        unit: None,
6148    },
6149    DeviceModelEntry {
6150        component: Some("TxCtrlr"),
6151        variable: "StopTxOnEVSideDisconnect",
6152        attributes: None,
6153        instance: None,
6154        required: Some("yes"),
6155        data_type: Some("boolean"),
6156        unit: None,
6157    },
6158    DeviceModelEntry {
6159        component: Some("TxCtrlr"),
6160        variable: "StopTxOnInvalidId",
6161        attributes: None,
6162        instance: None,
6163        required: Some("yes"),
6164        data_type: Some("boolean"),
6165        unit: None,
6166    },
6167    DeviceModelEntry {
6168        component: Some("TxCtrlr"),
6169        variable: "TxBeforeAcceptedEnabled",
6170        attributes: None,
6171        instance: None,
6172        required: Some("no"),
6173        data_type: Some("boolean"),
6174        unit: None,
6175    },
6176    DeviceModelEntry {
6177        component: Some("TxCtrlr"),
6178        variable: "TxStartPoint",
6179        attributes: None,
6180        instance: None,
6181        required: Some("yes"),
6182        data_type: Some("MemberList"),
6183        unit: None,
6184    },
6185    DeviceModelEntry {
6186        component: Some("TxCtrlr"),
6187        variable: "TxStopPoint",
6188        attributes: None,
6189        instance: None,
6190        required: Some("yes"),
6191        data_type: Some("MemberList"),
6192        unit: None,
6193    },
6194    DeviceModelEntry {
6195        component: Some("TxCtrlr"),
6196        variable: "ResumptionTimeout",
6197        attributes: None,
6198        instance: None,
6199        required: Some("no"),
6200        data_type: Some("integer"),
6201        unit: Some("s"),
6202    },
6203    DeviceModelEntry {
6204        component: Some("TxCtrlr"),
6205        variable: "EnergyTransferResumptionRandomRange",
6206        attributes: None,
6207        instance: None,
6208        required: Some("no"),
6209        data_type: Some("integer"),
6210        unit: Some("s"),
6211    },
6212    DeviceModelEntry {
6213        component: Some("TxCtrlr"),
6214        variable: "AllowEnergyTransferResumption",
6215        attributes: None,
6216        instance: None,
6217        required: Some("no"),
6218        data_type: Some("boolean"),
6219        unit: None,
6220    },
6221    DeviceModelEntry {
6222        component: Some("FrequencySimulator"),
6223        variable: "Enabled",
6224        attributes: None,
6225        instance: None,
6226        required: Some("no"),
6227        data_type: Some("boolean"),
6228        unit: None,
6229    },
6230    DeviceModelEntry {
6231        component: Some("FrequencySimulator"),
6232        variable: "DateTime",
6233        attributes: None,
6234        instance: Some("Start"),
6235        required: Some("no"),
6236        data_type: Some("DateTime"),
6237        unit: None,
6238    },
6239    DeviceModelEntry {
6240        component: Some("FrequencySimulator"),
6241        variable: "DateTime",
6242        attributes: None,
6243        instance: Some("End"),
6244        required: Some("no"),
6245        data_type: Some("DateTime"),
6246        unit: None,
6247    },
6248    DeviceModelEntry {
6249        component: Some("FrequencySimulator"),
6250        variable: "FrequencySchedule",
6251        attributes: None,
6252        instance: None,
6253        required: Some("no"),
6254        data_type: Some("string"),
6255        unit: None,
6256    },
6257    DeviceModelEntry {
6258        component: Some("DataCollector"),
6259        variable: "Enabled",
6260        attributes: None,
6261        instance: None,
6262        required: Some("no"),
6263        data_type: Some("boolean"),
6264        unit: None,
6265    },
6266    DeviceModelEntry {
6267        component: Some("DataCollector"),
6268        variable: "DateTime",
6269        attributes: None,
6270        instance: Some("Start"),
6271        required: Some("no"),
6272        data_type: Some("DateTime"),
6273        unit: None,
6274    },
6275    DeviceModelEntry {
6276        component: Some("DataCollector"),
6277        variable: "DateTime",
6278        attributes: None,
6279        instance: Some("End"),
6280        required: Some("no"),
6281        data_type: Some("DateTime"),
6282        unit: None,
6283    },
6284    DeviceModelEntry {
6285        component: Some("DataCollector"),
6286        variable: "SamplingInterval",
6287        attributes: None,
6288        instance: None,
6289        required: Some("no"),
6290        data_type: Some("decimal"),
6291        unit: Some("s"),
6292    },
6293    DeviceModelEntry {
6294        component: Some("DataCollector"),
6295        variable: "SampledMeasurands",
6296        attributes: None,
6297        instance: None,
6298        required: Some("no"),
6299        data_type: Some("MemberList"),
6300        unit: None,
6301    },
6302    DeviceModelEntry {
6303        component: Some("NetworkConfiguration"),
6304        variable: "OcppCsmsUrl",
6305        attributes: None,
6306        instance: None,
6307        required: Some("yes"),
6308        data_type: Some("string"),
6309        unit: None,
6310    },
6311    DeviceModelEntry {
6312        component: Some("NetworkConfiguration"),
6313        variable: "OcppInterface",
6314        attributes: None,
6315        instance: None,
6316        required: Some("yes"),
6317        data_type: Some("OptionList"),
6318        unit: None,
6319    },
6320    DeviceModelEntry {
6321        component: Some("NetworkConfiguration"),
6322        variable: "OcppTransport",
6323        attributes: None,
6324        instance: None,
6325        required: Some("yes"),
6326        data_type: Some("OptionList"),
6327        unit: None,
6328    },
6329    DeviceModelEntry {
6330        component: Some("NetworkConfiguration"),
6331        variable: "OcppVersion",
6332        attributes: None,
6333        instance: None,
6334        required: Some("yes"),
6335        data_type: Some("OptionList"),
6336        unit: None,
6337    },
6338    DeviceModelEntry {
6339        component: Some("NetworkConfiguration"),
6340        variable: "MessageTimeout",
6341        attributes: None,
6342        instance: None,
6343        required: Some("yes"),
6344        data_type: Some("integer"),
6345        unit: None,
6346    },
6347    DeviceModelEntry {
6348        component: Some("NetworkConfiguration"),
6349        variable: "SecurityProfile",
6350        attributes: None,
6351        instance: None,
6352        required: Some("yes"),
6353        data_type: Some("integer"),
6354        unit: None,
6355    },
6356    DeviceModelEntry {
6357        component: Some("NetworkConfiguration"),
6358        variable: "Identity",
6359        attributes: None,
6360        instance: None,
6361        required: Some("no"),
6362        data_type: Some("string"),
6363        unit: None,
6364    },
6365    DeviceModelEntry {
6366        component: Some("NetworkConfiguration"),
6367        variable: "BasicAuthPassword",
6368        attributes: None,
6369        instance: None,
6370        required: Some("yes"),
6371        data_type: Some("string"),
6372        unit: None,
6373    },
6374    DeviceModelEntry {
6375        component: Some("NetworkConfiguration"),
6376        variable: "CsmsRootCertificateHashAlgorithm",
6377        attributes: None,
6378        instance: None,
6379        required: Some("no"),
6380        data_type: Some("string"),
6381        unit: None,
6382    },
6383    DeviceModelEntry {
6384        component: Some("NetworkConfiguration"),
6385        variable: "CsmsRootCertificateIssuerKeyHash",
6386        attributes: None,
6387        instance: None,
6388        required: Some("no"),
6389        data_type: Some("string"),
6390        unit: None,
6391    },
6392    DeviceModelEntry {
6393        component: Some("NetworkConfiguration"),
6394        variable: "CsmsRootCertificateIssuerNameHash",
6395        attributes: None,
6396        instance: None,
6397        required: Some("no"),
6398        data_type: Some("string"),
6399        unit: None,
6400    },
6401    DeviceModelEntry {
6402        component: Some("NetworkConfiguration"),
6403        variable: "CsmsRootCertificateSerialNumber",
6404        attributes: None,
6405        instance: None,
6406        required: Some("no"),
6407        data_type: Some("string"),
6408        unit: None,
6409    },
6410    DeviceModelEntry {
6411        component: Some("NetworkConfiguration"),
6412        variable: "VpnEnabled",
6413        attributes: None,
6414        instance: None,
6415        required: Some("yes"),
6416        data_type: Some("boolean"),
6417        unit: None,
6418    },
6419    DeviceModelEntry {
6420        component: Some("NetworkConfiguration"),
6421        variable: "VpnType",
6422        attributes: None,
6423        instance: None,
6424        required: Some("no"),
6425        data_type: Some("string"),
6426        unit: None,
6427    },
6428    DeviceModelEntry {
6429        component: Some("NetworkConfiguration"),
6430        variable: "VpnServer",
6431        attributes: None,
6432        instance: None,
6433        required: Some("no"),
6434        data_type: Some("string"),
6435        unit: None,
6436    },
6437    DeviceModelEntry {
6438        component: Some("NetworkConfiguration"),
6439        variable: "VpnUser",
6440        attributes: None,
6441        instance: None,
6442        required: Some("no"),
6443        data_type: Some("string"),
6444        unit: None,
6445    },
6446    DeviceModelEntry {
6447        component: Some("NetworkConfiguration"),
6448        variable: "VpnGroup",
6449        attributes: None,
6450        instance: None,
6451        required: Some("no"),
6452        data_type: Some("string"),
6453        unit: None,
6454    },
6455    DeviceModelEntry {
6456        component: Some("NetworkConfiguration"),
6457        variable: "VpnPassword",
6458        attributes: None,
6459        instance: None,
6460        required: Some("no"),
6461        data_type: Some("string"),
6462        unit: None,
6463    },
6464    DeviceModelEntry {
6465        component: Some("NetworkConfiguration"),
6466        variable: "VpnKey",
6467        attributes: None,
6468        instance: None,
6469        required: Some("no"),
6470        data_type: Some("string"),
6471        unit: None,
6472    },
6473    DeviceModelEntry {
6474        component: Some("NetworkConfiguration"),
6475        variable: "ApnEnabled",
6476        attributes: None,
6477        instance: None,
6478        required: Some("yes"),
6479        data_type: Some("boolean"),
6480        unit: None,
6481    },
6482    DeviceModelEntry {
6483        component: Some("NetworkConfiguration"),
6484        variable: "Apn",
6485        attributes: None,
6486        instance: None,
6487        required: Some("no"),
6488        data_type: Some("string"),
6489        unit: None,
6490    },
6491    DeviceModelEntry {
6492        component: Some("NetworkConfiguration"),
6493        variable: "ApnUserName",
6494        attributes: None,
6495        instance: None,
6496        required: Some("no"),
6497        data_type: Some("string"),
6498        unit: None,
6499    },
6500    DeviceModelEntry {
6501        component: Some("NetworkConfiguration"),
6502        variable: "ApnPassword",
6503        attributes: None,
6504        instance: None,
6505        required: Some("no"),
6506        data_type: Some("string"),
6507        unit: None,
6508    },
6509    DeviceModelEntry {
6510        component: Some("NetworkConfiguration"),
6511        variable: "SimPin",
6512        attributes: None,
6513        instance: None,
6514        required: Some("no"),
6515        data_type: Some("string"),
6516        unit: None,
6517    },
6518    DeviceModelEntry {
6519        component: Some("NetworkConfiguration"),
6520        variable: "PreferredNetwork",
6521        attributes: None,
6522        instance: None,
6523        required: Some("no"),
6524        data_type: Some("string"),
6525        unit: None,
6526    },
6527    DeviceModelEntry {
6528        component: Some("NetworkConfiguration"),
6529        variable: "UseOnlyPreferredNetwork",
6530        attributes: None,
6531        instance: None,
6532        required: Some("no"),
6533        data_type: Some("boolean"),
6534        unit: None,
6535    },
6536    DeviceModelEntry {
6537        component: Some("NetworkConfiguration"),
6538        variable: "ApnAuthentication",
6539        attributes: None,
6540        instance: None,
6541        required: Some("no"),
6542        data_type: Some("string"),
6543        unit: None,
6544    },
6545];