Backup Snapshot su Google Drive
Aggiornamento – Si consiglia di utilizzare l’addon di Sabeechen, più completo e facile da gestire via interfaccia grafica (UI), anche senza l’ausilio di un package!
Questo addon presente in Hassio consente di salvare gli snapshot (istantanea di Home Assistant completa di file e configurazione degli addon installati) su un account Google Drive, in questo modo metteremo al sicuro la configurazione di Home Assistant e sempre disponibile in caso di guasto dell’hardware o di errori di compilazione. I caricamenti vengono attivati tramite un comando rest, facilitando l’automatizzazione di backup periodici o l’attivazione di caricamenti su Gdrive tramite script, proprio come viene fatto con qualsiasi altro servizio di Home Assistant.
Backup Hassio to Google Drive caricherà tutti i file di snapshot (in particolare tutti i file .tar ) contenti nella directory /backup su un percorso specificato in Google Drive. Questo percorso target viene specificato tramite l’opzione di backupDirID nella configurazione dell’addon. Una volta avviato il componente aggiuntivo, sarà in attesa di una chiamate di servizio.
Ringraziamo GianPiero1 che ha scritto il package originale per Dropbox, Mauro Cimino e Mr. Jay per averlo adattto all’uso con GDrive
Per eseguire in automatico il tutto, Home Assistant deve avere il sensore time_date già installato lo potete trovare su https://www.home-assistant.io/components/sensor.time_date/
1. INSTALLAZIONE ADDON BACKUP HASSIO TO GOOGLE DRIVE
Per aggiungere nuovi add-on andiamo su Hassio/Add-on Store e scriviamo sulla casella vuota dove c’è scritto Add new repository by URL inseriamo il seguente indirizzo:
https://github.com/samccauley/hassio-repository
Installate poi l’addon dandogli install
Il pannello di configurazione si presenterà in questo modo
L’addon va configurato in questo modo:
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "fromPattern": "/backup/*.tar", "backupDirID": "1oVGmINstbfNdXYh4dkS3E2Jt9FZ8wdYt", "purge": { "enabled": true, "preserve": 3 }, "purge_google": { "enabled": true, "preserve": 12 } } |
dove:
fromPatter è la cartella dove si trovano i file di backup
backupDirID Identifica la cartella di Google Drive dove verrà effettuato il backup
mentre
purge e
purge_google, se messi su
true, indicano il numero di file da conservare dentro le rispettive cartelle di backup di hassio e di google
2. GOOGLE DRIVE: ottenere il backupDirId
Entriamo nel nostro drive con il browser e creiamo la cartella dove vogliamo effettuare il backup, esempio “hassioBackup”, entriamo all’nterno della cartella appena creata. in alto nella barra indirizzo del browser copiamo la parte di indirizzo messa in evidenza nell’immagine sotto, questo sarà il nostro backupDirId da riportare nella configurazione dell’addon
3. ADD-ON: configurazione finale e permessi per Gdrive
Una volta aggiunto il backupDirId alla configurazione dell’addon salvate e premete sul tasto start per avviare l’addon.
Aprite una nuova pagina del browser e scrivete il seguente indirizzo opportunamente modificato:
http://indirizzoipraspberry:8055/gb
se tutto è andato a buon fine vi ritroverete davanti la seguente schermata:
Premete su AUTHORIZE e seguite la procedura di autorizzazione di google, vi verrà dato un codice. Prendete il codice appena ottenuto ed inseritelo in Authorization Code e premete INGEST CODE. Dovreste ricevere una risposta cosi:
Adesso il vostro addon è pronto all’uso.
4. PACKAGE PER HOME ASSISTANT
Creare un file di nome pkg_gdrive.yaml o copiatevi quello presente in questo file pkg_gdrive_1_0.zip e mettetelo nella cartella dei package, se non l’avete ancora configurata date uno sguardo all’articolo Package Configurazione, poi riavviate Home Assistant.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
################################################################# # # # Packages/Daily # # # ################################################################# ################################################################# # # # Customize # # # ################################################################# homeassistant: customize: ################################################ ## Node Anchors ################################################ package.node_anchors: customize: &customize package: 'daily_routines' expose: &expose <<: *customize haaska_hidden: false homebridge_hidden: false ################################################ ## sensor ################################################ input_boolean.gdrive_backup: <<: *customize friendly_name: "Google Drive Backup" input_boolean.gdrive_sync_completed: <<: *customize friendly_name: "Google Drive Upload Completato" input_datetime.gdrive_backup_time: <<: *customize icon: mdi:clock-outline input_select.gdrive_backup_day: <<: *customize icon: mdi:calendar input_number.gdrive_ritardo_upload: <<: *customize icon: mdi:timer-sand ######################################################### # # # COMANDO UPLOAD GOOGLE DRIVE # # (inserire l'ip del vostro raspberry) # ######################################################### rest_command: google_backup: url: 'http://192.168.188.2:8055/gb/doBackup' timeout: '300' ######################################################### # # # GROUP # # # ######################################################### group: gdrive_pack: name: Google Drive Pack entities: - input_boolean.gdrive_backup - input_boolean.gdrive_sync_completed - input_datetime.gdrive_backup_time - input_select.gdrive_backup_day - input_text.gdrive_backup_status - input_number.gdrive_ritardo_upload ######################################################### # # # INPUT # # # ######################################################### input_boolean: gdrive_backup: name: Google Drive Backup initial: 'on' icon: mdi:cloud-upload gdrive_sync_completed: name: Google Drive Sync Completato initial: 'off' icon: mdi:google-drive ######################################################### input_select: gdrive_backup_day: name: Giorno di Backup options: - "Tutti i giorni" - "Lun - Mer - Ven" - "Lun - Ven" - "Sabato" - "Domenica" - "Mai" initial: "Tutti i giorni" icon: mdi:calendar ######################################################### input_datetime: gdrive_backup_time: name: "Orario Backup" has_date: false has_time: true initial: '06:00' ######################################################### input_text: gdrive_backup_status: icon: mdi:database-check name: Stato GDrive Backup initial: Normale ######################################################### input_number: gdrive_ritardo_upload: name: Ritardo Upload GDrive initial: 30 min: 15 max: 180 step: 15 icon: mdi:timer-sand ######################################################### # # # SCRIPT # # # ######################################################### script: check_gdrive_successful: sequence: - service: notify.telegram data_template: title: '*-- GDrive Backup HASSIO --*' message: &check_sync > {% if is_state("input_boolean.gdrive_sync_completed", "off") -%} ERRORE nel Gdrive backup! {%- else -%} Backup su GDrive completato alle {{states('sensor.time')}} {%- endif %} # target: !secret allowed_chat_ids - delay: '00:00:5' - service: persistent_notification.create data_template: message: *check_sync - delay: '00:00:5' - service: input_text.set_value data_template: entity_id: input_text.gdrive_backup_status value: *check_sync - delay: '00:00:5' - service: input_boolean.turn_off entity_id: input_boolean.gdrive_sync_completed ######################################################### # # # AUTOMAZIONI # # SNAPSHOT e GOOGLE DRIVE # ######################################################### automation: - alias: automazione Hassio gdrive backup initial_state: 'on' trigger: platform: template value_template: >- {{ states('sensor.time') == (states.input_datetime.gdrive_backup_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }} condition: - condition: state entity_id: input_boolean.gdrive_backup state: 'on' - condition: template value_template: >- {% set today = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'][now().weekday()] %} {% if is_state("input_select.gdrive_backup_day", "Tutti i giorni") %} true {% elif (is_state("input_select.gdrive_backup_day", "Lun - Ven") and today in ["Monday","Friday"]) %} true {% elif is_state("input_select.gdrive_backup_day", "Sabato") and today in ["Saturday"] %} true {% elif is_state("input_select.gdrive_backup_day", "Domenica") and today in ["Sunday"] %} true {% elif is_state("input_select.gdrive_backup_day", "Lun - Mer - Ven") and today in ["Monday","Wednesday","Friday"] %} true {% else %} false {% endif %} action: - service: input_text.set_value data_template: entity_id: input_text.gdrive_backup_status value: Avviato Snapshot GDrive alle {{states('sensor.time')}} - service: hassio.snapshot_full data_template: name: Backup automatico GDrive {{ now().strftime('%Y-%m-%d') }} - delay: '00:00:5' - service: persistent_notification.create data: message: "Creato backup automatico GDrive {{ now().strftime('%Y-%m-%d') }}" - service: notify.telegram data: title: '*Google Drive Backup*' message: 'Avviato snapshot per GDrive in locale' # target: !secret allowed_chat_ids ######################################################### - alias: controllo nuovi file share gdrive backup initial_state: 'on' trigger: platform: event event_type: folder_watcher event_data: event_type: created action: - service: input_text.set_value data_template: entity_id: input_text.gdrive_backup_status value: Creato Snapshot GDrive alle {{states('sensor.time')}} ######################################################### - alias: uploaded backup gdrive initial_state: 'on' trigger: platform: state entity_id: input_boolean.gdrive_sync_completed to: 'on' action: - service: script.turn_on entity_id: script.check_gdrive_successful ######################################################### - alias: upload Google Drive backup initial_state: 'on' trigger: platform: template value_template: >- {{ states('sensor.time') == (((states.input_datetime.gdrive_backup_time.attributes.timestamp | int) + (states('input_number.gdrive_ritardo_upload') | int * 60)) | timestamp_custom('%H:%M', False)) }} condition: - condition: state entity_id: input_boolean.gdrive_backup state: 'on' - condition: template value_template: >- {% set today = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'][now().weekday()] %} {% if is_state("input_select.gdrive_backup_day", "Tutti i giorni") %} true {% elif (is_state("input_select.gdrive_backup_day", "Lun - Ven") and today in ["Monday","Friday"]) %} true {% elif is_state("input_select.gdrive_backup_day", "Sabato") and today in ["Saturday"] %} true {% elif is_state("input_select.gdrive_backup_day", "Domenica") and today in ["Sunday"] %} true {% elif is_state("input_select.gdrive_backup_day", "Lun - Mer - Ven") and today in ["Monday","Wednesday","Friday"] %} true {% else %} false {% endif %} action: - service: input_text.set_value data: entity_id: input_text.gdrive_backup_status value: 'Avviato backup su Google Drive' - service: rest_command.google_backup - service: persistent_notification.create data: message: "Copia backup creata su drive" |
Con questo package si potrà selezionare queste opzioni:
– l’ora del backup
– la frequenza con cui eseguirlo:
—tutti i giorni,
—il lun, Mer e Ven,
—il lun e ven,
—il sabato,
—la domenica
—mai.
In aggiunta ci sarà un sensore di conferma avvenuto backup e una notifica Telegram.
Da mettere in evidenza: all’inizio del package si trova un comando rest: quindi andate a modificare la riga 58 con l’IP del vostro Raspberry
1 2 3 4 |
rest_command: google_backup: url: 'http://192.168.1.108:8055/gb/doBackup' timeout: '300' |
Fate attenzione anche alle righe 140 e 202 - service: notify.telegram viene richiamato il servizio di notifica con il nome telegram il quale dovrà essere lo stesso che avete impostato nel file configuration.yaml sotto notify: alla voce name: come riportato nell’esempio qui sotto:
1 2 3 4 |
notify: - name: telegram platform: telegram chat_id: !secret telegram_chat_ids |
5. SINCRONIZZAZIONE CON IFTTT
Questa parte ci permetterà di conoscere o meno se il backup su Gdrive è andato a buon fine, quindi è del tutto facoltativa non influenza sul funzionamento del backup. IFTTT ad ogni nuovo file di backup andrà a comunicarlo ad Home Assistant mediante l’impostazione di un boolean.
Per chi ancora non conoscesse IFTTT o non l’abbia ancora configurata segua la Guida Integrazione IFTTT
Andiamo nel sito https://ifttt.com/ e creiamo una nuova applet
Inseriamo i seguenti dati:
URL: https://ilmiodominio.duckdns.org:8123/api/services/input_boolean/turn_on?api_password=api_pw
– dove avremmo da inserire il proprio dominio (con o senza porta finale)
– e come api_pw la password che avete impostato su Home Assistant nel file configuration.yaml nella dichiarazione htpp: alla voce api_password
Method: POST
Conect Type: application/json
Body:
{"entity_id":"input_boolean.gdrive_sync_completed"} Fate molta attenzione al tipo di virgolette che usate, ad HA non vanno bene quelle rovesciate
“xx” ma quelle dritte
"xx" , queta è una regola generale non solo per IFTTT.
Salvate ora la vostra applet e se volete dategli un nome.
4. LOVELACE
Di seguito vi lascio anche la configurazione di Lovelace per questo package, lo potrete inserire sia nella versione yaml o quella grafica facendo delle piccole modifiche sugli spazi antecedenti al codice. Se non conoscete ancora Lovelace leggete la guida su Lovelace
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
- badges: [] cards: - type: entities entities: - input_boolean.gdrive_backup - input_boolean.gdrive_sync_completed - input_datetime.gdrive_backup_time - input_select.gdrive_backup_day - input_number.gdrive_ritardo_upload - input_text.gdrive_backup_status title: Google Drive Backup show_header_toggle: false icon: 'mdi:google-drive' path: gdrive_menu title: gdrive |
12 risposte
Ottima guida, grazie
È possibile applicarla in un sistema con raspbian invece che hassio?
La guida è ottima, peccato che l’addon sia solo x64.
Soluzioni compatibili i386?
Ho hass.io installato su un vecchio eeepc
Ciao ho un problema con l’interfaccia lovelace in quanto mi dice che i parametri di Input non sono definiti ma il assistenza di backup funziona correttamente quando lanciato da comando di rete
Grazie tante per l’ottimo lavoro
Premesso che ho installato da poco Home Assistant versione 0.106, non capisco la parte della guida in cui si dice: “– e come api_pw la password che avete impostato su Home Assistant nel file configuration.yaml nella dichiarazione htpp: alla voce api_password”.
Quando ho installato Home assistant, infatti, non ho inserito alcuna voce in configuration.yaml relativa alla dichiarazione http di cui è cenno nella guida, potreste aiutarmi a dirmo dov’è che ho sbagliato?
Ciao e grazie
Questa guida ormai non è più valida. Trovi l’addon Hass.io Google Drive Backup molto più semplice da configurare
ciao Enrico ho provato l’addon che indichi e funziona , realmente più facile, sai se c’è modo di avere un msg telegram di avvenuto salvataggio su cloud?
Potresti utilizzare IFTTT per farti mandare una notifica quando viene salvato un nuovo file sul cloud
Sembra funzionare tutto. Non capisco però la funzione dell’ interruttore “Google Drive upload completato”. Ho provato a leggere il package ma per me è piuttosto complicato. Qualcuno sa dirmi qualcosa? Grazie
Esiste un modo per recuperare in modo inverso lo snapshot da google drive e riportarlo su hassio?
visto che ormai questa guida è superata visto l’addon per hassio, è possibile modificarla affinchè possa esser valida per Home Assistant Core con docker su Raspbian?
No, però puoi prendere spunto per realizzare quello che desideri.