diff --git a/homeassistant/components/husqvarna_automower/sensor.py b/homeassistant/components/husqvarna_automower/sensor.py index 3d5977d63ddc..8371fd669e56 100644 --- a/homeassistant/components/husqvarna_automower/sensor.py +++ b/homeassistant/components/husqvarna_automower/sensor.py @@ -14,6 +14,7 @@ from aioautomower.model import ( MowerModes, RestrictedReasons, WorkArea, + WorkAreaType, ) from homeassistant.components.sensor import ( @@ -343,7 +344,7 @@ WORK_AREA_SENSOR_TYPES: tuple[WorkAreaSensorEntityDescription, ...] = ( WorkAreaSensorEntityDescription( key="progress", translation_key_fn=_work_area_translation_key, - exists_fn=lambda data: data.progress is not None, + exists_fn=lambda data: data.type == WorkAreaType.SYSTEMATIC, state_class=SensorStateClass.MEASUREMENT, native_unit_of_measurement=PERCENTAGE, value_fn=attrgetter("progress"), @@ -351,7 +352,7 @@ WORK_AREA_SENSOR_TYPES: tuple[WorkAreaSensorEntityDescription, ...] = ( WorkAreaSensorEntityDescription( key="last_time_completed", translation_key_fn=_work_area_translation_key, - exists_fn=lambda data: data.last_time_completed is not None, + exists_fn=lambda data: data.type == WorkAreaType.SYSTEMATIC, device_class=SensorDeviceClass.TIMESTAMP, value_fn=attrgetter("last_time_completed"), ), diff --git a/tests/components/husqvarna_automower/test_init.py b/tests/components/husqvarna_automower/test_init.py index bf29210df174..e42bf191d591 100644 --- a/tests/components/husqvarna_automower/test_init.py +++ b/tests/components/husqvarna_automower/test_init.py @@ -470,7 +470,7 @@ async def test_add_and_remove_work_area( last_time_completed=datetime( 2024, 10, 1, 11, 11, 0, tzinfo=dt_util.get_default_time_zone() ), - type=WorkAreaType.RANDOM, + type=WorkAreaType.SYSTEMATIC, use_global_cutting_height=False, ) } diff --git a/tests/components/husqvarna_automower/test_sensor.py b/tests/components/husqvarna_automower/test_sensor.py index a985d0703ec8..2a75597ee4e2 100644 --- a/tests/components/husqvarna_automower/test_sensor.py +++ b/tests/components/husqvarna_automower/test_sensor.py @@ -10,13 +10,15 @@ from aioautomower.model import ( MowerModes, MowerStates, RestrictedReasons, + WorkArea, + WorkAreaType, ) from freezegun.api import FrozenDateTimeFactory import pytest from syrupy.assertion import SnapshotAssertion from homeassistant.components.husqvarna_automower.coordinator import SCAN_INTERVAL -from homeassistant.const import STATE_UNAVAILABLE, Platform +from homeassistant.const import STATE_UNAVAILABLE, STATE_UNKNOWN, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er @@ -144,6 +146,68 @@ async def test_work_area_sensor( assert state.state == STATE_UNAVAILABLE +async def test_work_area_sensor_creation( + hass: HomeAssistant, + mock_automower_client: AsyncMock, + mock_config_entry: MockConfigEntry, + freezer: FrozenDateTimeFactory, + values: dict[str, MowerAttributes], +) -> None: + """Test the work area sensor depending on mower pattern.""" + values[TEST_MOWER_ID].work_area_names.append("new systematic work area") + values[TEST_MOWER_ID].work_area_dict.update({1: "new systematic work area"}) + values[TEST_MOWER_ID].work_areas.update( + { + 1: WorkArea( + name="new systematic work area", + cutting_height=12, + enabled=True, + type=WorkAreaType.SYSTEMATIC, + use_global_cutting_height=False, + ) + } + ) + mock_automower_client.get_status.return_value = values + await setup_integration(hass, mock_config_entry) + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) + await hass.async_block_till_done() + state = hass.states.get( + "sensor.garden_test_mower_1_new_systematic_work_area_progress" + ) + assert state is not None + assert state.state == STATE_UNKNOWN + state = hass.states.get( + "sensor.garden_test_mower_1_new_systematic_work_area_last_time_completed" + ) + assert state is not None + assert state.state == STATE_UNKNOWN + + values[TEST_MOWER_ID].work_area_names.append("new random work area") + values[TEST_MOWER_ID].work_area_dict.update({2: "new random work area"}) + values[TEST_MOWER_ID].work_areas.update( + { + 2: WorkArea( + name="new random work area", + cutting_height=12, + enabled=True, + type=WorkAreaType.RANDOM, + use_global_cutting_height=False, + ) + } + ) + mock_automower_client.get_status.return_value = values + freezer.tick(SCAN_INTERVAL) + async_fire_time_changed(hass) + await hass.async_block_till_done() + state = hass.states.get("sensor.garden_test_mower_1_new_random_work_area_progress") + assert state is None + state = hass.states.get( + "sensor.garden_test_mower_1_new_random_work_area_last_time_completed" + ) + assert state is None + + async def test_restricted_reason_sensor( hass: HomeAssistant, mock_automower_client: AsyncMock,