Есть ли удобный способ автоматизировать резервное копирование / снимки HomeAssistent (Hass.io)?
Мне было интересно, есть ли удобный способ автоматизировать резервное копирование / снимки HomeAssistent (Hass.io)?
Веб-интерфейс позволяет только вручную создавать снимки. Это нормально для конфигурации, так как она не сильно изменится, когда вы закончите.
А как же база данных?
2 ответа
Я использую скрипт Python, запущенный на сервере и имитирующий POST
запрос, который веб-интерфейс использует для запуска создания моментального снимка.
Во-первых, получите долгоживущий токен доступа.
Обычно они используются для надстроек, но и здесь пригодятся. Вы можете получить его в своем профиле пользователя в веб-интерфейсе, прокрутите вниз и нажмите "Создать токен".
Затем используйте следующий сценарий:
import datetime
import requests
TOKEN = 'your-long-lived-access-token'
date_string = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
url = 'http://hassio.local:8123/api/hassio/snapshots/new/full'
headers = {'authorization': ('Bearer ' + TOKEN)}
response = requests.post(url,
headers=headers,
json={"name": date_string},
timeout=600) # should be enough, check duration
# check the status code to make sure the backup worked
print(response.status_code)
print(response.text)
print(response.json())
Теперь вам просто нужно выяснить, где в вашей установке был создан снимок (например, /usr/share/hassio/backup
и скопировать в облака или на внешний диск.
Я считаю, что наиболее простой и удобный способ - использовать автоматизацию высокой доступности:
automation:
- alias: '[System] Weekly Backup Monday at 5:00'
initial_state: on
trigger:
platform: time
at: '05:00'
condition:
- condition: time
weekday:
- mon
action:
- service: hassio.snapshot_full
data_template:
name: "Automated Snapshot {{ now().strftime('%F') }}"
- service: notify.hass_info
data_template:
message: "Automated Snapshot {{ now().strftime('%F') }}"
Следующим шагом вы можете сохранять резервные копии на Google Диске через специальный аддон:
rest_command:
google_backup:
url: 'http://localhost:8055/gb/doBackup'
timeout: '300'
automation:
- alias: '[System] Weekly Backup Monday to Google at 5:30'
initial_state: on
trigger:
- platform: time
at: '05:30'
condition:
- condition: time
weekday:
- mon
action:
- service: rest_command.google_backup
- service: notify.hass_info
data:
message: "Automatic snapshot uploaded"