mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
HomeKit style clean up (#14793)
This commit is contained in:
parent
e3fcf46566
commit
722c27f1e2
@ -107,8 +107,8 @@ def get_accessory(hass, driver, state, aid, config):
|
||||
a_type = 'Thermostat'
|
||||
|
||||
elif state.domain == 'cover':
|
||||
features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0)
|
||||
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
||||
features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0)
|
||||
|
||||
if device_class == 'garage' and \
|
||||
features & (cover.SUPPORT_OPEN | cover.SUPPORT_CLOSE):
|
||||
@ -134,8 +134,8 @@ def get_accessory(hass, driver, state, aid, config):
|
||||
a_type = 'MediaPlayer'
|
||||
|
||||
elif state.domain == 'sensor':
|
||||
unit = state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
|
||||
device_class = state.attributes.get(ATTR_DEVICE_CLASS)
|
||||
unit = state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)
|
||||
|
||||
if device_class == DEVICE_CLASS_TEMPERATURE or \
|
||||
unit in (TEMP_CELSIUS, TEMP_FAHRENHEIT):
|
||||
|
@ -57,9 +57,6 @@ class Fan(HomeAccessory):
|
||||
|
||||
def set_state(self, value):
|
||||
"""Set state if call came from HomeKit."""
|
||||
if self._state == value:
|
||||
return
|
||||
|
||||
_LOGGER.debug('%s: Set state to %d', self.entity_id, value)
|
||||
self._flag[CHAR_ACTIVE] = True
|
||||
service = SERVICE_TURN_ON if value == 1 else SERVICE_TURN_OFF
|
||||
|
@ -5,8 +5,10 @@ from pyhap.const import CATEGORY_ALARM_SYSTEM
|
||||
|
||||
from homeassistant.components.alarm_control_panel import DOMAIN
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID, ATTR_CODE, STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME,
|
||||
STATE_ALARM_ARMED_NIGHT, STATE_ALARM_TRIGGERED, STATE_ALARM_DISARMED)
|
||||
ATTR_ENTITY_ID, ATTR_CODE, SERVICE_ALARM_ARM_AWAY, SERVICE_ALARM_ARM_HOME,
|
||||
SERVICE_ALARM_ARM_NIGHT, SERVICE_ALARM_DISARM, STATE_ALARM_ARMED_AWAY,
|
||||
STATE_ALARM_ARMED_HOME, STATE_ALARM_ARMED_NIGHT, STATE_ALARM_TRIGGERED,
|
||||
STATE_ALARM_DISARMED)
|
||||
|
||||
from . import TYPES
|
||||
from .accessories import HomeAccessory
|
||||
@ -22,10 +24,11 @@ HASS_TO_HOMEKIT = {STATE_ALARM_ARMED_HOME: 0,
|
||||
STATE_ALARM_DISARMED: 3,
|
||||
STATE_ALARM_TRIGGERED: 4}
|
||||
HOMEKIT_TO_HASS = {c: s for s, c in HASS_TO_HOMEKIT.items()}
|
||||
STATE_TO_SERVICE = {STATE_ALARM_ARMED_HOME: 'alarm_arm_home',
|
||||
STATE_ALARM_ARMED_AWAY: 'alarm_arm_away',
|
||||
STATE_ALARM_ARMED_NIGHT: 'alarm_arm_night',
|
||||
STATE_ALARM_DISARMED: 'alarm_disarm'}
|
||||
STATE_TO_SERVICE = {
|
||||
STATE_ALARM_ARMED_AWAY: SERVICE_ALARM_ARM_AWAY,
|
||||
STATE_ALARM_ARMED_HOME: SERVICE_ALARM_ARM_HOME,
|
||||
STATE_ALARM_ARMED_NIGHT: SERVICE_ALARM_ARM_NIGHT,
|
||||
STATE_ALARM_DISARMED: SERVICE_ALARM_DISARM}
|
||||
|
||||
|
||||
@TYPES.register('SecuritySystem')
|
||||
|
@ -3,7 +3,7 @@ import logging
|
||||
|
||||
from pyhap.const import CATEGORY_OUTLET, CATEGORY_SWITCH
|
||||
|
||||
from homeassistant.components.switch import DOMAIN as SWITCH
|
||||
from homeassistant.components.switch import DOMAIN
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID, SERVICE_TURN_ON, SERVICE_TURN_OFF, STATE_ON)
|
||||
from homeassistant.core import split_entity_id
|
||||
@ -37,7 +37,7 @@ class Outlet(HomeAccessory):
|
||||
self.flag_target_state = True
|
||||
params = {ATTR_ENTITY_ID: self.entity_id}
|
||||
service = SERVICE_TURN_ON if value else SERVICE_TURN_OFF
|
||||
self.hass.services.call(SWITCH, service, params)
|
||||
self.hass.services.call(DOMAIN, service, params)
|
||||
|
||||
def update_state(self, new_state):
|
||||
"""Update switch state after state changed."""
|
||||
|
@ -56,8 +56,7 @@ async def test_home_accessory(hass, hk_driver):
|
||||
hass.states.async_set(entity_id, None)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
acc = HomeAccessory(hass, hk_driver, 'Home Accessory',
|
||||
entity_id, 2, None)
|
||||
acc = HomeAccessory(hass, hk_driver, 'Home Accessory', entity_id, 2, None)
|
||||
assert acc.hass == hass
|
||||
assert acc.display_name == 'Home Accessory'
|
||||
assert acc.aid == 2
|
||||
|
@ -34,7 +34,7 @@ def test_not_supported_media_player():
|
||||
# selected mode for entity not supported
|
||||
config = {CONF_FEATURE_LIST: {FEATURE_ON_OFF: None}}
|
||||
entity_state = State('media_player.demo', 'on')
|
||||
get_accessory(None, None, entity_state, 2, config) is None
|
||||
assert get_accessory(None, None, entity_state, 2, config) is None
|
||||
|
||||
# no supported modes for entity
|
||||
entity_state = State('media_player.demo', 'on')
|
||||
@ -62,7 +62,7 @@ def test_customize_options(config, name):
|
||||
{ATTR_SUPPORTED_FEATURES: media_player.SUPPORT_TURN_ON |
|
||||
media_player.SUPPORT_TURN_OFF}, {CONF_FEATURE_LIST:
|
||||
{FEATURE_ON_OFF: None}}),
|
||||
('SecuritySystem', 'alarm_control_panel.test', 'armed', {},
|
||||
('SecuritySystem', 'alarm_control_panel.test', 'armed_away', {},
|
||||
{ATTR_CODE: '1234'}),
|
||||
('Thermostat', 'climate.test', 'auto', {}, {}),
|
||||
('Thermostat', 'climate.test', 'auto',
|
||||
|
@ -4,17 +4,17 @@ from unittest.mock import patch, ANY, Mock
|
||||
import pytest
|
||||
|
||||
from homeassistant import setup
|
||||
from homeassistant.core import State
|
||||
from homeassistant.components.homekit import (
|
||||
generate_aid, HomeKit, STATUS_READY, STATUS_RUNNING,
|
||||
STATUS_STOPPED, STATUS_WAIT)
|
||||
from homeassistant.components.homekit.accessories import HomeBridge
|
||||
from homeassistant.components.homekit.const import (
|
||||
CONF_AUTO_START, DEFAULT_PORT, DOMAIN, HOMEKIT_FILE, SERVICE_HOMEKIT_START)
|
||||
from homeassistant.helpers.entityfilter import generate_filter
|
||||
from homeassistant.const import (
|
||||
CONF_IP_ADDRESS, CONF_PORT,
|
||||
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP)
|
||||
from homeassistant.core import State
|
||||
from homeassistant.helpers.entityfilter import generate_filter
|
||||
|
||||
from tests.components.homekit.common import patch_debounce
|
||||
|
||||
|
@ -19,7 +19,7 @@ def cls():
|
||||
patcher = patch_debounce()
|
||||
patcher.start()
|
||||
_import = __import__('homeassistant.components.homekit.type_covers',
|
||||
fromlist=['GarageDoorOpener', 'WindowCovering,',
|
||||
fromlist=['GarageDoorOpener', 'WindowCovering',
|
||||
'WindowCoveringBasic'])
|
||||
patcher_tuple = namedtuple('Cls', ['window', 'window_basic', 'garage'])
|
||||
yield patcher_tuple(window=_import.WindowCovering,
|
||||
|
@ -5,11 +5,10 @@ import pytest
|
||||
|
||||
from homeassistant.components.fan import (
|
||||
ATTR_DIRECTION, ATTR_OSCILLATING, DIRECTION_FORWARD, DIRECTION_REVERSE,
|
||||
DOMAIN, SERVICE_OSCILLATE, SERVICE_SET_DIRECTION,
|
||||
SUPPORT_DIRECTION, SUPPORT_OSCILLATE)
|
||||
DOMAIN, SUPPORT_DIRECTION, SUPPORT_OSCILLATE)
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID, ATTR_SUPPORTED_FEATURES, STATE_ON, STATE_OFF,
|
||||
STATE_UNKNOWN, SERVICE_TURN_ON, SERVICE_TURN_OFF)
|
||||
STATE_UNKNOWN)
|
||||
|
||||
from tests.common import async_mock_service
|
||||
from tests.components.homekit.common import patch_debounce
|
||||
@ -31,8 +30,7 @@ async def test_fan_basic(hass, hk_driver, cls):
|
||||
"""Test fan with char state."""
|
||||
entity_id = 'fan.demo'
|
||||
|
||||
hass.states.async_set(entity_id, STATE_ON,
|
||||
{ATTR_SUPPORTED_FEATURES: 0})
|
||||
hass.states.async_set(entity_id, STATE_ON, {ATTR_SUPPORTED_FEATURES: 0})
|
||||
await hass.async_block_till_done()
|
||||
acc = cls.fan(hass, hk_driver, 'Fan', entity_id, 2, None)
|
||||
|
||||
@ -44,8 +42,7 @@ async def test_fan_basic(hass, hk_driver, cls):
|
||||
await hass.async_block_till_done()
|
||||
assert acc.char_active.value == 1
|
||||
|
||||
hass.states.async_set(entity_id, STATE_OFF,
|
||||
{ATTR_SUPPORTED_FEATURES: 0})
|
||||
hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 0})
|
||||
await hass.async_block_till_done()
|
||||
assert acc.char_active.value == 0
|
||||
|
||||
@ -58,8 +55,8 @@ async def test_fan_basic(hass, hk_driver, cls):
|
||||
assert acc.char_active.value == 0
|
||||
|
||||
# Set from HomeKit
|
||||
call_turn_on = async_mock_service(hass, DOMAIN, SERVICE_TURN_ON)
|
||||
call_turn_off = async_mock_service(hass, DOMAIN, SERVICE_TURN_OFF)
|
||||
call_turn_on = async_mock_service(hass, DOMAIN, 'turn_on')
|
||||
call_turn_off = async_mock_service(hass, DOMAIN, 'turn_off')
|
||||
|
||||
await hass.async_add_job(acc.char_active.client_update_value, 1)
|
||||
await hass.async_block_till_done()
|
||||
@ -97,8 +94,7 @@ async def test_fan_direction(hass, hk_driver, cls):
|
||||
assert acc.char_direction.value == 1
|
||||
|
||||
# Set from HomeKit
|
||||
call_set_direction = async_mock_service(hass, DOMAIN,
|
||||
SERVICE_SET_DIRECTION)
|
||||
call_set_direction = async_mock_service(hass, DOMAIN, 'set_direction')
|
||||
|
||||
await hass.async_add_job(acc.char_direction.client_update_value, 0)
|
||||
await hass.async_block_till_done()
|
||||
@ -128,13 +124,12 @@ async def test_fan_oscillate(hass, hk_driver, cls):
|
||||
await hass.async_block_till_done()
|
||||
assert acc.char_swing.value == 0
|
||||
|
||||
hass.states.async_set(entity_id, STATE_ON,
|
||||
{ATTR_OSCILLATING: True})
|
||||
hass.states.async_set(entity_id, STATE_ON, {ATTR_OSCILLATING: True})
|
||||
await hass.async_block_till_done()
|
||||
assert acc.char_swing.value == 1
|
||||
|
||||
# Set from HomeKit
|
||||
call_oscillate = async_mock_service(hass, DOMAIN, SERVICE_OSCILLATE)
|
||||
call_oscillate = async_mock_service(hass, DOMAIN, 'oscillate')
|
||||
|
||||
await hass.async_add_job(acc.char_swing.client_update_value, 0)
|
||||
await hass.async_block_till_done()
|
||||
|
@ -30,8 +30,7 @@ async def test_light_basic(hass, hk_driver, cls):
|
||||
"""Test light with char state."""
|
||||
entity_id = 'light.demo'
|
||||
|
||||
hass.states.async_set(entity_id, STATE_ON,
|
||||
{ATTR_SUPPORTED_FEATURES: 0})
|
||||
hass.states.async_set(entity_id, STATE_ON, {ATTR_SUPPORTED_FEATURES: 0})
|
||||
await hass.async_block_till_done()
|
||||
acc = cls.light(hass, hk_driver, 'Light', entity_id, 2, None)
|
||||
|
||||
@ -43,8 +42,7 @@ async def test_light_basic(hass, hk_driver, cls):
|
||||
await hass.async_block_till_done()
|
||||
assert acc.char_on.value == 1
|
||||
|
||||
hass.states.async_set(entity_id, STATE_OFF,
|
||||
{ATTR_SUPPORTED_FEATURES: 0})
|
||||
hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 0})
|
||||
await hass.async_block_till_done()
|
||||
assert acc.char_on.value == 0
|
||||
|
||||
|
@ -1,16 +1,14 @@
|
||||
"""Test different accessory types: Media Players."""
|
||||
|
||||
from homeassistant.components.media_player import (
|
||||
ATTR_MEDIA_VOLUME_MUTED, DOMAIN)
|
||||
from homeassistant.components.homekit.type_media_players import MediaPlayer
|
||||
from homeassistant.components.homekit.const import (
|
||||
CONF_FEATURE_LIST, FEATURE_ON_OFF, FEATURE_PLAY_PAUSE, FEATURE_PLAY_STOP,
|
||||
FEATURE_TOGGLE_MUTE)
|
||||
from homeassistant.components.homekit.type_media_players import MediaPlayer
|
||||
from homeassistant.components.media_player import (
|
||||
ATTR_MEDIA_VOLUME_MUTED, DOMAIN)
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID, ATTR_SUPPORTED_FEATURES, SERVICE_MEDIA_PAUSE,
|
||||
SERVICE_MEDIA_PLAY, SERVICE_MEDIA_STOP, SERVICE_TURN_OFF, SERVICE_TURN_ON,
|
||||
SERVICE_VOLUME_MUTE, STATE_IDLE, STATE_OFF, STATE_ON, STATE_PAUSED,
|
||||
STATE_PLAYING)
|
||||
ATTR_ENTITY_ID, ATTR_SUPPORTED_FEATURES, STATE_IDLE, STATE_OFF, STATE_ON,
|
||||
STATE_PAUSED, STATE_PLAYING)
|
||||
|
||||
from tests.common import async_mock_service
|
||||
|
||||
@ -59,12 +57,12 @@ async def test_media_player_set_state(hass, hk_driver):
|
||||
assert acc.chars[FEATURE_PLAY_STOP].value == 0
|
||||
|
||||
# Set from HomeKit
|
||||
call_turn_on = async_mock_service(hass, DOMAIN, SERVICE_TURN_ON)
|
||||
call_turn_off = async_mock_service(hass, DOMAIN, SERVICE_TURN_OFF)
|
||||
call_media_play = async_mock_service(hass, DOMAIN, SERVICE_MEDIA_PLAY)
|
||||
call_media_pause = async_mock_service(hass, DOMAIN, SERVICE_MEDIA_PAUSE)
|
||||
call_media_stop = async_mock_service(hass, DOMAIN, SERVICE_MEDIA_STOP)
|
||||
call_toggle_mute = async_mock_service(hass, DOMAIN, SERVICE_VOLUME_MUTE)
|
||||
call_turn_on = async_mock_service(hass, DOMAIN, 'turn_on')
|
||||
call_turn_off = async_mock_service(hass, DOMAIN, 'turn_off')
|
||||
call_media_play = async_mock_service(hass, DOMAIN, 'media_play')
|
||||
call_media_pause = async_mock_service(hass, DOMAIN, 'media_pause')
|
||||
call_media_stop = async_mock_service(hass, DOMAIN, 'media_stop')
|
||||
call_toggle_mute = async_mock_service(hass, DOMAIN, 'volume_mute')
|
||||
|
||||
await hass.async_add_job(acc.chars[FEATURE_ON_OFF]
|
||||
.client_update_value, True)
|
||||
|
@ -14,8 +14,7 @@ async def test_temperature(hass, hk_driver):
|
||||
|
||||
hass.states.async_set(entity_id, None)
|
||||
await hass.async_block_till_done()
|
||||
acc = TemperatureSensor(hass, hk_driver, 'Temperature',
|
||||
entity_id, 2, None)
|
||||
acc = TemperatureSensor(hass, hk_driver, 'Temperature', entity_id, 2, None)
|
||||
await hass.async_add_job(acc.run)
|
||||
|
||||
assert acc.aid == 2
|
||||
@ -70,8 +69,7 @@ async def test_air_quality(hass, hk_driver):
|
||||
|
||||
hass.states.async_set(entity_id, None)
|
||||
await hass.async_block_till_done()
|
||||
acc = AirQualitySensor(hass, hk_driver, 'Air Quality',
|
||||
entity_id, 2, None)
|
||||
acc = AirQualitySensor(hass, hk_driver, 'Air Quality', entity_id, 2, None)
|
||||
await hass.async_add_job(acc.run)
|
||||
|
||||
assert acc.aid == 2
|
||||
|
@ -1,9 +1,9 @@
|
||||
"""Test different accessory types: Switches."""
|
||||
import pytest
|
||||
|
||||
from homeassistant.core import split_entity_id
|
||||
from homeassistant.components.homekit.type_switches import Outlet, Switch
|
||||
from homeassistant.const import ATTR_ENTITY_ID, STATE_OFF, STATE_ON
|
||||
from homeassistant.core import split_entity_id
|
||||
|
||||
from tests.common import async_mock_service
|
||||
|
||||
|
@ -13,7 +13,7 @@ from homeassistant.components.homekit.const import (
|
||||
PROP_MAX_VALUE, PROP_MIN_VALUE)
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID, ATTR_SUPPORTED_FEATURES, ATTR_UNIT_OF_MEASUREMENT,
|
||||
STATE_OFF, TEMP_CELSIUS, TEMP_FAHRENHEIT)
|
||||
CONF_TEMPERATURE_UNIT, STATE_OFF, TEMP_CELSIUS, TEMP_FAHRENHEIT)
|
||||
|
||||
from tests.common import async_mock_service
|
||||
from tests.components.homekit.common import patch_debounce
|
||||
@ -323,7 +323,7 @@ async def test_thermostat_fahrenheit(hass, hk_driver, cls):
|
||||
# support_auto = True
|
||||
hass.states.async_set(entity_id, STATE_OFF, {ATTR_SUPPORTED_FEATURES: 6})
|
||||
await hass.async_block_till_done()
|
||||
with patch.object(hass.config.units, 'temperature_unit',
|
||||
with patch.object(hass.config.units, CONF_TEMPERATURE_UNIT,
|
||||
new=TEMP_FAHRENHEIT):
|
||||
acc = cls.thermostat(hass, hk_driver, 'Climate', entity_id, 2, None)
|
||||
await hass.async_add_job(acc.run)
|
||||
|
@ -2,7 +2,6 @@
|
||||
import pytest
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.core import State
|
||||
from homeassistant.components.homekit.const import (
|
||||
CONF_FEATURE, CONF_FEATURE_LIST, HOMEKIT_NOTIFY_ID, FEATURE_ON_OFF,
|
||||
FEATURE_PLAY_PAUSE, TYPE_OUTLET)
|
||||
@ -17,6 +16,7 @@ from homeassistant.components.persistent_notification import (
|
||||
from homeassistant.const import (
|
||||
ATTR_CODE, ATTR_SUPPORTED_FEATURES, CONF_NAME, CONF_TYPE, STATE_UNKNOWN,
|
||||
TEMP_CELSIUS, TEMP_FAHRENHEIT)
|
||||
from homeassistant.core import State
|
||||
|
||||
from tests.common import async_mock_service
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user