1 package net.sf.mbus4j.dataframes.datablocks.vif;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.KILO;
31 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.MEGA;
32 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.MICRO;
33 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.MILLI;
34 import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.ONE;
35 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.BAR;
36 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.CUBIC_METER;
37 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.CUBIC_METER_PER_HOUR;
38 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.CUBIC_METER_PER_MINUTE;
39 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.DATE;
40 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.DAY;
41 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.DEGREE_CELSIUS;
42 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.GRAMM;
43 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.GRAMM_PER_HOUR;
44 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.HOUR;
45 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.JOULE;
46 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.JOULE_PER_HOUR;
47 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.KELVIN;
48 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.LITRE;
49 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.LITRE_PER_HOUR;
50 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.LITRE_PER_MINUTE;
51 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.LITRE_PER_SECOND;
52 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.MINUTE;
53 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.SECOND;
54 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.TIME_AND_DATE;
55 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.TONNS;
56 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.TONN_PER_HOUR;
57 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.WATT;
58 import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.WATT_HOUR;
59
60
61
62
63
64
65
66 public enum VifPrimary implements Vif {
67
68 ENERGY_MILLI_WH_E_0(0x00, ENERGY, MILLI, WATT_HOUR, 0),
69 ENERGY_MILLI_WH_E_1(0x01, ENERGY, MILLI, WATT_HOUR, 1),
70 ENERGY_MILLI_WH_E_2(0x02, ENERGY, MILLI, WATT_HOUR, 2),
71 ENERGY_WH_E_0(0x03, ENERGY, ONE, WATT_HOUR, 0),
72 ENERGY_WH_E_1(0x04, ENERGY, ONE, WATT_HOUR, 1),
73 ENERGY_WH_E_2(0x05, ENERGY, ONE, WATT_HOUR, 2),
74 ENERGY_KILO_WH_E_0(0x06, ENERGY, KILO, WATT_HOUR, 0),
75 ENERGY_KILO_WH_E_1(0x07, ENERGY, KILO, WATT_HOUR, 1),
76 ENERGY_J_E_0(0x08, ENERGY, ONE, JOULE, 0),
77 ENERGY_J_E_1(0x09, ENERGY, ONE, JOULE, 1),
78 ENERGY_J_E_2(0x0A, ENERGY, ONE, JOULE, 2),
79 ENERGY_KILO_J_E_0(0x0B, ENERGY, KILO, JOULE, 0),
80 ENERGY_KILO_J_E_1(0x0C, ENERGY, KILO, JOULE, 1),
81 ENERGY_KILO_J_E_2(0x0D, ENERGY, KILO, JOULE, 2),
82 ENERGY_MEGA_J_E_0(0x0E, ENERGY, MEGA, JOULE, 0),
83 ENERGY_MEGA_J_E_1(0x0F, ENERGY, MEGA, JOULE, 1),
84 VOLUME_MILLI_L_E_0(0x10, VOLUME, MILLI, LITRE, 0),
85 VOLUME_MILLI_L_E_1(0x11, VOLUME, MILLI, LITRE, 1),
86 VOLUME_MILLI_L_E_2(0x12, VOLUME, MILLI, LITRE, 2),
87 VOLUME_L_E_0(0x13, VOLUME, ONE, LITRE, 0),
88 VOLUME_L_E_1(0x14, VOLUME, ONE, LITRE, 1),
89 VOLUME_L_E_2(0x15, VOLUME, ONE, LITRE, 2),
90 VOLUME_CBM_E_0(0x16, VOLUME, ONE, CUBIC_METER, 0),
91 VOLUME_CBM_E_1(0x17, VOLUME, ONE, CUBIC_METER, 1),
92 MASS_G_E_0(0x18, MASS, ONE, GRAMM, 0),
93 MASS_G_E_1(0x19, MASS, ONE, GRAMM, 1),
94 MASS_G_E_2(0x1A, MASS, ONE, GRAMM, 2),
95 MASS_KILO_G_E_0(0x1B, MASS, KILO, GRAMM, 0),
96 MASS_KILO_G_E_1(0x1C, MASS, KILO, GRAMM, 1),
97 MASS_KILO_G_E_2(0x1D, MASS, KILO, GRAMM, 2),
98 MASS_TONNS_E_0(0x1E, MASS, ONE, TONNS, 0),
99 MASS_TONNS_E_1(0x1F, MASS, ONE, TONNS, 1),
100 ON_TIME_S(0x20, ON_TIME, SECOND),
101 ON_TIME_MIN(0x21, ON_TIME, MINUTE),
102 ON_TIME_H(0x22, ON_TIME, HOUR),
103 ON_TIME_D(0x23, ON_TIME, DAY),
104 OPERATING_TIME_S(0x24, OPERATING_TIME, SECOND),
105 OPERATING_TIME_MIN(0x25, OPERATING_TIME, MINUTE),
106 OPERATING_TIME_H(0x26, OPERATING_TIME, HOUR),
107 OPERATING_TIME_D(0x27, OPERATING_TIME, DAY),
108 POWER_MILLI_W_E_0(0x28, POWER, MILLI, WATT, 0),
109 POWER_MILLI_W_E_1(0x29, POWER, MILLI, WATT, 1),
110 POWER_MILLI_W_E_2(0x2A, POWER, MILLI, WATT, 2),
111 POWER_W_E_0(0x2B, POWER, ONE, WATT, 0),
112 POWER_W_E_1(0x2C, POWER, ONE, WATT, 1),
113 POWER_W_E_2(0x2D, POWER, ONE, WATT, 2),
114 POWER_KILO_W_E_0(0x2E, POWER, KILO, WATT, 0),
115 POWER_KILO_W_E_1(0x2F, POWER, KILO, WATT, 1),
116 POWER_J_PER_H_E_0(0x30, POWER, ONE, JOULE_PER_HOUR, 0),
117 POWER_J_PER_H_E_1(0x31, POWER, ONE, JOULE_PER_HOUR, 1),
118 POWER_J_PER_H_E_2(0x32, POWER, ONE, JOULE_PER_HOUR, 2),
119 POWER_KILO_J_PER_H_E_0(0x33, POWER, KILO, JOULE_PER_HOUR, 0),
120 POWER_KILO_J_PER_H_E_1(0x34, POWER, KILO, JOULE_PER_HOUR, 1),
121 POWER_KILO_J_PER_H_E_2(0x35, POWER, KILO, JOULE_PER_HOUR, 2),
122 POWER_MEGA_J_PER_H_E_0(0x36, POWER, MEGA, JOULE_PER_HOUR, 0),
123 POWER_MEGA_J_PER_H_E_1(0x37, POWER, MEGA, JOULE_PER_HOUR, 1),
124 VOLUME_FLOW_MILLI_L_PER_H_E_0(0x38, VOLUME_FLOW, MILLI, LITRE_PER_HOUR, 0),
125 VOLUME_FLOW_MILLI_L_PER_H_E_1(0x39, VOLUME_FLOW, MILLI, LITRE_PER_HOUR, 1),
126 VOLUME_FLOW_MILLI_L_PER_H_E_2(0x3A, VOLUME_FLOW, MILLI, LITRE_PER_HOUR, 2),
127 VOLUME_FLOW_L_PER_H_E_0(0x3B, VOLUME_FLOW, ONE, LITRE_PER_HOUR, 0),
128 VOLUME_FLOW_L_PER_H_E_1(0x3C, VOLUME_FLOW, ONE, LITRE_PER_HOUR, 1),
129 VOLUME_FLOW_L_PER_H_E_2(0x3D, VOLUME_FLOW, ONE, LITRE_PER_HOUR, 2),
130 VOLUME_FLOW_CBM_PER_H_E_0(0x3E, VOLUME_FLOW, ONE, CUBIC_METER_PER_HOUR, 0),
131 VOLUME_FLOW_CBM_PER_H_E_1(0x3F, VOLUME_FLOW, ONE, CUBIC_METER_PER_HOUR, 1),
132 VOLUME_FLOW_MICRO_L_PER_MIN_E_2(0x40, VOLUME_FLOW, MICRO, LITRE_PER_MINUTE, 2),
133 VOLUME_FLOW_MILLI_L_PER_MIN_E_0(0x41, VOLUME_FLOW, MILLI, LITRE_PER_MINUTE, 0),
134 VOLUME_FLOW_MILLI_L_PER_MIN_E_1(0x42, VOLUME_FLOW, MILLI, LITRE_PER_MINUTE, 1),
135 VOLUME_FLOW_MILLI_L_PER_MIN_E_2(0x43, VOLUME_FLOW, MILLI, LITRE_PER_MINUTE, 2),
136 VOLUME_FLOW_L_PER_MIN_E_0(0x44, VOLUME_FLOW, ONE, LITRE_PER_MINUTE, 0),
137 VOLUME_FLOW_L_PER_MIN_E_1(0x45, VOLUME_FLOW, ONE, LITRE_PER_MINUTE, 1),
138 VOLUME_FLOW_L_PER_MIN_E_2(0x46, VOLUME_FLOW, ONE, LITRE_PER_MINUTE, 2),
139 VOLUME_FLOW_CBM_PER_MIN_E_0(0x47, VOLUME_FLOW, ONE, CUBIC_METER_PER_MINUTE, 0),
140 VOLUME_FLOW_MICRO_L_PER_S_E_0(0x48, VOLUME_FLOW, MICRO, LITRE_PER_SECOND, 0),
141 VOLUME_FLOW_MICRO_L_PER_S_E_1(0x49, VOLUME_FLOW, MICRO, LITRE_PER_SECOND, 1),
142 VOLUME_FLOW_MICRO_L_PER_S_E_2(0x4A, VOLUME_FLOW, MICRO, LITRE_PER_SECOND, 2),
143 VOLUME_FLOW_MILLI_L_PER_S_E_0(0x4B, VOLUME_FLOW, MILLI, LITRE_PER_SECOND, 0),
144 VOLUME_FLOW_MILLI_L_PER_S_E_1(0x4C, VOLUME_FLOW, MILLI, LITRE_PER_SECOND, 1),
145 VOLUME_FLOW_MILLI_L_PER_S_E_2(0x4D, VOLUME_FLOW, MILLI, LITRE_PER_SECOND, 2),
146 VOLUME_FLOW_L_PER_S_E_0(0x4E, VOLUME_FLOW, ONE, LITRE_PER_SECOND, 0),
147 VOLUME_FLOW_L_PER_S_E_1(0x4F, VOLUME_FLOW, ONE, LITRE_PER_SECOND, 1),
148 MASS_FLOW_GRAMM_PER_H_E_0(0x50, MASS_FLOW, ONE, GRAMM_PER_HOUR, 0),
149 MASS_FLOW_GRAMM_PER_H_E_1(0x51, MASS_FLOW, ONE, GRAMM_PER_HOUR, 1),
150 MASS_FLOW_GRAMM_PER_H_E_2(0x52, MASS_FLOW, ONE, GRAMM_PER_HOUR, 2),
151 MASS_FLOW_KG_PER_H_E_0(0x53, MASS_FLOW, KILO, GRAMM_PER_HOUR, 0),
152 MASS_FLOW_KG_PER_H_E_1(0x54, MASS_FLOW, KILO, GRAMM_PER_HOUR, 1),
153 MASS_FLOW_KG_PER_H_E_2(0x55, MASS_FLOW, KILO, GRAMM_PER_HOUR, 2),
154 MASS_FLOW_T_PER_H_E_0(0x56, MASS_FLOW, ONE, TONN_PER_HOUR, 0),
155 MASS_FLOW_T_PER_H_E_1(0x57, MASS_FLOW, ONE, TONN_PER_HOUR, 1),
156 FLOW_TEMPERATURE_C_E__3(0x58, FLOW_TEMPERATURE, ONE, DEGREE_CELSIUS, -3),
157 FLOW_TEMPERATURE_C_E__2(0x59, FLOW_TEMPERATURE, ONE, DEGREE_CELSIUS, -2),
158 FLOW_TEMPERATURE_C_E__1(0x5A, FLOW_TEMPERATURE, ONE, DEGREE_CELSIUS, -1),
159 FLOW_TEMPERATURE_C_E_0(0x5B, FLOW_TEMPERATURE, ONE, DEGREE_CELSIUS, 0),
160 RETURN_TEMPERATURE_C_E__3(0x5C, RETURN_TEMPERATURE, ONE, DEGREE_CELSIUS, -3),
161 RETURN_TEMPERATURE_C_E__2(0x5D, RETURN_TEMPERATURE, ONE, DEGREE_CELSIUS, -2),
162 RETURN_TEMPERATURE_C_E__1(0x5E, RETURN_TEMPERATURE, ONE, DEGREE_CELSIUS, -1),
163 RETURN_TEMPERATURE_C_E_0(0x5F, RETURN_TEMPERATURE, ONE, DEGREE_CELSIUS, 0),
164 TEMPERATURE_DIFFERENCE_K_E__3(0x60, TEMPERATURE_DIFFERENCE, ONE, KELVIN, -3),
165 TEMPERATURE_DIFFERENCE_K_E__2(0x61, TEMPERATURE_DIFFERENCE, ONE, KELVIN, -2),
166 TEMPERATURE_DIFFERENCE_K_E__1(0x62, TEMPERATURE_DIFFERENCE, ONE, KELVIN, -1),
167 TEMPERATURE_DIFFERENCE_K_E_0(0x63, TEMPERATURE_DIFFERENCE, ONE, KELVIN, 0),
168 EXTERNAL_TEMPERATURE_C_E__3(0x64, EXTERNAL_TEMPERATURE, ONE, DEGREE_CELSIUS, -3),
169 EXTERNAL_TEMPERATURE_C_E__2(0x65, EXTERNAL_TEMPERATURE, ONE, DEGREE_CELSIUS, -2),
170 EXTERNAL_TEMPERATURE_C_E__1(0x66, EXTERNAL_TEMPERATURE, ONE, DEGREE_CELSIUS, -1),
171 EXTERNAL_TEMPERATURE_C_E_0(0x67, EXTERNAL_TEMPERATURE, ONE, DEGREE_CELSIUS, 0),
172 PRESSURE_MILLI_BAR_E__3(0x68, PRESSURE, MILLI, BAR, 0),
173 PRESSURE_MILLI_BAR_E__2(0x69, PRESSURE, MILLI, BAR, 1),
174 PRESSURE_MILLI_BAR_E__1(0x6A, PRESSURE, MILLI, BAR, 2),
175 PRESSURE_BAR_E_0(0x6B, PRESSURE, ONE, BAR, 0),
176 TIMEPOINT_DATE(0x6C, TIME_POINT, DATE),
177 TIMEPOINT_TIME_AND_DATE(0x6D, TIME_POINT, TIME_AND_DATE),
178 UNITS_FOR_H_C_A(0x6E, "Units for H.C.A."),
179 RESERVED_0X6F(0x6F),
180 AVERAGING_DURATION_S(0x70, AVERAGING_DURATION, SECOND),
181 AVERAGING_DURATION_MIN(0x71, AVERAGING_DURATION, MINUTE),
182 AVERAGING_DURATION_H(0x72, AVERAGING_DURATION, HOUR),
183 AVERAGING_DURATION_D(0x73, AVERAGING_DURATION, DAY),
184 ACTUALLY_DURATION_S(0x74, ACTUALLY_DURATION, SECOND),
185 ACTUALLY_DURATION_MIN(0x75, ACTUALLY_DURATION, MINUTE),
186 ACTUALLY_DURATION_H(0x76, ACTUALLY_DURATION, HOUR),
187 ACTUALLY_DURATION_D(0x77, ACTUALLY_DURATION, DAY),
188 FABRICATION_NO(0x78, "Fabrication No"),
189 ENHANCED_IDENTIFICATION_RECORD(0x79, "Enhanced Identification Record"),
190 BUS_ADDRESS(0x7A, "Bus Address"),
191 EXTENSION_OF_VIF_CODES_FB(0x7B, "true VIF is given in the first VIFE FB extention"),
192 ASCII_EXTENTION(0x7C, "ASCII EXT"),
193 EXTENSION_OF_VIF_CODES_FD(0x7D, "true VIF is given in the first VIFE FD extention"),
194 READOUT_SELECTION(0x7E, "Readout selection of all storage numbers, all tariffs and all VIF");
195
196 public final static VifPrimary valueOfTableIndex(int vifCode) {
197 return map[vifCode];
198 }
199 private final String label;
200 private final SiPrefix siPrefix;
201 private final UnitOfMeasurement unit;
202 private final Integer exponent;
203 private final static VifPrimary[] map = values();
204
205 private VifPrimary(int vifCode) {
206 if (this.ordinal() != vifCode) {
207 throw new IllegalArgumentException("ordinal and vifCode mismatch!");
208 }
209 this.label = String.format("VifStd Reserved 0x%02x", vifCode);
210 this.siPrefix = null;
211 this.unit = null;
212 this.exponent = null;
213 }
214
215 private VifPrimary(int vifCode, String label) {
216 if (this.ordinal() != vifCode) {
217 throw new IllegalArgumentException("ordinal and vifCode mismatch!");
218 }
219 this.label = label;
220 this.siPrefix = null;
221 this.unit = null;
222 this.exponent = null;
223 }
224
225 private VifPrimary(int vifCode, String label, SiPrefix siPrefix, UnitOfMeasurement unit, int exponent) {
226 if (this.ordinal() != vifCode) {
227 throw new IllegalArgumentException("ordinal and vifCode mismatch!");
228 }
229 this.label = label;
230 this.siPrefix = siPrefix;
231 this.unit = unit;
232 this.exponent = exponent;
233 }
234
235 private VifPrimary(int vifCode, String label, UnitOfMeasurement unit) {
236 if (this.ordinal() != vifCode) {
237 throw new IllegalArgumentException("ordinal and vifCode mismatch!");
238 }
239 this.label = label;
240 this.siPrefix = null;
241 this.unit = unit;
242 this.exponent = null;
243 }
244
245
246
247
248 @Override
249 final public Integer getExponent() {
250 return exponent;
251 }
252
253 @Override
254 final public String getLabel() {
255 return label;
256 }
257
258
259
260
261 @Override
262 final public SiPrefix getSiPrefix() {
263 return siPrefix;
264 }
265
266 final public byte getTableIndex() {
267 return (byte) ordinal();
268 }
269
270
271
272
273 @Override
274 final public UnitOfMeasurement getUnitOfMeasurement() {
275 return unit;
276 }
277
278 public int getVifCode() {
279 return ordinal();
280 }
281
282 @Override
283 public String toString() {
284 return VifToString.vifToString(this);
285 }
286
287 public static VifPrimary assemble(String label, UnitOfMeasurement unitOfMeasurement, SiPrefix siPrefix, Integer exponent) {
288 for (VifPrimary value : values()) {
289 if (value.getLabel().equals(label) &&
290 ((unitOfMeasurement == value.getUnitOfMeasurement()) || ((unitOfMeasurement != null) && unitOfMeasurement.equals(value.getUnitOfMeasurement()))) &&
291 ((siPrefix == value.getSiPrefix()) || ((siPrefix != null) && siPrefix.equals(value.getSiPrefix()))) &&
292 ((exponent == value.getExponent()) || ((exponent != null) && exponent.equals(value.getExponent())))) {
293 return value;
294 }
295 }
296 return valueOf(label);
297 }
298
299 @Override
300 public VifTypes getVifType() {
301 return VifTypes.PRIMARY;
302 }
303 }