Files
2026-06-20 18:49:03 +02:00

201 lines
5.5 KiB
YAML

blueprint:
name: Automatic Backups
description: 'Create backups each day and keep them for a configurable amount of
time, backups are stored less frequently the older they are.
By default all backups are full backups, besides the 3-hourly backups which only
include the configuration.
**Template Variables:**
- `name` — backup name configured below
- `password` — backup password configured below
- `keep_days` — days the backup is kept for based on the current backup type
- `backup_type` — current schedule being created, e.g., `daily`, `weekly`, `monthly`
**Note: requires the [Auto Backup](https://jcwillox.github.io/hass-auto-backup)
custom integration.**
'
domain: automation
input:
backup_name:
name: Name template used for backups
default: "{{ backup_type | title }}Backup: {{\n now().strftime(\n \"%A,
\"\n ~ iif(backup_type == \"hourly\", \"%-I:%M %p, \", \"\")\n ~ \"%B
%-d, %Y\"\n )\n}}\n{# HourlyBackup: Monday, 3:04 PM, January 2, 2006 #}\n{#
DailyBackup: Monday, January 2, 2006 #}\n"
selector:
template: {}
backup_time:
name: Time of day to create backups
default: 02:30:00
selector:
time: {}
backup_password:
name: Backup Password (Optional)
default: ''
selector:
text:
type: password
multiple: false
multiline: false
enable_hourly:
name: 'Enable: Hourly Backups'
description: Create a backup every 3 hours and store for 2 days
default: false
selector:
boolean: {}
enable_daily:
name: 'Enable: Daily Backups'
description: Create a backup each day and store for a week
default: true
selector:
boolean: {}
enable_weekly:
name: 'Enable: Weekly Backups'
description: Create a backup each week and store for a month
default: true
selector:
boolean: {}
enable_monthly:
name: 'Enable: Monthly Backups'
description: Create a backup each month and store for a year
default: true
selector:
boolean: {}
enable_yearly:
name: 'Enable: Yearly Backups'
description: Create a backup each year and store forever
default: true
selector:
boolean: {}
use_action_hourly:
name: Use Backup Action for Hourly Backups Only
description: Otherwise, it will be used for all backup types
default: true
selector:
boolean: {}
backup_action:
name: Backup Action (Optional)
description: 'Optionally override the built-in backup action with a custom action,
designed to allow greater control over what is included in each backup.
By default this only overrides the 3-hourly backups, so that they only include
the configuration.
'
default:
- service: auto_backup.backup
data:
name: '{{ name }}'
password: '{{ password }}'
keep_days: '{{ keep_days }}'
include_folders:
- config
selector:
action: {}
condition:
name: Condition (Optional)
description: Condition to test before any action
default: []
selector:
action: {}
source_url: https://raw.githubusercontent.com/jcwillox/home-assistant-blueprints/main/automation/automatic_backups.yaml
mode: single
variables:
password: !input backup_password
enable_hourly: !input enable_hourly
enable_daily: !input enable_daily
enable_weekly: !input enable_weekly
enable_monthly: !input enable_monthly
enable_yearly: !input enable_yearly
use_action_hourly: !input use_action_hourly
trigger:
- id: daily
platform: time
at: !input backup_time
- id: hourly
enabled: !input enable_hourly
platform: time_pattern
hours: /3
condition: !input condition
action:
- if:
condition: trigger
id: daily
then:
- choose:
- conditions:
- '{{ enable_yearly }}'
- '{{ now().day == 1 and now().month == 1 }}'
sequence:
- variables:
backup_type: yearly
keep_days:
- &id001
variables:
name: !input backup_name
backup_action: !input backup_action
- &id002
if:
- '{{ not use_action_hourly }}'
- '{{ backup_action | length > 0 }}'
then: !input backup_action
else:
- alias: Creating a full backup (default action)
service: auto_backup.backup
data:
name: '{{ name }}'
password: '{{ password }}'
keep_days: '{{ keep_days }}'
- conditions:
- '{{ enable_monthly }}'
- '{{ now().day == 1 }}'
sequence:
- variables:
backup_type: monthly
keep_days: 365
- *id001
- *id002
- conditions:
- '{{ enable_weekly }}'
- '{{ now().weekday() == 0 }}'
sequence:
- variables:
backup_type: weekly
keep_days: 30.4167
- *id001
- *id002
- conditions:
- '{{ enable_daily }}'
sequence:
- variables:
backup_type: daily
keep_days: 7
- *id001
- *id002
else:
- variables:
backup_type: hourly
keep_days: 2
- *id001
- if: '{{ backup_action | length > 0 }}'
then: !input backup_action
else:
- alias: Creating a partial backup (default action)
service: auto_backup.backup
data:
name: '{{ name }}'
password: '{{ password }}'
keep_days: '{{ keep_days }}'
include_folders:
- config