mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Add battery sensor for Tradfri blinds (#65067)
This commit is contained in:
parent
e0d970c739
commit
70321ed795
@ -28,7 +28,7 @@ async def async_setup_entry(
|
|||||||
api = coordinator_data[KEY_API]
|
api = coordinator_data[KEY_API]
|
||||||
|
|
||||||
async_add_entities(
|
async_add_entities(
|
||||||
TradfriSensor(
|
TradfriBatterySensor(
|
||||||
device_coordinator,
|
device_coordinator,
|
||||||
api,
|
api,
|
||||||
gateway_id,
|
gateway_id,
|
||||||
@ -37,14 +37,13 @@ async def async_setup_entry(
|
|||||||
if (
|
if (
|
||||||
not device_coordinator.device.has_light_control
|
not device_coordinator.device.has_light_control
|
||||||
and not device_coordinator.device.has_socket_control
|
and not device_coordinator.device.has_socket_control
|
||||||
and not device_coordinator.device.has_blind_control
|
|
||||||
and not device_coordinator.device.has_signal_repeater_control
|
and not device_coordinator.device.has_signal_repeater_control
|
||||||
and not device_coordinator.device.has_air_purifier_control
|
and not device_coordinator.device.has_air_purifier_control
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class TradfriSensor(TradfriBaseEntity, SensorEntity):
|
class TradfriBatterySensor(TradfriBaseEntity, SensorEntity):
|
||||||
"""The platform class required by Home Assistant."""
|
"""The platform class required by Home Assistant."""
|
||||||
|
|
||||||
_attr_device_class = SensorDeviceClass.BATTERY
|
_attr_device_class = SensorDeviceClass.BATTERY
|
||||||
|
@ -5,16 +5,13 @@ from unittest.mock import MagicMock, Mock
|
|||||||
from .common import setup_integration
|
from .common import setup_integration
|
||||||
|
|
||||||
|
|
||||||
def mock_sensor(state_name: str, state_value: str, device_number=0):
|
def mock_sensor(test_state: list, device_number=0):
|
||||||
"""Mock a tradfri sensor."""
|
"""Mock a tradfri sensor."""
|
||||||
dev_info_mock = MagicMock()
|
dev_info_mock = MagicMock()
|
||||||
dev_info_mock.manufacturer = "manufacturer"
|
dev_info_mock.manufacturer = "manufacturer"
|
||||||
dev_info_mock.model_number = "model"
|
dev_info_mock.model_number = "model"
|
||||||
dev_info_mock.firmware_version = "1.2.3"
|
dev_info_mock.firmware_version = "1.2.3"
|
||||||
|
|
||||||
# Set state value, eg battery_level = 50
|
|
||||||
setattr(dev_info_mock, state_name, state_value)
|
|
||||||
|
|
||||||
_mock_sensor = Mock(
|
_mock_sensor = Mock(
|
||||||
id=f"mock-sensor-id-{device_number}",
|
id=f"mock-sensor-id-{device_number}",
|
||||||
reachable=True,
|
reachable=True,
|
||||||
@ -26,6 +23,11 @@ def mock_sensor(state_name: str, state_value: str, device_number=0):
|
|||||||
has_signal_repeater_control=False,
|
has_signal_repeater_control=False,
|
||||||
has_air_purifier_control=False,
|
has_air_purifier_control=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Set state value, eg battery_level = 50, or has_air_purifier_control=True
|
||||||
|
for state in test_state:
|
||||||
|
setattr(dev_info_mock, state["attribute"], state["value"])
|
||||||
|
|
||||||
_mock_sensor.name = f"tradfri_sensor_{device_number}"
|
_mock_sensor.name = f"tradfri_sensor_{device_number}"
|
||||||
|
|
||||||
return _mock_sensor
|
return _mock_sensor
|
||||||
@ -34,7 +36,7 @@ def mock_sensor(state_name: str, state_value: str, device_number=0):
|
|||||||
async def test_battery_sensor(hass, mock_gateway, mock_api_factory):
|
async def test_battery_sensor(hass, mock_gateway, mock_api_factory):
|
||||||
"""Test that a battery sensor is correctly added."""
|
"""Test that a battery sensor is correctly added."""
|
||||||
mock_gateway.mock_devices.append(
|
mock_gateway.mock_devices.append(
|
||||||
mock_sensor(state_name="battery_level", state_value=60)
|
mock_sensor(test_state=[{"attribute": "battery_level", "value": 60}])
|
||||||
)
|
)
|
||||||
await setup_integration(hass)
|
await setup_integration(hass)
|
||||||
|
|
||||||
@ -45,10 +47,27 @@ async def test_battery_sensor(hass, mock_gateway, mock_api_factory):
|
|||||||
assert sensor_1.attributes["device_class"] == "battery"
|
assert sensor_1.attributes["device_class"] == "battery"
|
||||||
|
|
||||||
|
|
||||||
|
async def test_cover_battery_sensor(hass, mock_gateway, mock_api_factory):
|
||||||
|
"""Test that a battery sensor is correctly added for a cover (blind)."""
|
||||||
|
mock_gateway.mock_devices.append(
|
||||||
|
mock_sensor(
|
||||||
|
test_state=[
|
||||||
|
{"attribute": "battery_level", "value": 42, "has_blind_control": True}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
await setup_integration(hass)
|
||||||
|
|
||||||
|
sensor_1 = hass.states.get("sensor.tradfri_sensor_0")
|
||||||
|
assert sensor_1 is not None
|
||||||
|
assert sensor_1.state == "42"
|
||||||
|
assert sensor_1.attributes["unit_of_measurement"] == "%"
|
||||||
|
assert sensor_1.attributes["device_class"] == "battery"
|
||||||
|
|
||||||
|
|
||||||
async def test_sensor_observed(hass, mock_gateway, mock_api_factory):
|
async def test_sensor_observed(hass, mock_gateway, mock_api_factory):
|
||||||
"""Test that sensors are correctly observed."""
|
"""Test that sensors are correctly observed."""
|
||||||
|
sensor = mock_sensor(test_state=[{"attribute": "battery_level", "value": 60}])
|
||||||
sensor = mock_sensor(state_name="battery_level", state_value=60)
|
|
||||||
mock_gateway.mock_devices.append(sensor)
|
mock_gateway.mock_devices.append(sensor)
|
||||||
await setup_integration(hass)
|
await setup_integration(hass)
|
||||||
assert len(sensor.observe.mock_calls) > 0
|
assert len(sensor.observe.mock_calls) > 0
|
||||||
@ -56,11 +75,14 @@ async def test_sensor_observed(hass, mock_gateway, mock_api_factory):
|
|||||||
|
|
||||||
async def test_sensor_available(hass, mock_gateway, mock_api_factory):
|
async def test_sensor_available(hass, mock_gateway, mock_api_factory):
|
||||||
"""Test sensor available property."""
|
"""Test sensor available property."""
|
||||||
|
sensor = mock_sensor(
|
||||||
sensor = mock_sensor(state_name="battery_level", state_value=60, device_number=1)
|
test_state=[{"attribute": "battery_level", "value": 60}], device_number=1
|
||||||
|
)
|
||||||
sensor.reachable = True
|
sensor.reachable = True
|
||||||
|
|
||||||
sensor2 = mock_sensor(state_name="battery_level", state_value=60, device_number=2)
|
sensor2 = mock_sensor(
|
||||||
|
test_state=[{"attribute": "battery_level", "value": 60}], device_number=2
|
||||||
|
)
|
||||||
sensor2.reachable = False
|
sensor2.reachable = False
|
||||||
|
|
||||||
mock_gateway.mock_devices.append(sensor)
|
mock_gateway.mock_devices.append(sensor)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user