mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 06:37:52 +00:00
Fix work area sensor in Husqvarna Automower (#121228)
This commit is contained in:
parent
dbe98de82a
commit
1b42b32ac1
@ -184,6 +184,8 @@ RESTRICTED_REASONS: list = [
|
|||||||
RestrictedReasons.WEEK_SCHEDULE.lower(),
|
RestrictedReasons.WEEK_SCHEDULE.lower(),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
STATE_NO_WORK_AREA_ACTIVE = "no_work_area_active"
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _get_work_area_names(data: MowerAttributes) -> list[str]:
|
def _get_work_area_names(data: MowerAttributes) -> list[str]:
|
||||||
@ -191,16 +193,21 @@ def _get_work_area_names(data: MowerAttributes) -> list[str]:
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
# Sensor does not get created if it is None
|
# Sensor does not get created if it is None
|
||||||
assert data.work_areas is not None
|
assert data.work_areas is not None
|
||||||
return [data.work_areas[work_area_id].name for work_area_id in data.work_areas]
|
work_area_list = [
|
||||||
|
data.work_areas[work_area_id].name for work_area_id in data.work_areas
|
||||||
|
]
|
||||||
|
work_area_list.append(STATE_NO_WORK_AREA_ACTIVE)
|
||||||
|
return work_area_list
|
||||||
|
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _get_current_work_area_name(data: MowerAttributes) -> str:
|
def _get_current_work_area_name(data: MowerAttributes) -> str:
|
||||||
"""Return the name of the current work area."""
|
"""Return the name of the current work area."""
|
||||||
|
if data.mower.work_area_id is None:
|
||||||
|
return STATE_NO_WORK_AREA_ACTIVE
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
# Sensor does not get created if values are None
|
# Sensor does not get created if values are None
|
||||||
assert data.work_areas is not None
|
assert data.work_areas is not None
|
||||||
assert data.mower.work_area_id is not None
|
|
||||||
return data.work_areas[data.mower.work_area_id].name
|
return data.work_areas[data.mower.work_area_id].name
|
||||||
|
|
||||||
|
|
||||||
|
@ -252,7 +252,8 @@
|
|||||||
"work_area": {
|
"work_area": {
|
||||||
"name": "Work area",
|
"name": "Work area",
|
||||||
"state": {
|
"state": {
|
||||||
"my_lawn": "My lawn"
|
"my_lawn": "My lawn",
|
||||||
|
"no_work_area_active": "No work area active"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1059,6 +1059,7 @@
|
|||||||
'Front lawn',
|
'Front lawn',
|
||||||
'Back lawn',
|
'Back lawn',
|
||||||
'my_lawn',
|
'my_lawn',
|
||||||
|
'no_work_area_active',
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'config_entry_id': <ANY>,
|
'config_entry_id': <ANY>,
|
||||||
@ -1097,6 +1098,7 @@
|
|||||||
'Front lawn',
|
'Front lawn',
|
||||||
'Back lawn',
|
'Back lawn',
|
||||||
'my_lawn',
|
'my_lawn',
|
||||||
|
'no_work_area_active',
|
||||||
]),
|
]),
|
||||||
}),
|
}),
|
||||||
'context': <ANY>,
|
'context': <ANY>,
|
||||||
|
@ -87,6 +87,38 @@ async def test_next_start_sensor(
|
|||||||
assert state.state == STATE_UNKNOWN
|
assert state.state == STATE_UNKNOWN
|
||||||
|
|
||||||
|
|
||||||
|
async def test_work_area_sensor(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
mock_automower_client: AsyncMock,
|
||||||
|
mock_config_entry: MockConfigEntry,
|
||||||
|
freezer: FrozenDateTimeFactory,
|
||||||
|
) -> None:
|
||||||
|
"""Test the work area sensor."""
|
||||||
|
await setup_integration(hass, mock_config_entry)
|
||||||
|
state = hass.states.get("sensor.test_mower_1_work_area")
|
||||||
|
assert state is not None
|
||||||
|
assert state.state == "Front lawn"
|
||||||
|
|
||||||
|
values = mower_list_to_dictionary_dataclass(
|
||||||
|
load_json_value_fixture("mower.json", DOMAIN)
|
||||||
|
)
|
||||||
|
values[TEST_MOWER_ID].mower.work_area_id = None
|
||||||
|
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.test_mower_1_work_area")
|
||||||
|
assert state.state == "no_work_area_active"
|
||||||
|
|
||||||
|
values[TEST_MOWER_ID].mower.work_area_id = 0
|
||||||
|
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.test_mower_1_work_area")
|
||||||
|
assert state.state == "my_lawn"
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
("sensor_to_test"),
|
("sensor_to_test"),
|
||||||
[
|
[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user