Есть ли удобный способ автоматизировать резервное копирование / снимки 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"

Другие вопросы по тегам