From 58906008b969312da91fc7494c54b68616424a2b Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Mon, 5 May 2025 10:39:06 +0200 Subject: [PATCH] Add last attempted automatic backup sensor (#144194) add last_attempted_automatic_backup sensor --- .../components/backup/coordinator.py | 2 + homeassistant/components/backup/sensor.py | 6 +++ homeassistant/components/backup/strings.json | 3 ++ .../backup/snapshots/test_sensors.ambr | 48 +++++++++++++++++++ tests/components/backup/test_sensors.py | 4 ++ 5 files changed, 63 insertions(+) diff --git a/homeassistant/components/backup/coordinator.py b/homeassistant/components/backup/coordinator.py index 377f23567e0..dba05ba0225 100644 --- a/homeassistant/components/backup/coordinator.py +++ b/homeassistant/components/backup/coordinator.py @@ -30,6 +30,7 @@ class BackupCoordinatorData: """Class to hold backup data.""" backup_manager_state: BackupManagerState + last_attempted_automatic_backup: datetime | None last_successful_automatic_backup: datetime | None next_scheduled_automatic_backup: datetime | None @@ -70,6 +71,7 @@ class BackupDataUpdateCoordinator(DataUpdateCoordinator[BackupCoordinatorData]): """Update backup manager data.""" return BackupCoordinatorData( 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.schedule.next_automatic_backup, ) diff --git a/homeassistant/components/backup/sensor.py b/homeassistant/components/backup/sensor.py index 59e98ae7c2d..08e7ec49e3d 100644 --- a/homeassistant/components/backup/sensor.py +++ b/homeassistant/components/backup/sensor.py @@ -46,6 +46,12 @@ BACKUP_MANAGER_DESCRIPTIONS = ( device_class=SensorDeviceClass.TIMESTAMP, 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, + ), ) diff --git a/homeassistant/components/backup/strings.json b/homeassistant/components/backup/strings.json index 357bcdbb72f..37adf9e9faf 100644 --- a/homeassistant/components/backup/strings.json +++ b/homeassistant/components/backup/strings.json @@ -37,6 +37,9 @@ "next_scheduled_automatic_backup": { "name": "Next scheduled automatic backup" }, + "last_attempted_automatic_backup": { + "name": "Last attempted automatic backup" + }, "last_successful_automatic_backup": { "name": "Last successful automatic backup" } diff --git a/tests/components/backup/snapshots/test_sensors.ambr b/tests/components/backup/snapshots/test_sensors.ambr index be12afdbf1e..b68d706dfb3 100644 --- a/tests/components/backup/snapshots/test_sensors.ambr +++ b/tests/components/backup/snapshots/test_sensors.ambr @@ -62,6 +62,54 @@ 'state': 'idle', }) # --- +# name: test_sensors[sensor.backup_last_attempted_automatic_backup-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + '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': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + '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': , + 'entity_id': 'sensor.backup_last_attempted_automatic_backup', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- # name: test_sensors[sensor.backup_last_successful_automatic_backup-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ diff --git a/tests/components/backup/test_sensors.py b/tests/components/backup/test_sensors.py index bee61887ea5..6ff1aca7c6d 100644 --- a/tests/components/backup/test_sensors.py +++ b/tests/components/backup/test_sensors.py @@ -104,6 +104,8 @@ async def test_sensor_updates( ) 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") assert state.state == "2024-11-11T03:45:00+00:00" state = hass.states.get("sensor.backup_next_scheduled_automatic_backup") @@ -113,6 +115,8 @@ async def test_sensor_updates( async_fire_time_changed(hass) 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") assert state.state == "2024-11-13T11:00:00+00:00" state = hass.states.get("sensor.backup_next_scheduled_automatic_backup")