Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants for the homekit_controller component."""
2 
3 from aiohomekit.exceptions import (
4  AccessoryDisconnectedError,
5  AccessoryNotFoundError,
6  EncryptionError,
7 )
8 from aiohomekit.model.characteristics import CharacteristicsTypes
9 from aiohomekit.model.services import ServicesTypes
10 
11 DOMAIN = "homekit_controller"
12 
13 KNOWN_DEVICES = f"{DOMAIN}-devices"
14 CONTROLLER = f"{DOMAIN}-controller"
15 ENTITY_MAP = f"{DOMAIN}-entity-map"
16 TRIGGERS = f"{DOMAIN}-triggers"
17 
18 HOMEKIT_DIR = ".homekit"
19 PAIRING_FILE = "pairing.json"
20 
21 IDENTIFIER_SERIAL_NUMBER = "homekit_controller:serial-number"
22 IDENTIFIER_ACCESSORY_ID = "homekit_controller:accessory-id"
23 IDENTIFIER_LEGACY_SERIAL_NUMBER = "serial-number"
24 IDENTIFIER_LEGACY_ACCESSORY_ID = "accessory-id"
25 
26 # Mapping from Homekit type to component.
27 HOMEKIT_ACCESSORY_DISPATCH = {
28  ServicesTypes.LIGHTBULB: "light",
29  ServicesTypes.OUTLET: "switch",
30  ServicesTypes.SWITCH: "switch",
31  ServicesTypes.THERMOSTAT: "climate",
32  ServicesTypes.HEATER_COOLER: "climate",
33  ServicesTypes.SECURITY_SYSTEM: "alarm_control_panel",
34  ServicesTypes.GARAGE_DOOR_OPENER: "cover",
35  ServicesTypes.WINDOW: "cover",
36  ServicesTypes.WINDOW_COVERING: "cover",
37  ServicesTypes.LOCK_MECHANISM: "lock",
38  ServicesTypes.CONTACT_SENSOR: "binary_sensor",
39  ServicesTypes.MOTION_SENSOR: "binary_sensor",
40  ServicesTypes.CARBON_DIOXIDE_SENSOR: "sensor",
41  ServicesTypes.HUMIDITY_SENSOR: "sensor",
42  ServicesTypes.HUMIDIFIER_DEHUMIDIFIER: "humidifier",
43  ServicesTypes.LIGHT_SENSOR: "sensor",
44  ServicesTypes.TEMPERATURE_SENSOR: "sensor",
45  ServicesTypes.BATTERY_SERVICE: "sensor",
46  ServicesTypes.SMOKE_SENSOR: "binary_sensor",
47  ServicesTypes.CARBON_MONOXIDE_SENSOR: "binary_sensor",
48  ServicesTypes.LEAK_SENSOR: "binary_sensor",
49  ServicesTypes.FAN: "fan",
50  ServicesTypes.FAN_V2: "fan",
51  ServicesTypes.OCCUPANCY_SENSOR: "binary_sensor",
52  ServicesTypes.TELEVISION: "media_player",
53  ServicesTypes.FAUCET: "switch",
54  ServicesTypes.VALVE: "switch",
55  ServicesTypes.CAMERA_RTP_STREAM_MANAGEMENT: "camera",
56  ServicesTypes.DOORBELL: "event",
57  ServicesTypes.STATELESS_PROGRAMMABLE_SWITCH: "event",
58  ServicesTypes.SERVICE_LABEL: "event",
59  ServicesTypes.AIR_PURIFIER: "fan",
60 }
61 
62 CHARACTERISTIC_PLATFORMS = {
63  CharacteristicsTypes.VENDOR_CONNECTSENSE_ENERGY_WATT: "sensor",
64  CharacteristicsTypes.VENDOR_CONNECTSENSE_ENERGY_AMPS: "sensor",
65  CharacteristicsTypes.VENDOR_CONNECTSENSE_ENERGY_AMPS_20: "sensor",
66  CharacteristicsTypes.VENDOR_CONNECTSENSE_ENERGY_KW_HOUR: "sensor",
67  CharacteristicsTypes.VENDOR_AQARA_GATEWAY_VOLUME: "number",
68  CharacteristicsTypes.VENDOR_AQARA_E1_GATEWAY_VOLUME: "number",
69  CharacteristicsTypes.VENDOR_AQARA_PAIRING_MODE: "switch",
70  CharacteristicsTypes.VENDOR_AQARA_E1_PAIRING_MODE: "switch",
71  CharacteristicsTypes.VENDOR_ECOBEE_HOME_TARGET_COOL: "number",
72  CharacteristicsTypes.VENDOR_ECOBEE_HOME_TARGET_HEAT: "number",
73  CharacteristicsTypes.VENDOR_ECOBEE_SLEEP_TARGET_COOL: "number",
74  CharacteristicsTypes.VENDOR_ECOBEE_SLEEP_TARGET_HEAT: "number",
75  CharacteristicsTypes.VENDOR_ECOBEE_AWAY_TARGET_COOL: "number",
76  CharacteristicsTypes.VENDOR_ECOBEE_AWAY_TARGET_HEAT: "number",
77  CharacteristicsTypes.VENDOR_ECOBEE_CURRENT_MODE: "select",
78  CharacteristicsTypes.VENDOR_EVE_ENERGY_WATT: "sensor",
79  CharacteristicsTypes.VENDOR_EVE_DEGREE_AIR_PRESSURE: "sensor",
80  CharacteristicsTypes.VENDOR_EVE_DEGREE_ELEVATION: "number",
81  CharacteristicsTypes.VENDOR_EVE_MOTION_DURATION: "number",
82  CharacteristicsTypes.VENDOR_EVE_MOTION_SENSITIVITY: "number",
83  CharacteristicsTypes.VENDOR_EVE_THERMO_VALVE_POSITION: "sensor",
84  CharacteristicsTypes.VENDOR_HAA_SETUP: "button",
85  CharacteristicsTypes.VENDOR_HAA_UPDATE: "button",
86  CharacteristicsTypes.VENDOR_KOOGEEK_REALTIME_ENERGY: "sensor",
87  CharacteristicsTypes.VENDOR_KOOGEEK_REALTIME_ENERGY_2: "sensor",
88  CharacteristicsTypes.VENDOR_VOCOLINC_HUMIDIFIER_SPRAY_LEVEL: "number",
89  CharacteristicsTypes.VENDOR_VOCOLINC_OUTLET_ENERGY: "sensor",
90  CharacteristicsTypes.VENDOR_ECOBEE_CLEAR_HOLD: "button",
91  CharacteristicsTypes.VENDOR_ECOBEE_FAN_WRITE_SPEED: "number",
92  CharacteristicsTypes.VENDOR_ECOBEE_SET_HOLD_SCHEDULE: "number",
93  CharacteristicsTypes.TEMPERATURE_CURRENT: "sensor",
94  CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT: "sensor",
95  CharacteristicsTypes.AIR_QUALITY: "sensor",
96  CharacteristicsTypes.DENSITY_PM25: "sensor",
97  CharacteristicsTypes.DENSITY_PM10: "sensor",
98  CharacteristicsTypes.DENSITY_OZONE: "sensor",
99  CharacteristicsTypes.DENSITY_NO2: "sensor",
100  CharacteristicsTypes.DENSITY_SO2: "sensor",
101  CharacteristicsTypes.DENSITY_VOC: "sensor",
102  CharacteristicsTypes.IDENTIFY: "button",
103  CharacteristicsTypes.THREAD_NODE_CAPABILITIES: "sensor",
104  CharacteristicsTypes.THREAD_CONTROL_POINT: "button",
105  CharacteristicsTypes.MUTE: "switch",
106  CharacteristicsTypes.FILTER_LIFE_LEVEL: "sensor",
107  CharacteristicsTypes.VENDOR_AIRVERSA_SLEEP_MODE: "switch",
108  CharacteristicsTypes.TEMPERATURE_UNITS: "select",
109  CharacteristicsTypes.AIR_PURIFIER_STATE_CURRENT: "sensor",
110  CharacteristicsTypes.AIR_PURIFIER_STATE_TARGET: "select",
111 }
112 
113 STARTUP_EXCEPTIONS = (
114  TimeoutError,
115  AccessoryNotFoundError,
116  EncryptionError,
117  AccessoryDisconnectedError,
118 )
119 
120 # 10 seconds was chosen because it is soon enough
121 # for most state changes to happen but not too
122 # long that the BLE connection is dropped. It
123 # also happens to be the same value used by
124 # the update coordinator.
125 DEBOUNCE_COOLDOWN = 10 # seconds
126 
127 SUBSCRIBE_COOLDOWN = 0.25 # seconds