Skip to main content

sunspec/models/
model201.rs

1//! Meter (Single Phase) single phase (AN or AB) meter
2/// Type alias for [`AcMeterAnOrAb`].
3pub type Model201 = AcMeterAnOrAb;
4/// Meter (Single Phase) single phase (AN or AB) meter
5///
6/// Include this model for single phase (AN or AB) metering
7#[derive(Debug)]
8#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
9pub struct AcMeterAnOrAb {
10    /// Amps
11    ///
12    /// Total AC Current
13    pub a: i16,
14    /// Amps PhaseA
15    ///
16    /// Phase A Current
17    pub aph_a: i16,
18    /// Amps PhaseB
19    ///
20    /// Phase B Current
21    pub aph_b: Option<i16>,
22    /// Amps PhaseC
23    ///
24    /// Phase C Current
25    pub aph_c: Option<i16>,
26    /// Current scale factor
27    pub a_sf: i16,
28    /// Voltage LN
29    ///
30    /// Line to Neutral AC Voltage (average of active phases)
31    ///
32    /// Detail: Conditional AN connection
33    pub ph_v: Option<i16>,
34    /// Phase Voltage AN
35    ///
36    /// Phase Voltage AN
37    ///
38    /// Detail: Conditional AN connection
39    pub ph_vph_a: Option<i16>,
40    /// Phase Voltage BN
41    ///
42    /// Phase Voltage BN
43    pub ph_vph_b: Option<i16>,
44    /// Phase Voltage CN
45    ///
46    /// Phase Voltage CN
47    pub ph_vph_c: Option<i16>,
48    /// Voltage LL
49    ///
50    /// Line to Line AC Voltage (average of active phases)
51    pub ppv: Option<i16>,
52    /// Phase Voltage AB
53    ///
54    /// Phase Voltage AB
55    ///
56    /// Detail: Conditional AB connection
57    pub pp_vph_ab: Option<i16>,
58    /// Phase Voltage BC
59    ///
60    /// Phase Voltage BC
61    pub pp_vph_bc: Option<i16>,
62    /// Phase Voltage CA
63    ///
64    /// Phase Voltage CA
65    pub pp_vph_ca: Option<i16>,
66    /// Voltage scale factor
67    pub v_sf: i16,
68    /// Hz
69    ///
70    /// Frequency
71    pub hz: i16,
72    /// Frequency scale factor
73    pub hz_sf: Option<i16>,
74    /// Watts
75    ///
76    /// Total Real Power
77    pub w: i16,
78    /// Watts phase A
79    pub wph_a: Option<i16>,
80    /// Watts phase B
81    pub wph_b: Option<i16>,
82    /// Watts phase C
83    pub wph_c: Option<i16>,
84    /// Real Power scale factor
85    pub w_sf: i16,
86    /// VA
87    ///
88    /// AC Apparent Power
89    pub va: Option<i16>,
90    /// VA phase A
91    pub v_aph_a: Option<i16>,
92    /// VA phase B
93    pub v_aph_b: Option<i16>,
94    /// VA phase C
95    pub v_aph_c: Option<i16>,
96    /// Apparent Power scale factor
97    pub va_sf: Option<i16>,
98    /// VAR
99    ///
100    /// Reactive Power
101    pub var: Option<i16>,
102    /// VAR phase A
103    pub va_rph_a: Option<i16>,
104    /// VAR phase B
105    pub va_rph_b: Option<i16>,
106    /// VAR phase C
107    pub va_rph_c: Option<i16>,
108    /// Reactive Power scale factor
109    pub var_sf: Option<i16>,
110    /// PF
111    ///
112    /// Power Factor
113    pub pf: Option<i16>,
114    /// PF phase A
115    pub p_fph_a: Option<i16>,
116    /// PF phase B
117    pub p_fph_b: Option<i16>,
118    /// PF phase C
119    pub p_fph_c: Option<i16>,
120    /// Power Factor scale factor
121    pub pf_sf: Option<i16>,
122    /// Total Watt-hours Exported
123    ///
124    /// Total Real Energy Exported
125    pub tot_wh_exp: u32,
126    /// Total Watt-hours Exported phase A
127    pub tot_wh_exp_ph_a: Option<u32>,
128    /// Total Watt-hours Exported phase B
129    pub tot_wh_exp_ph_b: Option<u32>,
130    /// Total Watt-hours Exported phase C
131    pub tot_wh_exp_ph_c: Option<u32>,
132    /// Total Watt-hours Imported
133    ///
134    /// Total Real Energy Imported
135    pub tot_wh_imp: u32,
136    /// Total Watt-hours Imported phase A
137    pub tot_wh_imp_ph_a: Option<u32>,
138    /// Total Watt-hours Imported phase B
139    pub tot_wh_imp_ph_b: Option<u32>,
140    /// Total Watt-hours Imported phase C
141    pub tot_wh_imp_ph_c: Option<u32>,
142    /// Real Energy scale factor
143    pub tot_wh_sf: i16,
144    /// Total VA-hours Exported
145    ///
146    /// Total Apparent Energy Exported
147    pub tot_v_ah_exp: Option<u32>,
148    /// Total VA-hours Exported phase A
149    pub tot_v_ah_exp_ph_a: Option<u32>,
150    /// Total VA-hours Exported phase B
151    pub tot_v_ah_exp_ph_b: Option<u32>,
152    /// Total VA-hours Exported phase C
153    pub tot_v_ah_exp_ph_c: Option<u32>,
154    /// Total VA-hours Imported
155    ///
156    /// Total Apparent Energy Imported
157    pub tot_v_ah_imp: Option<u32>,
158    /// Total VA-hours Imported phase A
159    pub tot_v_ah_imp_ph_a: Option<u32>,
160    /// Total VA-hours Imported phase B
161    pub tot_v_ah_imp_ph_b: Option<u32>,
162    /// Total VA-hours Imported phase C
163    pub tot_v_ah_imp_ph_c: Option<u32>,
164    /// Apparent Energy scale factor
165    pub tot_v_ah_sf: Option<i16>,
166    /// Total VAR-hours Imported Q1
167    ///
168    /// Total Reactive Energy Imported Quadrant 1
169    pub tot_v_arh_imp_q1: Option<u32>,
170    /// Total VAr-hours Imported Q1 phase A
171    pub tot_v_arh_imp_q1_ph_a: Option<u32>,
172    /// Total VAr-hours Imported Q1 phase B
173    pub tot_v_arh_imp_q1_ph_b: Option<u32>,
174    /// Total VAr-hours Imported Q1 phase C
175    pub tot_v_arh_imp_q1_ph_c: Option<u32>,
176    /// Total VAr-hours Imported Q2
177    ///
178    /// Total Reactive Power Imported Quadrant 2
179    pub tot_v_arh_imp_q2: Option<u32>,
180    /// Total VAr-hours Imported Q2 phase A
181    pub tot_v_arh_imp_q2_ph_a: Option<u32>,
182    /// Total VAr-hours Imported Q2 phase B
183    pub tot_v_arh_imp_q2_ph_b: Option<u32>,
184    /// Total VAr-hours Imported Q2 phase C
185    pub tot_v_arh_imp_q2_ph_c: Option<u32>,
186    /// Total VAr-hours Exported Q3
187    ///
188    /// Total Reactive Power Exported Quadrant 3
189    pub tot_v_arh_exp_q3: Option<u32>,
190    /// Total VAr-hours Exported Q3 phase A
191    pub tot_v_arh_exp_q3_ph_a: Option<u32>,
192    /// Total VAr-hours Exported Q3 phase B
193    pub tot_v_arh_exp_q3_ph_b: Option<u32>,
194    /// Total VAr-hours Exported Q3 phase C
195    pub tot_v_arh_exp_q3_ph_c: Option<u32>,
196    /// Total VAr-hours Exported Q4
197    ///
198    /// Total Reactive Power Exported Quadrant 4
199    pub tot_v_arh_exp_q4: Option<u32>,
200    /// Total VAr-hours Exported Q4 Imported phase A
201    pub tot_v_arh_exp_q4_ph_a: Option<u32>,
202    /// Total VAr-hours Exported Q4 Imported phase B
203    pub tot_v_arh_exp_q4_ph_b: Option<u32>,
204    /// Total VAr-hours Exported Q4 Imported phase C
205    pub tot_v_arh_exp_q4_ph_c: Option<u32>,
206    /// Reactive Energy scale factor
207    pub tot_v_arh_sf: Option<i16>,
208    /// Events
209    ///
210    /// Meter Event Flags
211    pub evt: Evt,
212}
213#[allow(missing_docs)]
214impl AcMeterAnOrAb {
215    pub const A: crate::Point<Self, i16> = crate::Point::new(0, 1, false);
216    pub const APH_A: crate::Point<Self, i16> = crate::Point::new(1, 1, false);
217    pub const APH_B: crate::Point<Self, Option<i16>> = crate::Point::new(2, 1, false);
218    pub const APH_C: crate::Point<Self, Option<i16>> = crate::Point::new(3, 1, false);
219    pub const A_SF: crate::Point<Self, i16> = crate::Point::new(4, 1, false);
220    pub const PH_V: crate::Point<Self, Option<i16>> = crate::Point::new(5, 1, false);
221    pub const PH_VPH_A: crate::Point<Self, Option<i16>> = crate::Point::new(6, 1, false);
222    pub const PH_VPH_B: crate::Point<Self, Option<i16>> = crate::Point::new(7, 1, false);
223    pub const PH_VPH_C: crate::Point<Self, Option<i16>> = crate::Point::new(8, 1, false);
224    pub const PPV: crate::Point<Self, Option<i16>> = crate::Point::new(9, 1, false);
225    pub const PP_VPH_AB: crate::Point<Self, Option<i16>> = crate::Point::new(10, 1, false);
226    pub const PP_VPH_BC: crate::Point<Self, Option<i16>> = crate::Point::new(11, 1, false);
227    pub const PP_VPH_CA: crate::Point<Self, Option<i16>> = crate::Point::new(12, 1, false);
228    pub const V_SF: crate::Point<Self, i16> = crate::Point::new(13, 1, false);
229    pub const HZ: crate::Point<Self, i16> = crate::Point::new(14, 1, false);
230    pub const HZ_SF: crate::Point<Self, Option<i16>> = crate::Point::new(15, 1, false);
231    pub const W: crate::Point<Self, i16> = crate::Point::new(16, 1, false);
232    pub const WPH_A: crate::Point<Self, Option<i16>> = crate::Point::new(17, 1, false);
233    pub const WPH_B: crate::Point<Self, Option<i16>> = crate::Point::new(18, 1, false);
234    pub const WPH_C: crate::Point<Self, Option<i16>> = crate::Point::new(19, 1, false);
235    pub const W_SF: crate::Point<Self, i16> = crate::Point::new(20, 1, false);
236    pub const VA: crate::Point<Self, Option<i16>> = crate::Point::new(21, 1, false);
237    pub const V_APH_A: crate::Point<Self, Option<i16>> = crate::Point::new(22, 1, false);
238    pub const V_APH_B: crate::Point<Self, Option<i16>> = crate::Point::new(23, 1, false);
239    pub const V_APH_C: crate::Point<Self, Option<i16>> = crate::Point::new(24, 1, false);
240    pub const VA_SF: crate::Point<Self, Option<i16>> = crate::Point::new(25, 1, false);
241    pub const VAR: crate::Point<Self, Option<i16>> = crate::Point::new(26, 1, false);
242    pub const VA_RPH_A: crate::Point<Self, Option<i16>> = crate::Point::new(27, 1, false);
243    pub const VA_RPH_B: crate::Point<Self, Option<i16>> = crate::Point::new(28, 1, false);
244    pub const VA_RPH_C: crate::Point<Self, Option<i16>> = crate::Point::new(29, 1, false);
245    pub const VAR_SF: crate::Point<Self, Option<i16>> = crate::Point::new(30, 1, false);
246    pub const PF: crate::Point<Self, Option<i16>> = crate::Point::new(31, 1, false);
247    pub const P_FPH_A: crate::Point<Self, Option<i16>> = crate::Point::new(32, 1, false);
248    pub const P_FPH_B: crate::Point<Self, Option<i16>> = crate::Point::new(33, 1, false);
249    pub const P_FPH_C: crate::Point<Self, Option<i16>> = crate::Point::new(34, 1, false);
250    pub const PF_SF: crate::Point<Self, Option<i16>> = crate::Point::new(35, 1, false);
251    pub const TOT_WH_EXP: crate::Point<Self, u32> = crate::Point::new(36, 2, false);
252    pub const TOT_WH_EXP_PH_A: crate::Point<Self, Option<u32>> = crate::Point::new(38, 2, false);
253    pub const TOT_WH_EXP_PH_B: crate::Point<Self, Option<u32>> = crate::Point::new(40, 2, false);
254    pub const TOT_WH_EXP_PH_C: crate::Point<Self, Option<u32>> = crate::Point::new(42, 2, false);
255    pub const TOT_WH_IMP: crate::Point<Self, u32> = crate::Point::new(44, 2, false);
256    pub const TOT_WH_IMP_PH_A: crate::Point<Self, Option<u32>> = crate::Point::new(46, 2, false);
257    pub const TOT_WH_IMP_PH_B: crate::Point<Self, Option<u32>> = crate::Point::new(48, 2, false);
258    pub const TOT_WH_IMP_PH_C: crate::Point<Self, Option<u32>> = crate::Point::new(50, 2, false);
259    pub const TOT_WH_SF: crate::Point<Self, i16> = crate::Point::new(52, 1, false);
260    pub const TOT_V_AH_EXP: crate::Point<Self, Option<u32>> = crate::Point::new(53, 2, false);
261    pub const TOT_V_AH_EXP_PH_A: crate::Point<Self, Option<u32>> = crate::Point::new(55, 2, false);
262    pub const TOT_V_AH_EXP_PH_B: crate::Point<Self, Option<u32>> = crate::Point::new(57, 2, false);
263    pub const TOT_V_AH_EXP_PH_C: crate::Point<Self, Option<u32>> = crate::Point::new(59, 2, false);
264    pub const TOT_V_AH_IMP: crate::Point<Self, Option<u32>> = crate::Point::new(61, 2, false);
265    pub const TOT_V_AH_IMP_PH_A: crate::Point<Self, Option<u32>> = crate::Point::new(63, 2, false);
266    pub const TOT_V_AH_IMP_PH_B: crate::Point<Self, Option<u32>> = crate::Point::new(65, 2, false);
267    pub const TOT_V_AH_IMP_PH_C: crate::Point<Self, Option<u32>> = crate::Point::new(67, 2, false);
268    pub const TOT_V_AH_SF: crate::Point<Self, Option<i16>> = crate::Point::new(69, 1, false);
269    pub const TOT_V_ARH_IMP_Q1: crate::Point<Self, Option<u32>> = crate::Point::new(70, 2, false);
270    pub const TOT_V_ARH_IMP_Q1_PH_A: crate::Point<Self, Option<u32>> =
271        crate::Point::new(72, 2, false);
272    pub const TOT_V_ARH_IMP_Q1_PH_B: crate::Point<Self, Option<u32>> =
273        crate::Point::new(74, 2, false);
274    pub const TOT_V_ARH_IMP_Q1_PH_C: crate::Point<Self, Option<u32>> =
275        crate::Point::new(76, 2, false);
276    pub const TOT_V_ARH_IMP_Q2: crate::Point<Self, Option<u32>> = crate::Point::new(78, 2, false);
277    pub const TOT_V_ARH_IMP_Q2_PH_A: crate::Point<Self, Option<u32>> =
278        crate::Point::new(80, 2, false);
279    pub const TOT_V_ARH_IMP_Q2_PH_B: crate::Point<Self, Option<u32>> =
280        crate::Point::new(82, 2, false);
281    pub const TOT_V_ARH_IMP_Q2_PH_C: crate::Point<Self, Option<u32>> =
282        crate::Point::new(84, 2, false);
283    pub const TOT_V_ARH_EXP_Q3: crate::Point<Self, Option<u32>> = crate::Point::new(86, 2, false);
284    pub const TOT_V_ARH_EXP_Q3_PH_A: crate::Point<Self, Option<u32>> =
285        crate::Point::new(88, 2, false);
286    pub const TOT_V_ARH_EXP_Q3_PH_B: crate::Point<Self, Option<u32>> =
287        crate::Point::new(90, 2, false);
288    pub const TOT_V_ARH_EXP_Q3_PH_C: crate::Point<Self, Option<u32>> =
289        crate::Point::new(92, 2, false);
290    pub const TOT_V_ARH_EXP_Q4: crate::Point<Self, Option<u32>> = crate::Point::new(94, 2, false);
291    pub const TOT_V_ARH_EXP_Q4_PH_A: crate::Point<Self, Option<u32>> =
292        crate::Point::new(96, 2, false);
293    pub const TOT_V_ARH_EXP_Q4_PH_B: crate::Point<Self, Option<u32>> =
294        crate::Point::new(98, 2, false);
295    pub const TOT_V_ARH_EXP_Q4_PH_C: crate::Point<Self, Option<u32>> =
296        crate::Point::new(100, 2, false);
297    pub const TOT_V_ARH_SF: crate::Point<Self, Option<i16>> = crate::Point::new(102, 1, false);
298    pub const EVT: crate::Point<Self, Evt> = crate::Point::new(103, 2, false);
299}
300impl crate::Group for AcMeterAnOrAb {
301    const LEN: u16 = 105;
302}
303impl AcMeterAnOrAb {
304    fn parse_group(data: &[u16]) -> Result<(&[u16], Self), crate::DecodeError> {
305        let nested_data = data
306            .get(usize::from(<Self as crate::Group>::LEN)..)
307            .unwrap_or(&[]);
308        Ok((
309            nested_data,
310            Self {
311                a: Self::A.from_data(data)?,
312                aph_a: Self::APH_A.from_data(data)?,
313                aph_b: Self::APH_B.from_data(data)?,
314                aph_c: Self::APH_C.from_data(data)?,
315                a_sf: Self::A_SF.from_data(data)?,
316                ph_v: Self::PH_V.from_data(data)?,
317                ph_vph_a: Self::PH_VPH_A.from_data(data)?,
318                ph_vph_b: Self::PH_VPH_B.from_data(data)?,
319                ph_vph_c: Self::PH_VPH_C.from_data(data)?,
320                ppv: Self::PPV.from_data(data)?,
321                pp_vph_ab: Self::PP_VPH_AB.from_data(data)?,
322                pp_vph_bc: Self::PP_VPH_BC.from_data(data)?,
323                pp_vph_ca: Self::PP_VPH_CA.from_data(data)?,
324                v_sf: Self::V_SF.from_data(data)?,
325                hz: Self::HZ.from_data(data)?,
326                hz_sf: Self::HZ_SF.from_data(data)?,
327                w: Self::W.from_data(data)?,
328                wph_a: Self::WPH_A.from_data(data)?,
329                wph_b: Self::WPH_B.from_data(data)?,
330                wph_c: Self::WPH_C.from_data(data)?,
331                w_sf: Self::W_SF.from_data(data)?,
332                va: Self::VA.from_data(data)?,
333                v_aph_a: Self::V_APH_A.from_data(data)?,
334                v_aph_b: Self::V_APH_B.from_data(data)?,
335                v_aph_c: Self::V_APH_C.from_data(data)?,
336                va_sf: Self::VA_SF.from_data(data)?,
337                var: Self::VAR.from_data(data)?,
338                va_rph_a: Self::VA_RPH_A.from_data(data)?,
339                va_rph_b: Self::VA_RPH_B.from_data(data)?,
340                va_rph_c: Self::VA_RPH_C.from_data(data)?,
341                var_sf: Self::VAR_SF.from_data(data)?,
342                pf: Self::PF.from_data(data)?,
343                p_fph_a: Self::P_FPH_A.from_data(data)?,
344                p_fph_b: Self::P_FPH_B.from_data(data)?,
345                p_fph_c: Self::P_FPH_C.from_data(data)?,
346                pf_sf: Self::PF_SF.from_data(data)?,
347                tot_wh_exp: Self::TOT_WH_EXP.from_data(data)?,
348                tot_wh_exp_ph_a: Self::TOT_WH_EXP_PH_A.from_data(data)?,
349                tot_wh_exp_ph_b: Self::TOT_WH_EXP_PH_B.from_data(data)?,
350                tot_wh_exp_ph_c: Self::TOT_WH_EXP_PH_C.from_data(data)?,
351                tot_wh_imp: Self::TOT_WH_IMP.from_data(data)?,
352                tot_wh_imp_ph_a: Self::TOT_WH_IMP_PH_A.from_data(data)?,
353                tot_wh_imp_ph_b: Self::TOT_WH_IMP_PH_B.from_data(data)?,
354                tot_wh_imp_ph_c: Self::TOT_WH_IMP_PH_C.from_data(data)?,
355                tot_wh_sf: Self::TOT_WH_SF.from_data(data)?,
356                tot_v_ah_exp: Self::TOT_V_AH_EXP.from_data(data)?,
357                tot_v_ah_exp_ph_a: Self::TOT_V_AH_EXP_PH_A.from_data(data)?,
358                tot_v_ah_exp_ph_b: Self::TOT_V_AH_EXP_PH_B.from_data(data)?,
359                tot_v_ah_exp_ph_c: Self::TOT_V_AH_EXP_PH_C.from_data(data)?,
360                tot_v_ah_imp: Self::TOT_V_AH_IMP.from_data(data)?,
361                tot_v_ah_imp_ph_a: Self::TOT_V_AH_IMP_PH_A.from_data(data)?,
362                tot_v_ah_imp_ph_b: Self::TOT_V_AH_IMP_PH_B.from_data(data)?,
363                tot_v_ah_imp_ph_c: Self::TOT_V_AH_IMP_PH_C.from_data(data)?,
364                tot_v_ah_sf: Self::TOT_V_AH_SF.from_data(data)?,
365                tot_v_arh_imp_q1: Self::TOT_V_ARH_IMP_Q1.from_data(data)?,
366                tot_v_arh_imp_q1_ph_a: Self::TOT_V_ARH_IMP_Q1_PH_A.from_data(data)?,
367                tot_v_arh_imp_q1_ph_b: Self::TOT_V_ARH_IMP_Q1_PH_B.from_data(data)?,
368                tot_v_arh_imp_q1_ph_c: Self::TOT_V_ARH_IMP_Q1_PH_C.from_data(data)?,
369                tot_v_arh_imp_q2: Self::TOT_V_ARH_IMP_Q2.from_data(data)?,
370                tot_v_arh_imp_q2_ph_a: Self::TOT_V_ARH_IMP_Q2_PH_A.from_data(data)?,
371                tot_v_arh_imp_q2_ph_b: Self::TOT_V_ARH_IMP_Q2_PH_B.from_data(data)?,
372                tot_v_arh_imp_q2_ph_c: Self::TOT_V_ARH_IMP_Q2_PH_C.from_data(data)?,
373                tot_v_arh_exp_q3: Self::TOT_V_ARH_EXP_Q3.from_data(data)?,
374                tot_v_arh_exp_q3_ph_a: Self::TOT_V_ARH_EXP_Q3_PH_A.from_data(data)?,
375                tot_v_arh_exp_q3_ph_b: Self::TOT_V_ARH_EXP_Q3_PH_B.from_data(data)?,
376                tot_v_arh_exp_q3_ph_c: Self::TOT_V_ARH_EXP_Q3_PH_C.from_data(data)?,
377                tot_v_arh_exp_q4: Self::TOT_V_ARH_EXP_Q4.from_data(data)?,
378                tot_v_arh_exp_q4_ph_a: Self::TOT_V_ARH_EXP_Q4_PH_A.from_data(data)?,
379                tot_v_arh_exp_q4_ph_b: Self::TOT_V_ARH_EXP_Q4_PH_B.from_data(data)?,
380                tot_v_arh_exp_q4_ph_c: Self::TOT_V_ARH_EXP_Q4_PH_C.from_data(data)?,
381                tot_v_arh_sf: Self::TOT_V_ARH_SF.from_data(data)?,
382                evt: Self::EVT.from_data(data)?,
383            },
384        ))
385    }
386}
387bitflags::bitflags! {
388    #[doc = " Events"] #[doc = " "] #[doc = " Meter Event Flags"] #[derive(Copy, Clone,
389    Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde", derive(::serde::Serialize,
390    ::serde::Deserialize))] pub struct Evt : u32 { #[allow(missing_docs)] const
391    PowerFailure = 4; #[allow(missing_docs)] const UnderVoltage = 8;
392    #[allow(missing_docs)] const LowPf = 16; #[allow(missing_docs)] const OverCurrent =
393    32; #[allow(missing_docs)] const OverVoltage = 64; #[allow(missing_docs)] const
394    MissingSensor = 128; #[allow(missing_docs)] const Oem01 = 65536;
395    #[allow(missing_docs)] const Oem02 = 131072; #[allow(missing_docs)] const Oem03 =
396    262144; #[allow(missing_docs)] const Oem04 = 524288; #[allow(missing_docs)] const
397    Oem05 = 1048576; #[allow(missing_docs)] const Oem06 = 2097152; #[allow(missing_docs)]
398    const Oem07 = 4194304; #[allow(missing_docs)] const Oem08 = 8388608;
399    #[allow(missing_docs)] const Oem09 = 16777216; #[allow(missing_docs)] const Oem10 =
400    33554432; #[allow(missing_docs)] const Oem11 = 67108864; #[allow(missing_docs)] const
401    Oem12 = 134217728; #[allow(missing_docs)] const Oem13 = 268435456;
402    #[allow(missing_docs)] const Oem14 = 536870912; #[allow(missing_docs)] const Oem15 =
403    1073741824; }
404}
405impl crate::Value for Evt {
406    fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
407        let value = u32::decode(data)?;
408        Ok(Self::from_bits_retain(value))
409    }
410    fn encode(self) -> Box<[u16]> {
411        self.bits().encode()
412    }
413}
414impl crate::FixedSize for Evt {
415    const SIZE: u16 = 2u16;
416    const INVALID: Self = Self::from_bits_retain(4294967295u32);
417    fn is_invalid(&self) -> bool {
418        self.bits() == 4294967295u32
419    }
420}
421impl crate::Model for AcMeterAnOrAb {
422    const ID: u16 = 201;
423    fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
424        models.m201
425    }
426    fn parse(data: &[u16]) -> Result<Self, crate::ParseError<Self>> {
427        let (_, model) = Self::parse_group(data)?;
428        Ok(model)
429    }
430}