send sensor data from Home Assistant to a spreadsheet – long term recording of my use of heating fuel

The Home Assistant dashboard (aka ‘Lovelace’) is very good at displaying live sensor data as well as historic sensor data. The image here shows a ‘just now’ measure of the sun and also a continuous line graph of ‘sun azimuth’ over the last few days. To understand changes over a longer period of time needs more than this.

The thing I want to monitor is my use of heating oil. I firstly want to be able to predict when I need to order more heating oil. Secondly, I wondered whether my oil use could be related to the outside temperatures. So I decided that the thing to do was to send daily level and temperature readings to a spreadsheet to analyse later. This page describes how I sent data from my Home Assistant sensors called ‘oil_level’ and ‘weather temperature’ to a Google Sheet. I used a free account to IFTTT to do this and 1300 daily readings later it’s still working so I will recommend it to you. (On another page you can see the smart oil tank level sensor I made as no one seemed to be making them).

BELOW YOU’LL FIND:

  • how to connect Home Assistant to a Google Sheet via IFTTT
  • how to split up a string eg a long date format such as ‘March 4, 2020 at 07:15AM’
  • how to reference the last reading in a spreadsheet
  • how to average the bottom, most recent readings in a spreadsheet
  • how to add days to a date

1. Get IFTTT to put the data I send into a Google sheet

Go to IFTTT, sign in and add the Webhooks service and the Google Sheets service. Follow this link if you need the official docs for Home Assistant IFTTT

2. Get a ‘key’ from the Webhooks service

Go to IFTTT > My services > Webhooks > settings and copy the key from the webhooks URL.

3. Add the key (the string of characters found in the URL) to your Home Assistant configuration.yaml

ifttt:
  key: 6XASTRINGOFCHARACTERS
# key: !secret iftttkey

4: Create an IFTTT applet ‘IF Webhook THEN Google Sheets’

In the Google Sheets section of the IFTTT applet set the name and folder for the spreadsheet where you’ll store the data as follows:

5: Write a Home Assistant ‘automation’ as a yaml file

In Home Assistant create an automation that triggers IFTTT once a day and sends the sensor data to the spreadsheet. Don’t use the built-in automation editor – instead use a text editor to create a file called send_oil_level.yaml and saved in the Hassio config folder called ‘automations’. I suggest you copy and paste this editing just the bold text. The event name below must match the name above at IFTTT

id: '12399999'
# the id must be unique - the alias and description are for your reference
alias: oil_level_spreadsheet
description: oil daily readings in oil_level.yaml
# I want a daily oil level reading so the trigger I use is a time
trigger:
at: 06:30:00
platform: time
# The condition offers ways to limit when we'll send oil sensor data. eg don't bother in summer
condition: []
# The ifttt trigger service requires a data template. "event" and "value1" etc ought to match what your IFTTT app is expecting to receive. I suggest you copy and paste this.
action:
data_template: { "event": "oil_level", "value1": "{{ states('sensor.oil_level')}}", "value2": "{{ states('sensor.weather_temperature')}}", "value3": "{{ states('sensor.loose_temperature')}}" }
service: ifttt.trigger

To recap: this code is in a text file named send_oil_level.yaml which is in the Hassio config folder called ‘automations’. Check also that your configuration file named configuration.yaml has the following sections:

automation: !include automations.yaml
automation old: !include_dir_merge_list automations

6. Cross fingers and go see your spreadsheet

8. Find a way to split the date time March 4, 2020 at 07:15AM

Columns A to E of the spreadsheet need to be left for IFTTT and Google Sheets to update whenever the automation runs. You can format them with colours or whatever but the bottom line must stay empty to catch the incoming data.

Use Column E rightwards when you want to do your calculations. Below I’ve put a split function in cell H2 and copied this down the column. The split function will break up a string of text that has a obvious separator. The obvious separator in ‘March 4, 2020 at 07:15AM’ is a space.

That’s why cell H2 has =split(A2, ” “) The formula sucks out the spaces from what’s in A2 and puts the individual elements in columns to the right of it. Pretty cool function that one.

9. extract the reading at the bottom of the spreadsheet

As it’s changing and being added to daily it would seem that we can’t exactly do maths on the bottom row of the spreadsheet! But of course we can: I want to do maths on the current and most recent oil level. Put this code in the cell that you want to do the maths on. It will always update to the value at the bottom of column C in the table.

=INDEX(C:C,MATCH(1^1,C:C))

10. average the most recent values at the bottom of the table

The table is changing and being added to daily and I want to average the last five readings at the bottom of the spreadsheet. Put this code in the cell that you want to hold the average. It will always update to average the last five values at the bottom of column E in the table.

=arrayformula( average(query(sort( E1:E, row(E1:E) * isnumber(E1:E), false), "limit 5", 0 ) ) )

11 add a number (eg x days) to today’s date to calculate the date x days away

Date calculations firstly require you to Format your cell as a date so go to the cell and choose Format > Number > Date. Secondly in the cell you enter this function:

=today() + G991 //to add the value in cell G991 to today's date
or
=today()+ 20.5    //to get the date 20 days from today's date

12 the completed calculation to estimate when I need to order oil

Here’s the spreadsheet I built to give a better measure of how much oil I need. Painful to create it was so useful. I later moved all of the calculations into Home Assistant and made the values into sensors and variables. See here for that project.

6 Responses

  1. Jose Petri says:

    Hi! I would like to do this in my Home Assistant, but I have tried this and doesn’t work. Google’s driver spreadsheet does not change. I think could be the file yaml, some spaces, or formatting issues. Could you share your file or send a print of your yaml files? Thank you for share.

    • roger says:

      Sorry to hear this Jose. It is frustrating not being able to locate the cause of the failure when there are so many places to fail.
      Getting the code below correct took ages – perhaps this is where it’s gone wrong. Setting up the webhooks part was hard but it was the easier bit!

      This code is the entire content of a plain text file called oil_level.yaml which resides in the automations folder. I found that this automation code would not work in the automations tool.

      – id: ‘12399999’
      alias: oil_level_spreadsheet
      description: daily readings in oil_level.yaml
      trigger:
      – at: “23:55:00”
      platform: time
      condition: []
      action:
      – data_template: { “event”: “oil_level”, “value1”: “{{ states(‘sensor.oil_level’)}}”, “value2”: “{{ states(‘sensor.temperature_weather’)}}”, “value3”: “{{ states(‘sensor.power_today’)}}” }
      service: ifttt.trigger

  2. Daniel Cagarrinho says:

    Hello Roger, thanks allot for this tutorial 🙂
    Runs perfect for me, the only thing I’m missing is already on the spreadsheet is formatting the date as you have in date split and if its possible the time in 24h

  3. Luca says:

    Hi,
    thank you for your work. Is it possible to retrieve data from Google Home to Google Sheets without Raspberry or similar? If I have undertand correctly your method require hardware. Am I wrong?

    Best regards
    Luca

    • roger says:

      Thank you for writing in. I wouldn’t say the data in Google Home isn’t retrievable as ‘developers.google.com’ offers a way that perhaps someone is trying. Please lets know.
      But yes there is a ‘non-hardware’ way for you. It requires installing Home Assistant on a virtual machine on your PC, even an old PC. In this way any activity or temperature reading (etc) is recorded by HA or sent to a spreadsheet as on this page – instead of disappearing into Google Home.

      The link below, and some Youtubes will guide you through that. Almost all the data I’m using now comes from a Home Assistant. My version runs on a Raspberry Pi connected by ethernet to the broadband router. Yours can run on a PC just as well or better … with the downside of it being ‘off’ when you PC is ‘off’.

      All best,

      RF

      https://www.home-assistant.io/installation/

Leave a Reply

Your email address will not be published. Required fields are marked *