2 * Copyright (c) 2010-2024 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
32 ACTIVE_IDENTIFIER("ActiveIdentifier"),
33 ACTIVE_STATUS("ActiveStatus"),
34 AIR_QUALITY("AirQuality"),
35 BATTERY_CHARGING_STATE("BatteryChargingState"),
36 BATTERY_LEVEL("BatteryLevel"),
37 BATTERY_LOW_STATUS("BatteryLowStatus"),
38 BRIGHTNESS("Brightness"),
39 CARBON_DIOXIDE_DETECTED_STATE("CarbonDioxideDetectedState"),
40 CARBON_DIOXIDE_LEVEL("CarbonDioxideLevel"),
41 CARBON_DIOXIDE_PEAK_LEVEL("CarbonDioxidePeakLevel"),
42 CARBON_MONOXIDE_DETECTED_STATE("CarbonMonoxideDetectedState"),
43 CARBON_MONOXIDE_LEVEL("CarbonMonoxideLevel"),
44 CARBON_MONOXIDE_PEAK_LEVEL("CarbonMonoxidePeakLevel"),
45 CLOSED_CAPTIONS("ClosedCaptions"),
46 COLOR_TEMPERATURE("ColorTemperature"),
47 CONFIGURED("Configured"),
48 CONFIGURED_NAME("ConfiguredName"),
49 CONTACT_SENSOR_STATE("ContactSensorState"),
50 COOLING_THRESHOLD_TEMPERATURE("CoolingThresholdTemperature"),
51 CURRENT_DOOR_STATE("CurrentDoorState"),
52 CURRENT_FAN_STATE("CurrentFanState"),
53 CURRENT_HEATER_COOLER_STATE("CurrentHeaterCoolerState"),
54 CURRENT_HEATING_COOLING_STATE("CurrentHeatingCoolingMode"),
55 CURRENT_HORIZONTAL_TILT_ANGLE("CurrentHorizontalTiltAngle"),
56 CURRENT_MEDIA_STATE("CurrentMediaState"),
57 CURRENT_POSITION("CurrentPosition"),
58 CURRENT_SLAT_STATE("CurrentSlatState"),
59 CURRENT_TEMPERATURE("CurrentTemperature"),
60 CURRENT_TILT_ANGLE("CurrentTiltAngle"),
61 CURRENT_VERTICAL_TILT_ANGLE("CurrentVerticalTiltAngle"),
62 CURRENT_VISIBILITY("CurrentVisibility"),
64 FAULT_STATUS("FaultStatus"),
65 FILTER_CHANGE_INDICATION("FilterChangeIndication"),
66 FILTER_LIFE_LEVEL("FilterLifeLevel"),
67 FILTER_RESET_INDICATION("FilterResetIndication"),
68 FIRMWARE_REVISION("FirmwareRevision"),
69 HARDWARE_REVISION("HardwareRevision"),
70 HEATING_THRESHOLD_TEMPERATURE("HeatingThresholdTemperature"),
71 HOLD_POSITION("HoldPosition"),
73 IDENTIFIER("Identifier"),
75 INPUT_DEVICE_TYPE("InputDeviceType"),
76 INPUT_SOURCE_TYPE("InputSourceType"),
77 INUSE_STATUS("InUseStatus"),
78 ISCONFIGURED("IsConfigured"),
79 LEAK_DETECTED_STATE("LeakDetectedState"),
80 LIGHT_LEVEL("LightLevel"),
81 LOCK_CONTROL("LockControl"),
82 LOCK_CURRENT_STATE("LockCurrentState"),
83 LOCK_TARGET_STATE("LockTargetState"),
84 MANUFACTURER("Manufacturer"),
86 MOTION_DETECTED_STATE("MotionDetectedState"),
89 NITROGEN_DIOXIDE_DENSITY("NitrogenDioxideDensity"),
90 OBSTRUCTION_STATUS("ObstructionStatus"),
91 OCCUPANCY_DETECTED_STATE("OccupancyDetectedState"),
93 OZONE_DENSITY("OzoneDensity"),
94 PICTURE_MODE("PictureMode"),
95 PM10_DENSITY("PM10Density"),
96 PM25_DENSITY("PM25Density"),
97 POSITION_STATE("PositionState"),
98 POWER_MODE("PowerMode"),
99 PROGRAM_MODE("ProgramMode"),
100 RELATIVE_HUMIDITY("RelativeHumidity"),
101 REMAINING_DURATION("RemainingDuration"),
102 REMOTE_KEY("RemoteKey"),
103 ROTATION_DIRECTION("RotationDirection"),
104 ROTATION_SPEED("RotationSpeed"),
105 SATURATION("Saturation"),
106 SECURITY_SYSTEM_CURRENT_STATE("CurrentSecuritySystemState"),
107 SECURITY_SYSTEM_TARGET_STATE("TargetSecuritySystemState"),
108 SERIAL_NUMBER("SerialNumber"),
109 SERVICE_INDEX("ServiceIndex"),
110 SERVICE_LABEL("ServiceLabel"),
111 SLEEP_DISCOVERY_MODE("SleepDiscoveryMode"),
112 SMOKE_DETECTED_STATE("SmokeDetectedState"),
113 SULPHUR_DIOXIDE_DENSITY("SulphurDioxideDensity"),
114 SWING_MODE("SwingMode"),
115 TAMPERED_STATUS("TamperedStatus"),
116 TARGET_DOOR_STATE("TargetDoorState"),
117 TARGET_FAN_STATE("TargetFanState"),
118 TARGET_HEATER_COOLER_STATE("TargetHeaterCoolerState"),
119 TARGET_HEATING_COOLING_STATE("TargetHeatingCoolingMode"),
120 TARGET_HORIZONTAL_TILT_ANGLE("TargetHorizontalTiltAngle"),
121 TARGET_MEDIA_STATE("TargetMediaState"),
122 TARGET_POSITION("TargetPosition"),
123 TARGET_RELATIVE_HUMIDITY("TargetRelativeHumidity"),
124 TARGET_TEMPERATURE("TargetTemperature"),
125 TARGET_TILT_ANGLE("TargetTiltAngle"),
126 TARGET_VERTICAL_TILT_ANGLE("TargetVerticalTiltAngle"),
127 TARGET_VISIBILITY_STATE("TargetVisibilityState"),
128 TEMPERATURE_UNIT("TemperatureUnit"),
129 VOC_DENSITY("VOCDensity"),
131 VOLUME_CONTROL_TYPE("VolumeControlType"),
132 VOLUME_SELECTOR("VolumeSelector");
134 private static final Map<String, HomekitCharacteristicType> TAG_MAP = new HashMap<>();
137 for (HomekitCharacteristicType type : HomekitCharacteristicType.values()) {
138 TAG_MAP.put(type.tag, type);
142 private final String tag;
144 private HomekitCharacteristicType(String tag) {
148 public String getTag() {
153 * get characteristicType from String
155 * @param tag the tag string
156 * @return characteristicType or null if not found
158 public static Optional<HomekitCharacteristicType> valueOfTag(String tag) {
159 return Optional.ofNullable(TAG_MAP.get(tag));
163 public String toString() {