Add device prefix to summary in Husqvarna Automower (#147405)

This commit is contained in:
Thomas55555 2025-06-27 20:34:50 +02:00 committed by GitHub
parent 571376badc
commit 1d82d44794
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 17 deletions

View File

@ -2,15 +2,18 @@
from datetime import datetime from datetime import datetime
import logging import logging
from typing import TYPE_CHECKING
from aioautomower.model import make_name_string from aioautomower.model import make_name_string
from homeassistant.components.calendar import CalendarEntity, CalendarEvent from homeassistant.components.calendar import CalendarEntity, CalendarEvent
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
from . import AutomowerConfigEntry from . import AutomowerConfigEntry
from .const import DOMAIN
from .coordinator import AutomowerDataUpdateCoordinator from .coordinator import AutomowerDataUpdateCoordinator
from .entity import AutomowerBaseEntity from .entity import AutomowerBaseEntity
@ -51,6 +54,19 @@ class AutomowerCalendarEntity(AutomowerBaseEntity, CalendarEntity):
self._attr_unique_id = mower_id self._attr_unique_id = mower_id
self._event: CalendarEvent | None = None self._event: CalendarEvent | None = None
@property
def device_name(self) -> str:
"""Return the prefix for the event summary."""
device_registry = dr.async_get(self.hass)
device_entry = device_registry.async_get_device(
identifiers={(DOMAIN, self.mower_id)}
)
if TYPE_CHECKING:
assert device_entry is not None
assert device_entry.name is not None
return device_entry.name_by_user or device_entry.name
@property @property
def event(self) -> CalendarEvent | None: def event(self) -> CalendarEvent | None:
"""Return the current or next upcoming event.""" """Return the current or next upcoming event."""
@ -66,7 +82,7 @@ class AutomowerCalendarEntity(AutomowerBaseEntity, CalendarEntity):
program_event.work_area_id program_event.work_area_id
] ]
return CalendarEvent( return CalendarEvent(
summary=make_name_string(work_area_name, program_event.schedule_no), summary=f"{self.device_name} {make_name_string(work_area_name, program_event.schedule_no)}",
start=program_event.start, start=program_event.start,
end=program_event.end, end=program_event.end,
rrule=program_event.rrule_str, rrule=program_event.rrule_str,
@ -93,7 +109,7 @@ class AutomowerCalendarEntity(AutomowerBaseEntity, CalendarEntity):
] ]
calendar_events.append( calendar_events.append(
CalendarEvent( CalendarEvent(
summary=make_name_string(work_area_name, program_event.schedule_no), summary=f"{self.device_name} {make_name_string(work_area_name, program_event.schedule_no)}",
start=program_event.start.replace(tzinfo=start_date.tzinfo), start=program_event.start.replace(tzinfo=start_date.tzinfo),
end=program_event.end.replace(tzinfo=start_date.tzinfo), end=program_event.end.replace(tzinfo=start_date.tzinfo),
rrule=program_event.rrule_str, rrule=program_event.rrule_str,

View File

@ -6,72 +6,72 @@
dict({ dict({
'end': '2023-06-05T09:00:00+02:00', 'end': '2023-06-05T09:00:00+02:00',
'start': '2023-06-05T01:00:00+02:00', 'start': '2023-06-05T01:00:00+02:00',
'summary': 'Back lawn schedule 2', 'summary': 'Test Mower 1 Back lawn schedule 2',
}), }),
dict({ dict({
'end': '2023-06-06T00:00:00+02:00', 'end': '2023-06-06T00:00:00+02:00',
'start': '2023-06-05T19:00:00+02:00', 'start': '2023-06-05T19:00:00+02:00',
'summary': 'Front lawn schedule 1', 'summary': 'Test Mower 1 Front lawn schedule 1',
}), }),
dict({ dict({
'end': '2023-06-06T08:00:00+02:00', 'end': '2023-06-06T08:00:00+02:00',
'start': '2023-06-06T00:00:00+02:00', 'start': '2023-06-06T00:00:00+02:00',
'summary': 'Back lawn schedule 1', 'summary': 'Test Mower 1 Back lawn schedule 1',
}), }),
dict({ dict({
'end': '2023-06-06T08:00:00+02:00', 'end': '2023-06-06T08:00:00+02:00',
'start': '2023-06-06T00:00:00+02:00', 'start': '2023-06-06T00:00:00+02:00',
'summary': 'Front lawn schedule 2', 'summary': 'Test Mower 1 Front lawn schedule 2',
}), }),
dict({ dict({
'end': '2023-06-06T09:00:00+02:00', 'end': '2023-06-06T09:00:00+02:00',
'start': '2023-06-06T01:00:00+02:00', 'start': '2023-06-06T01:00:00+02:00',
'summary': 'Back lawn schedule 2', 'summary': 'Test Mower 1 Back lawn schedule 2',
}), }),
dict({ dict({
'end': '2023-06-08T00:00:00+02:00', 'end': '2023-06-08T00:00:00+02:00',
'start': '2023-06-07T19:00:00+02:00', 'start': '2023-06-07T19:00:00+02:00',
'summary': 'Front lawn schedule 1', 'summary': 'Test Mower 1 Front lawn schedule 1',
}), }),
dict({ dict({
'end': '2023-06-08T08:00:00+02:00', 'end': '2023-06-08T08:00:00+02:00',
'start': '2023-06-08T00:00:00+02:00', 'start': '2023-06-08T00:00:00+02:00',
'summary': 'Back lawn schedule 1', 'summary': 'Test Mower 1 Back lawn schedule 1',
}), }),
dict({ dict({
'end': '2023-06-08T08:00:00+02:00', 'end': '2023-06-08T08:00:00+02:00',
'start': '2023-06-08T00:00:00+02:00', 'start': '2023-06-08T00:00:00+02:00',
'summary': 'Front lawn schedule 2', 'summary': 'Test Mower 1 Front lawn schedule 2',
}), }),
dict({ dict({
'end': '2023-06-08T09:00:00+02:00', 'end': '2023-06-08T09:00:00+02:00',
'start': '2023-06-08T01:00:00+02:00', 'start': '2023-06-08T01:00:00+02:00',
'summary': 'Back lawn schedule 2', 'summary': 'Test Mower 1 Back lawn schedule 2',
}), }),
dict({ dict({
'end': '2023-06-10T00:00:00+02:00', 'end': '2023-06-10T00:00:00+02:00',
'start': '2023-06-09T19:00:00+02:00', 'start': '2023-06-09T19:00:00+02:00',
'summary': 'Front lawn schedule 1', 'summary': 'Test Mower 1 Front lawn schedule 1',
}), }),
dict({ dict({
'end': '2023-06-10T08:00:00+02:00', 'end': '2023-06-10T08:00:00+02:00',
'start': '2023-06-10T00:00:00+02:00', 'start': '2023-06-10T00:00:00+02:00',
'summary': 'Back lawn schedule 1', 'summary': 'Test Mower 1 Back lawn schedule 1',
}), }),
dict({ dict({
'end': '2023-06-10T08:00:00+02:00', 'end': '2023-06-10T08:00:00+02:00',
'start': '2023-06-10T00:00:00+02:00', 'start': '2023-06-10T00:00:00+02:00',
'summary': 'Front lawn schedule 2', 'summary': 'Test Mower 1 Front lawn schedule 2',
}), }),
dict({ dict({
'end': '2023-06-10T09:00:00+02:00', 'end': '2023-06-10T09:00:00+02:00',
'start': '2023-06-10T01:00:00+02:00', 'start': '2023-06-10T01:00:00+02:00',
'summary': 'Back lawn schedule 2', 'summary': 'Test Mower 1 Back lawn schedule 2',
}), }),
dict({ dict({
'end': '2023-06-12T09:00:00+02:00', 'end': '2023-06-12T09:00:00+02:00',
'start': '2023-06-12T01:00:00+02:00', 'start': '2023-06-12T01:00:00+02:00',
'summary': 'Back lawn schedule 2', 'summary': 'Test Mower 1 Back lawn schedule 2',
}), }),
]), ]),
}), }),
@ -80,7 +80,7 @@
dict({ dict({
'end': '2023-06-05T02:49:00+02:00', 'end': '2023-06-05T02:49:00+02:00',
'start': '2023-06-05T02:00:00+02:00', 'start': '2023-06-05T02:00:00+02:00',
'summary': 'Schedule 1', 'summary': 'Test Mower 2 Schedule 1',
}), }),
]), ]),
}), }),