Add last attempted automatic backup sensor (#144194)

add last_attempted_automatic_backup sensor
This commit is contained in:
Michael 2025-05-05 10:39:06 +02:00 committed by GitHub
parent aa062515b8
commit 58906008b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 63 additions and 0 deletions

View File

@ -30,6 +30,7 @@ class BackupCoordinatorData:
"""Class to hold backup data.""" """Class to hold backup data."""
backup_manager_state: BackupManagerState backup_manager_state: BackupManagerState
last_attempted_automatic_backup: datetime | None
last_successful_automatic_backup: datetime | None last_successful_automatic_backup: datetime | None
next_scheduled_automatic_backup: datetime | None next_scheduled_automatic_backup: datetime | None
@ -70,6 +71,7 @@ class BackupDataUpdateCoordinator(DataUpdateCoordinator[BackupCoordinatorData]):
"""Update backup manager data.""" """Update backup manager data."""
return BackupCoordinatorData( return BackupCoordinatorData(
self.backup_manager.state, self.backup_manager.state,
self.backup_manager.config.data.last_attempted_automatic_backup,
self.backup_manager.config.data.last_completed_automatic_backup, self.backup_manager.config.data.last_completed_automatic_backup,
self.backup_manager.config.data.schedule.next_automatic_backup, self.backup_manager.config.data.schedule.next_automatic_backup,
) )

View File

@ -46,6 +46,12 @@ BACKUP_MANAGER_DESCRIPTIONS = (
device_class=SensorDeviceClass.TIMESTAMP, device_class=SensorDeviceClass.TIMESTAMP,
value_fn=lambda data: data.last_successful_automatic_backup, value_fn=lambda data: data.last_successful_automatic_backup,
), ),
BackupSensorEntityDescription(
key="last_attempted_automatic_backup",
translation_key="last_attempted_automatic_backup",
device_class=SensorDeviceClass.TIMESTAMP,
value_fn=lambda data: data.last_attempted_automatic_backup,
),
) )

View File

@ -37,6 +37,9 @@
"next_scheduled_automatic_backup": { "next_scheduled_automatic_backup": {
"name": "Next scheduled automatic backup" "name": "Next scheduled automatic backup"
}, },
"last_attempted_automatic_backup": {
"name": "Last attempted automatic backup"
},
"last_successful_automatic_backup": { "last_successful_automatic_backup": {
"name": "Last successful automatic backup" "name": "Last successful automatic backup"
} }

View File

@ -62,6 +62,54 @@
'state': 'idle', 'state': 'idle',
}) })
# --- # ---
# name: test_sensors[sensor.backup_last_attempted_automatic_backup-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.backup_last_attempted_automatic_backup',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': None,
'original_name': 'Last attempted automatic backup',
'platform': 'backup',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'last_attempted_automatic_backup',
'unique_id': 'last_attempted_automatic_backup',
'unit_of_measurement': None,
})
# ---
# name: test_sensors[sensor.backup_last_attempted_automatic_backup-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'timestamp',
'friendly_name': 'Backup Last attempted automatic backup',
}),
'context': <ANY>,
'entity_id': 'sensor.backup_last_attempted_automatic_backup',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'unknown',
})
# ---
# name: test_sensors[sensor.backup_last_successful_automatic_backup-entry] # name: test_sensors[sensor.backup_last_successful_automatic_backup-entry]
EntityRegistryEntrySnapshot({ EntityRegistryEntrySnapshot({
'aliases': set({ 'aliases': set({

View File

@ -104,6 +104,8 @@ async def test_sensor_updates(
) )
await hass.async_block_till_done(wait_background_tasks=True) await hass.async_block_till_done(wait_background_tasks=True)
state = hass.states.get("sensor.backup_last_attempted_automatic_backup")
assert state.state == "2024-11-11T03:45:00+00:00"
state = hass.states.get("sensor.backup_last_successful_automatic_backup") state = hass.states.get("sensor.backup_last_successful_automatic_backup")
assert state.state == "2024-11-11T03:45:00+00:00" assert state.state == "2024-11-11T03:45:00+00:00"
state = hass.states.get("sensor.backup_next_scheduled_automatic_backup") state = hass.states.get("sensor.backup_next_scheduled_automatic_backup")
@ -113,6 +115,8 @@ async def test_sensor_updates(
async_fire_time_changed(hass) async_fire_time_changed(hass)
await hass.async_block_till_done() await hass.async_block_till_done()
state = hass.states.get("sensor.backup_last_attempted_automatic_backup")
assert state.state == "2024-11-13T11:00:00+00:00"
state = hass.states.get("sensor.backup_last_successful_automatic_backup") state = hass.states.get("sensor.backup_last_successful_automatic_backup")
assert state.state == "2024-11-13T11:00:00+00:00" assert state.state == "2024-11-13T11:00:00+00:00"
state = hass.states.get("sensor.backup_next_scheduled_automatic_backup") state = hass.states.get("sensor.backup_next_scheduled_automatic_backup")