2 * Copyright (c) 2010-2022 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.wundergroundupdatereceiver.internal;
15 import static org.openhab.core.library.unit.SIUnits.METRE;
19 import javax.measure.Unit;
20 import javax.measure.quantity.Length;
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.openhab.core.thing.DefaultSystemChannelTypeProvider;
24 import org.openhab.core.thing.ThingTypeUID;
25 import org.openhab.core.thing.type.ChannelTypeUID;
27 import tech.units.indriya.format.SimpleUnitFormat;
28 import tech.units.indriya.function.MultiplyConverter;
29 import tech.units.indriya.unit.TransformedUnit;
32 * The {@link WundergroundUpdateReceiverBindingConstants} class defines common constants, which are
33 * used across the whole binding.
35 * @author Daniel Demus - Initial contribution
38 public class WundergroundUpdateReceiverBindingConstants {
40 public static final String BINDING_ID = "wundergroundupdatereceiver";
42 public static final String STATION_ID_PARAMETER = "ID";
43 public static final String REPRESENTATION_PROPERTY = "stationId";
45 // List of all Thing Type UIDs
46 public static final ThingTypeUID THING_TYPE_UPDATE_RECEIVER = new ThingTypeUID(BINDING_ID,
47 "wundergroundUpdateReceiver");
48 static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_UPDATE_RECEIVER);
50 public static final String NOW = "now";
52 // Excluded technical paramter names
53 public static final String REALTIME_MARKER = "realtime";
54 public static final String PASSWORD = "PASSWORD";
55 public static final String ACTION = "action";
57 // List of default synthetic channeltypes added to a new thing
58 public static final String DATEUTC_DATETIME = "dateutc-datetime";
59 public static final String LAST_RECEIVED_DATETIME = "last-received-datetime";
60 public static final String LAST_RECEIVED = "last-received";
61 public static final String LAST_QUERY = "last-query";
62 public static final String LAST_QUERY_STATE = LAST_QUERY + "-state";
63 public static final String LAST_QUERY_TRIGGER = LAST_QUERY + "-trigger";
66 public static final String METADATA_GROUP = "metadata";
67 public static final String WIND_GROUP = "wind";
68 public static final String TEMPERATURE_GROUP = "temperature";
69 public static final String HUMIDITY_GROUP = "humidity";
70 public static final String RAIN_GROUP = "rain";
71 public static final String SUNLIGHT_GROUP = "sunlight";
72 public static final String PRESSURE_GROUP = "pressure";
73 public static final String POLLUTION_GROUP = "pollution";
75 // Known or observed request paramters received from devices submitting to wunderground.com
76 public static final String DATEUTC = "dateutc";
77 public static final String SOFTWARE_TYPE = "softwaretype";
78 public static final String LOW_BATTERY = "lowbatt";
79 public static final String REALTIME_FREQUENCY = "rtfreq";
80 public static final String WIND_DIRECTION = "winddir";
81 public static final String WIND_SPEED = "windspeedmph";
82 public static final String GUST_SPEED = "windgustmph";
83 public static final String GUST_DIRECTION = "windgustdir";
84 public static final String WIND_SPEED_AVG_2MIN = "windspdmph_avg2m";
85 public static final String WIND_DIRECTION_AVG_2MIN = "winddir_avg2m";
86 public static final String GUST_SPEED_AVG_10MIN = "windgustmph_10m";
87 public static final String GUST_DIRECTION_AVG_10MIN = "windgustdir_10m";
88 public static final String TEMPERATURE = "tempf";
89 public static final String TEMPERATURE_INDEXED = "^temp(\\d+)f$";
90 public static final String WIND_CHILL = "windchillf";
91 public static final String INDOOR_TEMPERATURE = "indoortempf";
92 public static final String SOIL_TEMPERATURE = "soiltempf";
93 public static final String SOIL_TEMPERATURE_INDEXED = "^soiltemp(\\d+)f$";
94 public static final String HUMIDITY = "humidity";
95 public static final String INDOOR_HUMIDITY = "indoorhumidity";
96 public static final String DEWPOINT = "dewptf";
97 public static final String SOIL_MOISTURE = "soilmoisture";
98 public static final String SOIL_MOISTURE_INDEXED = "^soilmoisture(\\d+)$";
99 public static final String LEAF_WETNESS = "leafwetness";
100 public static final String LEAF_WETNESS_INDEXED = "^leafwetness(\\d+)$";
101 public static final String RAIN_IN = "rainin";
102 public static final String DAILY_RAIN_IN = "dailyrainin";
103 public static final String WEEKLY_RAIN_IN = "weeklyrainin";
104 public static final String MONTHLY_RAIN_IN = "monthlyrainin";
105 public static final String YEARLY_RAIN_IN = "yearlyrainin";
106 public static final String SOLAR_RADIATION = "solarradiation";
107 public static final String UV = "UV";
108 public static final String VISIBILITY = "visibility";
109 public static final String WEATHER = "weather";
110 public static final String CLOUDS = "clouds";
111 public static final String BAROM_IN = "baromin";
112 public static final String AQ_NO = "AqNO";
113 public static final String AQ_NO2T = "AqNO2T";
114 public static final String AQ_NO2 = "AqNO2";
115 public static final String AQ_NO2Y = "AqNO2Y";
116 public static final String AQ_NOX = "AqNOX";
117 public static final String AQ_NOY = "AqNOY";
118 public static final String AQ_NO3 = "AqNO3";
119 public static final String AQ_SO4 = "AqSO4";
120 public static final String AQ_SO2 = "AqSO2";
121 public static final String AQ_SO2T = "AqSO2T";
122 public static final String AQ_CO = "AqCO";
123 public static final String AQ_COT = "AqCOT";
124 public static final String AQ_EC = "AqEC";
125 public static final String AQ_OC = "AqOC";
126 public static final String AQ_BC = "AqBC";
127 public static final String AQ_UV_AETH = "AqUV-AETH";
128 public static final String AQ_PM2_5 = "AqPM2.5";
129 public static final String AQ_PM10 = "AqPM10";
130 public static final String AQ_OZONE = "AqOZONE";
132 public static final ChannelTypeUID LAST_RECEIVED_DATETIME_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
133 LAST_RECEIVED_DATETIME);
134 public static final ChannelTypeUID LAST_QUERY_STATE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
136 public static final ChannelTypeUID LAST_QUERY_TRIGGER_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
138 public static final ChannelTypeUID DATEUTC_DATETIME_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
140 public static final ChannelTypeUID DATEUTC_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, DATEUTC);
141 public static final ChannelTypeUID LOW_BATTERY_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_CHANNEL_LOW_BATTERY
143 public static final ChannelTypeUID SOFTWARETYPE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "softwaretype");
144 public static final ChannelTypeUID REALTIME_FREQUENCY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
145 "realtime-frequency");
146 public static final ChannelTypeUID WIND_SPEED_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "wind-speed");
147 public static final ChannelTypeUID WIND_DIRECTION_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_WIND_DIRECTION
149 public static final ChannelTypeUID GUST_SPEED_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "wind-gust-speed");
150 public static final ChannelTypeUID GUST_DIRECTION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
151 "wind-gust-direction");
152 public static final ChannelTypeUID WIND_SPEED_AVG_2MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
153 "wind-speed-avg-2min");
154 public static final ChannelTypeUID WIND_DIRECTION_AVG_2MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
155 "wind-direction-avg-2min");
156 public static final ChannelTypeUID GUST_SPEED_10MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
157 "wind-gust-speed-10min");
158 public static final ChannelTypeUID GUST_DIRECTION_10MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
159 "wind-gust-direction-10min");
160 public static final ChannelTypeUID TEMPERATURE_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_OUTDOOR_TEMPERATURE
162 public static final ChannelTypeUID HUMIDITY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "humidity");
163 public static final ChannelTypeUID INDOOR_HUMIDITY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
165 public static final ChannelTypeUID DEW_POINT_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "dew-point");
166 public static final ChannelTypeUID WIND_CHILL_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "wind-chill");
167 // for extra outdoor sensors use temp2f, temp3f, and so on
168 public static final ChannelTypeUID INDOOR_TEMPERATURE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
169 "indoor-temperature");
170 // for sensors 2,3,4 use soiltemp2f, soiltemp3f, and soiltemp4f
171 public static final ChannelTypeUID SOIL_TEMPERATURE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
173 public static final ChannelTypeUID RAIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain");
174 public static final ChannelTypeUID RAIN_DAILY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-daily");
175 public static final ChannelTypeUID RAIN_WEEKLY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-weekly");
176 public static final ChannelTypeUID RAIN_MONTHLY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-monthly");
177 public static final ChannelTypeUID RAIN_YEARLY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-yearly");
178 public static final ChannelTypeUID METAR_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "metar");
179 public static final ChannelTypeUID CLOUDS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "clouds");
180 // for sensors 2,3,4 use soilmoisture2, soilmoisture3, and soilmoisture4
181 public static final ChannelTypeUID SOIL_MOISTURE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "soil-moisture");
182 // for sensor 2 use leafwetness2
183 public static final ChannelTypeUID LEAFWETNESS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "leafwetness");
184 public static final ChannelTypeUID SOLARRADIATION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "solarradiation");
185 public static final ChannelTypeUID UV_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "uv");
186 public static final ChannelTypeUID VISIBILITY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "visibility");
187 public static final ChannelTypeUID BAROMETRIC_PRESSURE_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_BAROMETRIC_PRESSURE
189 public static final ChannelTypeUID NITRIC_OXIDE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "nitric-oxide");
190 public static final ChannelTypeUID NITROGEN_DIOXIDE_MEASURED_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
191 "nitrogen-dioxide-measured");
192 public static final ChannelTypeUID NITROGEN_DIOXIDE_NOX_NO_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
193 "nitrogen-dioxide-nox-no");
194 public static final ChannelTypeUID NITROGEN_DIOXIDE_NOY_NO_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
195 "nitrogen-dioxide-noy-no");
196 public static final ChannelTypeUID NITROGEN_OXIDES_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
198 public static final ChannelTypeUID TOTAL_REACTIVE_NITROGEN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
199 "total-reactive-nitrogen");
200 public static final ChannelTypeUID NO3_ION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "no3-ion");
201 public static final ChannelTypeUID SO4_ION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "so4-ion");
202 public static final ChannelTypeUID SULFUR_DIOXIDE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "sulfur-dioxide");
203 public static final ChannelTypeUID SULFUR_DIOXIDE_TRACE_LEVELS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
204 "sulfur-dioxide-trace-levels");
205 public static final ChannelTypeUID CARBON_MONOXIDE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
207 public static final ChannelTypeUID CARBON_MONOXIDE_TRACE_LEVELS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
208 "carbon-monoxide-trace-levels");
209 public static final ChannelTypeUID ELEMENTAL_CARBON_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
211 public static final ChannelTypeUID ORGANIC_CARBON_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "organic-carbon");
212 public static final ChannelTypeUID BLACK_CARBON_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "black-carbon");
213 public static final ChannelTypeUID AETHALOMETER_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "aethalometer");
214 public static final ChannelTypeUID PM2_5_MASS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "pm2_5-mass");
215 public static final ChannelTypeUID PM10_MASS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "pm10-mass");
216 public static final ChannelTypeUID OZONE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "ozone");
218 public static final Unit<Length> NAUTICAL_MILE = addUnit(
219 new TransformedUnit<>("NM", METRE, MultiplyConverter.of(1852.0)));
222 SimpleUnitFormat.getInstance().label(NAUTICAL_MILE, "NM");
225 private static <U extends Unit<?>> U addUnit(U unit) {