2 * Copyright (c) 2010-2021 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.tesla.internal;
15 import java.lang.reflect.InvocationTargetException;
16 import java.lang.reflect.Method;
17 import java.math.BigDecimal;
18 import java.text.SimpleDateFormat;
19 import java.util.Date;
22 import org.openhab.core.library.types.DateTimeType;
23 import org.openhab.core.library.types.DecimalType;
24 import org.openhab.core.library.types.OnOffType;
25 import org.openhab.core.library.types.OpenClosedType;
26 import org.openhab.core.library.types.PercentType;
27 import org.openhab.core.library.types.PointType;
28 import org.openhab.core.library.types.QuantityType;
29 import org.openhab.core.library.types.StringType;
30 import org.openhab.core.library.unit.ImperialUnits;
31 import org.openhab.core.library.unit.MetricPrefix;
32 import org.openhab.core.library.unit.SIUnits;
33 import org.openhab.core.library.unit.Units;
34 import org.openhab.core.types.State;
35 import org.openhab.core.types.Type;
38 * The {@link TeslaChannelSelectorProxy} class is a helper class to instantiate
39 * and parameterize the {@link TeslaChannelSelector} Enum
41 * @author Karel Goderis - Initial contribution
43 public class TeslaChannelSelectorProxy {
45 public enum TeslaChannelSelector {
47 API("api_version", "api", DecimalType.class, true),
48 AUTO_COND("is_auto_conditioning_on", "autoconditioning", OnOffType.class, false) {
50 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
51 if (s.equals("true") || s.equals("1")) {
52 return super.getState("ON");
54 if (s.equals("false") || s.equals("0")) {
55 return super.getState("OFF");
57 return super.getState(s);
60 AUTOPARK_STATE("autopark_state", "autoparkstate", StringType.class, false),
61 AUTOPARK_STATE_V2("autopark_state_v2", "autoparkstate2", StringType.class, false),
62 AUTOPARK_STYLE("autopark_style", "autoparkstyle", StringType.class, false),
63 BATTERY_CURRENT("battery_current", "batterycurrent", DecimalType.class, false),
64 BATTERY_HEATER("battery_heater_on", "batteryheater", OnOffType.class, false) {
66 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
67 if (s.equals("true") || s.equals("1")) {
68 return super.getState("ON");
70 if (s.equals("false") || s.equals("0")) {
71 return super.getState("OFF");
73 return super.getState(s);
76 BATTERY_HEATER_NO_POWER("battery_heater_no_power", "batteryheaternopower", OnOffType.class, false) {
78 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
79 if (s.equals("true") || s.equals("1")) {
80 return super.getState("ON");
82 if (s.equals("false") || s.equals("0")) {
83 return super.getState("OFF");
85 return super.getState(s);
88 BATTERY_LEVEL("battery_level", "batterylevel", DecimalType.class, false),
89 BATTERY_RANGE("battery_range", "batteryrange", DecimalType.class, false) {
91 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
92 State someState = super.getState(s);
93 BigDecimal value = ((DecimalType) someState).toBigDecimal();
94 return new QuantityType<>(value, ImperialUnits.MILE);
97 CALENDAR_SUPPORTED("calendar_supported", "calendarsupported", OnOffType.class, true) {
99 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
100 if (s.equals("true") || s.equals("1")) {
101 return super.getState("ON");
103 if (s.equals("false") || s.equals("0")) {
104 return super.getState("OFF");
106 return super.getState(s);
109 CALENDAR_ENABLED("calendar_enabled", "calendarenabled", OnOffType.class, false) {
111 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
112 if (s.equals("true") || s.equals("1")) {
113 return super.getState("ON");
115 if (s.equals("false") || s.equals("0")) {
116 return super.getState("OFF");
118 return super.getState(s);
121 CAR_VERSION("car_version", "version", StringType.class, true),
122 CENTER_DISPLAY("center_display_state", "centerdisplay", OnOffType.class, false) {
124 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
125 if (s.equals("true") || s.equals("1")) {
126 return super.getState("ON");
128 if (s.equals("false") || s.equals("0")) {
129 return super.getState("OFF");
131 return super.getState(s);
134 CHARGE(null, "charge", OnOffType.class, false) {
136 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
137 if (s.equals("true") || s.equals("1")) {
138 return super.getState("ON");
140 if (s.equals("false") || s.equals("0")) {
141 return super.getState("OFF");
143 return super.getState(s);
146 CHARGE_CABLE("conn_charge_cable", "chargecable", StringType.class, false),
147 CHARGE_CURRENT_REQUEST("charge_current_request", "chargecurrent", DecimalType.class, false),
148 CHARGE_CURRENT_REQUEST_MAX("charge_current_request_max", "chargemaxcurrent", DecimalType.class, false),
149 CHARGE_ENABLE_REQUEST("charge_enable_request", "chargeenablerequest", OnOffType.class, false) {
151 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
152 if (s.equals("true") || s.equals("1")) {
153 return super.getState("ON");
155 if (s.equals("false") || s.equals("0")) {
156 return super.getState("OFF");
158 return super.getState(s);
161 CHARGE_ENERGY_ADDED("charge_energy_added", "chargeenergyadded", DecimalType.class, false),
162 CHARGE_LIMIT_SOC("charge_limit_soc", "chargelimit", PercentType.class, false),
163 CHARGE_LIMIT_SOC_MAX("charge_limit_soc_max", "chargelimitmaximum", PercentType.class, false),
164 CHARGE_LIMIT_SOC_MIN("charge_limit_soc_min", "chargelimitminimum", PercentType.class, false),
165 CHARGE_LIMIT_SOC_STD("charge_limit_soc_std", "chargelimitsocstandard", PercentType.class, false),
166 CHARGE_PORT_LATCH("charge_port_latch", "chargeportlatch", StringType.class, false),
167 CHARGE_MILES_ADDED_IDEAL("charge_miles_added_ideal", "chargeidealdistanceadded", DecimalType.class, false) {
169 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
170 State someState = super.getState(s);
171 BigDecimal value = ((DecimalType) someState).toBigDecimal();
172 return new QuantityType<>(value, ImperialUnits.MILES_PER_HOUR);
175 CHARGE_MILES_ADDED_RANGE("charge_miles_added_rated", "chargerateddistanceadded", DecimalType.class, false) {
177 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
178 State someState = super.getState(s);
179 BigDecimal value = ((DecimalType) someState).toBigDecimal();
180 return new QuantityType<>(value, ImperialUnits.MILES_PER_HOUR);
183 CHARGE_RATE("charge_rate", "chargerate", DecimalType.class, false) {
185 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
186 State someState = super.getState(s);
187 BigDecimal value = ((DecimalType) someState).toBigDecimal();
188 return new QuantityType<>(value, ImperialUnits.MILES_PER_HOUR);
191 CHARGE_STARTING_RANGE("charge_starting_range", "chargestartingrange", StringType.class, false),
192 CHARGE_STARTING_SOC("charge_starting_soc", "chargestartingsoc", StringType.class, false),
193 CHARGE_STATE("charging_state", "chargingstate", StringType.class, false),
194 CHARGE_TO_MAX("charge_to_max_range", "chargetomax", OnOffType.class, false) {
196 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
197 if (s.equals("true") || s.equals("1")) {
198 return super.getState("ON");
200 if (s.equals("false") || s.equals("0")) {
201 return super.getState("OFF");
203 return super.getState(s);
206 CHARGE_TO_MAX_COUNTER("max_range_charge_counter", "maxcharges", DecimalType.class, false),
207 CHARGEPORT("charge_port_door_open", "chargeport", OnOffType.class, false) {
209 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
210 if (s.equals("true") || s.equals("1")) {
211 return super.getState("ON");
213 if (s.equals("false") || s.equals("0")) {
214 return super.getState("OFF");
216 return super.getState(s);
219 CHARGER_ACTUAL_CURRENT("charger_actual_current", "chargercurrent", DecimalType.class, false),
220 CHARGER_PHASES("charger_phases", "chargerphases", DecimalType.class, false),
221 CHARGER_PILOT_CURRENT("charger_pilot_current", "chargermaxcurrent", DecimalType.class, false),
222 CHARGER_POWER("charger_power", "chargerpower", DecimalType.class, false),
223 CHARGER_VOLTAGE("charger_voltage", "chargervoltage", DecimalType.class, false),
224 CLIMATE_ON("is_climate_on", "climate", OnOffType.class, false) {
226 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
227 if (s.equals("true") || s.equals("1")) {
228 return super.getState("ON");
230 if (s.equals("false") || s.equals("0")) {
231 return super.getState("OFF");
233 return super.getState(s);
236 CLIMATE_MAX_TEMP("max_avail_temp", "maxavailabletemp", DecimalType.class, false),
237 CLIMATE_MIN_TEMP("min_avail_temp", "minavailabletemp", DecimalType.class, false),
238 COLOR("exterior_color", "color", StringType.class, true),
239 DARK_RIMS("dark_rims", "darkrims", OnOffType.class, true) {
241 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
242 if (s.equals("true") || s.equals("1")) {
243 return super.getState("ON");
245 if (s.equals("false") || s.equals("0")) {
246 return super.getState("OFF");
248 return super.getState(s);
251 DISPLAY_NAME("display_name", "name", StringType.class, true),
252 DF("df", "driverfrontdoor", OpenClosedType.class, false) {
254 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
255 if (s.equals("true") || s.equals("1")) {
256 return super.getState("OPEN");
258 if (s.equals("false") || s.equals("0")) {
259 return super.getState("CLOSED");
261 return super.getState(s);
264 DOOR_LOCK("locked", "doorlock", OnOffType.class, false) {
266 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
267 if (s.equals("true") || s.equals("1")) {
268 return super.getState("ON");
270 if (s.equals("false") || s.equals("0")) {
271 return super.getState("OFF");
273 return super.getState(s);
276 DR("dr", "driverreardoor", OpenClosedType.class, false) {
278 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
279 if (s.equals("true") || s.equals("1")) {
280 return super.getState("OPEN");
282 if (s.equals("false") || s.equals("0")) {
283 return super.getState("CLOSED");
285 return super.getState(s);
288 DRIVER_TEMP("driver_temp_setting", "drivertemp", DecimalType.class, false) {
290 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
291 State someState = super.getState(s);
292 BigDecimal value = ((DecimalType) someState).toBigDecimal();
293 return new QuantityType<>(value, SIUnits.CELSIUS);
296 ELEVATION("elevation", "location", DecimalType.class, false) {
299 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
301 return new PointType(new StringType(proxy.latitude), new StringType(proxy.longitude),
302 new StringType(proxy.elevation));
305 EST_BATTERY_RANGE("est_battery_range", "estimatedbatteryrange", DecimalType.class, false) {
307 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
308 State someState = super.getState(s);
309 BigDecimal value = ((DecimalType) someState).toBigDecimal();
310 return new QuantityType<>(value, ImperialUnits.MILE);
313 EST_HEADING("est_heading", "headingestimation", DecimalType.class, false) {
315 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
316 State someState = super.getState(s);
317 BigDecimal value = ((DecimalType) someState).toBigDecimal();
318 return new QuantityType<>(value, Units.DEGREE_ANGLE);
321 EST_RANGE("est_range", "estimatedrange", DecimalType.class, false) {
323 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
324 State someState = super.getState(s);
325 BigDecimal value = ((DecimalType) someState).toBigDecimal();
326 return new QuantityType<>(value, ImperialUnits.MILE);
329 EU_VEHICLE("eu_vehicle", "european", OnOffType.class, true) {
331 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
332 if (s.equals("true") || s.equals("1")) {
333 return super.getState("ON");
335 if (s.equals("false") || s.equals("0")) {
336 return super.getState("OFF");
338 return super.getState(s);
341 FAN_STATUS("fan_status", "fan", DecimalType.class, false),
342 FAST_CHARGER("fast_charger_present", "fastcharger", OnOffType.class, true) {
344 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
345 if (s.equals("true") || s.equals("1")) {
346 return super.getState("ON");
348 if (s.equals("false") || s.equals("0")) {
349 return super.getState("OFF");
351 return super.getState(s);
354 FAST_CHARGER_TYPE("fast_charger_type", "fastchargertype", StringType.class, true),
355 FAST_CHARGER_BRAND("fast_charger_brand", "fastchargerbrand", StringType.class, true),
356 FLASH(null, "flashlights", OnOffType.class, false) {
358 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
359 if (s.equals("true") || s.equals("1")) {
360 return super.getState("ON");
362 if (s.equals("false") || s.equals("0")) {
363 return super.getState("OFF");
365 return super.getState(s);
368 FRONT_DEFROSTER("is_front_defroster_on", "frontdefroster", OnOffType.class, false) {
370 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
371 if (s.equals("true") || s.equals("1")) {
372 return super.getState("ON");
374 if (s.equals("false") || s.equals("0")) {
375 return super.getState("OFF");
377 return super.getState(s);
380 FT("ft", "fronttrunk", OnOffType.class, false) {
382 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
383 if (s.equals("true") || s.equals("1")) {
384 return super.getState("ON");
386 if (s.equals("false") || s.equals("0")) {
387 return super.getState("OFF");
389 return super.getState(s);
392 GPS_AS_OF("gps_as_of", "gpstimestamp", DateTimeType.class, false) {
394 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
395 Date date = new Date();
396 SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
398 date.setTime(Long.valueOf(s) * 1000);
399 return super.getState(dateFormatter.format(date));
402 GUI_DISTANCE_UNITS("gui_distance_units", "distanceunits", StringType.class, true),
403 GUI_TEMPERATURE_UNITS("gui_temperature_units", "temperatureunits", StringType.class, true),
404 GUI_CHARGE_RATE_UNITS("gui_charge_rate_units", "chargerateunits", StringType.class, true),
405 GUI_24H_TIME("gui_24_hour_time", "24hourtime", StringType.class, true),
406 GUI_RANGE_DISPLAY("gui_range_display", "rangedisplay", StringType.class, true),
407 HAS_SPOILER("has_spoiler", "spoiler", OnOffType.class, true) {
409 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
410 if (s.equals("true") || s.equals("1")) {
411 return super.getState("ON");
413 if (s.equals("false") || s.equals("0")) {
414 return super.getState("OFF");
416 return super.getState(s);
419 HEADING("heading", "heading", DecimalType.class, false) {
421 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
422 State someState = super.getState(s);
423 BigDecimal value = ((DecimalType) someState).toBigDecimal();
424 return new QuantityType<>(value, Units.DEGREE_ANGLE);
427 HONK_HORN(null, "honkhorn", OnOffType.class, false) {
429 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
430 if (s.equals("true") || s.equals("1")) {
431 return super.getState("ON");
433 if (s.equals("false") || s.equals("0")) {
434 return super.getState("OFF");
436 return super.getState(s);
439 HOMELINK_NEARBY("homelink_nearby", "homelink", OnOffType.class, false) {
441 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
442 if (s.equals("true") || s.equals("1")) {
443 return super.getState("ON");
445 if (s.equals("false") || s.equals("0")) {
446 return super.getState("OFF");
448 return super.getState(s);
451 IDEAL_BATTERY_RANGE("ideal_battery_range", "idealbatteryrange", DecimalType.class, false) {
453 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
454 State someState = super.getState(s);
455 BigDecimal value = ((DecimalType) someState).toBigDecimal();
456 return new QuantityType<>(value, ImperialUnits.MILE);
459 INSIDE_TEMP("inside_temp", "insidetemp", DecimalType.class, false) {
461 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
462 State someState = super.getState(s);
463 BigDecimal value = ((DecimalType) someState).toBigDecimal();
464 return new QuantityType<>(value, SIUnits.CELSIUS);
467 LAST_AUTOPARK_ERROR("last_autopark_error", "lastautoparkerror", StringType.class, false),
468 LATITUDE("latitude", "location", DecimalType.class, false) {
470 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
472 return new PointType(new StringType(proxy.latitude), new StringType(proxy.longitude),
473 new StringType(proxy.elevation));
476 LATITUDE_EVENT("est_lat", "location", DecimalType.class, false) {
478 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
480 return new PointType(new StringType(proxy.latitude), new StringType(proxy.longitude),
481 new StringType(proxy.elevation));
484 LEFT_TEMP_DIR("left_temp_direction", "lefttempdirection", DecimalType.class, false),
485 LONGITUDE("longitude", "location", DecimalType.class, false) {
487 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
489 return new PointType(new StringType(proxy.latitude), new StringType(proxy.longitude),
490 new StringType(proxy.elevation));
493 LONGITUDE_EVENT("est_lng", "location", DecimalType.class, false) {
495 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
497 return new PointType(new StringType(proxy.latitude), new StringType(proxy.longitude),
498 new StringType(proxy.elevation));
501 MANAGED_CHARGING("managed_charging_active", "managedcharging", OnOffType.class, false) {
503 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
504 if (s.equals("true")) {
505 return super.getState("ON");
507 if (s.equals("false")) {
508 return super.getState("OFF");
510 return super.getState(s);
513 MANAGED_CHARGING_CANCELLED("managed_charging_user_canceled", "managedchargingcancelled", OnOffType.class,
516 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
517 if (s.equals("true")) {
518 return super.getState("ON");
520 if (s.equals("false")) {
521 return super.getState("OFF");
523 return super.getState(s);
526 MANAGED_CHARGING_START("managed_charging_start_time", "managedchargingstart", StringType.class, false),
527 MOBILE_ENABLED(TeslaBindingConstants.MOBILE_ENABLED_STATE, "mobileenabled", OnOffType.class, false) {
529 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
530 if (s.equals("true")) {
531 return super.getState("ON");
533 if (s.equals("false")) {
534 return super.getState("OFF");
536 return super.getState(s);
539 MOTORIZED_CHARGE_PORT("motorized_charge_port", "motorizedchargeport", OnOffType.class, true) {
541 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
542 if (s.equals("true") || s.equals("1")) {
543 return super.getState("ON");
545 if (s.equals("false") || s.equals("0")) {
546 return super.getState("OFF");
548 return super.getState(s);
551 NATIVE_LATITUDE("native_latitude", "nativelocation", DecimalType.class, false) {
553 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
554 proxy.nativeLatitude = s;
555 return new PointType(new StringType(proxy.nativeLatitude), new StringType(proxy.nativeLongitude));
558 NATIVE_LONGITUDE("native_longitude", "nativelocation", DecimalType.class, false) {
560 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
561 proxy.nativeLongitude = s;
562 return new PointType(new StringType(proxy.nativeLatitude), new StringType(proxy.nativeLongitude));
565 NATIVE_LOCATION_SUPPORTED("native_location_supported", "nativelocationsupported", OnOffType.class, false) {
567 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
568 if (s.equals("true") || s.equals("1")) {
569 return super.getState("ON");
571 if (s.equals("false") || s.equals("0")) {
572 return super.getState("OFF");
574 return super.getState(s);
577 NATIVE_TYPE("native_type", "nativetype", StringType.class, false),
578 NOT_ENOUGH_POWER_TO_HEAT("not_enough_power_to_heat", "notenoughpower", OnOffType.class, false) {
580 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
581 if (s.equals("true") || s.equals("1")) {
582 return super.getState("ON");
584 if (s.equals("false") || s.equals("0")) {
585 return super.getState("OFF");
587 return super.getState(s);
590 NOTIFICATIONS_ENABLED("notifications_enabled", "notificationsenabled", OnOffType.class, false) {
592 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
593 if (s.equals("true") || s.equals("1")) {
594 return super.getState("ON");
596 if (s.equals("false") || s.equals("0")) {
597 return super.getState("OFF");
599 return super.getState(s);
602 NOTIFICATIONS_SUPPORTED("notifications_supported", "notificationssupported", OnOffType.class, false) {
604 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
605 if (s.equals("true") || s.equals("1")) {
606 return super.getState("ON");
608 if (s.equals("false") || s.equals("0")) {
609 return super.getState("OFF");
611 return super.getState(s);
614 ODOMETER("odometer", "odometer", DecimalType.class, false) {
616 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
617 State someState = super.getState(s);
618 BigDecimal value = ((DecimalType) someState).toBigDecimal();
619 return new QuantityType<>(value, ImperialUnits.MILE);
622 OPEN_FRUNK(null, "openfrunk", OnOffType.class, false) {
624 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
625 if (s.equals("true") || s.equals("1")) {
626 return super.getState("ON");
628 if (s.equals("false") || s.equals("0")) {
629 return super.getState("OFF");
631 return super.getState(s);
634 OPEN_TRUNK(null, "opentrunk", OnOffType.class, false) {
636 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
637 if (s.equals("true") || s.equals("1")) {
638 return super.getState("ON");
640 if (s.equals("false") || s.equals("0")) {
641 return super.getState("OFF");
643 return super.getState(s);
646 OPTION_CODES("option_codes", "options", StringType.class, true),
647 OUTSIDE_TEMP("outside_temp", "outsidetemp", DecimalType.class, false) {
649 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
650 State someState = super.getState(s);
651 BigDecimal value = ((DecimalType) someState).toBigDecimal();
652 return new QuantityType<>(value, SIUnits.CELSIUS);
655 PARSED_CALENDAR("parsed_calendar_supported", "parsedcalendar", OnOffType.class, false) {
657 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
658 if (s.equals("true") || s.equals("1")) {
659 return super.getState("ON");
661 if (s.equals("false") || s.equals("0")) {
662 return super.getState("OFF");
664 return super.getState(s);
667 PASSENGER_TEMP("passenger_temp_setting", "passengertemp", DecimalType.class, false) {
669 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
670 State someState = super.getState(s);
671 BigDecimal value = ((DecimalType) someState).toBigDecimal();
672 return new QuantityType<>(value, SIUnits.CELSIUS);
675 PERF_CONFIG("perf_config", "configuration", StringType.class, true),
676 PF("pf", "passengerfrontdoor", OpenClosedType.class, false) {
678 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
679 if (s.equals("true") || s.equals("1")) {
680 return super.getState("OPEN");
682 if (s.equals("false") || s.equals("0")) {
683 return super.getState("CLOSED");
685 return super.getState(s);
688 POWER("power", "power", DecimalType.class, false),
689 PR("pr", "passengerreardoor", OpenClosedType.class, false) {
691 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
692 if (s.equals("true") || s.equals("1")) {
693 return super.getState("OPEN");
695 if (s.equals("false") || s.equals("0")) {
696 return super.getState("CLOSED");
698 return super.getState(s);
701 PRECONDITIONING("is_preconditioning", "preconditioning", OnOffType.class, false) {
703 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
704 if (s.equals("true") || s.equals("1")) {
705 return super.getState("ON");
707 if (s.equals("false") || s.equals("0")) {
708 return super.getState("OFF");
710 return super.getState(s);
713 RANGE("range", "range", DecimalType.class, false) {
715 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
716 State someState = super.getState(s);
717 BigDecimal value = ((DecimalType) someState).toBigDecimal();
718 if (properties.containsKey("distanceunits") && properties.get("distanceunits").equals("km/hr")) {
719 return new QuantityType<>(value, MetricPrefix.KILO(SIUnits.METRE));
721 return new QuantityType<>(value, ImperialUnits.MILE);
725 REAR_DEFROSTER("is_rear_defroster_on", "reardefroster", OnOffType.class, false) {
727 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
728 if (s.equals("true") || s.equals("1")) {
729 return super.getState("ON");
731 if (s.equals("false") || s.equals("0")) {
732 return super.getState("OFF");
734 return super.getState(s);
737 REAR_SEAT_HEATERS("rear_seat_heaters", "rearseatheaters", OnOffType.class, true) {
739 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
740 if (s.equals("true") || s.equals("1")) {
741 return super.getState("ON");
743 if (s.equals("false") || s.equals("0")) {
744 return super.getState("OFF");
746 return super.getState(s);
749 REMOTE_START("remote_start", "remotestart", OnOffType.class, false) {
751 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
752 if (s.equals("true") || s.equals("1")) {
753 return super.getState("ON");
755 if (s.equals("false") || s.equals("0")) {
756 return super.getState("OFF");
758 return super.getState(s);
761 REMOTE_START_ENABLED("remote_start_enabled", "remotestartenabled", OnOffType.class, false) {
763 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
764 if (s.equals("true") || s.equals("1")) {
765 return super.getState("ON");
767 if (s.equals("false") || s.equals("0")) {
768 return super.getState("OFF");
770 return super.getState(s);
773 REMOTE_START_SUPPORTED("remote_start_supported", "remotestartsupported", OnOffType.class, false) {
775 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
776 if (s.equals("true") || s.equals("1")) {
777 return super.getState("ON");
779 if (s.equals("false") || s.equals("0")) {
780 return super.getState("OFF");
782 return super.getState(s);
785 RESET_VALET_PIN(null, "resetvaletpin", OnOffType.class, false) {
787 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
788 if (s.equals("true") || s.equals("1")) {
789 return super.getState("ON");
791 if (s.equals("false") || s.equals("0")) {
792 return super.getState("OFF");
794 return super.getState(s);
797 RHD("rhd", "rhd", OnOffType.class, true) {
799 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
800 if (s.equals("true") || s.equals("1")) {
801 return super.getState("ON");
803 if (s.equals("false") || s.equals("0")) {
804 return super.getState("OFF");
806 return super.getState(s);
809 RIGHT_TEMP_DIR("right_temp_direction", "righttempdirection", DecimalType.class, false),
810 ROOF_COLOR("roof_color", "roof", StringType.class, true),
811 RT("rt", "reartrunk", OnOffType.class, false) {
813 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
814 if (s.equals("true") || s.equals("1")) {
815 return super.getState("ON");
817 if (s.equals("false") || s.equals("0")) {
818 return super.getState("OFF");
820 return super.getState(s);
823 SEAT_HEATER_LEFT("seat_heater_left", "leftseatheater", DecimalType.class, false),
824 SEAT_HEATER_RIGHT("seat_heater_right", "rightseatheater", DecimalType.class, false),
825 SEAT_HEATER_REAR_LEFT("seat_heater_rear_left", "leftrearseatheater", DecimalType.class, false),
826 SEAT_HEATER_REAR_RIGHT("seat_heater_rear_right", "rightrearseatheater", DecimalType.class, false),
827 SEAT_HEATER_REAR_CENTER("seat_heater_rear_center", "centerrearseatheater", DecimalType.class, false),
828 SEAT_HEATER_REAR_RIGHT_BACK("seat_heater_rear_right_back", "rightrearbackseatheater", DecimalType.class, false),
829 SEAT_HEATER_REAR_RIGHT_LEFT("seat_heater_rear_left_back", "leftrearbackseatheater", DecimalType.class, false),
830 SEAT_TYPE("seat_type", "seattype", DecimalType.class, true),
831 SCHEDULED_CHARGING_PENDING("scheduled_charging_pending", "scheduledchargingpending", OnOffType.class, false) {
833 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
834 if (s.equals("true") || s.equals("1")) {
835 return super.getState("ON");
837 if (s.equals("false") || s.equals("0")) {
838 return super.getState("OFF");
840 return super.getState(s);
843 SCHEDULED_CHARGING_START_TIME("scheduled_charging_start_time", "scheduledchargingstart", DateTimeType.class,
846 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
847 Date date = new Date();
848 SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
850 date.setTime(Long.valueOf(s) * 1000);
851 return super.getState(dateFormatter.format(date));
854 SHIFTSTATE("shift_state", "shiftstate", StringType.class, false),
855 SIDEMIRROR_HEATING("side_mirror_heaters", "sidemirrorheaters", OnOffType.class, false) {
857 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
858 if (s.equals("true") || s.equals("1")) {
859 return super.getState("ON");
861 if (s.equals("false") || s.equals("0")) {
862 return super.getState("OFF");
864 return super.getState(s);
867 SMART_PRECONDITIONING("smart_preconditioning", "smartpreconditioning", OnOffType.class, false) {
869 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
870 if (s.equals("true") || s.equals("1")) {
871 return super.getState("ON");
873 if (s.equals("false") || s.equals("0")) {
874 return super.getState("OFF");
876 return super.getState(s);
879 SOC("soc", "soc", PercentType.class, false),
880 SPEED("speed", "speed", DecimalType.class, false) {
882 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
883 State someState = super.getState(s);
884 if (someState != null) {
885 BigDecimal value = ((DecimalType) someState).toBigDecimal();
886 return new QuantityType<>(value, ImperialUnits.MILES_PER_HOUR);
892 STATE("state", "state", StringType.class, false),
893 STEERINGWHEEL_HEATER("steering_wheel_heater", "steeringwheelheater", OnOffType.class, true) {
895 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
896 if (s.equals("true") || s.equals("1")) {
897 return super.getState("ON");
899 if (s.equals("false") || s.equals("0")) {
900 return super.getState("OFF");
902 return super.getState(s);
905 SUN_ROOF_PRESENT("sun_roof_installed", "sunroofinstalled", OnOffType.class, true) {
907 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
908 if (s.equals("true") || s.equals("1")) {
909 return super.getState("ON");
911 if (s.equals("false") || s.equals("0")) {
912 return super.getState("OFF");
914 return super.getState(s);
917 SUN_ROOF_STATE("sun_roof_state", "sunroofstate", StringType.class, false),
918 SUN_ROOF("sun_roof_percent_open", "sunroof", PercentType.class, false),
919 COMBINED_TEMP(null, "combinedtemp", DecimalType.class, false) {
921 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
922 State someState = super.getState(s);
923 BigDecimal value = ((DecimalType) someState).toBigDecimal();
924 return new QuantityType<>(value, SIUnits.CELSIUS);
927 TIME_TO_FULL_CHARGE("time_to_full_charge", "timetofullcharge", DecimalType.class, false),
928 TIMESTAMP("timestamp", "eventstamp", DateTimeType.class, false) {
930 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
931 Date date = new Date(Long.valueOf(s));
932 SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
933 return super.getState(dateFormatter.format(date));
936 TRIP_CARGING("trip_charging", "tripcharging", OnOffType.class, false) {
938 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
939 if (s.equals("true") || s.equals("1")) {
940 return super.getState("ON");
942 if (s.equals("false") || s.equals("0")) {
943 return super.getState("OFF");
945 return super.getState(s);
948 USABLE_BATTERY_LEVEL("usable_battery_level", "usablebatterylevel", DecimalType.class, false),
949 USER_CHARGE_ENABLE_REQUEST("user_charge_enable_request", "userchargeenablerequest", StringType.class, false),
950 VEHICLE_NAME("vehicle_name", "name", StringType.class, true) {
952 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
953 return super.getState(s.replaceAll("\"", ""));
956 VALET_MODE("valet_mode", "valetmode", OnOffType.class, false) {
958 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
959 if (s.equals("true") || s.equals("1")) {
960 return super.getState("ON");
962 if (s.equals("false") || s.equals("0")) {
963 return super.getState("OFF");
965 return super.getState(s);
968 VALET_PIN("valet_pin_needed", "valetpin", OnOffType.class, false) {
970 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
971 if (s.equals("true") || s.equals("1")) {
972 return super.getState("ON");
974 if (s.equals("false") || s.equals("0")) {
975 return super.getState("OFF");
977 return super.getState(s);
980 VIN("vin", "vin", StringType.class, true),
981 WAKEUP(null, "wakeup", OnOffType.class, false) {
983 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
984 if (s.equals("true") || s.equals("1")) {
985 return super.getState("ON");
987 if (s.equals("false") || s.equals("0")) {
988 return super.getState("OFF");
990 return super.getState(s);
993 WIPERBLADE_HEATER("wiper_blade_heater", "wiperbladeheater", OnOffType.class, false) {
995 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
996 if (s.equals("true") || s.equals("1")) {
997 return super.getState("ON");
999 if (s.equals("false") || s.equals("0")) {
1000 return super.getState("OFF");
1002 return super.getState(s);
1005 WHEEL_TYPE("wheel_type", "wheeltype", StringType.class, true);
1007 private final String restID;
1008 private final String channelID;
1009 private Class<? extends Type> typeClass;
1010 private final boolean isProperty;
1012 private TeslaChannelSelector(String restID, String channelID, Class<? extends Type> typeClass,
1013 boolean isProperty) {
1014 this.restID = restID;
1015 this.channelID = channelID;
1016 this.typeClass = typeClass;
1017 this.isProperty = isProperty;
1021 public String toString() {
1025 public String getChannelID() {
1029 public Class<? extends Type> getTypeClass() {
1033 public boolean isProperty() {
1037 public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
1041 public State getState(String s) {
1043 Method valueOf = typeClass.getMethod("valueOf", String.class);
1044 State state = (State) valueOf.invoke(typeClass, s);
1045 if (state != null) {
1048 } catch (NoSuchMethodException e) {
1049 } catch (IllegalArgumentException e) {
1050 } catch (IllegalAccessException e) {
1051 } catch (InvocationTargetException e) {
1057 public static TeslaChannelSelector getValueSelectorFromChannelID(String valueSelectorText)
1058 throws IllegalArgumentException {
1059 for (TeslaChannelSelector c : TeslaChannelSelector.values()) {
1060 if (c.channelID.equals(valueSelectorText)) {
1065 throw new IllegalArgumentException("Not valid value selector");
1068 public static TeslaChannelSelector getValueSelectorFromRESTID(String valueSelectorText)
1069 throws IllegalArgumentException {
1070 for (TeslaChannelSelector c : TeslaChannelSelector.values()) {
1071 if (c.restID != null && c.restID.equals(valueSelectorText)) {
1076 throw new IllegalArgumentException("Not valid value selector");
1080 public String latitude = "0";
1081 public String longitude = "0";
1082 public String elevation = "0";
1083 public String nativeLatitude = "0";
1084 public String nativeLongitude = "0";
1086 public State getState(String s, TeslaChannelSelector selector, Map<String, String> properties) {
1087 return selector.getState(s, this, properties);