mirror of
https://github.com/home-assistant/core.git
synced 2025-07-17 18:27:09 +00:00
Update HAP-python to 1.1.8 (#13563)
* Bump version to HAP-python==1.1.8 * Required changes for version change * Small bugfix lights
This commit is contained in:
parent
fe56844a3a
commit
206e38a2ab
@ -28,7 +28,7 @@ from .util import (
|
|||||||
TYPES = Registry()
|
TYPES = Registry()
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
REQUIREMENTS = ['HAP-python==1.1.7']
|
REQUIREMENTS = ['HAP-python==1.1.8']
|
||||||
|
|
||||||
|
|
||||||
CONFIG_SCHEMA = vol.Schema({
|
CONFIG_SCHEMA = vol.Schema({
|
||||||
|
@ -8,8 +8,8 @@ from homeassistant.helpers.event import async_track_state_change
|
|||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
ACCESSORY_MODEL, ACCESSORY_NAME, BRIDGE_MODEL, BRIDGE_NAME,
|
ACCESSORY_MODEL, ACCESSORY_NAME, BRIDGE_MODEL, BRIDGE_NAME,
|
||||||
MANUFACTURER, SERV_ACCESSORY_INFO, SERV_BRIDGING_STATE,
|
MANUFACTURER, SERV_ACCESSORY_INFO, CHAR_MANUFACTURER, CHAR_MODEL,
|
||||||
CHAR_MANUFACTURER, CHAR_MODEL, CHAR_NAME, CHAR_SERIAL_NUMBER)
|
CHAR_NAME, CHAR_SERIAL_NUMBER)
|
||||||
from .util import (
|
from .util import (
|
||||||
show_setup_message, dismiss_setup_message)
|
show_setup_message, dismiss_setup_message)
|
||||||
|
|
||||||
@ -39,15 +39,6 @@ def set_accessory_info(acc, name, model, manufacturer=MANUFACTURER,
|
|||||||
service.get_characteristic(CHAR_SERIAL_NUMBER).set_value(serial_number)
|
service.get_characteristic(CHAR_SERIAL_NUMBER).set_value(serial_number)
|
||||||
|
|
||||||
|
|
||||||
def override_properties(char, properties=None, valid_values=None):
|
|
||||||
"""Override characteristic property values and valid values."""
|
|
||||||
if properties:
|
|
||||||
char.properties.update(properties)
|
|
||||||
|
|
||||||
if valid_values:
|
|
||||||
char.properties['ValidValues'].update(valid_values)
|
|
||||||
|
|
||||||
|
|
||||||
class HomeAccessory(Accessory):
|
class HomeAccessory(Accessory):
|
||||||
"""Adapter class for Accessory."""
|
"""Adapter class for Accessory."""
|
||||||
|
|
||||||
@ -83,7 +74,6 @@ class HomeBridge(Bridge):
|
|||||||
|
|
||||||
def _set_services(self):
|
def _set_services(self):
|
||||||
add_preload_service(self, SERV_ACCESSORY_INFO)
|
add_preload_service(self, SERV_ACCESSORY_INFO)
|
||||||
add_preload_service(self, SERV_BRIDGING_STATE)
|
|
||||||
|
|
||||||
def setup_message(self):
|
def setup_message(self):
|
||||||
"""Prevent print of pyhap setup message to terminal."""
|
"""Prevent print of pyhap setup message to terminal."""
|
||||||
|
@ -34,7 +34,6 @@ CATEGORY_WINDOW_COVERING = 'WINDOW_COVERING'
|
|||||||
|
|
||||||
# #### Services ####
|
# #### Services ####
|
||||||
SERV_ACCESSORY_INFO = 'AccessoryInformation'
|
SERV_ACCESSORY_INFO = 'AccessoryInformation'
|
||||||
SERV_BRIDGING_STATE = 'BridgingState'
|
|
||||||
SERV_HUMIDITY_SENSOR = 'HumiditySensor'
|
SERV_HUMIDITY_SENSOR = 'HumiditySensor'
|
||||||
# CurrentRelativeHumidity | StatusActive, StatusFault, StatusTampered,
|
# CurrentRelativeHumidity | StatusActive, StatusFault, StatusTampered,
|
||||||
# StatusLowBattery, Name
|
# StatusLowBattery, Name
|
||||||
@ -47,9 +46,7 @@ SERV_WINDOW_COVERING = 'WindowCovering'
|
|||||||
|
|
||||||
|
|
||||||
# #### Characteristics ####
|
# #### Characteristics ####
|
||||||
CHAR_ACC_IDENTIFIER = 'AccessoryIdentifier'
|
|
||||||
CHAR_BRIGHTNESS = 'Brightness' # Int | [0, 100]
|
CHAR_BRIGHTNESS = 'Brightness' # Int | [0, 100]
|
||||||
CHAR_CATEGORY = 'Category'
|
|
||||||
CHAR_COOLING_THRESHOLD_TEMPERATURE = 'CoolingThresholdTemperature'
|
CHAR_COOLING_THRESHOLD_TEMPERATURE = 'CoolingThresholdTemperature'
|
||||||
CHAR_CURRENT_HEATING_COOLING = 'CurrentHeatingCoolingState'
|
CHAR_CURRENT_HEATING_COOLING = 'CurrentHeatingCoolingState'
|
||||||
CHAR_CURRENT_POSITION = 'CurrentPosition'
|
CHAR_CURRENT_POSITION = 'CurrentPosition'
|
||||||
@ -58,13 +55,11 @@ CHAR_CURRENT_SECURITY_STATE = 'SecuritySystemCurrentState'
|
|||||||
CHAR_CURRENT_TEMPERATURE = 'CurrentTemperature'
|
CHAR_CURRENT_TEMPERATURE = 'CurrentTemperature'
|
||||||
CHAR_HEATING_THRESHOLD_TEMPERATURE = 'HeatingThresholdTemperature'
|
CHAR_HEATING_THRESHOLD_TEMPERATURE = 'HeatingThresholdTemperature'
|
||||||
CHAR_HUE = 'Hue' # arcdegress | [0, 360]
|
CHAR_HUE = 'Hue' # arcdegress | [0, 360]
|
||||||
CHAR_LINK_QUALITY = 'LinkQuality'
|
|
||||||
CHAR_MANUFACTURER = 'Manufacturer'
|
CHAR_MANUFACTURER = 'Manufacturer'
|
||||||
CHAR_MODEL = 'Model'
|
CHAR_MODEL = 'Model'
|
||||||
CHAR_NAME = 'Name'
|
CHAR_NAME = 'Name'
|
||||||
CHAR_ON = 'On' # boolean
|
CHAR_ON = 'On' # boolean
|
||||||
CHAR_POSITION_STATE = 'PositionState'
|
CHAR_POSITION_STATE = 'PositionState'
|
||||||
CHAR_REACHABLE = 'Reachable'
|
|
||||||
CHAR_SATURATION = 'Saturation' # percent
|
CHAR_SATURATION = 'Saturation' # percent
|
||||||
CHAR_SERIAL_NUMBER = 'SerialNumber'
|
CHAR_SERIAL_NUMBER = 'SerialNumber'
|
||||||
CHAR_TARGET_HEATING_COOLING = 'TargetHeatingCoolingState'
|
CHAR_TARGET_HEATING_COOLING = 'TargetHeatingCoolingState'
|
||||||
|
@ -152,4 +152,5 @@ class Light(HomeAccessory):
|
|||||||
self.char_hue.set_value(hue, should_callback=False)
|
self.char_hue.set_value(hue, should_callback=False)
|
||||||
self.char_saturation.set_value(saturation,
|
self.char_saturation.set_value(saturation,
|
||||||
should_callback=False)
|
should_callback=False)
|
||||||
|
self._hue, self._saturation = (hue, saturation)
|
||||||
self._flag[RGB_COLOR] = False
|
self._flag[RGB_COLOR] = False
|
||||||
|
@ -5,8 +5,7 @@ from homeassistant.const import (
|
|||||||
ATTR_UNIT_OF_MEASUREMENT, TEMP_CELSIUS)
|
ATTR_UNIT_OF_MEASUREMENT, TEMP_CELSIUS)
|
||||||
|
|
||||||
from . import TYPES
|
from . import TYPES
|
||||||
from .accessories import (
|
from .accessories import HomeAccessory, add_preload_service
|
||||||
HomeAccessory, add_preload_service, override_properties)
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CATEGORY_SENSOR, SERV_HUMIDITY_SENSOR, SERV_TEMPERATURE_SENSOR,
|
CATEGORY_SENSOR, SERV_HUMIDITY_SENSOR, SERV_TEMPERATURE_SENSOR,
|
||||||
CHAR_CURRENT_HUMIDITY, CHAR_CURRENT_TEMPERATURE, PROP_CELSIUS)
|
CHAR_CURRENT_HUMIDITY, CHAR_CURRENT_TEMPERATURE, PROP_CELSIUS)
|
||||||
@ -32,7 +31,7 @@ class TemperatureSensor(HomeAccessory):
|
|||||||
|
|
||||||
serv_temp = add_preload_service(self, SERV_TEMPERATURE_SENSOR)
|
serv_temp = add_preload_service(self, SERV_TEMPERATURE_SENSOR)
|
||||||
self.char_temp = serv_temp.get_characteristic(CHAR_CURRENT_TEMPERATURE)
|
self.char_temp = serv_temp.get_characteristic(CHAR_CURRENT_TEMPERATURE)
|
||||||
override_properties(self.char_temp, PROP_CELSIUS)
|
self.char_temp.override_properties(properties=PROP_CELSIUS)
|
||||||
self.char_temp.value = 0
|
self.char_temp.value = 0
|
||||||
self.unit = None
|
self.unit = None
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ attrs==17.4.0
|
|||||||
DoorBirdPy==0.1.3
|
DoorBirdPy==0.1.3
|
||||||
|
|
||||||
# homeassistant.components.homekit
|
# homeassistant.components.homekit
|
||||||
HAP-python==1.1.7
|
HAP-python==1.1.8
|
||||||
|
|
||||||
# homeassistant.components.notify.mastodon
|
# homeassistant.components.notify.mastodon
|
||||||
Mastodon.py==1.2.2
|
Mastodon.py==1.2.2
|
||||||
|
@ -19,7 +19,7 @@ requests_mock==1.4
|
|||||||
|
|
||||||
|
|
||||||
# homeassistant.components.homekit
|
# homeassistant.components.homekit
|
||||||
HAP-python==1.1.7
|
HAP-python==1.1.8
|
||||||
|
|
||||||
# homeassistant.components.notify.html5
|
# homeassistant.components.notify.html5
|
||||||
PyJWT==1.6.0
|
PyJWT==1.6.0
|
||||||
|
@ -6,12 +6,12 @@ import unittest
|
|||||||
from unittest.mock import call, patch, Mock
|
from unittest.mock import call, patch, Mock
|
||||||
|
|
||||||
from homeassistant.components.homekit.accessories import (
|
from homeassistant.components.homekit.accessories import (
|
||||||
add_preload_service, set_accessory_info, override_properties,
|
add_preload_service, set_accessory_info,
|
||||||
HomeAccessory, HomeBridge, HomeDriver)
|
HomeAccessory, HomeBridge, HomeDriver)
|
||||||
from homeassistant.components.homekit.const import (
|
from homeassistant.components.homekit.const import (
|
||||||
ACCESSORY_MODEL, ACCESSORY_NAME, BRIDGE_MODEL, BRIDGE_NAME,
|
ACCESSORY_MODEL, ACCESSORY_NAME, BRIDGE_MODEL, BRIDGE_NAME,
|
||||||
SERV_ACCESSORY_INFO, SERV_BRIDGING_STATE,
|
SERV_ACCESSORY_INFO, CHAR_MANUFACTURER, CHAR_MODEL,
|
||||||
CHAR_MANUFACTURER, CHAR_MODEL, CHAR_NAME, CHAR_SERIAL_NUMBER)
|
CHAR_NAME, CHAR_SERIAL_NUMBER)
|
||||||
|
|
||||||
|
|
||||||
class TestAccessories(unittest.TestCase):
|
class TestAccessories(unittest.TestCase):
|
||||||
@ -22,7 +22,7 @@ class TestAccessories(unittest.TestCase):
|
|||||||
acc = Mock()
|
acc = Mock()
|
||||||
serv = add_preload_service(acc, 'AirPurifier')
|
serv = add_preload_service(acc, 'AirPurifier')
|
||||||
self.assertEqual(acc.mock_calls, [call.add_service(serv)])
|
self.assertEqual(acc.mock_calls, [call.add_service(serv)])
|
||||||
with self.assertRaises(AssertionError):
|
with self.assertRaises(ValueError):
|
||||||
serv.get_characteristic('Name')
|
serv.get_characteristic('Name')
|
||||||
|
|
||||||
# Test with typo in service name
|
# Test with typo in service name
|
||||||
@ -68,24 +68,6 @@ class TestAccessories(unittest.TestCase):
|
|||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
serv.get_characteristic(CHAR_SERIAL_NUMBER).value, '0000')
|
serv.get_characteristic(CHAR_SERIAL_NUMBER).value, '0000')
|
||||||
|
|
||||||
def test_override_properties(self):
|
|
||||||
"""Test overriding property values."""
|
|
||||||
serv = add_preload_service(Mock(), 'AirPurifier', 'RotationSpeed')
|
|
||||||
|
|
||||||
char_active = serv.get_characteristic('Active')
|
|
||||||
char_rotation_speed = serv.get_characteristic('RotationSpeed')
|
|
||||||
|
|
||||||
self.assertTrue(
|
|
||||||
char_active.properties['ValidValues'].get('State') is None)
|
|
||||||
self.assertEqual(char_rotation_speed.properties['maxValue'], 100)
|
|
||||||
|
|
||||||
override_properties(char_active, valid_values={'State': 'On'})
|
|
||||||
override_properties(char_rotation_speed, properties={'maxValue': 200})
|
|
||||||
|
|
||||||
self.assertFalse(
|
|
||||||
char_active.properties['ValidValues'].get('State') is None)
|
|
||||||
self.assertEqual(char_rotation_speed.properties['maxValue'], 200)
|
|
||||||
|
|
||||||
def test_home_accessory(self):
|
def test_home_accessory(self):
|
||||||
"""Test HomeAccessory class."""
|
"""Test HomeAccessory class."""
|
||||||
acc = HomeAccessory()
|
acc = HomeAccessory()
|
||||||
@ -110,17 +92,15 @@ class TestAccessories(unittest.TestCase):
|
|||||||
bridge = HomeBridge(None)
|
bridge = HomeBridge(None)
|
||||||
self.assertEqual(bridge.display_name, BRIDGE_NAME)
|
self.assertEqual(bridge.display_name, BRIDGE_NAME)
|
||||||
self.assertEqual(bridge.category, 2) # Category.BRIDGE
|
self.assertEqual(bridge.category, 2) # Category.BRIDGE
|
||||||
self.assertEqual(len(bridge.services), 2)
|
self.assertEqual(len(bridge.services), 1)
|
||||||
serv = bridge.services[0] # SERV_ACCESSORY_INFO
|
serv = bridge.services[0] # SERV_ACCESSORY_INFO
|
||||||
self.assertEqual(serv.display_name, SERV_ACCESSORY_INFO)
|
self.assertEqual(serv.display_name, SERV_ACCESSORY_INFO)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
serv.get_characteristic(CHAR_MODEL).value, BRIDGE_MODEL)
|
serv.get_characteristic(CHAR_MODEL).value, BRIDGE_MODEL)
|
||||||
serv = bridge.services[1] # SERV_BRIDGING_STATE
|
|
||||||
self.assertEqual(serv.display_name, SERV_BRIDGING_STATE)
|
|
||||||
|
|
||||||
bridge = HomeBridge('hass', 'test_name', 'test_model')
|
bridge = HomeBridge('hass', 'test_name', 'test_model')
|
||||||
self.assertEqual(bridge.display_name, 'test_name')
|
self.assertEqual(bridge.display_name, 'test_name')
|
||||||
self.assertEqual(len(bridge.services), 2)
|
self.assertEqual(len(bridge.services), 1)
|
||||||
serv = bridge.services[0] # SERV_ACCESSORY_INFO
|
serv = bridge.services[0] # SERV_ACCESSORY_INFO
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
serv.get_characteristic(CHAR_MODEL).value, 'test_model')
|
serv.get_characteristic(CHAR_MODEL).value, 'test_model')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user