mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
Use new DeviceClass enums in homekit (#61665)
Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
d3710c7ba6
commit
931d51949d
@ -12,16 +12,14 @@ import voluptuous as vol
|
|||||||
|
|
||||||
from homeassistant.components import device_automation, network, zeroconf
|
from homeassistant.components import device_automation, network, zeroconf
|
||||||
from homeassistant.components.binary_sensor import (
|
from homeassistant.components.binary_sensor import (
|
||||||
DEVICE_CLASS_BATTERY_CHARGING,
|
|
||||||
DEVICE_CLASS_MOTION,
|
|
||||||
DEVICE_CLASS_OCCUPANCY,
|
|
||||||
DOMAIN as BINARY_SENSOR_DOMAIN,
|
DOMAIN as BINARY_SENSOR_DOMAIN,
|
||||||
|
BinarySensorDeviceClass,
|
||||||
)
|
)
|
||||||
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
|
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
|
||||||
from homeassistant.components.http import HomeAssistantView
|
from homeassistant.components.http import HomeAssistantView
|
||||||
from homeassistant.components.humidifier import DOMAIN as HUMIDIFIER_DOMAIN
|
from homeassistant.components.humidifier import DOMAIN as HUMIDIFIER_DOMAIN
|
||||||
from homeassistant.components.network.const import MDNS_TARGET_IP
|
from homeassistant.components.network.const import MDNS_TARGET_IP
|
||||||
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
|
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN, SensorDeviceClass
|
||||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_BATTERY_CHARGING,
|
ATTR_BATTERY_CHARGING,
|
||||||
@ -35,8 +33,6 @@ from homeassistant.const import (
|
|||||||
CONF_IP_ADDRESS,
|
CONF_IP_ADDRESS,
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
CONF_PORT,
|
CONF_PORT,
|
||||||
DEVICE_CLASS_BATTERY,
|
|
||||||
DEVICE_CLASS_HUMIDITY,
|
|
||||||
EVENT_HOMEASSISTANT_STARTED,
|
EVENT_HOMEASSISTANT_STARTED,
|
||||||
EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_STOP,
|
||||||
SERVICE_RELOAD,
|
SERVICE_RELOAD,
|
||||||
@ -669,11 +665,11 @@ class HomeKit:
|
|||||||
ent_reg = entity_registry.async_get(self.hass)
|
ent_reg = entity_registry.async_get(self.hass)
|
||||||
device_lookup = ent_reg.async_get_device_class_lookup(
|
device_lookup = ent_reg.async_get_device_class_lookup(
|
||||||
{
|
{
|
||||||
(BINARY_SENSOR_DOMAIN, DEVICE_CLASS_BATTERY_CHARGING),
|
(BINARY_SENSOR_DOMAIN, BinarySensorDeviceClass.BATTERY_CHARGING),
|
||||||
(BINARY_SENSOR_DOMAIN, DEVICE_CLASS_MOTION),
|
(BINARY_SENSOR_DOMAIN, BinarySensorDeviceClass.MOTION),
|
||||||
(BINARY_SENSOR_DOMAIN, DEVICE_CLASS_OCCUPANCY),
|
(BINARY_SENSOR_DOMAIN, BinarySensorDeviceClass.OCCUPANCY),
|
||||||
(SENSOR_DOMAIN, DEVICE_CLASS_BATTERY),
|
(SENSOR_DOMAIN, SensorDeviceClass.BATTERY),
|
||||||
(SENSOR_DOMAIN, DEVICE_CLASS_HUMIDITY),
|
(SENSOR_DOMAIN, SensorDeviceClass.HUMIDITY),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -860,14 +856,14 @@ class HomeKit:
|
|||||||
or ent_reg_ent.device_id is None
|
or ent_reg_ent.device_id is None
|
||||||
or ent_reg_ent.device_id not in device_lookup
|
or ent_reg_ent.device_id not in device_lookup
|
||||||
or (ent_reg_ent.device_class or ent_reg_ent.original_device_class)
|
or (ent_reg_ent.device_class or ent_reg_ent.original_device_class)
|
||||||
in (DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_BATTERY)
|
in (BinarySensorDeviceClass.BATTERY_CHARGING, SensorDeviceClass.BATTERY)
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
if ATTR_BATTERY_CHARGING not in state.attributes:
|
if ATTR_BATTERY_CHARGING not in state.attributes:
|
||||||
battery_charging_binary_sensor_entity_id = device_lookup[
|
battery_charging_binary_sensor_entity_id = device_lookup[
|
||||||
ent_reg_ent.device_id
|
ent_reg_ent.device_id
|
||||||
].get((BINARY_SENSOR_DOMAIN, DEVICE_CLASS_BATTERY_CHARGING))
|
].get((BINARY_SENSOR_DOMAIN, BinarySensorDeviceClass.BATTERY_CHARGING))
|
||||||
if battery_charging_binary_sensor_entity_id:
|
if battery_charging_binary_sensor_entity_id:
|
||||||
self._config.setdefault(state.entity_id, {}).setdefault(
|
self._config.setdefault(state.entity_id, {}).setdefault(
|
||||||
CONF_LINKED_BATTERY_CHARGING_SENSOR,
|
CONF_LINKED_BATTERY_CHARGING_SENSOR,
|
||||||
@ -876,7 +872,7 @@ class HomeKit:
|
|||||||
|
|
||||||
if ATTR_BATTERY_LEVEL not in state.attributes:
|
if ATTR_BATTERY_LEVEL not in state.attributes:
|
||||||
battery_sensor_entity_id = device_lookup[ent_reg_ent.device_id].get(
|
battery_sensor_entity_id = device_lookup[ent_reg_ent.device_id].get(
|
||||||
(SENSOR_DOMAIN, DEVICE_CLASS_BATTERY)
|
(SENSOR_DOMAIN, SensorDeviceClass.BATTERY)
|
||||||
)
|
)
|
||||||
if battery_sensor_entity_id:
|
if battery_sensor_entity_id:
|
||||||
self._config.setdefault(state.entity_id, {}).setdefault(
|
self._config.setdefault(state.entity_id, {}).setdefault(
|
||||||
@ -885,7 +881,7 @@ class HomeKit:
|
|||||||
|
|
||||||
if state.entity_id.startswith(f"{CAMERA_DOMAIN}."):
|
if state.entity_id.startswith(f"{CAMERA_DOMAIN}."):
|
||||||
motion_binary_sensor_entity_id = device_lookup[ent_reg_ent.device_id].get(
|
motion_binary_sensor_entity_id = device_lookup[ent_reg_ent.device_id].get(
|
||||||
(BINARY_SENSOR_DOMAIN, DEVICE_CLASS_MOTION)
|
(BINARY_SENSOR_DOMAIN, BinarySensorDeviceClass.MOTION)
|
||||||
)
|
)
|
||||||
if motion_binary_sensor_entity_id:
|
if motion_binary_sensor_entity_id:
|
||||||
self._config.setdefault(state.entity_id, {}).setdefault(
|
self._config.setdefault(state.entity_id, {}).setdefault(
|
||||||
@ -893,7 +889,7 @@ class HomeKit:
|
|||||||
motion_binary_sensor_entity_id,
|
motion_binary_sensor_entity_id,
|
||||||
)
|
)
|
||||||
doorbell_binary_sensor_entity_id = device_lookup[ent_reg_ent.device_id].get(
|
doorbell_binary_sensor_entity_id = device_lookup[ent_reg_ent.device_id].get(
|
||||||
(BINARY_SENSOR_DOMAIN, DEVICE_CLASS_OCCUPANCY)
|
(BINARY_SENSOR_DOMAIN, BinarySensorDeviceClass.OCCUPANCY)
|
||||||
)
|
)
|
||||||
if doorbell_binary_sensor_entity_id:
|
if doorbell_binary_sensor_entity_id:
|
||||||
self._config.setdefault(state.entity_id, {}).setdefault(
|
self._config.setdefault(state.entity_id, {}).setdefault(
|
||||||
@ -904,7 +900,7 @@ class HomeKit:
|
|||||||
if state.entity_id.startswith(f"{HUMIDIFIER_DOMAIN}."):
|
if state.entity_id.startswith(f"{HUMIDIFIER_DOMAIN}."):
|
||||||
current_humidity_sensor_entity_id = device_lookup[
|
current_humidity_sensor_entity_id = device_lookup[
|
||||||
ent_reg_ent.device_id
|
ent_reg_ent.device_id
|
||||||
].get((SENSOR_DOMAIN, DEVICE_CLASS_HUMIDITY))
|
].get((SENSOR_DOMAIN, SensorDeviceClass.HUMIDITY))
|
||||||
if current_humidity_sensor_entity_id:
|
if current_humidity_sensor_entity_id:
|
||||||
self._config.setdefault(state.entity_id, {}).setdefault(
|
self._config.setdefault(state.entity_id, {}).setdefault(
|
||||||
CONF_LINKED_HUMIDITY_SENSOR,
|
CONF_LINKED_HUMIDITY_SENSOR,
|
||||||
|
@ -7,13 +7,9 @@ from pyhap.const import CATEGORY_OTHER
|
|||||||
from pyhap.util import callback as pyhap_callback
|
from pyhap.util import callback as pyhap_callback
|
||||||
|
|
||||||
from homeassistant.components import cover
|
from homeassistant.components import cover
|
||||||
from homeassistant.components.cover import (
|
from homeassistant.components.media_player import MediaPlayerDeviceClass
|
||||||
DEVICE_CLASS_GARAGE,
|
|
||||||
DEVICE_CLASS_GATE,
|
|
||||||
DEVICE_CLASS_WINDOW,
|
|
||||||
)
|
|
||||||
from homeassistant.components.media_player import DEVICE_CLASS_TV
|
|
||||||
from homeassistant.components.remote import SUPPORT_ACTIVITY
|
from homeassistant.components.remote import SUPPORT_ACTIVITY
|
||||||
|
from homeassistant.components.sensor import SensorDeviceClass
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_BATTERY_CHARGING,
|
ATTR_BATTERY_CHARGING,
|
||||||
ATTR_BATTERY_LEVEL,
|
ATTR_BATTERY_LEVEL,
|
||||||
@ -27,11 +23,6 @@ from homeassistant.const import (
|
|||||||
ATTR_UNIT_OF_MEASUREMENT,
|
ATTR_UNIT_OF_MEASUREMENT,
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
CONF_TYPE,
|
CONF_TYPE,
|
||||||
DEVICE_CLASS_CO,
|
|
||||||
DEVICE_CLASS_CO2,
|
|
||||||
DEVICE_CLASS_HUMIDITY,
|
|
||||||
DEVICE_CLASS_ILLUMINANCE,
|
|
||||||
DEVICE_CLASS_TEMPERATURE,
|
|
||||||
LIGHT_LUX,
|
LIGHT_LUX,
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
STATE_ON,
|
STATE_ON,
|
||||||
@ -58,7 +49,6 @@ from .const import (
|
|||||||
CONF_LINKED_BATTERY_SENSOR,
|
CONF_LINKED_BATTERY_SENSOR,
|
||||||
CONF_LOW_BATTERY_THRESHOLD,
|
CONF_LOW_BATTERY_THRESHOLD,
|
||||||
DEFAULT_LOW_BATTERY_THRESHOLD,
|
DEFAULT_LOW_BATTERY_THRESHOLD,
|
||||||
DEVICE_CLASS_PM25,
|
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
EVENT_HOMEKIT_CHANGED,
|
EVENT_HOMEKIT_CHANGED,
|
||||||
HK_CHARGING,
|
HK_CHARGING,
|
||||||
@ -126,12 +116,17 @@ def get_accessory(hass, driver, state, aid, config): # noqa: C901
|
|||||||
elif state.domain == "cover":
|
elif state.domain == "cover":
|
||||||
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
||||||
|
|
||||||
if device_class in (DEVICE_CLASS_GARAGE, DEVICE_CLASS_GATE) and features & (
|
if (
|
||||||
cover.SUPPORT_OPEN | cover.SUPPORT_CLOSE
|
device_class
|
||||||
|
in (
|
||||||
|
cover.CoverDeviceClass.GARAGE,
|
||||||
|
cover.CoverDeviceClass.GATE,
|
||||||
|
)
|
||||||
|
and features & (cover.SUPPORT_OPEN | cover.SUPPORT_CLOSE)
|
||||||
):
|
):
|
||||||
a_type = "GarageDoorOpener"
|
a_type = "GarageDoorOpener"
|
||||||
elif (
|
elif (
|
||||||
device_class == DEVICE_CLASS_WINDOW
|
device_class == cover.CoverDeviceClass.WINDOW
|
||||||
and features & cover.SUPPORT_SET_POSITION
|
and features & cover.SUPPORT_SET_POSITION
|
||||||
):
|
):
|
||||||
a_type = "Window"
|
a_type = "Window"
|
||||||
@ -161,7 +156,7 @@ def get_accessory(hass, driver, state, aid, config): # noqa: C901
|
|||||||
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
||||||
feature_list = config.get(CONF_FEATURE_LIST, [])
|
feature_list = config.get(CONF_FEATURE_LIST, [])
|
||||||
|
|
||||||
if device_class == DEVICE_CLASS_TV:
|
if device_class == MediaPlayerDeviceClass.TV:
|
||||||
a_type = "TelevisionMediaPlayer"
|
a_type = "TelevisionMediaPlayer"
|
||||||
elif validate_media_player_features(state, feature_list):
|
elif validate_media_player_features(state, feature_list):
|
||||||
a_type = "MediaPlayer"
|
a_type = "MediaPlayer"
|
||||||
@ -170,20 +165,23 @@ def get_accessory(hass, driver, state, aid, config): # noqa: C901
|
|||||||
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
||||||
unit = state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
|
unit = state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
|
||||||
|
|
||||||
if device_class == DEVICE_CLASS_TEMPERATURE or unit in (
|
if device_class == SensorDeviceClass.TEMPERATURE or unit in (
|
||||||
TEMP_CELSIUS,
|
TEMP_CELSIUS,
|
||||||
TEMP_FAHRENHEIT,
|
TEMP_FAHRENHEIT,
|
||||||
):
|
):
|
||||||
a_type = "TemperatureSensor"
|
a_type = "TemperatureSensor"
|
||||||
elif device_class == DEVICE_CLASS_HUMIDITY and unit == PERCENTAGE:
|
elif device_class == SensorDeviceClass.HUMIDITY and unit == PERCENTAGE:
|
||||||
a_type = "HumiditySensor"
|
a_type = "HumiditySensor"
|
||||||
elif device_class == DEVICE_CLASS_PM25 or DEVICE_CLASS_PM25 in state.entity_id:
|
elif (
|
||||||
|
device_class == SensorDeviceClass.PM25
|
||||||
|
or SensorDeviceClass.PM25 in state.entity_id
|
||||||
|
):
|
||||||
a_type = "AirQualitySensor"
|
a_type = "AirQualitySensor"
|
||||||
elif device_class == DEVICE_CLASS_CO:
|
elif device_class == SensorDeviceClass.CO:
|
||||||
a_type = "CarbonMonoxideSensor"
|
a_type = "CarbonMonoxideSensor"
|
||||||
elif device_class == DEVICE_CLASS_CO2 or "co2" in state.entity_id:
|
elif device_class == SensorDeviceClass.CO2 or "co2" in state.entity_id:
|
||||||
a_type = "CarbonDioxideSensor"
|
a_type = "CarbonDioxideSensor"
|
||||||
elif device_class == DEVICE_CLASS_ILLUMINANCE or unit in ("lm", LIGHT_LUX):
|
elif device_class == SensorDeviceClass.ILLUMINANCE or unit in ("lm", LIGHT_LUX):
|
||||||
a_type = "LightSensor"
|
a_type = "LightSensor"
|
||||||
|
|
||||||
elif state.domain == "switch":
|
elif state.domain == "switch":
|
||||||
|
@ -234,18 +234,6 @@ PROP_MIN_STEP = "minStep"
|
|||||||
PROP_CELSIUS = {"minValue": -273, "maxValue": 999}
|
PROP_CELSIUS = {"minValue": -273, "maxValue": 999}
|
||||||
PROP_VALID_VALUES = "ValidValues"
|
PROP_VALID_VALUES = "ValidValues"
|
||||||
|
|
||||||
# #### Device Classes ####
|
|
||||||
DEVICE_CLASS_DOOR = "door"
|
|
||||||
DEVICE_CLASS_GARAGE_DOOR = "garage_door"
|
|
||||||
DEVICE_CLASS_GAS = "gas"
|
|
||||||
DEVICE_CLASS_MOISTURE = "moisture"
|
|
||||||
DEVICE_CLASS_MOTION = "motion"
|
|
||||||
DEVICE_CLASS_OCCUPANCY = "occupancy"
|
|
||||||
DEVICE_CLASS_OPENING = "opening"
|
|
||||||
DEVICE_CLASS_PM25 = "pm25"
|
|
||||||
DEVICE_CLASS_SMOKE = "smoke"
|
|
||||||
DEVICE_CLASS_WINDOW = "window"
|
|
||||||
|
|
||||||
# #### Thresholds ####
|
# #### Thresholds ####
|
||||||
THRESHOLD_CO = 25
|
THRESHOLD_CO = 25
|
||||||
THRESHOLD_CO2 = 1000
|
THRESHOLD_CO2 = 1000
|
||||||
|
@ -319,7 +319,7 @@ class OpeningDevice(OpeningDeviceBase, HomeAccessory):
|
|||||||
|
|
||||||
@TYPES.register("Window")
|
@TYPES.register("Window")
|
||||||
class Window(OpeningDevice):
|
class Window(OpeningDevice):
|
||||||
"""Generate a Window accessory for a cover entity with DEVICE_CLASS_WINDOW.
|
"""Generate a Window accessory for a cover entity with WINDOW device class.
|
||||||
|
|
||||||
The entity must support: set_cover_position.
|
The entity must support: set_cover_position.
|
||||||
"""
|
"""
|
||||||
|
@ -3,14 +3,13 @@ import logging
|
|||||||
|
|
||||||
from pyhap.const import CATEGORY_HUMIDIFIER
|
from pyhap.const import CATEGORY_HUMIDIFIER
|
||||||
|
|
||||||
|
from homeassistant.components.humidifier import HumidifierDeviceClass
|
||||||
from homeassistant.components.humidifier.const import (
|
from homeassistant.components.humidifier.const import (
|
||||||
ATTR_HUMIDITY,
|
ATTR_HUMIDITY,
|
||||||
ATTR_MAX_HUMIDITY,
|
ATTR_MAX_HUMIDITY,
|
||||||
ATTR_MIN_HUMIDITY,
|
ATTR_MIN_HUMIDITY,
|
||||||
DEFAULT_MAX_HUMIDITY,
|
DEFAULT_MAX_HUMIDITY,
|
||||||
DEFAULT_MIN_HUMIDITY,
|
DEFAULT_MIN_HUMIDITY,
|
||||||
DEVICE_CLASS_DEHUMIDIFIER,
|
|
||||||
DEVICE_CLASS_HUMIDIFIER,
|
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
SERVICE_SET_HUMIDITY,
|
SERVICE_SET_HUMIDITY,
|
||||||
)
|
)
|
||||||
@ -46,13 +45,13 @@ HC_HUMIDIFIER = 1
|
|||||||
HC_DEHUMIDIFIER = 2
|
HC_DEHUMIDIFIER = 2
|
||||||
|
|
||||||
HC_HASS_TO_HOMEKIT_DEVICE_CLASS = {
|
HC_HASS_TO_HOMEKIT_DEVICE_CLASS = {
|
||||||
DEVICE_CLASS_HUMIDIFIER: HC_HUMIDIFIER,
|
HumidifierDeviceClass.HUMIDIFIER: HC_HUMIDIFIER,
|
||||||
DEVICE_CLASS_DEHUMIDIFIER: HC_DEHUMIDIFIER,
|
HumidifierDeviceClass.DEHUMIDIFIER: HC_DEHUMIDIFIER,
|
||||||
}
|
}
|
||||||
|
|
||||||
HC_HASS_TO_HOMEKIT_DEVICE_CLASS_NAME = {
|
HC_HASS_TO_HOMEKIT_DEVICE_CLASS_NAME = {
|
||||||
DEVICE_CLASS_HUMIDIFIER: "Humidifier",
|
HumidifierDeviceClass.HUMIDIFIER: "Humidifier",
|
||||||
DEVICE_CLASS_DEHUMIDIFIER: "Dehumidifier",
|
HumidifierDeviceClass.DEHUMIDIFIER: "Dehumidifier",
|
||||||
}
|
}
|
||||||
|
|
||||||
HC_DEVICE_CLASS_TO_TARGET_CHAR = {
|
HC_DEVICE_CLASS_TO_TARGET_CHAR = {
|
||||||
@ -75,7 +74,9 @@ class HumidifierDehumidifier(HomeAccessory):
|
|||||||
super().__init__(*args, category=CATEGORY_HUMIDIFIER)
|
super().__init__(*args, category=CATEGORY_HUMIDIFIER)
|
||||||
self.chars = []
|
self.chars = []
|
||||||
state = self.hass.states.get(self.entity_id)
|
state = self.hass.states.get(self.entity_id)
|
||||||
device_class = state.attributes.get(ATTR_DEVICE_CLASS, DEVICE_CLASS_HUMIDIFIER)
|
device_class = state.attributes.get(
|
||||||
|
ATTR_DEVICE_CLASS, HumidifierDeviceClass.HUMIDIFIER
|
||||||
|
)
|
||||||
self._hk_device_class = HC_HASS_TO_HOMEKIT_DEVICE_CLASS[device_class]
|
self._hk_device_class = HC_HASS_TO_HOMEKIT_DEVICE_CLASS[device_class]
|
||||||
|
|
||||||
self._target_humidity_char_name = HC_DEVICE_CLASS_TO_TARGET_CHAR[
|
self._target_humidity_char_name = HC_DEVICE_CLASS_TO_TARGET_CHAR[
|
||||||
|
@ -7,6 +7,7 @@ from typing import NamedTuple
|
|||||||
|
|
||||||
from pyhap.const import CATEGORY_SENSOR
|
from pyhap.const import CATEGORY_SENSOR
|
||||||
|
|
||||||
|
from homeassistant.components.binary_sensor import BinarySensorDeviceClass
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_DEVICE_CLASS,
|
ATTR_DEVICE_CLASS,
|
||||||
ATTR_UNIT_OF_MEASUREMENT,
|
ATTR_UNIT_OF_MEASUREMENT,
|
||||||
@ -36,15 +37,6 @@ from .const import (
|
|||||||
CHAR_MOTION_DETECTED,
|
CHAR_MOTION_DETECTED,
|
||||||
CHAR_OCCUPANCY_DETECTED,
|
CHAR_OCCUPANCY_DETECTED,
|
||||||
CHAR_SMOKE_DETECTED,
|
CHAR_SMOKE_DETECTED,
|
||||||
DEVICE_CLASS_DOOR,
|
|
||||||
DEVICE_CLASS_GARAGE_DOOR,
|
|
||||||
DEVICE_CLASS_GAS,
|
|
||||||
DEVICE_CLASS_MOISTURE,
|
|
||||||
DEVICE_CLASS_MOTION,
|
|
||||||
DEVICE_CLASS_OCCUPANCY,
|
|
||||||
DEVICE_CLASS_OPENING,
|
|
||||||
DEVICE_CLASS_SMOKE,
|
|
||||||
DEVICE_CLASS_WINDOW,
|
|
||||||
PROP_CELSIUS,
|
PROP_CELSIUS,
|
||||||
SERV_AIR_QUALITY_SENSOR,
|
SERV_AIR_QUALITY_SENSOR,
|
||||||
SERV_CARBON_DIOXIDE_SENSOR,
|
SERV_CARBON_DIOXIDE_SENSOR,
|
||||||
@ -78,17 +70,27 @@ BINARY_SENSOR_SERVICE_MAP: dict[str, SI] = {
|
|||||||
SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED, int
|
SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED, int
|
||||||
),
|
),
|
||||||
DEVICE_CLASS_CO2: SI(SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED, int),
|
DEVICE_CLASS_CO2: SI(SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED, int),
|
||||||
DEVICE_CLASS_DOOR: SI(SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int),
|
BinarySensorDeviceClass.DOOR: SI(
|
||||||
DEVICE_CLASS_GARAGE_DOOR: SI(SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int),
|
SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int
|
||||||
DEVICE_CLASS_GAS: SI(
|
),
|
||||||
|
BinarySensorDeviceClass.GARAGE_DOOR: SI(
|
||||||
|
SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int
|
||||||
|
),
|
||||||
|
BinarySensorDeviceClass.GAS: SI(
|
||||||
SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED, int
|
SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED, int
|
||||||
),
|
),
|
||||||
DEVICE_CLASS_MOISTURE: SI(SERV_LEAK_SENSOR, CHAR_LEAK_DETECTED, int),
|
BinarySensorDeviceClass.MOISTURE: SI(SERV_LEAK_SENSOR, CHAR_LEAK_DETECTED, int),
|
||||||
DEVICE_CLASS_MOTION: SI(SERV_MOTION_SENSOR, CHAR_MOTION_DETECTED, bool),
|
BinarySensorDeviceClass.MOTION: SI(SERV_MOTION_SENSOR, CHAR_MOTION_DETECTED, bool),
|
||||||
DEVICE_CLASS_OCCUPANCY: SI(SERV_OCCUPANCY_SENSOR, CHAR_OCCUPANCY_DETECTED, int),
|
BinarySensorDeviceClass.OCCUPANCY: SI(
|
||||||
DEVICE_CLASS_OPENING: SI(SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int),
|
SERV_OCCUPANCY_SENSOR, CHAR_OCCUPANCY_DETECTED, int
|
||||||
DEVICE_CLASS_SMOKE: SI(SERV_SMOKE_SENSOR, CHAR_SMOKE_DETECTED, int),
|
),
|
||||||
DEVICE_CLASS_WINDOW: SI(SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int),
|
BinarySensorDeviceClass.OPENING: SI(
|
||||||
|
SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int
|
||||||
|
),
|
||||||
|
BinarySensorDeviceClass.SMOKE: SI(SERV_SMOKE_SENSOR, CHAR_SMOKE_DETECTED, int),
|
||||||
|
BinarySensorDeviceClass.WINDOW: SI(
|
||||||
|
SERV_CONTACT_SENSOR, CHAR_CONTACT_SENSOR_STATE, int
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -284,7 +286,7 @@ class BinarySensor(HomeAccessory):
|
|||||||
service_char = (
|
service_char = (
|
||||||
BINARY_SENSOR_SERVICE_MAP[device_class]
|
BINARY_SENSOR_SERVICE_MAP[device_class]
|
||||||
if device_class in BINARY_SENSOR_SERVICE_MAP
|
if device_class in BINARY_SENSOR_SERVICE_MAP
|
||||||
else BINARY_SENSOR_SERVICE_MAP[DEVICE_CLASS_OCCUPANCY]
|
else BINARY_SENSOR_SERVICE_MAP[BinarySensorDeviceClass.OCCUPANCY]
|
||||||
)
|
)
|
||||||
|
|
||||||
self.format = service_char.format
|
self.format = service_char.format
|
||||||
|
@ -14,8 +14,8 @@ from homeassistant.components import binary_sensor, media_player, sensor
|
|||||||
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
|
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
|
||||||
from homeassistant.components.lock import DOMAIN as LOCK_DOMAIN
|
from homeassistant.components.lock import DOMAIN as LOCK_DOMAIN
|
||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
DEVICE_CLASS_TV,
|
|
||||||
DOMAIN as MEDIA_PLAYER_DOMAIN,
|
DOMAIN as MEDIA_PLAYER_DOMAIN,
|
||||||
|
MediaPlayerDeviceClass,
|
||||||
)
|
)
|
||||||
from homeassistant.components.remote import DOMAIN as REMOTE_DOMAIN, SUPPORT_ACTIVITY
|
from homeassistant.components.remote import DOMAIN as REMOTE_DOMAIN, SUPPORT_ACTIVITY
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -502,7 +502,7 @@ def state_needs_accessory_mode(state):
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
state.domain == MEDIA_PLAYER_DOMAIN
|
state.domain == MEDIA_PLAYER_DOMAIN
|
||||||
and state.attributes.get(ATTR_DEVICE_CLASS) == DEVICE_CLASS_TV
|
and state.attributes.get(ATTR_DEVICE_CLASS) == MediaPlayerDeviceClass.TV
|
||||||
or state.domain == REMOTE_DOMAIN
|
or state.domain == REMOTE_DOMAIN
|
||||||
and state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) & SUPPORT_ACTIVITY
|
and state.attributes.get(ATTR_SUPPORTED_FEATURES, 0) & SUPPORT_ACTIVITY
|
||||||
)
|
)
|
||||||
|
@ -8,6 +8,10 @@ from pyhap.accessory_driver import AccessoryDriver
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components import camera, ffmpeg
|
from homeassistant.components import camera, ffmpeg
|
||||||
|
from homeassistant.components.binary_sensor import (
|
||||||
|
DEVICE_CLASS_MOTION,
|
||||||
|
DEVICE_CLASS_OCCUPANCY,
|
||||||
|
)
|
||||||
from homeassistant.components.camera.img_util import TurboJPEGSingleton
|
from homeassistant.components.camera.img_util import TurboJPEGSingleton
|
||||||
from homeassistant.components.homekit.accessories import HomeBridge
|
from homeassistant.components.homekit.accessories import HomeBridge
|
||||||
from homeassistant.components.homekit.const import (
|
from homeassistant.components.homekit.const import (
|
||||||
@ -20,8 +24,6 @@ from homeassistant.components.homekit.const import (
|
|||||||
CONF_STREAM_SOURCE,
|
CONF_STREAM_SOURCE,
|
||||||
CONF_SUPPORT_AUDIO,
|
CONF_SUPPORT_AUDIO,
|
||||||
CONF_VIDEO_CODEC,
|
CONF_VIDEO_CODEC,
|
||||||
DEVICE_CLASS_MOTION,
|
|
||||||
DEVICE_CLASS_OCCUPANCY,
|
|
||||||
SERV_DOORBELL,
|
SERV_DOORBELL,
|
||||||
SERV_MOTION_SENSOR,
|
SERV_MOTION_SENSOR,
|
||||||
SERV_STATELESS_PROGRAMMABLE_SWITCH,
|
SERV_STATELESS_PROGRAMMABLE_SWITCH,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"""Test different accessory types: Sensors."""
|
"""Test different accessory types: Sensors."""
|
||||||
|
from homeassistant.components.binary_sensor import DEVICE_CLASS_MOTION
|
||||||
from homeassistant.components.homekit import get_accessory
|
from homeassistant.components.homekit import get_accessory
|
||||||
from homeassistant.components.homekit.const import (
|
from homeassistant.components.homekit.const import (
|
||||||
DEVICE_CLASS_MOTION,
|
|
||||||
PROP_CELSIUS,
|
PROP_CELSIUS,
|
||||||
THRESHOLD_CO,
|
THRESHOLD_CO,
|
||||||
THRESHOLD_CO2,
|
THRESHOLD_CO2,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user