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.io.homekit.internal;
15 import java.util.HashMap;
17 import java.util.Optional;
20 * Characteristics are used by complex accessories that can't be represented by
21 * a single item (i.e. a thermostat)
23 * @author Andy Lintner - Initial contribution
25 public enum HomekitCharacteristicType {
27 * It is illegal to have a characteristic type also be a device type
29 EMPTY("Empty"), // used in case only accessory type but no characteristic provided
31 BATTERY_LOW_STATUS("BatteryLowStatus"),
32 ACTIVE_STATUS("ActiveStatus"),
33 ISCONFIGURED("IsConfigured"),
34 SERVICELABELIDX("ServiceLabelIndex"),
35 INUSE_STATUS("InUseStatus"),
36 FAULT_STATUS("FaultStatus"),
37 TAMPERED_STATUS("TamperedStatus"),
38 OBSTRUCTION_STATUS("ObstructionStatus"),
40 CONTACT_SENSOR_STATE("ContactSensorState"),
42 MOTION_DETECTED_STATE("MotionDetectedState"),
43 OCCUPANCY_DETECTED_STATE("OccupancyDetectedState"),
44 SMOKE_DETECTED_STATE("SmokeDetectedState"),
46 CARBON_MONOXIDE_DETECTED_STATE("CarbonMonoxideDetectedState"),
47 CARBON_MONOXIDE_LEVEL("CarbonMonoxideLevel"),
48 CARBON_MONOXIDE_PEAK_LEVEL("CarbonMonoxidePeakLevel"),
50 CARBON_DIOXIDE_DETECTED_STATE("CarbonDioxideDetectedState"),
51 CARBON_DIOXIDE_LEVEL("CarbonDioxideLevel"),
52 CARBON_DIOXIDE_PEAK_LEVEL("CarbonDioxidePeakLevel"),
54 RELATIVE_HUMIDITY("RelativeHumidity"),
55 LEAK_DETECTED_STATE("LeakDetectedState"),
56 HOLD_POSITION("HoldPosition"),
58 TARGET_POSITION("TargetPosition"),
59 CURRENT_POSITION("CurrentPosition"),
60 POSITION_STATE("PositionState"),
61 CURRENT_HORIZONTAL_TILT_ANGLE("CurrentHorizontalTiltAngle"),
62 CURRENT_VERTICAL_TILT_ANGLE("CurrentVerticalTiltAngle"),
63 TARGET_HORIZONTAL_TILT_ANGLE("TargetHorizontalTiltAngle"),
64 TARGET_VERTICAL_TILT_ANGLE("TargetVerticalTiltAngle"),
65 CURRENT_TILT_ANGLE("CurrentTiltAngle"),
66 TARGET_TILT_ANGLE("TargetTiltAngle"),
69 BRIGHTNESS("Brightness"),
70 SATURATION("Saturation"),
71 COLOR_TEMPERATURE("ColorTemperature"),
73 CURRENT_FAN_STATE("CurrentFanState"),
74 TARGET_FAN_STATE("TargetFanState"),
75 ROTATION_DIRECTION("RotationDirection"),
76 ROTATION_SPEED("RotationSpeed"),
77 SWING_MODE("SwingMode"),
78 LOCK_CONTROL("LockControl"),
80 CURRENT_TEMPERATURE("CurrentTemperature"),
81 TARGET_HEATING_COOLING_STATE("TargetHeatingCoolingMode"),
82 CURRENT_HEATING_COOLING_STATE("CurrentHeatingCoolingMode"),
83 TARGET_TEMPERATURE("TargetTemperature"),
84 TEMPERATURE_UNIT("TemperatureUnit"),
86 LOCK_CURRENT_STATE("LockCurrentState"),
87 LOCK_TARGET_STATE("LockTargetState"),
90 REMAINING_DURATION("RemainingDuration"),
92 SECURITY_SYSTEM_CURRENT_STATE("CurrentSecuritySystemState"),
93 SECURITY_SYSTEM_TARGET_STATE("TargetSecuritySystemState"),
97 LIGHT_LEVEL("LightLevel"),
99 CURRENT_DOOR_STATE("CurrentDoorState"),
100 TARGET_DOOR_STATE("TargetDoorState"),
101 TARGET_HEATER_COOLER_STATE("TargetHeaterCoolerState"),
102 CURRENT_HEATER_COOLER_STATE("CurrentHeaterCoolerState"),
103 COOLING_THRESHOLD_TEMPERATURE("CoolingThresholdTemperature"),
104 HEATING_THRESHOLD_TEMPERATURE("HeatingThresholdTemperature"),
106 AIR_QUALITY("AirQuality"),
107 OZONE_DENSITY("OzoneDensity"),
108 NITROGEN_DIOXIDE_DENSITY("NitrogenDioxideDensity"),
109 SULPHUR_DIOXIDE_DENSITY("SulphurDioxideDensity"),
110 PM25_DENSITY("PM25Density"),
111 PM10_DENSITY("PM10Density"),
112 VOC_DENSITY("VOCDensity"),
114 BATTERY_LEVEL("BatteryLevel"),
115 BATTERY_CHARGING_STATE("BatteryChargingState"),
117 CURRENT_SLAT_STATE("CurrentSlatState"),
119 CURRENT_MEDIA_STATE("CurrentMediaState"),
120 TARGET_MEDIA_STATE("TargetMediaState"),
121 CONFIGURED_NAME("ConfiguredName"),
125 FILTER_CHANGE_INDICATION("FilterChangeIndication"),
126 FILTER_LIFE_LEVEL("FilterLifeLevel"),
127 FILTER_RESET_INDICATION("FilterResetIndication");
129 private static final Map<String, HomekitCharacteristicType> TAG_MAP = new HashMap<>();
132 for (HomekitCharacteristicType type : HomekitCharacteristicType.values()) {
133 TAG_MAP.put(type.tag, type);
137 private final String tag;
139 private HomekitCharacteristicType(String tag) {
143 public String getTag() {
148 * get characteristicType from String
150 * @param tag the tag string
151 * @return characteristicType or null if not found
153 public static Optional<HomekitCharacteristicType> valueOfTag(String tag) {
154 return Optional.ofNullable(TAG_MAP.get(tag));