Backup Snapshot su Dropbox

Aggiornamento 15/01/2019
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 Dropbox, 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 una chiamata di servizio, facilitando l’automatizzazione di backup periodici o l’attivazione di caricamenti su Dropbox tramite script, proprio come viene fatto con qualsiasi altro servizio di Home Assistant.
Questo componente aggiuntivo utilizza lo script bash di Dropbox-Uploader per caricare i file su Dropbox. Richiede la generazione di un token di accesso tramite l’interfaccia utente Web Dropbox, che deve essere aggiunta alla configurazione del component.
Dropbox Sync caricherà tutti i file di snapshot (in particolare tutti i file .tar ) nella directory Hass.io /backup su un percorso specificato in Dropbox. Questo percorso target viene specificato tramite l’opzione di output . Una volta avviato il componente aggiuntivo, sarà in attesa di una chiamate di servizio.
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 DROPBOX SYNC
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/danielwelch/hassio-addons
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 |
{ "oauth_access_token": "<YOUR_ACCESS_TOKEN>", "output": "/hassioBackup", "keep_last": 3 } |
dove:
<YOUR_ACCESS_TOKEN> sarà il token che ci fornirà Dropbox
/hassioBackup sarà la cartella di destinazione in Dropbox
keep_last se impostato eliminerà i vecchi snapshot presenti in locale lasciando solo gli ultimi 3 dopo averli caricati in Dropbox
2. DROPBOX: Creazione Token
Per accedere al tuo Dropobox personale, questo componente aggiuntivo richiede un token di accesso. Vediamo ora i passaggi per crearlo:
Andiamo su https://www.dropbox.com/developers/apps
Fare clic sul pulsante Crea app
Impostate come nell’immagine, nel punto 3 date un nome che volete
In questa pagina nella sezione OAuth 2 basterà premere il tasto Generate per creare il token
Il token che avete generato va inserito nella configurazione dell’addon Dropbox Sync
3. PACKAGE PER HOME ASSISTANT
Creare un file di nome pkg_dropbox.yaml o copiatevi quello presente in questo file pkg_dropbox_v1_2.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 |
################################################################# # # # Packages/Dropbox # # # ################################################################# ################################################################# # # # 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.dropbox_backup: <<: *customize friendly_name: "Dropbox Backup" icon: mdi:cloud-upload input_boolean.dropbox_sync_completed: <<: *customize friendly_name: "Dropbox Upload Completato" icon: mdi:dropbox input_datetime.backup_time: <<: *customize icon: mdi:clock-outline input_select.backup_day: <<: *customize icon: mdi:calendar input_number.ritardo_upload: <<: *customize icon: mdi:timer-sand ######################################################### # # # GROUP # # # ######################################################### group: dropbox_pack: name: Dropbox Pack entities: - input_boolean.dropbox_backup - input_boolean.dropbox_sync_completed - input_datetime.backup_time - input_select.backup_day - input_text.backup_status - input_number.ritardo_upload ######################################################### # # # INPUT # # # ######################################################### input_boolean: dropbox_backup: name: Dropbox Backup initial: 'on' icon: mdi:cloud-upload dropbox_sync_completed: name: Dropbox Sync Completato initial: 'off' icon: mdi:dropbox ######################################################### input_select: backup_day: name: Giorno di Backup options: - "Tutti i giorni" - "Lun - Mer - Ven" - "Lun e Ven" - "Sabato" - "Domenica" - "Mai" initial: "Lun e Ven" icon: mdi:calendar ######################################################### input_datetime: backup_time: name: "Orario Backup" has_date: false has_time: true initial: '02:00' ######################################################### input_text: backup_status: icon: mdi:database-check name: Stato Backup initial: Normale ######################################################### input_number: ritardo_upload: name: Ritardo Upload Dropbox initial: 30 min: 15 max: 180 step: 15 icon: mdi:timer-sand ######################################################### # # # SCRIPT # # # ######################################################### script: check_dropbox_successful: sequence: - service: notify.telegram data_template: title: '*-- Backup Home Assistant --*' message: &check_sync > {% if is_state("input_boolean.dropbox_sync_completed", "off") -%} ERRORE nel Dropbox backup! {%- else -%} Backup completato alle {{states('sensor.time')}} {%- endif %} - 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.backup_status value: *check_sync - delay: '00:00:5' - service: input_boolean.turn_off entity_id: input_boolean.dropbox_sync_completed ######################################################### # # # AUTOMAZIONI # # # ######################################################### automation: ######################################################### # # # SNAPSHOT e DROPBOX SYNC # # # ######################################################### - alias: automazione Hassio backup trigger: platform: template value_template: >- {{ states('sensor.time') == (states.input_datetime.backup_time.attributes.timestamp | int | timestamp_custom('%H:%M', False)) }} condition: - condition: state entity_id: input_boolean.dropbox_backup state: 'on' - condition: template value_template: >- {% set today = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'][now().weekday()] %} {% if is_state("input_select.backup_day", "Tutti i giorni") %} true {% elif (is_state("input_select.backup_day", "Lun e Ven") and today in ["Monday","Friday"]) %} true {% elif is_state("input_select.backup_day", "Sabato") and today in ["Saturday"] %} true {% elif is_state("input_select.backup_day", "Domenica") and today in ["Sunday"] %} true {% elif is_state("input_select.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.backup_status value: Avviato Snapshot alle {{states('sensor.time')}} - service: hassio.snapshot_full data_template: name: Backup automatico {{ now().strftime('%Y-%m-%d') }} - delay: '00:00:5' - service: persistent_notification.create data: message: "Creato backup automatico Dropbox {{ now().strftime('%Y-%m-%d') }}" - service: notify.telegram data: title: '*Dropbox Backup*' message: 'Avviato snapshot per Dropbox in locale' ######################################################### - alias: uploaded backup trigger: platform: state entity_id: input_boolean.dropbox_sync_completed to: 'on' action: - service: script.turn_on entity_id: script.check_dropbox_successful ######################################################### - alias: upload Dropbox backup trigger: platform: template value_template: >- {{ states('sensor.time') == (((states.input_datetime.backup_time.attributes.timestamp | int) + (states('input_number.ritardo_upload') | int * 60)) | timestamp_custom('%H:%M', False)) }} condition: - condition: state entity_id: input_boolean.dropbox_backup state: 'on' - condition: template value_template: >- {% set today = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'][now().weekday()] %} {% if is_state("input_select.backup_day", "Tutti i giorni") %} true {% elif (is_state("input_select.backup_day", "Lun e Ven") and today in ["Monday","Friday"]) %} true {% elif is_state("input_select.backup_day", "Sabato") and today in ["Saturday"] %} true {% elif is_state("input_select.backup_day", "Domenica") and today in ["Sunday"] %} true {% elif is_state("input_select.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.backup_status value: 'Avviato backup su Dropbox' - service: hassio.addon_stdin data_template: addon: 7be23ff5_dropbox_sync input: {"command":"upload" |
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.
Fate attenzione alle righe 132 e 196
- 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 DropBox è 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
LE API_PASSWORD SONO ORA DEPRECATE!!!!
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.dropbox_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.dropbox_backup - input_boolean.dropbox_sync_completed - input_datetime.backup_time - input_select.backup_day - input_text.backup_status - input_number.ritardo_upload title: Dropbox Backup show_header_toggle: false icon: 'mdi:dropbox' path: dropbox_menu title: dropbox |
14 risposte
ciao,
ho provato in tutti i modi con l’ultima relase di home assistant e proprio non funziona…
è cambiato qualcosa ?
potete aiutarmi?
Ciao a tutti! Avevo eseguito la guida, perfetta!!!! Ora mi si è impallato tutto e ho dovuto resettare. Come faccio a ripristinare il backup? L’ho messo in “backup” e riavviato ma non mi compare nulla in snapshot.
Grazie in anticipo!
hai risolto?
Seguita la guida passo passo. Ha mi da tutto corretto, ma il BKP non parte e non so perché!
Sei iscritto al forum o al canale Telegram? dovresti postare li.
qui in fondo all’articolo è un po’ difficile dare supporto soprattuto in mancanza di log o debug. ciao
Ciao quando ho scritto il commento molto tempo fa ho riscontrato che il problema nasceva dal “ritardo”, ovvero la parte di codice che lo elabora sostituisci tutta quella parte con un semplice delay, 6 minuti sono più che abbondanti . Con il susseguirsi degli aggiornamenti di Hassio ho fatto molte modifiche al pacchetto compreso l’applet ifttt che necessita un cambio di url è di body per un più sicuro collegamento ad HA (meglio inserire l url chevti rilascia ha quando predisponi l integrazione di ifttt che contiene l api/token univoco )
Io non riesco in nessun modo a capire come far funzionare l’ Ifttt. Qualcuno mi potrebbe aiutare/indicare una guida?
Salve, spero qualcuno possa aiutarmi. Ho seguito la guida alla lettera, viene creata la card e lo script, si avvia tutto regolarmente e crea lo snapshot (con relativa notifica telegram) ma non viene caricato su dropbox. Qualcuno sa dirmi perchè e come risolvere? Grazie.
Sei iscritto al forum o al canale Telegram? dovresti postare li.
qui in fondo all’articolo è un po’ difficile dare supporto soprattuto in mancanza di log o debug. ciao
Purtroppo no!!!
Sei iscritto al forum o al canale Telegram? dovresti postare li.
qui in fondo all’articolo è un po’ difficile dare supporto. ciao
dal log dell’addon sembra che dopo il primo upload non ne esegua altri in quanto il file risulta esistente. C’è un modo / opzione per forzare la sovrascrittura? grazie
Ciao,
il servizio hassio.snapshot_full è stato sostituito da hassio.backup_full
È un articolo di quasi 4 anni fa, non é l’unica cosa da cambiare.