View Javadoc
1   package net.sf.mbus4j.dataframes.datablocks.vif;
2   
3   /*
4    * #%L
5    * mbus4j-core
6    * %%
7    * Copyright (C) 2009 - 2014 MBus4J
8    * %%
9    * mbus4j - Drivers for the M-Bus protocol - http://mbus4j.sourceforge.net/
10   * Copyright (C) 2009-2014, mbus4j.sf.net, and individual contributors as indicated
11   * by the @authors tag. See the copyright.txt in the distribution for a
12   * full listing of individual contributors.
13   * 
14   * This is free software; you can redistribute it and/or modify it
15   * under the terms of the GNU General Public License as
16   * published by the Free Software Foundation; either version 3 of
17   * the License, or (at your option) any later version.
18   * 
19   * This software is distributed in the hope that it will be useful,
20   * but WITHOUT ANY WARRANTY; without even the implied warranty of
21   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22   * Lesser General Public License for more details.
23   * 
24   * You should have received a copy of the GNU Lesser General Public
25   * License along with this software; if not, write to the Free
26   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
28   * #L%
29   */
30  import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.GIGA;
31  import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.KILO;
32  import static net.sf.mbus4j.dataframes.datablocks.vif.SiPrefix.MEGA;
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.AMERICAN_GALLON;
36  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.AMERICAN_GALLON_PER_HOUR;
37  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.AMERICAN_GALLON_PER_MINUTE;
38  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.CUBIC_FEET;
39  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.CUBIC_METER;
40  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.DEGREE_CELSIUS;
41  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.DEGREE_FAHRENHEIT;
42  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.JOULE;
43  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.JOULE_PER_HOUR;
44  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.TONNS;
45  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.WATT;
46  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.DEGREE;
47  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.VAR;
48  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.VA;
49  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.WATT_HOUR;
50  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.VAR_HOUR;
51  import static net.sf.mbus4j.dataframes.datablocks.vif.UnitOfMeasurement.HERTZ;
52  
53  
54  /**
55   *
56   * @author arnep@users.sourceforge.net
57   * @version $Id: VifFB.java 163 2016-10-07 18:53:55Z arnep $
58   */
59  public enum VifFB implements Vif {
60  
61  // DO NOT CHANGE ORDER!!!!
62      ENERGY_KWH_E_2(ENERGY, KILO, WATT_HOUR, 2),
63      ENERGY_MWH_E_0(ENERGY, MEGA, WATT_HOUR, 0),
64      REACTIVE_ENERGY_KVARH_E_0(REACTIVE_ENERGY, KILO, VAR_HOUR, 0),
65      REACTIVE_ENERGY_KVARH_E_1(REACTIVE_ENERGY, KILO, VAR_HOUR, 1),
66      RESERVED_0X04(),
67      RESERVED_0X05(),
68      RESERVED_0X06(),
69      RESERVED_0X07(),
70      ENERGY_MJ_2(ENERGY, MEGA, JOULE, 2),
71      ENERGY_GJ_0(ENERGY, GIGA, JOULE, 0),
72      RESERVED_0X0A(),
73      RESERVED_0X0B(),
74      RESERVED_0X0C(),
75      RESERVED_0X0D(),
76      RESERVED_0X0E(),
77      RESERVED_0X0F(),
78      VOLUME_CBM_E_2(VOLUME, ONE, CUBIC_METER, 2),
79      VOLUME_CBM_E_3(VOLUME, ONE, CUBIC_METER, 3),
80      RESERVED_0X12(),
81      RESERVED_0X13(),
82      REACTIVE_POWER_VAR_E_0(REACTIVE_POWER, ONE, VAR, 0),
83      RESERVED_0X15(),
84      RESERVED_0X16(),
85      RESERVED_0X17(),
86      MASS_TONN_E_2(MASS, ONE, TONNS, 2),
87      MASS_KILO_TONN(MASS, KILO, TONNS, 3),
88      RESERVED_0X1A(),
89      RESERVED_0X1B(),
90      RESERVED_0X1C(),
91      RESERVED_0X1D(),
92      RESERVED_0X1E(),
93      RESERVED_0X1F(),
94      RESERVED_0X20(),
95      VOLUME_CBF_E__1(VOLUME, ONE, CUBIC_FEET, -1),
96      VOLUME_AM_GALLON_E__1(VOLUME, ONE, AMERICAN_GALLON, -1),
97      VOLUME_AM_GALLON_E_0(VOLUME, ONE, AMERICAN_GALLON, 0),
98      VOLUME_FLOW_AM_GALLON_PER_MINUTE_E__3(VOLUME_FLOW, ONE, AMERICAN_GALLON_PER_MINUTE, -3),
99      VOLUME_FLOW_AM_GALLON_PER_MINUTE_E_0(VOLUME_FLOW, ONE, AMERICAN_GALLON_PER_MINUTE, 0),
100     VOLUME_FLOW_AM_GALLON_PER_HOUR_E_0(VOLUME_FLOW, ONE, AMERICAN_GALLON_PER_HOUR, 0),
101     RESERVED_0X27(),
102     POWER_KW_E_2(POWER, KILO, WATT, 2),
103     POWER_MW_E_0(POWER, MEGA, WATT, 0),
104     RESERVED_0X2A(),
105     PHASE_U_I_E__1_DEGREE(PHASE_U_I, ONE, DEGREE, -1),
106     RESERVED_0X2C(),
107     RESERVED_0X2D(),
108     FREQUENCY_HERTZ_E__1(FREQUENCY, ONE, HERTZ, -1),
109     RESERVED_0X2F(),
110     POWER_MEGA_JOULE_PER_HOUR_E_2(POWER, MEGA, JOULE_PER_HOUR, 2),
111     POWER_GJ_PER_HOUR_E_0(POWER, GIGA, JOULE_PER_HOUR, 0),
112     RESERVED_0X32(),
113     RESERVED_0X33(),
114     RESERVED_0X34(),
115     RESERVED_0X35(),
116     RESERVED_0X36(),
117     RESERVED_0X37(),
118     RESERVED_0X38(),
119     RESERVED_0X39(),
120     RESERVED_0X3A(),
121     RESERVED_0X3B(),
122     RESERVED_0X3C(),
123     RESERVED_0X3D(),
124     RESERVED_0X3E(),
125     RESERVED_0X3F(),
126     RESERVED_0X40(),
127     RESERVED_0X41(),
128     RESERVED_0X42(),
129     RESERVED_0X43(),
130     RESERVED_0X44(),
131     RESERVED_0X45(),
132     RESERVED_0X46(),
133     RESERVED_0X47(),
134     RESERVED_0X48(),
135     RESERVED_0X49(),
136     RESERVED_0X4A(),
137     RESERVED_0X4B(),
138     RESERVED_0X4C(),
139     RESERVED_0X4D(),
140     RESERVED_0X4E(),
141     RESERVED_0X4F(),
142     RESERVED_0X50(),
143     RESERVED_0X51(),
144     RESERVED_0X52(),
145     RESERVED_0X53(),
146     COMPLEX_POWER_VA_E__1(COMPLEX_POWER, ONE, VA, -1),
147     RESERVED_0X55(),
148     RESERVED_0X56(),
149     RESERVED_0X57(),
150     FLOW_TEMPERATURE_MILLI_F_E_0(FLOW_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 0),
151     FLOW_TEMPERATURE_MILLI_F_E_1(FLOW_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 1),
152     FLOW_TEMPERATURE_MILLI_F_E_2(FLOW_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 2),
153     FLOW_TEMPERATURE_F_E_0(FLOW_TEMPERATURE, ONE, DEGREE_FAHRENHEIT, 0),
154     RETURN_TEMPERATURE_MILLI_F_E_0(RETURN_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 0),
155     RETURN_TEMPERATURE_MILLI_F_E_1(RETURN_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 1),
156     RETURN_TEMPERATURE_MILLI_F_E_2(RETURN_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 2),
157     RETURN_TEMPERATURE_F_E_0(RETURN_TEMPERATURE, ONE, DEGREE_FAHRENHEIT, 0),
158     TEMPERATURE_DIFFERENCE_MILLI_F_E_0(TEMPERATURE_DIFFERENCE, MILLI, DEGREE_FAHRENHEIT, 0),
159     TEMPERATURE_DIFFERENCE_MILLI_F_E_1(TEMPERATURE_DIFFERENCE, MILLI, DEGREE_FAHRENHEIT, 1),
160     TEMPERATURE_DIFFERENCE_MILLI_F_E_2(TEMPERATURE_DIFFERENCE, MILLI, DEGREE_FAHRENHEIT, 2),
161     TEMPERATURE_DIFFERENCE_F_E_0(TEMPERATURE_DIFFERENCE, ONE, DEGREE_FAHRENHEIT, 0),
162     EXTERNAL_TEMPERATURE_MILLI_F_E_0(EXTERNAL_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 0),
163     EXTERNAL_TEMPERATURE_MILLI_F_E_1(EXTERNAL_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 1),
164     EXTERNAL_TEMPERATURE_MILLI_F_E_2(EXTERNAL_TEMPERATURE, MILLI, DEGREE_FAHRENHEIT, 2),
165     EXTERNAL_TEMPERATURE_F_E_0(EXTERNAL_TEMPERATURE, ONE, DEGREE_FAHRENHEIT, 0),
166     RESERVED_0X68(),
167     RESERVED_0X69(),
168     RESERVED_0X6A(),
169     RESERVED_0X6B(),
170     RESERVED_0X6C(),
171     RESERVED_0X6D(),
172     RESERVED_0X6E(),
173     RESERVED_0X6F(),
174     COLD_OR_WARM_TEMPERATURE_LIMIT_MILLI_F_E_0(COLD_OR_WARM_TEMPERATURE_LIMIT, MILLI, DEGREE_FAHRENHEIT, 0),
175     COLD_OR_WARM_TEMPERATURE_LIMIT_MILLI_F_E_1(COLD_OR_WARM_TEMPERATURE_LIMIT, MILLI, DEGREE_FAHRENHEIT, 1),
176     COLD_OR_WARM_TEMPERATURE_LIMIT_MILLI_F_E_2(COLD_OR_WARM_TEMPERATURE_LIMIT, MILLI, DEGREE_FAHRENHEIT, 2),
177     COLD_OR_WARM_TEMPERATURE_LIMIT_F_E_0(COLD_OR_WARM_TEMPERATURE_LIMIT, ONE, DEGREE_FAHRENHEIT, 0),
178     COLD_OR_WARM_TEMPERATURE_LIMIT_MILLI_C_E_0(COLD_OR_WARM_TEMPERATURE_LIMIT, MILLI, DEGREE_CELSIUS, 0),
179     COLD_OR_WARM_TEMPERATURE_LIMIT_MILLI_C_E_1(COLD_OR_WARM_TEMPERATURE_LIMIT, MILLI, DEGREE_CELSIUS, 1),
180     COLD_OR_WARM_TEMPERATURE_LIMIT_MILLI_C_E_2(COLD_OR_WARM_TEMPERATURE_LIMIT, MILLI, DEGREE_CELSIUS, 2),
181     COLD_OR_WARM_TEMPERATURE_LIMIT_C_E_0(COLD_OR_WARM_TEMPERATURE_LIMIT, ONE, DEGREE_CELSIUS, 0),
182     CUMUL_COUNT_MAX_POWER_MILLI_W_E_0(CUMUL_COUNT_MAX_POWER, MILLI, WATT, 0),
183     CUMUL_COUNT_MAX_POWER_MILLI_W_E_1(CUMUL_COUNT_MAX_POWER, MILLI, WATT, 1),
184     CUMUL_COUNT_MAX_POWER_MILLI_W_E_2(CUMUL_COUNT_MAX_POWER, MILLI, WATT, 2),
185     CUMUL_COUNT_MAX_POWER_W_E_0(CUMUL_COUNT_MAX_POWER, ONE, WATT, 0),
186     CUMUL_COUNT_MAX_POWER_W_E_1(CUMUL_COUNT_MAX_POWER, ONE, WATT, 1),
187     CUMUL_COUNT_MAX_POWER_W_E_2(CUMUL_COUNT_MAX_POWER, ONE, WATT, 2),
188     CUMUL_COUNT_MAX_POWER_KILO_W_E_0(CUMUL_COUNT_MAX_POWER, KILO, WATT, 0),
189     CUMUL_COUNT_MAX_POWER_KILO_W_E_1(CUMUL_COUNT_MAX_POWER, KILO, WATT, 1);
190 
191     public final static VifFB valueOfTableIndex(byte ordinal) {
192         return map[ordinal];
193     }
194     private final String label;
195     private final UnitOfMeasurement unit;
196     private final SiPrefix siPrefix;
197     private final Integer exponent;
198     private final double factor;
199     private final static VifFB[] map = values();
200 
201     private VifFB() {
202         this.label = String.format("VifFB Reserved 0x%02x", ordinal());
203         this.siPrefix = null;
204         this.unit = null;
205         this.exponent = null;
206         this.factor = Double.NaN;
207     }
208 
209     private VifFB(String label, SiPrefix siPrefix, UnitOfMeasurement unit, int exponent) {
210         this.label = label;
211         this.siPrefix = siPrefix;
212         this.unit = unit;
213         this.exponent = exponent;
214         this.factor = Math.pow(10, exponent);
215     }
216 
217     /**
218      * @return the exponent
219      */
220     @Override
221     public Integer getExponent() {
222         return exponent;
223     }
224 
225     @Override
226     public String getLabel() {
227         return label;
228     }
229 
230     /**
231      * @return the siPrefix
232      */
233     @Override
234     public SiPrefix getSiPrefix() {
235         return siPrefix;
236     }
237 
238     public byte getTableIndex() {
239         return (byte) ordinal();
240     }
241 
242     /**
243      * @return the unit
244      */
245     @Override
246     public UnitOfMeasurement getUnitOfMeasurement() {
247         return unit;
248     }
249 
250     @Override
251     public String toString() {
252         return VifToString.vifToString(this);
253     }
254 
255     public static VifFB assemble(String label, UnitOfMeasurement unitOfMeasurement, SiPrefix siPrefix, Integer exponent) {
256         for (VifFB value : values()) {
257             if (value.getLabel().equals(label) && ((unitOfMeasurement == value.getUnitOfMeasurement()) || ((unitOfMeasurement != null) && unitOfMeasurement.equals(value.getUnitOfMeasurement()))) && ((siPrefix == value.getSiPrefix()) || ((siPrefix != null) && siPrefix.equals(value.getSiPrefix()))) && ((exponent == value.getExponent()) || ((exponent != null) && exponent.equals(value.getExponent())))) {
258                 return value;
259             }
260         }
261         return valueOf(label);
262     }
263 
264     @Override
265     public VifTypes getVifType() {
266         return VifTypes.FB_EXTENTION;
267     }
268 }