Clean up HomeKit accessory information characteristics (#14114)
* Update accessory information characteristics * Add firmware revision characteristic
This commit is contained in:
parent
84f163252a
commit
2091f86e25
3 changed files with 34 additions and 21 deletions
|
@ -7,15 +7,17 @@ import logging
|
||||||
from pyhap.accessory import Accessory, Bridge, Category
|
from pyhap.accessory import Accessory, Bridge, Category
|
||||||
from pyhap.accessory_driver import AccessoryDriver
|
from pyhap.accessory_driver import AccessoryDriver
|
||||||
|
|
||||||
|
from homeassistant.const import __version__
|
||||||
from homeassistant.core import callback as ha_callback
|
from homeassistant.core import callback as ha_callback
|
||||||
|
from homeassistant.core import split_entity_id
|
||||||
from homeassistant.helpers.event import (
|
from homeassistant.helpers.event import (
|
||||||
async_track_state_change, track_point_in_utc_time)
|
async_track_state_change, track_point_in_utc_time)
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
DEBOUNCE_TIMEOUT, BRIDGE_MODEL, BRIDGE_NAME, MANUFACTURER,
|
DEBOUNCE_TIMEOUT, BRIDGE_MODEL, BRIDGE_NAME, BRIDGE_SERIAL_NUMBER,
|
||||||
SERV_ACCESSORY_INFO, CHAR_MANUFACTURER,
|
MANUFACTURER, SERV_ACCESSORY_INFO, CHAR_FIRMWARE_REVISION,
|
||||||
CHAR_MODEL, CHAR_NAME, CHAR_SERIAL_NUMBER)
|
CHAR_MANUFACTURER, CHAR_MODEL, CHAR_NAME, CHAR_SERIAL_NUMBER)
|
||||||
from .util import (
|
from .util import (
|
||||||
show_setup_message, dismiss_setup_message)
|
show_setup_message, dismiss_setup_message)
|
||||||
|
|
||||||
|
@ -84,14 +86,17 @@ def setup_char(char_name, service, value=None, properties=None, callback=None):
|
||||||
return char
|
return char
|
||||||
|
|
||||||
|
|
||||||
def set_accessory_info(acc, name, model, manufacturer=MANUFACTURER,
|
def set_accessory_info(acc, name, model, serial_number,
|
||||||
serial_number='0000'):
|
manufacturer=MANUFACTURER,
|
||||||
|
firmware_revision=__version__):
|
||||||
"""Set the default accessory information."""
|
"""Set the default accessory information."""
|
||||||
service = acc.get_service(SERV_ACCESSORY_INFO)
|
service = acc.get_service(SERV_ACCESSORY_INFO)
|
||||||
service.get_characteristic(CHAR_NAME).set_value(name)
|
service.get_characteristic(CHAR_NAME).set_value(name)
|
||||||
service.get_characteristic(CHAR_MODEL).set_value(model)
|
service.get_characteristic(CHAR_MODEL).set_value(model)
|
||||||
service.get_characteristic(CHAR_MANUFACTURER).set_value(manufacturer)
|
service.get_characteristic(CHAR_MANUFACTURER).set_value(manufacturer)
|
||||||
service.get_characteristic(CHAR_SERIAL_NUMBER).set_value(serial_number)
|
service.get_characteristic(CHAR_SERIAL_NUMBER).set_value(serial_number)
|
||||||
|
service.get_characteristic(CHAR_FIRMWARE_REVISION) \
|
||||||
|
.set_value(firmware_revision)
|
||||||
|
|
||||||
|
|
||||||
class HomeAccessory(Accessory):
|
class HomeAccessory(Accessory):
|
||||||
|
@ -100,7 +105,8 @@ class HomeAccessory(Accessory):
|
||||||
def __init__(self, hass, name, entity_id, aid, category):
|
def __init__(self, hass, name, entity_id, aid, category):
|
||||||
"""Initialize a Accessory object."""
|
"""Initialize a Accessory object."""
|
||||||
super().__init__(name, aid=aid)
|
super().__init__(name, aid=aid)
|
||||||
set_accessory_info(self, name, model=entity_id)
|
domain = split_entity_id(entity_id)[0].replace("_", " ").title()
|
||||||
|
set_accessory_info(self, name, model=domain, serial_number=entity_id)
|
||||||
self.category = getattr(Category, category, Category.OTHER)
|
self.category = getattr(Category, category, Category.OTHER)
|
||||||
self.entity_id = entity_id
|
self.entity_id = entity_id
|
||||||
self.hass = hass
|
self.hass = hass
|
||||||
|
@ -137,7 +143,8 @@ class HomeBridge(Bridge):
|
||||||
def __init__(self, hass, name=BRIDGE_NAME):
|
def __init__(self, hass, name=BRIDGE_NAME):
|
||||||
"""Initialize a Bridge object."""
|
"""Initialize a Bridge object."""
|
||||||
super().__init__(name)
|
super().__init__(name)
|
||||||
set_accessory_info(self, name, model=BRIDGE_MODEL)
|
set_accessory_info(self, name, model=BRIDGE_MODEL,
|
||||||
|
serial_number=BRIDGE_SERIAL_NUMBER)
|
||||||
self.hass = hass
|
self.hass = hass
|
||||||
|
|
||||||
def _set_services(self):
|
def _set_services(self):
|
||||||
|
|
|
@ -18,9 +18,10 @@ DEFAULT_PORT = 51827
|
||||||
SERVICE_HOMEKIT_START = 'start'
|
SERVICE_HOMEKIT_START = 'start'
|
||||||
|
|
||||||
# #### STRING CONSTANTS ####
|
# #### STRING CONSTANTS ####
|
||||||
BRIDGE_MODEL = 'homekit.bridge'
|
BRIDGE_MODEL = 'Bridge'
|
||||||
BRIDGE_NAME = 'Home Assistant'
|
BRIDGE_NAME = 'Home Assistant Bridge'
|
||||||
MANUFACTURER = 'HomeAssistant'
|
BRIDGE_SERIAL_NUMBER = 'homekit.bridge'
|
||||||
|
MANUFACTURER = 'Home Assistant'
|
||||||
|
|
||||||
# #### Categories ####
|
# #### Categories ####
|
||||||
CATEGORY_ALARM_SYSTEM = 'ALARM_SYSTEM'
|
CATEGORY_ALARM_SYSTEM = 'ALARM_SYSTEM'
|
||||||
|
@ -74,6 +75,7 @@ CHAR_CURRENT_POSITION = 'CurrentPosition' # Int | [0, 100]
|
||||||
CHAR_CURRENT_HUMIDITY = 'CurrentRelativeHumidity' # percent
|
CHAR_CURRENT_HUMIDITY = 'CurrentRelativeHumidity' # percent
|
||||||
CHAR_CURRENT_SECURITY_STATE = 'SecuritySystemCurrentState'
|
CHAR_CURRENT_SECURITY_STATE = 'SecuritySystemCurrentState'
|
||||||
CHAR_CURRENT_TEMPERATURE = 'CurrentTemperature'
|
CHAR_CURRENT_TEMPERATURE = 'CurrentTemperature'
|
||||||
|
CHAR_FIRMWARE_REVISION = 'FirmwareRevision'
|
||||||
CHAR_HEATING_THRESHOLD_TEMPERATURE = 'HeatingThresholdTemperature'
|
CHAR_HEATING_THRESHOLD_TEMPERATURE = 'HeatingThresholdTemperature'
|
||||||
CHAR_HUE = 'Hue' # arcdegress | [0, 360]
|
CHAR_HUE = 'Hue' # arcdegress | [0, 360]
|
||||||
CHAR_LEAK_DETECTED = 'LeakDetected'
|
CHAR_LEAK_DETECTED = 'LeakDetected'
|
||||||
|
|
|
@ -10,8 +10,8 @@ from homeassistant.components.homekit.accessories import (
|
||||||
add_preload_service, set_accessory_info,
|
add_preload_service, set_accessory_info,
|
||||||
debounce, HomeAccessory, HomeBridge, HomeDriver)
|
debounce, HomeAccessory, HomeBridge, HomeDriver)
|
||||||
from homeassistant.components.homekit.const import (
|
from homeassistant.components.homekit.const import (
|
||||||
BRIDGE_MODEL, BRIDGE_NAME, SERV_ACCESSORY_INFO,
|
BRIDGE_MODEL, BRIDGE_NAME, SERV_ACCESSORY_INFO, CHAR_FIRMWARE_REVISION,
|
||||||
CHAR_MANUFACTURER, CHAR_MODEL, CHAR_NAME, CHAR_SERIAL_NUMBER)
|
CHAR_MANUFACTURER, CHAR_MODEL, CHAR_NAME, CHAR_SERIAL_NUMBER, MANUFACTURER)
|
||||||
from homeassistant.const import ATTR_NOW, EVENT_TIME_CHANGED
|
from homeassistant.const import ATTR_NOW, EVENT_TIME_CHANGED
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
|
@ -92,26 +92,30 @@ class TestAccessories(unittest.TestCase):
|
||||||
"""Test setting the basic accessory information."""
|
"""Test setting the basic accessory information."""
|
||||||
# Test HomeAccessory
|
# Test HomeAccessory
|
||||||
acc = HomeAccessory('HA', 'Home Accessory', 'homekit.accessory', 2, '')
|
acc = HomeAccessory('HA', 'Home Accessory', 'homekit.accessory', 2, '')
|
||||||
set_accessory_info(acc, 'name', 'model', 'manufacturer', '0000')
|
set_accessory_info(acc, 'name', 'model', '0000', MANUFACTURER, '1.2.3')
|
||||||
|
|
||||||
serv = acc.get_service(SERV_ACCESSORY_INFO)
|
serv = acc.get_service(SERV_ACCESSORY_INFO)
|
||||||
self.assertEqual(serv.get_characteristic(CHAR_NAME).value, 'name')
|
self.assertEqual(serv.get_characteristic(CHAR_NAME).value, 'name')
|
||||||
self.assertEqual(serv.get_characteristic(CHAR_MODEL).value, 'model')
|
self.assertEqual(serv.get_characteristic(CHAR_MODEL).value, 'model')
|
||||||
self.assertEqual(
|
|
||||||
serv.get_characteristic(CHAR_MANUFACTURER).value, 'manufacturer')
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
serv.get_characteristic(CHAR_SERIAL_NUMBER).value, '0000')
|
serv.get_characteristic(CHAR_SERIAL_NUMBER).value, '0000')
|
||||||
|
self.assertEqual(
|
||||||
|
serv.get_characteristic(CHAR_MANUFACTURER).value, MANUFACTURER)
|
||||||
|
self.assertEqual(
|
||||||
|
serv.get_characteristic(CHAR_FIRMWARE_REVISION).value, '1.2.3')
|
||||||
|
|
||||||
# Test HomeBridge
|
# Test HomeBridge
|
||||||
acc = HomeBridge('hass')
|
acc = HomeBridge('hass')
|
||||||
set_accessory_info(acc, 'name', 'model', 'manufacturer', '0000')
|
set_accessory_info(acc, 'name', 'model', '0000', MANUFACTURER, '1.2.3')
|
||||||
|
|
||||||
serv = acc.get_service(SERV_ACCESSORY_INFO)
|
serv = acc.get_service(SERV_ACCESSORY_INFO)
|
||||||
self.assertEqual(serv.get_characteristic(CHAR_MODEL).value, 'model')
|
self.assertEqual(serv.get_characteristic(CHAR_MODEL).value, 'model')
|
||||||
self.assertEqual(
|
|
||||||
serv.get_characteristic(CHAR_MANUFACTURER).value, 'manufacturer')
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
serv.get_characteristic(CHAR_SERIAL_NUMBER).value, '0000')
|
serv.get_characteristic(CHAR_SERIAL_NUMBER).value, '0000')
|
||||||
|
self.assertEqual(
|
||||||
|
serv.get_characteristic(CHAR_MANUFACTURER).value, MANUFACTURER)
|
||||||
|
self.assertEqual(
|
||||||
|
serv.get_characteristic(CHAR_FIRMWARE_REVISION).value, '1.2.3')
|
||||||
|
|
||||||
def test_home_accessory(self):
|
def test_home_accessory(self):
|
||||||
"""Test HomeAccessory class."""
|
"""Test HomeAccessory class."""
|
||||||
|
@ -124,7 +128,7 @@ class TestAccessories(unittest.TestCase):
|
||||||
self.assertEqual(len(acc.services), 1)
|
self.assertEqual(len(acc.services), 1)
|
||||||
serv = acc.services[0] # SERV_ACCESSORY_INFO
|
serv = acc.services[0] # SERV_ACCESSORY_INFO
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
serv.get_characteristic(CHAR_MODEL).value, 'homekit.accessory')
|
serv.get_characteristic(CHAR_MODEL).value, 'Homekit')
|
||||||
|
|
||||||
hass.states.set('homekit.accessory', 'on')
|
hass.states.set('homekit.accessory', 'on')
|
||||||
hass.block_till_done()
|
hass.block_till_done()
|
||||||
|
@ -132,13 +136,13 @@ class TestAccessories(unittest.TestCase):
|
||||||
hass.states.set('homekit.accessory', 'off')
|
hass.states.set('homekit.accessory', 'off')
|
||||||
hass.block_till_done()
|
hass.block_till_done()
|
||||||
|
|
||||||
acc = HomeAccessory('hass', 'test_name', 'test_model', 2, '')
|
acc = HomeAccessory('hass', 'test_name', 'test_model.demo', 2, '')
|
||||||
self.assertEqual(acc.display_name, 'test_name')
|
self.assertEqual(acc.display_name, 'test_name')
|
||||||
self.assertEqual(acc.aid, 2)
|
self.assertEqual(acc.aid, 2)
|
||||||
self.assertEqual(len(acc.services), 1)
|
self.assertEqual(len(acc.services), 1)
|
||||||
serv = acc.services[0] # SERV_ACCESSORY_INFO
|
serv = acc.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')
|
||||||
|
|
||||||
hass.stop()
|
hass.stop()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue