Add model to august device_info (#32187)

* Add model to august device_info

* Address review comments from PR#32125

* Fix test name
This commit is contained in:
J. Nick Koston 2020-02-25 16:34:31 -10:00 committed by GitHub
parent 58de7fe9a3
commit 4c33a9d732
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 65 additions and 22 deletions

View file

@ -104,6 +104,7 @@ class AugustDoorBinarySensor(BinarySensorDevice):
self._state = None
self._available = False
self._firmware_version = None
self._model = None
@property
def available(self):
@ -139,6 +140,7 @@ class AugustDoorBinarySensor(BinarySensorDevice):
if detail is not None:
lock_door_state = detail.door_state
self._firmware_version = detail.firmware_version
self._model = detail.model
self._available = lock_door_state != LockDoorStatus.UNKNOWN
self._state = lock_door_state == LockDoorStatus.OPEN
@ -156,6 +158,7 @@ class AugustDoorBinarySensor(BinarySensorDevice):
"name": self._door.device_name,
"manufacturer": DEFAULT_NAME,
"sw_version": self._firmware_version,
"model": self._model,
}
@ -170,6 +173,7 @@ class AugustDoorbellBinarySensor(BinarySensorDevice):
self._state = None
self._available = False
self._firmware_version = None
self._model = None
@property
def available(self):
@ -210,6 +214,7 @@ class AugustDoorbellBinarySensor(BinarySensorDevice):
self._state = None
if detail is not None:
self._firmware_version = detail.firmware_version
self._model = detail.model
self._state = await async_state_provider(self._data, detail)
@property
@ -228,4 +233,5 @@ class AugustDoorbellBinarySensor(BinarySensorDevice):
"name": self._doorbell.device_name,
"manufacturer": "August",
"sw_version": self._firmware_version,
"model": self._model,
}

View file

@ -34,6 +34,7 @@ class AugustCamera(Camera):
self._image_url = None
self._image_content = None
self._firmware_version = None
self._model = None
@property
def name(self):
@ -58,7 +59,7 @@ class AugustCamera(Camera):
@property
def model(self):
"""Return the camera model."""
return "Doorbell"
return self._model
async def async_camera_image(self):
"""Return bytes of camera image."""
@ -85,6 +86,7 @@ class AugustCamera(Camera):
return None
self._firmware_version = self._doorbell_detail.firmware_version
self._model = self._doorbell_detail.model
def _camera_image(self):
"""Return bytes of camera image via http get."""
@ -104,4 +106,5 @@ class AugustCamera(Camera):
"name": self._doorbell.device_name + " Camera",
"manufacturer": DEFAULT_NAME,
"sw_version": self._firmware_version,
"model": self._model,
}

View file

@ -40,6 +40,7 @@ class AugustLock(LockDevice):
self._changed_by = None
self._available = False
self._firmware_version = None
self._model = None
async def async_lock(self, **kwargs):
"""Lock the device."""
@ -89,6 +90,7 @@ class AugustLock(LockDevice):
if self._lock_detail is not None:
self._firmware_version = self._lock_detail.firmware_version
self._model = self._lock_detail.model
self._update_lock_status_from_detail()
@ -135,6 +137,7 @@ class AugustLock(LockDevice):
"name": self._lock.device_name,
"manufacturer": DEFAULT_NAME,
"sw_version": self._firmware_version,
"model": self._model,
}
@property

View file

@ -3,7 +3,7 @@
"name": "August",
"documentation": "https://www.home-assistant.io/integrations/august",
"requirements": [
"py-august==0.17.0"
"py-august==0.21.0"
],
"dependencies": [
"configurator"

View file

@ -7,12 +7,16 @@ from homeassistant.helpers.entity import Entity
from .const import DATA_AUGUST, DEFAULT_NAME, DOMAIN
BATTERY_LEVEL_FULL = "Full"
BATTERY_LEVEL_MEDIUM = "Medium"
BATTERY_LEVEL_LOW = "Low"
_LOGGER = logging.getLogger(__name__)
SCAN_INTERVAL = timedelta(seconds=5)
async def _async_retrieve_device_battery_state(detail):
def _retrieve_device_battery_state(detail):
"""Get the latest state of the sensor."""
if detail is None:
return None
@ -20,7 +24,7 @@ async def _async_retrieve_device_battery_state(detail):
return detail.battery_level
async def _async_retrieve_linked_keypad_battery_state(detail):
def _retrieve_linked_keypad_battery_state(detail):
"""Get the latest state of the sensor."""
if detail is None:
return None
@ -30,13 +34,11 @@ async def _async_retrieve_linked_keypad_battery_state(detail):
battery_level = detail.keypad.battery_level
_LOGGER.debug("keypad battery level: %s %s", battery_level, battery_level.lower())
if battery_level.lower() == "full":
if battery_level == BATTERY_LEVEL_FULL:
return 100
if battery_level.lower() == "medium":
if battery_level == BATTERY_LEVEL_MEDIUM:
return 60
if battery_level.lower() == "low":
if battery_level == BATTERY_LEVEL_LOW:
return 10
return 0
@ -45,11 +47,11 @@ async def _async_retrieve_linked_keypad_battery_state(detail):
SENSOR_TYPES_BATTERY = {
"device_battery": {
"name": "Battery",
"async_state_provider": _async_retrieve_device_battery_state,
"state_provider": _retrieve_device_battery_state,
},
"linked_keypad_battery": {
"name": "Keypad Battery",
"async_state_provider": _async_retrieve_linked_keypad_battery_state,
"state_provider": _retrieve_linked_keypad_battery_state,
},
}
@ -71,11 +73,9 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
for sensor_type in SENSOR_TYPES_BATTERY:
for device in batteries[sensor_type]:
async_state_provider = SENSOR_TYPES_BATTERY[sensor_type][
"async_state_provider"
]
state_provider = SENSOR_TYPES_BATTERY[sensor_type]["state_provider"]
detail = await data.async_get_device_detail(device)
state = await async_state_provider(detail)
state = state_provider(detail)
sensor_name = SENSOR_TYPES_BATTERY[sensor_type]["name"]
if state is None:
_LOGGER.debug(
@ -103,6 +103,7 @@ class AugustBatterySensor(Entity):
self._state = None
self._available = False
self._firmware_version = None
self._model = None
@property
def available(self):
@ -133,14 +134,13 @@ class AugustBatterySensor(Entity):
async def async_update(self):
"""Get the latest state of the sensor."""
async_state_provider = SENSOR_TYPES_BATTERY[self._sensor_type][
"async_state_provider"
]
state_provider = SENSOR_TYPES_BATTERY[self._sensor_type]["state_provider"]
detail = await self._data.async_get_device_detail(self._device)
self._state = await async_state_provider(detail)
self._state = state_provider(detail)
self._available = self._state is not None
if detail is not None:
self._firmware_version = detail.firmware_version
self._model = detail.model
@property
def unique_id(self) -> str:
@ -155,4 +155,5 @@ class AugustBatterySensor(Entity):
"name": self._device.device_name,
"manufacturer": DEFAULT_NAME,
"sw_version": self._firmware_version,
"model": self._model,
}

View file

@ -1076,7 +1076,7 @@ pushover_complete==1.1.1
pwmled==1.5.0
# homeassistant.components.august
py-august==0.17.0
py-august==0.21.0
# homeassistant.components.canary
py-canary==0.5.0

View file

@ -391,7 +391,7 @@ pure-python-adb==0.2.2.dev0
pushbullet.py==0.11.0
# homeassistant.components.august
py-august==0.17.0
py-august==0.21.0
# homeassistant.components.canary
py-canary==0.5.0

View file

@ -88,3 +88,18 @@ async def test_create_doorbell_offline(hass):
assert binary_sensor_tmt100_name_online.state == STATE_OFF
binary_sensor_tmt100_name_ding = hass.states.get("binary_sensor.tmt100_name_ding")
assert binary_sensor_tmt100_name_ding.state == STATE_UNAVAILABLE
async def test_doorbell_device_registry(hass):
"""Test creation of a lock with doorsense and bridge ands up in the registry."""
doorbell_one = await _mock_doorbell_from_fixture(hass, "get_doorbell.offline.json")
doorbell_details = [doorbell_one]
await _create_august_with_devices(hass, doorbell_details)
device_registry = await hass.helpers.device_registry.async_get_registry()
reg_device = device_registry.async_get_device(
identifiers={("august", "tmt100")}, connections=set()
)
assert "hydra1" == reg_device.model
assert "3.1.0-HYDRC75+201909251139" == reg_device.sw_version

View file

@ -17,6 +17,21 @@ from tests.components.august.mocks import (
)
async def test_lock_device_registry(hass):
"""Test creation of a lock with doorsense and bridge ands up in the registry."""
lock_one = await _mock_doorsense_enabled_august_lock_detail(hass)
lock_details = [lock_one]
await _create_august_with_devices(hass, lock_details)
device_registry = await hass.helpers.device_registry.async_get_registry()
reg_device = device_registry.async_get_device(
identifiers={("august", "online_with_doorsense")}, connections=set()
)
assert "AUG-MD01" == reg_device.model
assert "undefined-4.3.0-1.8.14" == reg_device.sw_version
async def test_one_lock_operation(hass):
"""Test creation of a lock with doorsense and bridge."""
lock_one = await _mock_doorsense_enabled_august_lock_detail(hass)