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:
parent
58de7fe9a3
commit
4c33a9d732
9 changed files with 65 additions and 22 deletions
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue