]> git.basschouten.com Git - openhab-addons.git/blob
403afd4907d519943641d7b5d7cd4fe7806903e0
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.smartmeter.internal.sml;
14
15 import javax.measure.Quantity;
16 import javax.measure.Unit;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.openhab.core.library.unit.SIUnits;
21 import org.openhab.core.library.unit.Units;
22 import org.openmuc.jsml.EUnit;
23
24 /**
25  * Converts an {@link EUnit} to a {@link Unit}.
26  *
27  * @author Matthias Steigenberger - Initial contribution
28  *
29  */
30 @NonNullByDefault
31 public class SmlUnitConversion {
32
33     @SuppressWarnings("unchecked")
34     public static @Nullable <Q extends Quantity<Q>> Unit<Q> getUnit(EUnit unit) {
35         Unit<?> javaUnit = null;
36         switch (unit) {
37             case AMPERE:
38                 javaUnit = Units.AMPERE;
39                 break;
40             case AMPERE_HOUR:
41                 javaUnit = Units.AMPERE.divide(Units.HOUR);
42                 break;
43             case AMPERE_PER_METRE:
44                 javaUnit = Units.AMPERE.multiply(SIUnits.METRE);
45                 break;
46             case AMPERE_SQUARED_HOURS:
47                 javaUnit = Units.AMPERE.pow(2).multiply(Units.HOUR);
48                 break;
49             case BAR:
50                 javaUnit = SIUnits.PASCAL.multiply(100000);
51                 break;
52             case COULOMB:
53                 javaUnit = Units.COULOMB;
54                 break;
55
56             case CUBIC_METRE:
57             case CUBIC_METRE_CORRECTED:
58                 javaUnit = SIUnits.CUBIC_METRE;
59                 break;
60             case CUBIC_METRE_PER_DAY:
61             case CUBIC_METRE_PER_DAY_CORRECTED:
62                 javaUnit = SIUnits.CUBIC_METRE.divide(Units.DAY);
63                 break;
64             case CUBIC_METRE_PER_HOUR:
65             case CUBIC_METRE_PER_HOUR_CORRECTED:
66                 javaUnit = SIUnits.CUBIC_METRE.divide(Units.HOUR);
67                 break;
68
69             case DAY:
70                 javaUnit = Units.DAY;
71                 break;
72             case DEGREE:
73                 javaUnit = Units.DEGREE_ANGLE;
74                 break;
75             case DEGREE_CELSIUS:
76                 javaUnit = SIUnits.CELSIUS;
77                 break;
78
79             case FARAD:
80                 javaUnit = Units.FARAD;
81                 break;
82             case HENRY:
83                 javaUnit = Units.HENRY;
84                 break;
85             case HERTZ:
86                 javaUnit = Units.HERTZ;
87                 break;
88             case HOUR:
89                 javaUnit = Units.HOUR;
90                 break;
91             case JOULE:
92                 javaUnit = Units.JOULE;
93                 break;
94             case JOULE_PER_HOUR:
95                 javaUnit = Units.JOULE.divide(Units.HOUR);
96                 break;
97             case KELVIN:
98                 javaUnit = Units.KELVIN;
99                 break;
100             case KILOGRAM:
101                 javaUnit = SIUnits.KILOGRAM;
102             case KILOGRAM_PER_SECOND:
103                 javaUnit = SIUnits.KILOGRAM.divide(Units.SECOND);
104                 break;
105             case LITRE:
106                 javaUnit = Units.LITRE;
107                 break;
108             case MASS_DENSITY:
109                 break;
110             case METER_CONSTANT_OR_PULSE_VALUE:
111                 break;
112             case METRE:
113                 javaUnit = SIUnits.METRE;
114                 break;
115             case METRE_PER_SECOND:
116                 javaUnit = Units.METRE_PER_SECOND;
117                 break;
118             case MOLE_PERCENT:
119                 javaUnit = Units.MOLE;
120                 break;
121             case MONTH:
122                 javaUnit = Units.YEAR.divide(12);
123                 break;
124             case NEWTON:
125                 javaUnit = Units.NEWTON;
126             case NEWTONMETER:
127                 javaUnit = Units.NEWTON.multiply(SIUnits.METRE);
128                 break;
129             case OHM:
130                 javaUnit = Units.OHM;
131                 break;
132             case OHM_METRE:
133                 javaUnit = Units.OHM.multiply(SIUnits.METRE);
134                 break;
135             case PASCAL:
136                 javaUnit = SIUnits.PASCAL;
137                 break;
138             case PASCAL_SECOND:
139                 javaUnit = SIUnits.PASCAL.multiply(Units.SECOND);
140                 break;
141             case PERCENTAGE:
142                 javaUnit = Units.PERCENT;
143                 break;
144             case SECOND:
145                 javaUnit = Units.SECOND;
146                 break;
147             case TESLA:
148                 javaUnit = Units.TESLA;
149                 break;
150             case VAR:
151                 javaUnit = Units.WATT.alternate("Var");
152                 break;
153             case VAR_HOUR:
154                 javaUnit = Units.WATT.alternate("Var").multiply(Units.HOUR);
155                 break;
156             case VOLT:
157                 javaUnit = Units.VOLT;
158                 break;
159             case VOLT_AMPERE:
160                 javaUnit = Units.VOLT.multiply(Units.AMPERE);
161                 break;
162             case VOLT_AMPERE_HOUR:
163                 javaUnit = Units.VOLT.multiply(Units.AMPERE).multiply(Units.HOUR);
164                 break;
165             case VOLT_PER_METRE:
166                 javaUnit = Units.WATT.divide(SIUnits.METRE);
167                 break;
168             case VOLT_SQUARED_HOURS:
169                 javaUnit = Units.VOLT.pow(2).multiply(Units.HOUR);
170                 break;
171             case WATT:
172                 javaUnit = Units.WATT;
173                 break;
174             case WATT_HOUR:
175                 javaUnit = Units.WATT.multiply(Units.HOUR);
176                 break;
177             case WEBER:
178                 javaUnit = Units.WEBER;
179                 break;
180             case WEEK:
181                 javaUnit = Units.WEEK;
182                 break;
183             case YEAR:
184                 javaUnit = Units.YEAR;
185                 break;
186
187             // not clearly defined yet:
188             case VOLT_SQUARED_HOUR_METER_CONSTANT_OR_PULSE_VALUE:
189                 break;
190             case REACTIVE_ENERGY_METER_CONSTANT_OR_PULSE_VALUE:
191                 break;
192             case ACTIVE_ENERGY_METER_CONSTANT_OR_PULSE_VALUE:
193                 break;
194             case AMPERE_SQUARED_HOUR_METER_CONSTANT_OR_PULSE_VALUE:
195                 break;
196             case APPARENT_ENERGY_METER_CONSTANT_OR_PULSE_VALUE:
197                 break;
198             case ENERGY_PER_VOLUME:
199                 break;
200             case CALORIFIC_VALUE:
201                 break;
202
203             // no unit possible:
204             case MIN:
205             case OTHER_UNIT:
206             case RESERVED:
207             case COUNT:
208             case CURRENCY:
209             case EMPTY:
210                 break;
211             default:
212                 break;
213         }
214         return (Unit<Q>) javaUnit;
215     }
216 }