2 * Copyright (c) 2010-2023 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 public static final String UNCATEGORIZED = "Uncategorized";
54 // Excluded technical paramter names
55 public static final String REALTIME_MARKER = "realtime";
56 public static final String PASSWORD = "PASSWORD";
57 public static final String ACTION = "action";
59 // List of default synthetic channeltypes added to a new thing
60 public static final String DATEUTC_DATETIME = "dateutc-datetime";
61 public static final String LAST_RECEIVED = "last-received";
62 public static final String LAST_RECEIVED_DATETIME = LAST_RECEIVED + "-datetime";
63 public static final String LAST_QUERY = "last-query";
64 public static final String LAST_QUERY_STATE = LAST_QUERY + "-state";
65 public static final String LAST_QUERY_TRIGGER = LAST_QUERY + "-trigger";
68 public static final String METADATA_GROUP = "metadata";
69 public static final String WIND_GROUP = "wind";
70 public static final String TEMPERATURE_GROUP = "temperature";
71 public static final String HUMIDITY_GROUP = "humidity";
72 public static final String RAIN_GROUP = "rain";
73 public static final String SUNLIGHT_GROUP = "sunlight";
74 public static final String PRESSURE_GROUP = "pressure";
75 public static final String POLLUTION_GROUP = "pollution";
77 // Known or observed request parameters received from devices submitting to wunderground.com
78 public static final String DATEUTC = "dateutc";
79 public static final String SOFTWARE_TYPE = "softwaretype";
80 public static final String LOW_BATTERY = "lowbatt";
81 public static final String REALTIME_FREQUENCY = "rtfreq";
82 public static final String WIND_DIRECTION = "winddir";
83 public static final String WIND_SPEED = "windspeedmph";
84 public static final String GUST_SPEED = "windgustmph";
85 public static final String GUST_DIRECTION = "windgustdir";
86 public static final String WIND_SPEED_AVG_2MIN = "windspdmph_avg2m";
87 public static final String WIND_DIRECTION_AVG_2MIN = "winddir_avg2m";
88 public static final String GUST_SPEED_AVG_10MIN = "windgustmph_10m";
89 public static final String GUST_DIRECTION_AVG_10MIN = "windgustdir_10m";
90 public static final String TEMPERATURE = "tempf";
91 public static final String TEMPERATURE_INDEXED = "^temp(\\d+)f$";
92 public static final String WIND_CHILL = "windchillf";
93 public static final String INDOOR_TEMPERATURE = "indoortempf";
94 public static final String SOIL_TEMPERATURE = "soiltempf";
95 public static final String SOIL_TEMPERATURE_INDEXED = "^soiltemp(\\d+)f$";
96 public static final String HUMIDITY = "humidity";
97 public static final String INDOOR_HUMIDITY = "indoorhumidity";
98 public static final String DEWPOINT = "dewptf";
99 public static final String SOIL_MOISTURE = "soilmoisture";
100 public static final String SOIL_MOISTURE_INDEXED = "^soilmoisture(\\d+)$";
101 public static final String LEAF_WETNESS = "leafwetness";
102 public static final String LEAF_WETNESS_INDEXED = "^leafwetness(\\d+)$";
103 public static final String RAIN_IN = "rainin";
104 public static final String DAILY_RAIN_IN = "dailyrainin";
105 public static final String WEEKLY_RAIN_IN = "weeklyrainin";
106 public static final String MONTHLY_RAIN_IN = "monthlyrainin";
107 public static final String YEARLY_RAIN_IN = "yearlyrainin";
108 public static final String SOLAR_RADIATION = "solarradiation";
109 public static final String UV = "UV";
110 public static final String VISIBILITY = "visibility";
111 public static final String WEATHER = "weather";
112 public static final String CLOUDS = "clouds";
113 public static final String BAROM_IN = "baromin";
114 public static final String AQ_NO = "AqNO";
115 public static final String AQ_NO2T = "AqNO2T";
116 public static final String AQ_NO2 = "AqNO2";
117 public static final String AQ_NO2Y = "AqNO2Y";
118 public static final String AQ_NOX = "AqNOX";
119 public static final String AQ_NOY = "AqNOY";
120 public static final String AQ_NO3 = "AqNO3";
121 public static final String AQ_SO4 = "AqSO4";
122 public static final String AQ_SO2 = "AqSO2";
123 public static final String AQ_SO2T = "AqSO2T";
124 public static final String AQ_CO = "AqCO";
125 public static final String AQ_COT = "AqCOT";
126 public static final String AQ_EC = "AqEC";
127 public static final String AQ_OC = "AqOC";
128 public static final String AQ_BC = "AqBC";
129 public static final String AQ_UV_AETH = "AqUV-AETH";
130 public static final String AQ_PM2_5 = "AqPM2-5";
131 public static final String AQ_PM10 = "AqPM10";
132 public static final String AQ_OZONE = "AqOZONE";
134 public static final ChannelTypeUID LAST_RECEIVED_DATETIME_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
135 LAST_RECEIVED_DATETIME);
136 public static final ChannelTypeUID LAST_QUERY_STATE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
138 public static final ChannelTypeUID LAST_QUERY_TRIGGER_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
140 public static final ChannelTypeUID DATEUTC_DATETIME_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
142 public static final ChannelTypeUID DATEUTC_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, DATEUTC);
143 public static final ChannelTypeUID LOW_BATTERY_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_CHANNEL_LOW_BATTERY
145 public static final ChannelTypeUID SOFTWARETYPE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "softwaretype");
146 public static final ChannelTypeUID REALTIME_FREQUENCY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
147 "realtime-frequency");
148 public static final ChannelTypeUID WIND_SPEED_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "wind-speed");
149 public static final ChannelTypeUID WIND_DIRECTION_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_WIND_DIRECTION
151 public static final ChannelTypeUID GUST_SPEED_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "wind-gust-speed");
152 public static final ChannelTypeUID GUST_DIRECTION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
153 "wind-gust-direction");
154 public static final ChannelTypeUID WIND_SPEED_AVG_2MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
155 "wind-speed-avg-2min");
156 public static final ChannelTypeUID WIND_DIRECTION_AVG_2MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
157 "wind-direction-avg-2min");
158 public static final ChannelTypeUID GUST_SPEED_10MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
159 "wind-gust-speed-10min");
160 public static final ChannelTypeUID GUST_DIRECTION_10MIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
161 "wind-gust-direction-10min");
162 public static final ChannelTypeUID TEMPERATURE_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_OUTDOOR_TEMPERATURE
164 public static final ChannelTypeUID HUMIDITY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "humidity");
165 public static final ChannelTypeUID INDOOR_HUMIDITY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
167 public static final ChannelTypeUID DEW_POINT_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "dew-point");
168 public static final ChannelTypeUID WIND_CHILL_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "wind-chill");
169 // for extra outdoor sensors use temp2f, temp3f, and so on
170 public static final ChannelTypeUID INDOOR_TEMPERATURE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
171 "indoor-temperature");
172 // for sensors 2,3,4 use soiltemp2f, soiltemp3f, and soiltemp4f
173 public static final ChannelTypeUID SOIL_TEMPERATURE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
175 public static final ChannelTypeUID RAIN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain");
176 public static final ChannelTypeUID RAIN_DAILY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-daily");
177 public static final ChannelTypeUID RAIN_WEEKLY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-weekly");
178 public static final ChannelTypeUID RAIN_MONTHLY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-monthly");
179 public static final ChannelTypeUID RAIN_YEARLY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "rain-yearly");
180 public static final ChannelTypeUID METAR_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "metar");
181 public static final ChannelTypeUID CLOUDS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "clouds");
182 // for sensors 2,3,4 use soilmoisture2, soilmoisture3, and soilmoisture4
183 public static final ChannelTypeUID SOIL_MOISTURE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "soil-moisture");
184 // for sensor 2 use leafwetness2
185 public static final ChannelTypeUID LEAFWETNESS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "leafwetness");
186 public static final ChannelTypeUID SOLARRADIATION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "solarradiation");
187 public static final ChannelTypeUID UV_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "uv");
188 public static final ChannelTypeUID VISIBILITY_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "visibility");
189 public static final ChannelTypeUID BAROMETRIC_PRESSURE_CHANNELTYPEUID = DefaultSystemChannelTypeProvider.SYSTEM_BAROMETRIC_PRESSURE
191 public static final ChannelTypeUID NITRIC_OXIDE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "nitric-oxide");
192 public static final ChannelTypeUID NITROGEN_DIOXIDE_MEASURED_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
193 "nitrogen-dioxide-measured");
194 public static final ChannelTypeUID NITROGEN_DIOXIDE_NOX_NO_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
195 "nitrogen-dioxide-nox-no");
196 public static final ChannelTypeUID NITROGEN_DIOXIDE_NOY_NO_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
197 "nitrogen-dioxide-noy-no");
198 public static final ChannelTypeUID NITROGEN_OXIDES_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
200 public static final ChannelTypeUID TOTAL_REACTIVE_NITROGEN_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
201 "total-reactive-nitrogen");
202 public static final ChannelTypeUID NO3_ION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "no3-ion");
203 public static final ChannelTypeUID SO4_ION_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "so4-ion");
204 public static final ChannelTypeUID SULFUR_DIOXIDE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "sulfur-dioxide");
205 public static final ChannelTypeUID SULFUR_DIOXIDE_TRACE_LEVELS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
206 "sulfur-dioxide-trace-levels");
207 public static final ChannelTypeUID CARBON_MONOXIDE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
209 public static final ChannelTypeUID CARBON_MONOXIDE_TRACE_LEVELS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
210 "carbon-monoxide-trace-levels");
211 public static final ChannelTypeUID ELEMENTAL_CARBON_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID,
213 public static final ChannelTypeUID ORGANIC_CARBON_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "organic-carbon");
214 public static final ChannelTypeUID BLACK_CARBON_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "black-carbon");
215 public static final ChannelTypeUID AETHALOMETER_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "aethalometer");
216 public static final ChannelTypeUID PM2_5_MASS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "pm2_5-mass");
217 public static final ChannelTypeUID PM10_MASS_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "pm10-mass");
218 public static final ChannelTypeUID OZONE_CHANNELTYPEUID = new ChannelTypeUID(BINDING_ID, "ozone");
220 public static final Unit<Length> NAUTICAL_MILE = addUnit(
221 new TransformedUnit<>("NM", METRE, MultiplyConverter.of(1852.0)));
224 SimpleUnitFormat.getInstance().label(NAUTICAL_MILE, "NM");
227 private static <U extends Unit<?>> U addUnit(U unit) {