Created new add-on to backup snapshots to Google Drive

is that an ssl error?

not sure… I am trying to do it within my network so the SSL cert isn’t for that address… maybe thats the issue?

most probably. Like Google Assistant only works over SSL (the component) You have to give Google a https endpoint to connect to. I would assume google drive is the same.

You could use caddy to proxy to whatever you want and use that… that would work.

i temporarily opened the port so I could go through the auth process using my duckdns address and that worked.

This backup is awesome, also saved me a bunch of pain when my SD Card decide to lock itself and became unusable. Luckily I’d just set this up with a fresh back-up and was running a few hours later again.

Question, if I setup a weekly snapshot (as per this thread, based on the advice earlier - Hassio 0.61 Snapshot Service) - how do I get it to also trigger this tool to then run the backup?

Here’s how I’ve set mine up. I have it run a scheduled backup and then 30 minutes later, I have it upload to my google drive.

automation:
  - alias: Weekly Backup Friday at 3 AM
    initial_state: 'on'
    trigger:
      platform: time
      at: '3:00:00'
    condition:
    - condition: time
      weekday:
        - fri
    action:
    - service: hassio.snapshot_full
      data_template:
        name: Automated Backup {{ now().strftime('%Y-%m-%d') }}
    - service: notify.sms_notification
      data_template:
        message: Creating backup named "Automated Backup {{ now().strftime('%Y-%m-%d') }}"

  - alias: Weekly Backup to Google Friday at 3:30 AM
    initial_state: 'on'
    trigger:
      platform: time
      at: '3:30:00'
    condition:
    - condition: time
      weekday:
        - fri
    action:
    - service: rest_command.google_backup

6 Likes

Thanks weok! Will be giving this ago when I get home later - looks bloody good. So simple to setup (I kept trying to code it as one block of scripts, but that was just stupid!), seems so obvious reading your code!

Update: All working a treat, just had a chance to add the code, tweaked the timings and updated the notify (bloody handy to know whats happening).

  • service: notify.ios_my_iphone

Note: For those wanting to use this code, don’t forget to add the rest_command to your config file (as per the github readme)

rest_command:
  google_backup:
    url: 'http://localhost:8055/gb/doBackup'
    timeout: '300'

Thanks again!!!

3 Likes

Hi @samccauley

really a great addon, thanks!

This is my config

{
  "fromPattern": "/backup/*.tar",
  "backupDirID": "xxxxxxx",
  "purge": {
    "enabled": true,
    "preserve": 5
  },
  "purge_google": {
    "enabled": true,
    "preserve": 5
  }
}

I’m trying to use within Nodered and I’m using a node configured like this, calling an HTTP GET, but as you can see I get a “no response from server”.

BTW, my Nodered server is on a different server than the Home Assistant one, but in the same local network.

Am I doing something wrong?

Thanks

Have you tested calling the service from your desktop browser, or a testing tool like Postman? Does that work?

Yes, it works.

I have found that even if I get that error, the service is called and it’s working.

Thanks

Makes me suspect a bug in Node-RED’s HTTP Request/Response code. I don’t know. I don’t use Node-RED myself.

I tried uploading to Google via the below script but it failed. Any ideas what I have done wrong?

rest_command:
  google_backup:
    url: 'http://localhost:8055/gb/doBackup'
    timeout: '300'
    
script:
  upload_backup_to_google:
    sequence:
      - service: rest_command.google_backup

error log:

Wed Dec 05 2018 16:27:06 GMT+0930 (Australian Central Standard Time)

Error executing service <ServiceCall rest_command.google_backup (c:eb253cc9bd2d4bfeaa9486f10c223964)>
Traceback (most recent call last):
File “/usr/local/lib/python3.6/site-packages/homeassistant/components/rest_command.py”, line 103, in async_service_handler
headers=headers
File “/usr/local/lib/python3.6/site-packages/aiohttp/client.py”, line 391, in _request
await resp.start(conn)
File “/usr/local/lib/python3.6/site-packages/aiohttp/client_reqrep.py”, line 757, in start
message, payload = await self._protocol.read()
File “/usr/local/lib/python3.6/site-packages/aiohttp/streams.py”, line 543, in read
await self._waiter
concurrent.futures._base.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/local/lib/python3.6/site-packages/homeassistant/components/rest_command.py”, line 103, in async_service_handler
headers=headers
File “/usr/local/lib/python3.6/site-packages/async_timeout/init.py”, line 45, in exit
self._do_exit(exc_type)
File “/usr/local/lib/python3.6/site-packages/async_timeout/init.py”, line 92, in _do_exit
raise asyncio.TimeoutError
concurrent.futures._base.TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/usr/local/lib/python3.6/site-packages/homeassistant/core.py”, line 1177, in _event_to_service_call
await service_handler.func(service_call)
File “/usr/local/lib/python3.6/site-packages/homeassistant/components/rest_command.py”, line 113, in async_service_handler
_LOGGER.warning(“Timeout call %s.”, request.url)
UnboundLocalError: local variable ‘request’ referenced before assignment

strangely it looks like the upload still worked…

Trying to use it for camera snapshots without success

config:

homeassistant:
  whitelist_external_dirs: 
    - /config/www/

getting this response:

{“backupTimestamp”: “2019-01-07T21:17:14.288088”, “fromPattern”: “/config/www/*.jpg”, “backupDirID”: “1fhtdVlOwzM0Q0mECjxe2kztu9vfA1yWv”, “fileCount”: 0, “alreadyCount”: 0, “backedUpCount”: 0}

folder contains several JPG files but not recognized, any idea?

was wondering can the .tar file created be with password option?

you can give the .tar file a password when you create it in the snapshot creation stage (not part of this add-on). This add-on uploads the snapshot, doesn’t create it

Hey, I have the same error.
Could you please tell me how you managed to make it worked ?

I just started the whole auth process over again from memory

Well thank you, I reinstalled it and it is now working.

Can i get the it to also name the file within google drive the same as within hassio? and also can i add the version number in the name… im using the automation and templates above.

works great so far otherwise