From 3e1035b971ec48d0c9f22dacbeb6b21a10240a28 Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Fri, 4 May 2018 19:42:13 -0400 Subject: [PATCH 1/9] Initial commit --- .../components/homekit/accessories.py | 20 ++++++++++++------- homeassistant/components/homekit/const.py | 3 +++ .../components/homekit/type_covers.py | 6 +++--- .../components/homekit/type_lights.py | 2 +- .../components/homekit/type_locks.py | 2 +- .../homekit/type_security_systems.py | 2 +- .../components/homekit/type_sensors.py | 12 +++++------ .../components/homekit/type_switches.py | 2 +- .../components/homekit/type_thermostats.py | 2 +- homeassistant/components/homekit/util.py | 20 +++++++++++++++++-- 10 files changed, 48 insertions(+), 23 deletions(-) diff --git a/homeassistant/components/homekit/accessories.py b/homeassistant/components/homekit/accessories.py index c47c3f8fbe73ae..b657454d78f104 100644 --- a/homeassistant/components/homekit/accessories.py +++ b/homeassistant/components/homekit/accessories.py @@ -8,7 +8,7 @@ from pyhap.accessory_driver import AccessoryDriver from pyhap.const import CATEGORY_OTHER -from homeassistant.const import __version__ +from homeassistant.const import __version__, CONF_NAME from homeassistant.core import callback as ha_callback from homeassistant.core import split_entity_id from homeassistant.helpers.event import ( @@ -17,7 +17,8 @@ from .const import ( DEBOUNCE_TIMEOUT, BRIDGE_MODEL, BRIDGE_NAME, - BRIDGE_SERIAL_NUMBER, MANUFACTURER) + BRIDGE_SERIAL_NUMBER, CONF_MANUFACTURER, CONF_MODEL, + CONF_SERIAL_NUMBER, MANUFACTURER) from .util import ( show_setup_message, dismiss_setup_message) @@ -64,13 +65,18 @@ def wrapper(*args): class HomeAccessory(Accessory): """Adapter class for Accessory.""" - def __init__(self, hass, name, entity_id, aid, category=CATEGORY_OTHER): + def __init__(self, hass, name, entity_id, aid, config, + category=CATEGORY_OTHER): """Initialize a Accessory object.""" - super().__init__(name, aid=aid) - domain = split_entity_id(entity_id)[0].replace("_", " ").title() + display_name = config.get(CONF_NAME, name) + super().__init__(display_name, aid=aid) + manufacturer = config.get(CONF_MANUFACTURER, MANUFACTURER) + model = config.get(CONF_MODEL, split_entity_id(entity_id)[0] + .replace("_", " ").title()) + serial_number = config.get(CONF_SERIAL_NUMBER, entity_id) self.set_info_service( - firmware_revision=__version__, manufacturer=MANUFACTURER, - model=domain, serial_number=entity_id) + firmware_revision=__version__, manufacturer=manufacturer, + model=model, serial_number=serial_number) self.category = category self.entity_id = entity_id self.hass = hass diff --git a/homeassistant/components/homekit/const.py b/homeassistant/components/homekit/const.py index ce46e84a2ef23c..17a9a71391c354 100644 --- a/homeassistant/components/homekit/const.py +++ b/homeassistant/components/homekit/const.py @@ -9,6 +9,9 @@ CONF_AUTO_START = 'auto_start' CONF_ENTITY_CONFIG = 'entity_config' CONF_FILTER = 'filter' +CONF_MANUFACTURER = 'manufacturer' +CONF_MODEL = 'model' +CONF_SERIAL_NUMBER = 'serial_number' # #### CONFIG DEFAULTS #### DEFAULT_AUTO_START = True diff --git a/homeassistant/components/homekit/type_covers.py b/homeassistant/components/homekit/type_covers.py index 3de87cf63e83ed..f30da5a60e0492 100644 --- a/homeassistant/components/homekit/type_covers.py +++ b/homeassistant/components/homekit/type_covers.py @@ -30,7 +30,7 @@ class GarageDoorOpener(HomeAccessory): def __init__(self, *args, config): """Initialize a GarageDoorOpener accessory object.""" - super().__init__(*args, category=CATEGORY_GARAGE_DOOR_OPENER) + super().__init__(*args, config, category=CATEGORY_GARAGE_DOOR_OPENER) self.flag_target_state = False serv_garage_door = self.add_preload_service(SERV_GARAGE_DOOR_OPENER) @@ -71,7 +71,7 @@ class WindowCovering(HomeAccessory): def __init__(self, *args, config): """Initialize a WindowCovering accessory object.""" - super().__init__(*args, category=CATEGORY_WINDOW_COVERING) + super().__init__(*args, config, category=CATEGORY_WINDOW_COVERING) self.homekit_target = None serv_cover = self.add_preload_service(SERV_WINDOW_COVERING) @@ -110,7 +110,7 @@ class WindowCoveringBasic(HomeAccessory): def __init__(self, *args, config): """Initialize a WindowCovering accessory object.""" - super().__init__(*args, category=CATEGORY_WINDOW_COVERING) + super().__init__(*args, config, category=CATEGORY_WINDOW_COVERING) features = self.hass.states.get(self.entity_id) \ .attributes.get(ATTR_SUPPORTED_FEATURES) self.supports_stop = features & SUPPORT_STOP diff --git a/homeassistant/components/homekit/type_lights.py b/homeassistant/components/homekit/type_lights.py index 3efb0e99df6ca9..6007bddd7bbd6c 100644 --- a/homeassistant/components/homekit/type_lights.py +++ b/homeassistant/components/homekit/type_lights.py @@ -28,7 +28,7 @@ class Light(HomeAccessory): def __init__(self, *args, config): """Initialize a new Light accessory object.""" - super().__init__(*args, category=CATEGORY_LIGHTBULB) + super().__init__(*args, config, category=CATEGORY_LIGHTBULB) self._flag = {CHAR_ON: False, CHAR_BRIGHTNESS: False, CHAR_HUE: False, CHAR_SATURATION: False, CHAR_COLOR_TEMPERATURE: False, RGB_COLOR: False} diff --git a/homeassistant/components/homekit/type_locks.py b/homeassistant/components/homekit/type_locks.py index e7f18d44805a9c..1a010c258389ed 100644 --- a/homeassistant/components/homekit/type_locks.py +++ b/homeassistant/components/homekit/type_locks.py @@ -31,7 +31,7 @@ class Lock(HomeAccessory): def __init__(self, *args, config): """Initialize a Lock accessory object.""" - super().__init__(*args, category=CATEGORY_DOOR_LOCK) + super().__init__(*args, config, category=CATEGORY_DOOR_LOCK) self.flag_target_state = False serv_lock_mechanism = self.add_preload_service(SERV_LOCK) diff --git a/homeassistant/components/homekit/type_security_systems.py b/homeassistant/components/homekit/type_security_systems.py index ab16f921e99a80..bb4d0a8a7d3162 100644 --- a/homeassistant/components/homekit/type_security_systems.py +++ b/homeassistant/components/homekit/type_security_systems.py @@ -34,7 +34,7 @@ class SecuritySystem(HomeAccessory): def __init__(self, *args, config): """Initialize a SecuritySystem accessory object.""" - super().__init__(*args, category=CATEGORY_ALARM_SYSTEM) + super().__init__(*args, config, category=CATEGORY_ALARM_SYSTEM) self._alarm_code = config.get(ATTR_CODE) self.flag_target_state = False diff --git a/homeassistant/components/homekit/type_sensors.py b/homeassistant/components/homekit/type_sensors.py index 393b6beffd6f5a..f43d37f01e1f21 100644 --- a/homeassistant/components/homekit/type_sensors.py +++ b/homeassistant/components/homekit/type_sensors.py @@ -53,7 +53,7 @@ class TemperatureSensor(HomeAccessory): def __init__(self, *args, config): """Initialize a TemperatureSensor accessory object.""" - super().__init__(*args, category=CATEGORY_SENSOR) + super().__init__(*args, config, category=CATEGORY_SENSOR) serv_temp = self.add_preload_service(SERV_TEMPERATURE_SENSOR) self.char_temp = serv_temp.configure_char( CHAR_CURRENT_TEMPERATURE, value=0, properties=PROP_CELSIUS) @@ -76,7 +76,7 @@ class HumiditySensor(HomeAccessory): def __init__(self, *args, config): """Initialize a HumiditySensor accessory object.""" - super().__init__(*args, category=CATEGORY_SENSOR) + super().__init__(*args, config, category=CATEGORY_SENSOR) serv_humidity = self.add_preload_service(SERV_HUMIDITY_SENSOR) self.char_humidity = serv_humidity.configure_char( CHAR_CURRENT_HUMIDITY, value=0) @@ -96,7 +96,7 @@ class AirQualitySensor(HomeAccessory): def __init__(self, *args, config): """Initialize a AirQualitySensor accessory object.""" - super().__init__(*args, category=CATEGORY_SENSOR) + super().__init__(*args, config, category=CATEGORY_SENSOR) serv_air_quality = self.add_preload_service( SERV_AIR_QUALITY_SENSOR, [CHAR_AIR_PARTICULATE_DENSITY]) @@ -120,7 +120,7 @@ class CarbonDioxideSensor(HomeAccessory): def __init__(self, *args, config): """Initialize a CarbonDioxideSensor accessory object.""" - super().__init__(*args, category=CATEGORY_SENSOR) + super().__init__(*args, config, category=CATEGORY_SENSOR) serv_co2 = self.add_preload_service(SERV_CARBON_DIOXIDE_SENSOR, [ CHAR_CARBON_DIOXIDE_LEVEL, CHAR_CARBON_DIOXIDE_PEAK_LEVEL]) @@ -148,7 +148,7 @@ class LightSensor(HomeAccessory): def __init__(self, *args, config): """Initialize a LightSensor accessory object.""" - super().__init__(*args, category=CATEGORY_SENSOR) + super().__init__(*args, config, category=CATEGORY_SENSOR) serv_light = self.add_preload_service(SERV_LIGHT_SENSOR) self.char_light = serv_light.configure_char( @@ -168,7 +168,7 @@ class BinarySensor(HomeAccessory): def __init__(self, *args, config): """Initialize a BinarySensor accessory object.""" - super().__init__(*args, category=CATEGORY_SENSOR) + super().__init__(*args, config, category=CATEGORY_SENSOR) device_class = self.hass.states.get(self.entity_id).attributes \ .get(ATTR_DEVICE_CLASS) service_char = BINARY_SENSOR_SERVICE_MAP[device_class] \ diff --git a/homeassistant/components/homekit/type_switches.py b/homeassistant/components/homekit/type_switches.py index 68a4fcdab0a670..93f4aadc80fcda 100644 --- a/homeassistant/components/homekit/type_switches.py +++ b/homeassistant/components/homekit/type_switches.py @@ -20,7 +20,7 @@ class Switch(HomeAccessory): def __init__(self, *args, config): """Initialize a Switch accessory object to represent a remote.""" - super().__init__(*args, category=CATEGORY_SWITCH) + super().__init__(*args, config, category=CATEGORY_SWITCH) self._domain = split_entity_id(self.entity_id)[0] self.flag_target_state = False diff --git a/homeassistant/components/homekit/type_thermostats.py b/homeassistant/components/homekit/type_thermostats.py index 15fd8160a7e961..a106f1c10e9ddd 100644 --- a/homeassistant/components/homekit/type_thermostats.py +++ b/homeassistant/components/homekit/type_thermostats.py @@ -40,7 +40,7 @@ class Thermostat(HomeAccessory): def __init__(self, *args, config): """Initialize a Thermostat accessory object.""" - super().__init__(*args, category=CATEGORY_THERMOSTAT) + super().__init__(*args, config, category=CATEGORY_THERMOSTAT) self._unit = TEMP_CELSIUS self.support_power_state = False self.heat_cool_flag_target_state = False diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 29fe3c8f265673..595c001a4fe182 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -5,10 +5,11 @@ from homeassistant.core import split_entity_id from homeassistant.const import ( - ATTR_CODE, TEMP_CELSIUS) + ATTR_CODE, CONF_NAME, TEMP_CELSIUS) import homeassistant.helpers.config_validation as cv import homeassistant.util.temperature as temp_util -from .const import HOMEKIT_NOTIFY_ID +from .const import ( + CONF_MANUFACTURER, CONF_MODEL, CONF_SERIAL_NUMBER, HOMEKIT_NOTIFY_ID) _LOGGER = logging.getLogger(__name__) @@ -23,6 +24,21 @@ def validate_entity_config(values): raise vol.Invalid('The configuration for "{}" must be ' ' an dictionary.'.format(entity)) + name = config.get(CONF_NAME) + params[CONF_NAME] = \ + cv.string(name) if name else None + + manufacturer = config.get(CONF_MANUFACTURER) + params[CONF_MANUFACTURER] = \ + cv.string(manufacturer) if manufacturer else None + + model = config.get(CONF_MODEL) + params[CONF_MODEL] = cv.string(model) if model else None + + serial_number = config.get(CONF_SERIAL_NUMBER) + params[CONF_SERIAL_NUMBER] = \ + cv.string(serial_number) if serial_number else None + domain, _ = split_entity_id(entity) if domain == 'alarm_control_panel': From 84bdb557e353a2b13843a174e51f2bdd2bc44907 Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Sat, 5 May 2018 19:33:50 -0400 Subject: [PATCH 2/9] Update per comments --- homeassistant/components/homekit/__init__.py | 6 +++-- .../components/homekit/accessories.py | 6 ++--- .../components/homekit/type_covers.py | 12 +++++----- .../components/homekit/type_lights.py | 4 ++-- .../components/homekit/type_locks.py | 4 ++-- .../homekit/type_security_systems.py | 6 ++--- .../components/homekit/type_sensors.py | 24 +++++++++---------- .../components/homekit/type_switches.py | 4 ++-- .../components/homekit/type_thermostats.py | 4 ++-- homeassistant/components/homekit/util.py | 3 --- 10 files changed, 36 insertions(+), 37 deletions(-) diff --git a/homeassistant/components/homekit/__init__.py b/homeassistant/components/homekit/__init__.py index c31093a5eb8ebe..163c8a0f69ff28 100644 --- a/homeassistant/components/homekit/__init__.py +++ b/homeassistant/components/homekit/__init__.py @@ -15,7 +15,8 @@ ATTR_SUPPORTED_FEATURES, ATTR_UNIT_OF_MEASUREMENT, ATTR_DEVICE_CLASS, CONF_IP_ADDRESS, CONF_PORT, TEMP_CELSIUS, TEMP_FAHRENHEIT, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, - DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_TEMPERATURE) + DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_TEMPERATURE, + CONF_NAME) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entityfilter import FILTER_SCHEMA from homeassistant.util import get_local_ip @@ -94,6 +95,7 @@ def get_accessory(hass, state, aid, config): a_type = None config = config or {} + name = config.get(CONF_NAME, state.name) if state.domain == 'alarm_control_panel': a_type = 'SecuritySystem' @@ -147,7 +149,7 @@ def get_accessory(hass, state, aid, config): return None _LOGGER.debug('Add "%s" as "%s"', state.entity_id, a_type) - return TYPES[a_type](hass, state.name, state.entity_id, aid, config=config) + return TYPES[a_type](hass, name, state.entity_id, aid, config) def generate_aid(entity_id): diff --git a/homeassistant/components/homekit/accessories.py b/homeassistant/components/homekit/accessories.py index b657454d78f104..fc7c534eab8bf5 100644 --- a/homeassistant/components/homekit/accessories.py +++ b/homeassistant/components/homekit/accessories.py @@ -8,7 +8,7 @@ from pyhap.accessory_driver import AccessoryDriver from pyhap.const import CATEGORY_OTHER -from homeassistant.const import __version__, CONF_NAME +from homeassistant.const import __version__ from homeassistant.core import callback as ha_callback from homeassistant.core import split_entity_id from homeassistant.helpers.event import ( @@ -68,8 +68,7 @@ class HomeAccessory(Accessory): def __init__(self, hass, name, entity_id, aid, config, category=CATEGORY_OTHER): """Initialize a Accessory object.""" - display_name = config.get(CONF_NAME, name) - super().__init__(display_name, aid=aid) + super().__init__(name, aid=aid) manufacturer = config.get(CONF_MANUFACTURER, MANUFACTURER) model = config.get(CONF_MODEL, split_entity_id(entity_id)[0] .replace("_", " ").title()) @@ -78,6 +77,7 @@ def __init__(self, hass, name, entity_id, aid, config, firmware_revision=__version__, manufacturer=manufacturer, model=model, serial_number=serial_number) self.category = category + self.config = config self.entity_id = entity_id self.hass = hass diff --git a/homeassistant/components/homekit/type_covers.py b/homeassistant/components/homekit/type_covers.py index f30da5a60e0492..a32ba0370ec6df 100644 --- a/homeassistant/components/homekit/type_covers.py +++ b/homeassistant/components/homekit/type_covers.py @@ -28,9 +28,9 @@ class GarageDoorOpener(HomeAccessory): and support no more than open, close, and stop. """ - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a GarageDoorOpener accessory object.""" - super().__init__(*args, config, category=CATEGORY_GARAGE_DOOR_OPENER) + super().__init__(*args, category=CATEGORY_GARAGE_DOOR_OPENER) self.flag_target_state = False serv_garage_door = self.add_preload_service(SERV_GARAGE_DOOR_OPENER) @@ -69,9 +69,9 @@ class WindowCovering(HomeAccessory): The cover entity must support: set_cover_position. """ - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a WindowCovering accessory object.""" - super().__init__(*args, config, category=CATEGORY_WINDOW_COVERING) + super().__init__(*args, category=CATEGORY_WINDOW_COVERING) self.homekit_target = None serv_cover = self.add_preload_service(SERV_WINDOW_COVERING) @@ -108,9 +108,9 @@ class WindowCoveringBasic(HomeAccessory): stop_cover (optional). """ - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a WindowCovering accessory object.""" - super().__init__(*args, config, category=CATEGORY_WINDOW_COVERING) + super().__init__(*args, category=CATEGORY_WINDOW_COVERING) features = self.hass.states.get(self.entity_id) \ .attributes.get(ATTR_SUPPORTED_FEATURES) self.supports_stop = features & SUPPORT_STOP diff --git a/homeassistant/components/homekit/type_lights.py b/homeassistant/components/homekit/type_lights.py index 6007bddd7bbd6c..d8a205d7026139 100644 --- a/homeassistant/components/homekit/type_lights.py +++ b/homeassistant/components/homekit/type_lights.py @@ -26,9 +26,9 @@ class Light(HomeAccessory): Currently supports: state, brightness, color temperature, rgb_color. """ - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a new Light accessory object.""" - super().__init__(*args, config, category=CATEGORY_LIGHTBULB) + super().__init__(*args, category=CATEGORY_LIGHTBULB) self._flag = {CHAR_ON: False, CHAR_BRIGHTNESS: False, CHAR_HUE: False, CHAR_SATURATION: False, CHAR_COLOR_TEMPERATURE: False, RGB_COLOR: False} diff --git a/homeassistant/components/homekit/type_locks.py b/homeassistant/components/homekit/type_locks.py index 1a010c258389ed..b08ac5930bd891 100644 --- a/homeassistant/components/homekit/type_locks.py +++ b/homeassistant/components/homekit/type_locks.py @@ -29,9 +29,9 @@ class Lock(HomeAccessory): The lock entity must support: unlock and lock. """ - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a Lock accessory object.""" - super().__init__(*args, config, category=CATEGORY_DOOR_LOCK) + super().__init__(*args, category=CATEGORY_DOOR_LOCK) self.flag_target_state = False serv_lock_mechanism = self.add_preload_service(SERV_LOCK) diff --git a/homeassistant/components/homekit/type_security_systems.py b/homeassistant/components/homekit/type_security_systems.py index bb4d0a8a7d3162..bd29453e10a3de 100644 --- a/homeassistant/components/homekit/type_security_systems.py +++ b/homeassistant/components/homekit/type_security_systems.py @@ -32,10 +32,10 @@ class SecuritySystem(HomeAccessory): """Generate an SecuritySystem accessory for an alarm control panel.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a SecuritySystem accessory object.""" - super().__init__(*args, config, category=CATEGORY_ALARM_SYSTEM) - self._alarm_code = config.get(ATTR_CODE) + super().__init__(*args, category=CATEGORY_ALARM_SYSTEM) + self._alarm_code = self.config.get(ATTR_CODE) self.flag_target_state = False serv_alarm = self.add_preload_service(SERV_SECURITY_SYSTEM) diff --git a/homeassistant/components/homekit/type_sensors.py b/homeassistant/components/homekit/type_sensors.py index f43d37f01e1f21..0005c6184ee03c 100644 --- a/homeassistant/components/homekit/type_sensors.py +++ b/homeassistant/components/homekit/type_sensors.py @@ -51,9 +51,9 @@ class TemperatureSensor(HomeAccessory): Sensor entity must return temperature in °C, °F. """ - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a TemperatureSensor accessory object.""" - super().__init__(*args, config, category=CATEGORY_SENSOR) + super().__init__(*args, category=CATEGORY_SENSOR) serv_temp = self.add_preload_service(SERV_TEMPERATURE_SENSOR) self.char_temp = serv_temp.configure_char( CHAR_CURRENT_TEMPERATURE, value=0, properties=PROP_CELSIUS) @@ -74,9 +74,9 @@ def update_state(self, new_state): class HumiditySensor(HomeAccessory): """Generate a HumiditySensor accessory as humidity sensor.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a HumiditySensor accessory object.""" - super().__init__(*args, config, category=CATEGORY_SENSOR) + super().__init__(*args, category=CATEGORY_SENSOR) serv_humidity = self.add_preload_service(SERV_HUMIDITY_SENSOR) self.char_humidity = serv_humidity.configure_char( CHAR_CURRENT_HUMIDITY, value=0) @@ -94,9 +94,9 @@ def update_state(self, new_state): class AirQualitySensor(HomeAccessory): """Generate a AirQualitySensor accessory as air quality sensor.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a AirQualitySensor accessory object.""" - super().__init__(*args, config, category=CATEGORY_SENSOR) + super().__init__(*args, category=CATEGORY_SENSOR) serv_air_quality = self.add_preload_service( SERV_AIR_QUALITY_SENSOR, [CHAR_AIR_PARTICULATE_DENSITY]) @@ -118,9 +118,9 @@ def update_state(self, new_state): class CarbonDioxideSensor(HomeAccessory): """Generate a CarbonDioxideSensor accessory as CO2 sensor.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a CarbonDioxideSensor accessory object.""" - super().__init__(*args, config, category=CATEGORY_SENSOR) + super().__init__(*args, category=CATEGORY_SENSOR) serv_co2 = self.add_preload_service(SERV_CARBON_DIOXIDE_SENSOR, [ CHAR_CARBON_DIOXIDE_LEVEL, CHAR_CARBON_DIOXIDE_PEAK_LEVEL]) @@ -146,9 +146,9 @@ def update_state(self, new_state): class LightSensor(HomeAccessory): """Generate a LightSensor accessory as light sensor.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a LightSensor accessory object.""" - super().__init__(*args, config, category=CATEGORY_SENSOR) + super().__init__(*args, category=CATEGORY_SENSOR) serv_light = self.add_preload_service(SERV_LIGHT_SENSOR) self.char_light = serv_light.configure_char( @@ -166,9 +166,9 @@ def update_state(self, new_state): class BinarySensor(HomeAccessory): """Generate a BinarySensor accessory as binary sensor.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a BinarySensor accessory object.""" - super().__init__(*args, config, category=CATEGORY_SENSOR) + super().__init__(*args, category=CATEGORY_SENSOR) device_class = self.hass.states.get(self.entity_id).attributes \ .get(ATTR_DEVICE_CLASS) service_char = BINARY_SENSOR_SERVICE_MAP[device_class] \ diff --git a/homeassistant/components/homekit/type_switches.py b/homeassistant/components/homekit/type_switches.py index 93f4aadc80fcda..ff4bf1611b8e18 100644 --- a/homeassistant/components/homekit/type_switches.py +++ b/homeassistant/components/homekit/type_switches.py @@ -18,9 +18,9 @@ class Switch(HomeAccessory): """Generate a Switch accessory.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a Switch accessory object to represent a remote.""" - super().__init__(*args, config, category=CATEGORY_SWITCH) + super().__init__(*args, category=CATEGORY_SWITCH) self._domain = split_entity_id(self.entity_id)[0] self.flag_target_state = False diff --git a/homeassistant/components/homekit/type_thermostats.py b/homeassistant/components/homekit/type_thermostats.py index a106f1c10e9ddd..ab4d7faf8750f7 100644 --- a/homeassistant/components/homekit/type_thermostats.py +++ b/homeassistant/components/homekit/type_thermostats.py @@ -38,9 +38,9 @@ class Thermostat(HomeAccessory): """Generate a Thermostat accessory for a climate.""" - def __init__(self, *args, config): + def __init__(self, *args): """Initialize a Thermostat accessory object.""" - super().__init__(*args, config, category=CATEGORY_THERMOSTAT) + super().__init__(*args, category=CATEGORY_THERMOSTAT) self._unit = TEMP_CELSIUS self.support_power_state = False self.heat_cool_flag_target_state = False diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 595c001a4fe182..b80f726d08963d 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -27,14 +27,11 @@ def validate_entity_config(values): name = config.get(CONF_NAME) params[CONF_NAME] = \ cv.string(name) if name else None - manufacturer = config.get(CONF_MANUFACTURER) params[CONF_MANUFACTURER] = \ cv.string(manufacturer) if manufacturer else None - model = config.get(CONF_MODEL) params[CONF_MODEL] = cv.string(model) if model else None - serial_number = config.get(CONF_SERIAL_NUMBER) params[CONF_SERIAL_NUMBER] = \ cv.string(serial_number) if serial_number else None From 6b172829975d6a479ef06b055a9bec83a3512e3a Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Sun, 6 May 2018 00:59:28 -0400 Subject: [PATCH 3/9] Add util test --- tests/components/homekit/test_util.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/components/homekit/test_util.py b/tests/components/homekit/test_util.py index 2ec35975618bbc..908ce498cdf9f3 100644 --- a/tests/components/homekit/test_util.py +++ b/tests/components/homekit/test_util.py @@ -3,7 +3,8 @@ import voluptuous as vol from homeassistant.components.homekit.accessories import HomeBridge -from homeassistant.components.homekit.const import HOMEKIT_NOTIFY_ID +from homeassistant.components.homekit.const import ( + CONF_MANUFACTURER, CONF_MODEL, CONF_SERIAL_NUMBER, HOMEKIT_NOTIFY_ID) from homeassistant.components.homekit.util import ( show_setup_message, dismiss_setup_message, convert_to_float, temperature_to_homekit, temperature_to_states, density_to_air_quality) @@ -12,7 +13,7 @@ from homeassistant.components.persistent_notification import ( DOMAIN, ATTR_NOTIFICATION_ID) from homeassistant.const import ( - ATTR_CODE, STATE_UNKNOWN, TEMP_CELSIUS, TEMP_FAHRENHEIT) + ATTR_CODE, STATE_UNKNOWN, TEMP_CELSIUS, TEMP_FAHRENHEIT, CONF_NAME) from tests.common import async_mock_service @@ -28,6 +29,14 @@ def test_validate_entity_config(): vec(conf) assert vec({}) == {} + assert vec({'demo.test': {CONF_NAME: 'Name'}}) == \ + {'demo.test': {CONF_NAME: 'Name'}} + assert vec({'demo.test': {CONF_MANUFACTURER: 'Manufacturer'}}) == \ + {'demo.test': {CONF_MANUFACTURER: 'Manufacturer'}} + assert vec({'demo.test': {CONF_MODEL: 'Model'}}) == \ + {'demo.test': {CONF_MODEL: 'Model'}} + assert vec({'demo.test': {CONF_SERIAL_NUMBER: 'Serial Number'}}) == \ + {'demo.test': {CONF_SERIAL_NUMBER: 'Serial Number'}} assert vec({'alarm_control_panel.demo': {ATTR_CODE: '1234'}}) == \ {'alarm_control_panel.demo': {ATTR_CODE: '1234'}} From 8b4b4ccc3a976a59d22d3c5e521efaae941282bc Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Sun, 6 May 2018 14:30:14 -0400 Subject: [PATCH 4/9] Update accessory tests --- tests/components/homekit/test_get_accessories.py | 13 ++++++++++--- tests/components/homekit/test_type_covers.py | 8 ++++---- tests/components/homekit/test_type_lights.py | 8 ++++---- tests/components/homekit/test_type_locks.py | 2 +- .../homekit/test_type_security_systems.py | 6 +++--- tests/components/homekit/test_type_sensors.py | 14 +++++++------- tests/components/homekit/test_type_switches.py | 2 +- tests/components/homekit/test_type_thermostats.py | 8 ++++---- 8 files changed, 34 insertions(+), 27 deletions(-) diff --git a/tests/components/homekit/test_get_accessories.py b/tests/components/homekit/test_get_accessories.py index 2ff591983c637d..3ce8135fa2d972 100644 --- a/tests/components/homekit/test_get_accessories.py +++ b/tests/components/homekit/test_get_accessories.py @@ -11,7 +11,7 @@ from homeassistant.components.homekit import get_accessory, TYPES from homeassistant.const import ( ATTR_CODE, ATTR_DEVICE_CLASS, ATTR_SUPPORTED_FEATURES, - ATTR_UNIT_OF_MEASUREMENT, TEMP_CELSIUS, TEMP_FAHRENHEIT) + ATTR_UNIT_OF_MEASUREMENT, TEMP_CELSIUS, TEMP_FAHRENHEIT, CONF_NAME) _LOGGER = logging.getLogger(__name__) @@ -19,17 +19,24 @@ def test_get_accessory_invalid_aid(caplog): """Test with unsupported component.""" assert get_accessory(None, State('light.demo', 'on'), - None, config=None) is None + None, None) is None assert caplog.records[0].levelname == 'WARNING' assert 'invalid aid' in caplog.records[0].msg def test_not_supported(): """Test if none is returned if entity isn't supported.""" - assert get_accessory(None, State('demo.demo', 'on'), 2, config=None) \ + assert get_accessory(None, State('demo.demo', 'on'), 2, {}) \ is None +def test_get_accessory_customize_name(): + """Test with customized name.""" + config = {CONF_NAME: 'Customize Name'} + acc = get_accessory(None, State('light.demo', 'on'), 2, config) + assert acc.display_name == 'Customize Name' + + @pytest.mark.parametrize('type_name, entity_id, state, attrs, config', [ ('Light', 'light.test', 'on', {}, None), ('Lock', 'lock.test', 'locked', {}, None), diff --git a/tests/components/homekit/test_type_covers.py b/tests/components/homekit/test_type_covers.py index b833e1a03c9083..7ab5cea877ce07 100644 --- a/tests/components/homekit/test_type_covers.py +++ b/tests/components/homekit/test_type_covers.py @@ -32,7 +32,7 @@ async def test_garage_door_open_close(hass, cls): """Test if accessory and HA are updated accordingly.""" entity_id = 'cover.garage_door' - acc = cls.garage(hass, 'Garage Door', entity_id, 2, config=None) + acc = cls.garage(hass, 'Garage Door', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -87,7 +87,7 @@ async def test_window_set_cover_position(hass, cls): """Test if accessory and HA are updated accordingly.""" entity_id = 'cover.window' - acc = cls.window(hass, 'Cover', entity_id, 2, config=None) + acc = cls.window(hass, 'Cover', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -135,7 +135,7 @@ async def test_window_open_close(hass, cls): hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_SUPPORTED_FEATURES: 0}) - acc = cls.window_basic(hass, 'Cover', entity_id, 2, config=None) + acc = cls.window_basic(hass, 'Cover', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -198,7 +198,7 @@ async def test_window_open_close_stop(hass, cls): hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_SUPPORTED_FEATURES: SUPPORT_STOP}) - acc = cls.window_basic(hass, 'Cover', entity_id, 2, config=None) + acc = cls.window_basic(hass, 'Cover', entity_id, 2, {}) await hass.async_add_job(acc.run) # Set from HomeKit diff --git a/tests/components/homekit/test_type_lights.py b/tests/components/homekit/test_type_lights.py index b4965fc5ab8203..1a577d2f156711 100644 --- a/tests/components/homekit/test_type_lights.py +++ b/tests/components/homekit/test_type_lights.py @@ -33,7 +33,7 @@ async def test_light_basic(hass, cls): hass.states.async_set(entity_id, STATE_ON, {ATTR_SUPPORTED_FEATURES: 0}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, config=None) + acc = cls.light(hass, 'Light', entity_id, 2, {}) assert acc.aid == 2 assert acc.category == 5 # Lightbulb @@ -81,7 +81,7 @@ async def test_light_brightness(hass, cls): hass.states.async_set(entity_id, STATE_ON, { ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS, ATTR_BRIGHTNESS: 255}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, config=None) + acc = cls.light(hass, 'Light', entity_id, 2, {}) assert acc.char_brightness.value == 0 @@ -126,7 +126,7 @@ async def test_light_color_temperature(hass, cls): ATTR_SUPPORTED_FEATURES: SUPPORT_COLOR_TEMP, ATTR_COLOR_TEMP: 190}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, config=None) + acc = cls.light(hass, 'Light', entity_id, 2, {}) assert acc.char_color_temperature.value == 153 @@ -153,7 +153,7 @@ async def test_light_rgb_color(hass, cls): ATTR_SUPPORTED_FEATURES: SUPPORT_COLOR, ATTR_HS_COLOR: (260, 90)}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, config=None) + acc = cls.light(hass, 'Light', entity_id, 2, {}) assert acc.char_hue.value == 0 assert acc.char_saturation.value == 75 diff --git a/tests/components/homekit/test_type_locks.py b/tests/components/homekit/test_type_locks.py index 3442c0da6c86e2..cedd6a3ebc8063 100644 --- a/tests/components/homekit/test_type_locks.py +++ b/tests/components/homekit/test_type_locks.py @@ -11,7 +11,7 @@ async def test_lock_unlock(hass): """Test if accessory and HA are updated accordingly.""" entity_id = 'lock.kitchen_door' - acc = Lock(hass, 'Lock', entity_id, 2, config=None) + acc = Lock(hass, 'Lock', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 diff --git a/tests/components/homekit/test_type_security_systems.py b/tests/components/homekit/test_type_security_systems.py index 8c3d9474f26ef3..0f69da22269227 100644 --- a/tests/components/homekit/test_type_security_systems.py +++ b/tests/components/homekit/test_type_security_systems.py @@ -5,9 +5,9 @@ from homeassistant.components.homekit.type_security_systems import ( SecuritySystem) from homeassistant.const import ( - ATTR_CODE, ATTR_ENTITY_ID, STATE_UNKNOWN, - STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, - STATE_ALARM_ARMED_NIGHT, STATE_ALARM_DISARMED, STATE_ALARM_TRIGGERED) + ATTR_CODE, ATTR_ENTITY_ID, STATE_UNKNOWN, STATE_ALARM_ARMED_AWAY, + STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, STATE_ALARM_DISARMED, + STATE_ALARM_TRIGGERED) from tests.common import async_mock_service diff --git a/tests/components/homekit/test_type_sensors.py b/tests/components/homekit/test_type_sensors.py index 39f48abd60e7a1..eaf934f1426cb4 100644 --- a/tests/components/homekit/test_type_sensors.py +++ b/tests/components/homekit/test_type_sensors.py @@ -12,7 +12,7 @@ async def test_temperature(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.temperature' - acc = TemperatureSensor(hass, 'Temperature', entity_id, 2, config=None) + acc = TemperatureSensor(hass, 'Temperature', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -42,7 +42,7 @@ async def test_humidity(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.humidity' - acc = HumiditySensor(hass, 'Humidity', entity_id, 2, config=None) + acc = HumiditySensor(hass, 'Humidity', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -63,7 +63,7 @@ async def test_air_quality(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.air_quality' - acc = AirQualitySensor(hass, 'Air Quality', entity_id, 2, config=None) + acc = AirQualitySensor(hass, 'Air Quality', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -92,7 +92,7 @@ async def test_co2(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.co2' - acc = CarbonDioxideSensor(hass, 'CO2', entity_id, 2, config=None) + acc = CarbonDioxideSensor(hass, 'CO2', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -125,7 +125,7 @@ async def test_light(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.light' - acc = LightSensor(hass, 'Light', entity_id, 2, config=None) + acc = LightSensor(hass, 'Light', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -150,7 +150,7 @@ async def test_binary(hass): {ATTR_DEVICE_CLASS: 'opening'}) await hass.async_block_till_done() - acc = BinarySensor(hass, 'Window Opening', entity_id, 2, config=None) + acc = BinarySensor(hass, 'Window Opening', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -192,6 +192,6 @@ async def test_binary_device_classes(hass): {ATTR_DEVICE_CLASS: device_class}) await hass.async_block_till_done() - acc = BinarySensor(hass, 'Binary Sensor', entity_id, 2, config=None) + acc = BinarySensor(hass, 'Binary Sensor', entity_id, 2, {}) assert acc.get_service(service).display_name == service assert acc.char_detected.display_name == char diff --git a/tests/components/homekit/test_type_switches.py b/tests/components/homekit/test_type_switches.py index 7368179f232a47..1c6247d9ed84ec 100644 --- a/tests/components/homekit/test_type_switches.py +++ b/tests/components/homekit/test_type_switches.py @@ -14,7 +14,7 @@ async def test_switch_set_state(hass, entity_id): """Test if accessory and HA are updated accordingly.""" domain = split_entity_id(entity_id)[0] - acc = Switch(hass, 'Switch', entity_id, 2, config=None) + acc = Switch(hass, 'Switch', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 diff --git a/tests/components/homekit/test_type_thermostats.py b/tests/components/homekit/test_type_thermostats.py index eea256c134d6a4..802d5a8e2f63de 100644 --- a/tests/components/homekit/test_type_thermostats.py +++ b/tests/components/homekit/test_type_thermostats.py @@ -33,7 +33,7 @@ async def test_default_thermostat(hass, cls): hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 0}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, config=None) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -173,7 +173,7 @@ async def test_auto_thermostat(hass, cls): # support_auto = True hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 6}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, config=None) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.char_cooling_thresh_temp.value == 23.0 @@ -252,7 +252,7 @@ async def test_power_state(hass, cls): ATTR_TEMPERATURE: 23.0, ATTR_CURRENT_TEMPERATURE: 18.0}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, config=None) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) await hass.async_add_job(acc.run) assert acc.support_power_state is True @@ -304,7 +304,7 @@ async def test_thermostat_fahrenheit(hass, cls): # support_auto = True hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 6}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, config=None) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) await hass.async_add_job(acc.run) hass.states.async_set(entity_id, STATE_AUTO, From ebd829f0411f3577791067ceafd4e451cb01fdd6 Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Sun, 6 May 2018 17:41:00 -0400 Subject: [PATCH 5/9] Updated tests --- homeassistant/components/homekit/util.py | 16 +++++----------- tests/components/homekit/test_get_accessories.py | 13 ++++++++----- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index b80f726d08963d..9d45c2a5be1cfd 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -24,17 +24,11 @@ def validate_entity_config(values): raise vol.Invalid('The configuration for "{}" must be ' ' an dictionary.'.format(entity)) - name = config.get(CONF_NAME) - params[CONF_NAME] = \ - cv.string(name) if name else None - manufacturer = config.get(CONF_MANUFACTURER) - params[CONF_MANUFACTURER] = \ - cv.string(manufacturer) if manufacturer else None - model = config.get(CONF_MODEL) - params[CONF_MODEL] = cv.string(model) if model else None - serial_number = config.get(CONF_SERIAL_NUMBER) - params[CONF_SERIAL_NUMBER] = \ - cv.string(serial_number) if serial_number else None + for index in (CONF_NAME, CONF_MANUFACTURER, + CONF_MODEL, CONF_SERIAL_NUMBER): + value = config.get(index) + if value: + params[index] = value domain, _ = split_entity_id(entity) diff --git a/tests/components/homekit/test_get_accessories.py b/tests/components/homekit/test_get_accessories.py index 3ce8135fa2d972..325ddb6186f1db 100644 --- a/tests/components/homekit/test_get_accessories.py +++ b/tests/components/homekit/test_get_accessories.py @@ -16,7 +16,7 @@ _LOGGER = logging.getLogger(__name__) -def test_get_accessory_invalid_aid(caplog): +def test_invalid_aid(caplog): """Test with unsupported component.""" assert get_accessory(None, State('light.demo', 'on'), None, None) is None @@ -30,11 +30,14 @@ def test_not_supported(): is None -def test_get_accessory_customize_name(): +def test_customize_name(): """Test with customized name.""" - config = {CONF_NAME: 'Customize Name'} - acc = get_accessory(None, State('light.demo', 'on'), 2, config) - assert acc.display_name == 'Customize Name' + mock_type = Mock() + with patch.dict(TYPES, {'Light': mock_type}): + config = {CONF_NAME: 'Customize Name'} + get_accessory(None, State('light.demo', 'on'), 2, config) + mock_type.assert_called_with( + None, 'Customize Name', 'light.demo', 2, config) @pytest.mark.parametrize('type_name, entity_id, state, attrs, config', [ From 124f5ebda719f0f4e0008de62f2a5491c3e3be25 Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Sun, 6 May 2018 23:29:07 -0400 Subject: [PATCH 6/9] Cleaned up tests and minor change to util --- homeassistant/components/homekit/util.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 9d45c2a5be1cfd..339410e0301511 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -24,11 +24,11 @@ def validate_entity_config(values): raise vol.Invalid('The configuration for "{}" must be ' ' an dictionary.'.format(entity)) - for index in (CONF_NAME, CONF_MANUFACTURER, - CONF_MODEL, CONF_SERIAL_NUMBER): - value = config.get(index) + for char in (CONF_NAME, CONF_MANUFACTURER, + CONF_MODEL, CONF_SERIAL_NUMBER): + value = config.get(char) if value: - params[index] = value + params[char] = value domain, _ = split_entity_id(entity) From 040d56bb11314a460b60d06f3525bcae89ab0bf6 Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Thu, 10 May 2018 19:18:35 -0400 Subject: [PATCH 7/9] Remove manufacturer, model, and serial number customize --- homeassistant/components/homekit/accessories.py | 14 +++++--------- homeassistant/components/homekit/const.py | 3 --- homeassistant/components/homekit/util.py | 11 ++++------- tests/components/homekit/test_util.py | 9 +-------- 4 files changed, 10 insertions(+), 27 deletions(-) diff --git a/homeassistant/components/homekit/accessories.py b/homeassistant/components/homekit/accessories.py index fc7c534eab8bf5..7ec1fb542c9111 100644 --- a/homeassistant/components/homekit/accessories.py +++ b/homeassistant/components/homekit/accessories.py @@ -16,9 +16,8 @@ from homeassistant.util import dt as dt_util from .const import ( - DEBOUNCE_TIMEOUT, BRIDGE_MODEL, BRIDGE_NAME, - BRIDGE_SERIAL_NUMBER, CONF_MANUFACTURER, CONF_MODEL, - CONF_SERIAL_NUMBER, MANUFACTURER) + BRIDGE_MODEL, BRIDGE_NAME, BRIDGE_SERIAL_NUMBER, + DEBOUNCE_TIMEOUT, MANUFACTURER) from .util import ( show_setup_message, dismiss_setup_message) @@ -69,13 +68,10 @@ def __init__(self, hass, name, entity_id, aid, config, category=CATEGORY_OTHER): """Initialize a Accessory object.""" super().__init__(name, aid=aid) - manufacturer = config.get(CONF_MANUFACTURER, MANUFACTURER) - model = config.get(CONF_MODEL, split_entity_id(entity_id)[0] - .replace("_", " ").title()) - serial_number = config.get(CONF_SERIAL_NUMBER, entity_id) + model = split_entity_id(entity_id)[0].replace("_", " ").title() self.set_info_service( - firmware_revision=__version__, manufacturer=manufacturer, - model=model, serial_number=serial_number) + firmware_revision=__version__, manufacturer=MANUFACTURER, + model=model, serial_number=entity_id) self.category = category self.config = config self.entity_id = entity_id diff --git a/homeassistant/components/homekit/const.py b/homeassistant/components/homekit/const.py index 17a9a71391c354..ce46e84a2ef23c 100644 --- a/homeassistant/components/homekit/const.py +++ b/homeassistant/components/homekit/const.py @@ -9,9 +9,6 @@ CONF_AUTO_START = 'auto_start' CONF_ENTITY_CONFIG = 'entity_config' CONF_FILTER = 'filter' -CONF_MANUFACTURER = 'manufacturer' -CONF_MODEL = 'model' -CONF_SERIAL_NUMBER = 'serial_number' # #### CONFIG DEFAULTS #### DEFAULT_AUTO_START = True diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 339410e0301511..8fdcd577fdf9bd 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -8,8 +8,7 @@ ATTR_CODE, CONF_NAME, TEMP_CELSIUS) import homeassistant.helpers.config_validation as cv import homeassistant.util.temperature as temp_util -from .const import ( - CONF_MANUFACTURER, CONF_MODEL, CONF_SERIAL_NUMBER, HOMEKIT_NOTIFY_ID) +from .const import HOMEKIT_NOTIFY_ID _LOGGER = logging.getLogger(__name__) @@ -24,11 +23,9 @@ def validate_entity_config(values): raise vol.Invalid('The configuration for "{}" must be ' ' an dictionary.'.format(entity)) - for char in (CONF_NAME, CONF_MANUFACTURER, - CONF_MODEL, CONF_SERIAL_NUMBER): - value = config.get(char) - if value: - params[char] = value + name = config.get(CONF_NAME) + if name: + params[CONF_NAME] = name domain, _ = split_entity_id(entity) diff --git a/tests/components/homekit/test_util.py b/tests/components/homekit/test_util.py index 908ce498cdf9f3..935740de5d0628 100644 --- a/tests/components/homekit/test_util.py +++ b/tests/components/homekit/test_util.py @@ -3,8 +3,7 @@ import voluptuous as vol from homeassistant.components.homekit.accessories import HomeBridge -from homeassistant.components.homekit.const import ( - CONF_MANUFACTURER, CONF_MODEL, CONF_SERIAL_NUMBER, HOMEKIT_NOTIFY_ID) +from homeassistant.components.homekit.const import HOMEKIT_NOTIFY_ID from homeassistant.components.homekit.util import ( show_setup_message, dismiss_setup_message, convert_to_float, temperature_to_homekit, temperature_to_states, density_to_air_quality) @@ -31,12 +30,6 @@ def test_validate_entity_config(): assert vec({}) == {} assert vec({'demo.test': {CONF_NAME: 'Name'}}) == \ {'demo.test': {CONF_NAME: 'Name'}} - assert vec({'demo.test': {CONF_MANUFACTURER: 'Manufacturer'}}) == \ - {'demo.test': {CONF_MANUFACTURER: 'Manufacturer'}} - assert vec({'demo.test': {CONF_MODEL: 'Model'}}) == \ - {'demo.test': {CONF_MODEL: 'Model'}} - assert vec({'demo.test': {CONF_SERIAL_NUMBER: 'Serial Number'}}) == \ - {'demo.test': {CONF_SERIAL_NUMBER: 'Serial Number'}} assert vec({'alarm_control_panel.demo': {ATTR_CODE: '1234'}}) == \ {'alarm_control_panel.demo': {ATTR_CODE: '1234'}} From 41cd8db3c97f5a0b53d11121138cd46d806d25d4 Mon Sep 17 00:00:00 2001 From: Matt Schmitt Date: Thu, 10 May 2018 20:05:21 -0400 Subject: [PATCH 8/9] Fix tests and small change per comment --- homeassistant/components/homekit/util.py | 4 ++-- tests/components/homekit/test_accessories.py | 4 ++-- tests/components/homekit/test_get_accessories.py | 2 +- tests/components/homekit/test_type_security_systems.py | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 8fdcd577fdf9bd..138d926c64e891 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -16,8 +16,8 @@ def validate_entity_config(values): """Validate config entry for CONF_ENTITY.""" entities = {} - for key, config in values.items(): - entity = cv.entity_id(key) + for entity_id, config in values.items(): + entity = cv.entity_id(entity_id) params = {} if not isinstance(config, dict): raise vol.Invalid('The configuration for "{}" must be ' diff --git a/tests/components/homekit/test_accessories.py b/tests/components/homekit/test_accessories.py index 48c6357c28d8f0..8a64ec520219ac 100644 --- a/tests/components/homekit/test_accessories.py +++ b/tests/components/homekit/test_accessories.py @@ -56,7 +56,7 @@ def demo_func(*args): async def test_home_accessory(hass): """Test HomeAccessory class.""" - acc = HomeAccessory(hass, 'Home Accessory', 'homekit.accessory', 2) + acc = HomeAccessory(hass, 'Home Accessory', 'homekit.accessory', 2, {}) assert acc.hass == hass assert acc.display_name == 'Home Accessory' assert acc.category == 1 # Category.OTHER @@ -75,7 +75,7 @@ async def test_home_accessory(hass): hass.states.async_set('homekit.accessory', 'off') await hass.async_block_till_done() - acc = HomeAccessory('hass', 'test_name', 'test_model.demo', 2) + acc = HomeAccessory('hass', 'test_name', 'test_model.demo', 2, {}) assert acc.display_name == 'test_name' assert acc.aid == 2 assert len(acc.services) == 1 diff --git a/tests/components/homekit/test_get_accessories.py b/tests/components/homekit/test_get_accessories.py index 325ddb6186f1db..f719c724e70b09 100644 --- a/tests/components/homekit/test_get_accessories.py +++ b/tests/components/homekit/test_get_accessories.py @@ -61,7 +61,7 @@ def test_types(type_name, entity_id, state, attrs, config): assert mock_type.called if config: - assert mock_type.call_args[1]['config'] == config + assert mock_type.call_args[0][-1] == config @pytest.mark.parametrize('type_name, entity_id, state, attrs', [ diff --git a/tests/components/homekit/test_type_security_systems.py b/tests/components/homekit/test_type_security_systems.py index 0f69da22269227..59a700f73ee3e1 100644 --- a/tests/components/homekit/test_type_security_systems.py +++ b/tests/components/homekit/test_type_security_systems.py @@ -18,7 +18,7 @@ async def test_switch_set_state(hass): config = {ATTR_CODE: code} entity_id = 'alarm_control_panel.test' - acc = SecuritySystem(hass, 'SecuritySystem', entity_id, 2, config=config) + acc = SecuritySystem(hass, 'SecuritySystem', entity_id, 2, config) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -97,7 +97,7 @@ async def test_no_alarm_code(hass, config): """Test accessory if security_system doesn't require a alarm_code.""" entity_id = 'alarm_control_panel.test' - acc = SecuritySystem(hass, 'SecuritySystem', entity_id, 2, config=config) + acc = SecuritySystem(hass, 'SecuritySystem', entity_id, 2, config) # Set from HomeKit call_arm_home = async_mock_service(hass, DOMAIN, 'alarm_arm_home') From bab1c5b64a16d56ad540c22c25cb32fa1703eaa2 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 11 May 2018 13:12:51 +0200 Subject: [PATCH 9/9] Small changes --- homeassistant/components/homekit/__init__.py | 17 +++---- homeassistant/components/homekit/util.py | 7 +-- tests/components/homekit/test_accessories.py | 5 ++- .../homekit/test_get_accessories.py | 45 +++++++++---------- tests/components/homekit/test_type_covers.py | 8 ++-- tests/components/homekit/test_type_lights.py | 8 ++-- tests/components/homekit/test_type_locks.py | 2 +- tests/components/homekit/test_type_sensors.py | 14 +++--- .../components/homekit/test_type_switches.py | 2 +- .../homekit/test_type_thermostats.py | 8 ++-- tests/components/homekit/test_util.py | 2 +- 11 files changed, 58 insertions(+), 60 deletions(-) diff --git a/homeassistant/components/homekit/__init__.py b/homeassistant/components/homekit/__init__.py index 163c8a0f69ff28..028155593fb76b 100644 --- a/homeassistant/components/homekit/__init__.py +++ b/homeassistant/components/homekit/__init__.py @@ -12,21 +12,19 @@ from homeassistant.components.cover import ( SUPPORT_CLOSE, SUPPORT_OPEN, SUPPORT_SET_POSITION) from homeassistant.const import ( - ATTR_SUPPORTED_FEATURES, ATTR_UNIT_OF_MEASUREMENT, - ATTR_DEVICE_CLASS, CONF_IP_ADDRESS, CONF_PORT, TEMP_CELSIUS, - TEMP_FAHRENHEIT, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, - DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_TEMPERATURE, - CONF_NAME) + ATTR_DEVICE_CLASS, ATTR_SUPPORTED_FEATURES, ATTR_UNIT_OF_MEASUREMENT, + CONF_IP_ADDRESS, CONF_NAME, CONF_PORT, TEMP_CELSIUS, TEMP_FAHRENHEIT, + EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP, + DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_TEMPERATURE) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entityfilter import FILTER_SCHEMA from homeassistant.util import get_local_ip from homeassistant.util.decorator import Registry from .const import ( - DOMAIN, HOMEKIT_FILE, CONF_AUTO_START, CONF_ENTITY_CONFIG, CONF_FILTER, - DEFAULT_PORT, DEFAULT_AUTO_START, SERVICE_HOMEKIT_START, + CONF_AUTO_START, CONF_ENTITY_CONFIG, CONF_FILTER, DEFAULT_PORT, + DEFAULT_AUTO_START, DOMAIN, HOMEKIT_FILE, SERVICE_HOMEKIT_START, DEVICE_CLASS_CO2, DEVICE_CLASS_PM25) -from .util import ( - validate_entity_config, show_setup_message) +from .util import show_setup_message, validate_entity_config TYPES = Registry() _LOGGER = logging.getLogger(__name__) @@ -94,7 +92,6 @@ def get_accessory(hass, state, aid, config): return None a_type = None - config = config or {} name = config.get(CONF_NAME, state.name) if state.domain == 'alarm_control_panel': diff --git a/homeassistant/components/homekit/util.py b/homeassistant/components/homekit/util.py index 138d926c64e891..c201d884a7519c 100644 --- a/homeassistant/components/homekit/util.py +++ b/homeassistant/components/homekit/util.py @@ -23,9 +23,10 @@ def validate_entity_config(values): raise vol.Invalid('The configuration for "{}" must be ' ' an dictionary.'.format(entity)) - name = config.get(CONF_NAME) - if name: - params[CONF_NAME] = name + for key in (CONF_NAME, ): + value = config.get(key, -1) + if value != -1: + params[key] = cv.string(value) domain, _ = split_entity_id(entity) diff --git a/tests/components/homekit/test_accessories.py b/tests/components/homekit/test_accessories.py index 8a64ec520219ac..799a831b7455cc 100644 --- a/tests/components/homekit/test_accessories.py +++ b/tests/components/homekit/test_accessories.py @@ -56,9 +56,10 @@ def demo_func(*args): async def test_home_accessory(hass): """Test HomeAccessory class.""" - acc = HomeAccessory(hass, 'Home Accessory', 'homekit.accessory', 2, {}) + acc = HomeAccessory(hass, 'Home Accessory', 'homekit.accessory', 2, None) assert acc.hass == hass assert acc.display_name == 'Home Accessory' + assert acc.aid == 2 assert acc.category == 1 # Category.OTHER assert len(acc.services) == 1 serv = acc.services[0] # SERV_ACCESSORY_INFO @@ -75,7 +76,7 @@ async def test_home_accessory(hass): hass.states.async_set('homekit.accessory', 'off') await hass.async_block_till_done() - acc = HomeAccessory('hass', 'test_name', 'test_model.demo', 2, {}) + acc = HomeAccessory('hass', 'test_name', 'test_model.demo', 2, None) assert acc.display_name == 'test_name' assert acc.aid == 2 assert len(acc.services) == 1 diff --git a/tests/components/homekit/test_get_accessories.py b/tests/components/homekit/test_get_accessories.py index f719c724e70b09..a68273008625e8 100644 --- a/tests/components/homekit/test_get_accessories.py +++ b/tests/components/homekit/test_get_accessories.py @@ -16,38 +16,37 @@ _LOGGER = logging.getLogger(__name__) -def test_invalid_aid(caplog): - """Test with unsupported component.""" - assert get_accessory(None, State('light.demo', 'on'), - None, None) is None +def test_not_supported(caplog): + """Test if none is returned if entity isn't supported.""" + # not supported entity + assert get_accessory(None, State('demo.demo', 'on'), 2, {}) is None + + # invalid aid + assert get_accessory(None, State('light.demo', 'on'), None, None) is None assert caplog.records[0].levelname == 'WARNING' assert 'invalid aid' in caplog.records[0].msg -def test_not_supported(): - """Test if none is returned if entity isn't supported.""" - assert get_accessory(None, State('demo.demo', 'on'), 2, {}) \ - is None - - -def test_customize_name(): - """Test with customized name.""" +@pytest.mark.parametrize('config, name', [ + ({CONF_NAME: 'Customize Name'}, 'Customize Name'), +]) +def test_customize_options(config, name): + """Test with customized options.""" mock_type = Mock() with patch.dict(TYPES, {'Light': mock_type}): - config = {CONF_NAME: 'Customize Name'} - get_accessory(None, State('light.demo', 'on'), 2, config) - mock_type.assert_called_with( - None, 'Customize Name', 'light.demo', 2, config) + entity_state = State('light.demo', 'on') + get_accessory(None, entity_state, 2, config) + mock_type.assert_called_with(None, name, 'light.demo', 2, config) @pytest.mark.parametrize('type_name, entity_id, state, attrs, config', [ - ('Light', 'light.test', 'on', {}, None), - ('Lock', 'lock.test', 'locked', {}, None), + ('Light', 'light.test', 'on', {}, {}), + ('Lock', 'lock.test', 'locked', {}, {}), - ('Thermostat', 'climate.test', 'auto', {}, None), + ('Thermostat', 'climate.test', 'auto', {}, {}), ('Thermostat', 'climate.test', 'auto', {ATTR_SUPPORTED_FEATURES: SUPPORT_TARGET_TEMPERATURE_LOW | - SUPPORT_TARGET_TEMPERATURE_HIGH}, None), + SUPPORT_TARGET_TEMPERATURE_HIGH}, {}), ('SecuritySystem', 'alarm_control_panel.test', 'armed', {}, {ATTR_CODE: '1234'}), @@ -78,7 +77,7 @@ def test_type_covers(type_name, entity_id, state, attrs): mock_type = Mock() with patch.dict(TYPES, {type_name: mock_type}): entity_state = State(entity_id, state, attrs) - get_accessory(None, entity_state, 2, None) + get_accessory(None, entity_state, 2, {}) assert mock_type.called @@ -114,7 +113,7 @@ def test_type_sensors(type_name, entity_id, state, attrs): mock_type = Mock() with patch.dict(TYPES, {type_name: mock_type}): entity_state = State(entity_id, state, attrs) - get_accessory(None, entity_state, 2, None) + get_accessory(None, entity_state, 2, {}) assert mock_type.called @@ -128,5 +127,5 @@ def test_type_switches(type_name, entity_id, state, attrs): mock_type = Mock() with patch.dict(TYPES, {type_name: mock_type}): entity_state = State(entity_id, state, attrs) - get_accessory(None, entity_state, 2, None) + get_accessory(None, entity_state, 2, {}) assert mock_type.called diff --git a/tests/components/homekit/test_type_covers.py b/tests/components/homekit/test_type_covers.py index 7ab5cea877ce07..fcc807338a996a 100644 --- a/tests/components/homekit/test_type_covers.py +++ b/tests/components/homekit/test_type_covers.py @@ -32,7 +32,7 @@ async def test_garage_door_open_close(hass, cls): """Test if accessory and HA are updated accordingly.""" entity_id = 'cover.garage_door' - acc = cls.garage(hass, 'Garage Door', entity_id, 2, {}) + acc = cls.garage(hass, 'Garage Door', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -87,7 +87,7 @@ async def test_window_set_cover_position(hass, cls): """Test if accessory and HA are updated accordingly.""" entity_id = 'cover.window' - acc = cls.window(hass, 'Cover', entity_id, 2, {}) + acc = cls.window(hass, 'Cover', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -135,7 +135,7 @@ async def test_window_open_close(hass, cls): hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_SUPPORTED_FEATURES: 0}) - acc = cls.window_basic(hass, 'Cover', entity_id, 2, {}) + acc = cls.window_basic(hass, 'Cover', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -198,7 +198,7 @@ async def test_window_open_close_stop(hass, cls): hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_SUPPORTED_FEATURES: SUPPORT_STOP}) - acc = cls.window_basic(hass, 'Cover', entity_id, 2, {}) + acc = cls.window_basic(hass, 'Cover', entity_id, 2, None) await hass.async_add_job(acc.run) # Set from HomeKit diff --git a/tests/components/homekit/test_type_lights.py b/tests/components/homekit/test_type_lights.py index 1a577d2f156711..d9602a6e41f696 100644 --- a/tests/components/homekit/test_type_lights.py +++ b/tests/components/homekit/test_type_lights.py @@ -33,7 +33,7 @@ async def test_light_basic(hass, cls): hass.states.async_set(entity_id, STATE_ON, {ATTR_SUPPORTED_FEATURES: 0}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, {}) + acc = cls.light(hass, 'Light', entity_id, 2, None) assert acc.aid == 2 assert acc.category == 5 # Lightbulb @@ -81,7 +81,7 @@ async def test_light_brightness(hass, cls): hass.states.async_set(entity_id, STATE_ON, { ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS, ATTR_BRIGHTNESS: 255}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, {}) + acc = cls.light(hass, 'Light', entity_id, 2, None) assert acc.char_brightness.value == 0 @@ -126,7 +126,7 @@ async def test_light_color_temperature(hass, cls): ATTR_SUPPORTED_FEATURES: SUPPORT_COLOR_TEMP, ATTR_COLOR_TEMP: 190}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, {}) + acc = cls.light(hass, 'Light', entity_id, 2, None) assert acc.char_color_temperature.value == 153 @@ -153,7 +153,7 @@ async def test_light_rgb_color(hass, cls): ATTR_SUPPORTED_FEATURES: SUPPORT_COLOR, ATTR_HS_COLOR: (260, 90)}) await hass.async_block_till_done() - acc = cls.light(hass, 'Light', entity_id, 2, {}) + acc = cls.light(hass, 'Light', entity_id, 2, None) assert acc.char_hue.value == 0 assert acc.char_saturation.value == 75 diff --git a/tests/components/homekit/test_type_locks.py b/tests/components/homekit/test_type_locks.py index cedd6a3ebc8063..343fce288ac37e 100644 --- a/tests/components/homekit/test_type_locks.py +++ b/tests/components/homekit/test_type_locks.py @@ -11,7 +11,7 @@ async def test_lock_unlock(hass): """Test if accessory and HA are updated accordingly.""" entity_id = 'lock.kitchen_door' - acc = Lock(hass, 'Lock', entity_id, 2, {}) + acc = Lock(hass, 'Lock', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 diff --git a/tests/components/homekit/test_type_sensors.py b/tests/components/homekit/test_type_sensors.py index eaf934f1426cb4..a422116014d3cb 100644 --- a/tests/components/homekit/test_type_sensors.py +++ b/tests/components/homekit/test_type_sensors.py @@ -12,7 +12,7 @@ async def test_temperature(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.temperature' - acc = TemperatureSensor(hass, 'Temperature', entity_id, 2, {}) + acc = TemperatureSensor(hass, 'Temperature', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -42,7 +42,7 @@ async def test_humidity(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.humidity' - acc = HumiditySensor(hass, 'Humidity', entity_id, 2, {}) + acc = HumiditySensor(hass, 'Humidity', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -63,7 +63,7 @@ async def test_air_quality(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.air_quality' - acc = AirQualitySensor(hass, 'Air Quality', entity_id, 2, {}) + acc = AirQualitySensor(hass, 'Air Quality', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -92,7 +92,7 @@ async def test_co2(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.co2' - acc = CarbonDioxideSensor(hass, 'CO2', entity_id, 2, {}) + acc = CarbonDioxideSensor(hass, 'CO2', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -125,7 +125,7 @@ async def test_light(hass): """Test if accessory is updated after state change.""" entity_id = 'sensor.light' - acc = LightSensor(hass, 'Light', entity_id, 2, {}) + acc = LightSensor(hass, 'Light', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -150,7 +150,7 @@ async def test_binary(hass): {ATTR_DEVICE_CLASS: 'opening'}) await hass.async_block_till_done() - acc = BinarySensor(hass, 'Window Opening', entity_id, 2, {}) + acc = BinarySensor(hass, 'Window Opening', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -192,6 +192,6 @@ async def test_binary_device_classes(hass): {ATTR_DEVICE_CLASS: device_class}) await hass.async_block_till_done() - acc = BinarySensor(hass, 'Binary Sensor', entity_id, 2, {}) + acc = BinarySensor(hass, 'Binary Sensor', entity_id, 2, None) assert acc.get_service(service).display_name == service assert acc.char_detected.display_name == char diff --git a/tests/components/homekit/test_type_switches.py b/tests/components/homekit/test_type_switches.py index 1c6247d9ed84ec..00c1966305f401 100644 --- a/tests/components/homekit/test_type_switches.py +++ b/tests/components/homekit/test_type_switches.py @@ -14,7 +14,7 @@ async def test_switch_set_state(hass, entity_id): """Test if accessory and HA are updated accordingly.""" domain = split_entity_id(entity_id)[0] - acc = Switch(hass, 'Switch', entity_id, 2, {}) + acc = Switch(hass, 'Switch', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 diff --git a/tests/components/homekit/test_type_thermostats.py b/tests/components/homekit/test_type_thermostats.py index 802d5a8e2f63de..ea592bd63dd83d 100644 --- a/tests/components/homekit/test_type_thermostats.py +++ b/tests/components/homekit/test_type_thermostats.py @@ -33,7 +33,7 @@ async def test_default_thermostat(hass, cls): hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 0}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.aid == 2 @@ -173,7 +173,7 @@ async def test_auto_thermostat(hass, cls): # support_auto = True hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 6}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.char_cooling_thresh_temp.value == 23.0 @@ -252,7 +252,7 @@ async def test_power_state(hass, cls): ATTR_TEMPERATURE: 23.0, ATTR_CURRENT_TEMPERATURE: 18.0}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, None) await hass.async_add_job(acc.run) assert acc.support_power_state is True @@ -304,7 +304,7 @@ async def test_thermostat_fahrenheit(hass, cls): # support_auto = True hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 6}) await hass.async_block_till_done() - acc = cls.thermostat(hass, 'Climate', entity_id, 2, {}) + acc = cls.thermostat(hass, 'Climate', entity_id, 2, None) await hass.async_add_job(acc.run) hass.states.async_set(entity_id, STATE_AUTO, diff --git a/tests/components/homekit/test_util.py b/tests/components/homekit/test_util.py index 935740de5d0628..0b3a5475f7ef9c 100644 --- a/tests/components/homekit/test_util.py +++ b/tests/components/homekit/test_util.py @@ -21,7 +21,7 @@ def test_validate_entity_config(): """Test validate entities.""" configs = [{'invalid_entity_id': {}}, {'demo.test': 1}, {'demo.test': 'test'}, {'demo.test': [1, 2]}, - {'demo.test': None}] + {'demo.test': None}, {'demo.test': {CONF_NAME: None}}] for conf in configs: with pytest.raises(vol.Invalid):