Advertisement

This guide will show you how to integrate Google Calendar with Home Assistant in detail. This integration has many benefits, and events from your Google Calendar can be used in automations and scripts. Another possible use is to display the calendar using the beautiful Calendar Card that is an official part of the Home Assistant Lovelace dashboard.

Advertisement

Google Cloud Platform configuration

Unfortunately, the integration of Google Calendar with Home Assistant isn’t as easy as copy/pasting your calendars URL or clicking a few buttons in the dashboard. To make the integration possible, you are required to go through numerous steps.

This integration doesn’t start in Home Assistant or the configuration.yaml file. Instead, you will first be heading to the Google Cloud Platform. Just as I was, you might not be familiar with this complex looking platform. However, there is not much you can do wrong if you follow the steps.

Advertisement

Create a new Google Cloud Platform project

The first step is to either create a new project in the Google Cloud Platform, or select an existing one. To cover all bases and make this guide as extensive as possible, I am creating a new project. If you have already created a project for a previous integration, I recommend using that one. That way, you won’t have an individual project for every integration that might need the Google Cloud Platform.

After creating or selecting a project, a confirmation message announcing that the API has been enabled should appear. Click on the button labelled Go to credentials to continue.

The process of creating a new project in the Google Cloud Platform for the Google Calendar integration with Home Assistant.
A message confirming that the Google Calendar API has been enabled.
CanaKit Raspberry Pi 4 8GB Basic Starter Kit with Fan (8GB RAM)
CanaKit Raspberry Pi 4 4GB Basic Starter Kit with Fan (4GB RAM)
CanaKit Raspberry Pi 4 Basic Kit (8GB RAM)
CanaKit Raspberry Pi 4 4GB Basic Kit with PiSwitch (4GB RAM)
Product
CanaKit Raspberry Pi 4 Basic Starter Kit
CanaKit Raspberry Pi 4 Basic Starter Kit
CanaKit Raspberry Pi 4 Basic Kit
CanaKit Raspberry Pi 4 Basic Kit
Model
Raspberry Pi 4 Model B (8 GB)
Raspberry Pi 4 Model B (4 GB)
Raspberry Pi 4 Model B (8 GB)
Raspberry Pi 4 Model B (8 GB)
PSU
Power supply with noise filter
Power supply with noise filter
Power supply with noise filter
Power supply with noise filter
Accessories
Clear case, fan, and set of heat sinks
Clear case, fan, and set of heat sinks
Set of 3 aluminium heat sinks
Set of 3 aluminium heat sinks
Price
$124.99
$104.99
Price not available
Price not available
-
-
CanaKit Raspberry Pi 4 8GB Basic Starter Kit with Fan (8GB RAM)
Product
CanaKit Raspberry Pi 4 Basic Starter Kit
Model
Raspberry Pi 4 Model B (8 GB)
PSU
Power supply with noise filter
Accessories
Clear case, fan, and set of heat sinks
Price
$124.99
CanaKit Raspberry Pi 4 4GB Basic Starter Kit with Fan (4GB RAM)
Product
CanaKit Raspberry Pi 4 Basic Starter Kit
Model
Raspberry Pi 4 Model B (4 GB)
PSU
Power supply with noise filter
Accessories
Clear case, fan, and set of heat sinks
Price
$104.99
CanaKit Raspberry Pi 4 Basic Kit (8GB RAM)
Product
CanaKit Raspberry Pi 4 Basic Kit
Model
Raspberry Pi 4 Model B (8 GB)
PSU
Power supply with noise filter
Accessories
Set of 3 aluminium heat sinks
Price
Price not available
-
CanaKit Raspberry Pi 4 4GB Basic Kit with PiSwitch (4GB RAM)
Product
CanaKit Raspberry Pi 4 Basic Kit
Model
Raspberry Pi 4 Model B (8 GB)
PSU
Power supply with noise filter
Accessories
Set of 3 aluminium heat sinks
Price
Price not available
-

Leave the API set to the Google Calendar API. As this integration doesn’t gather any third party’s user data, the option application data is sufficient. And as the integration of Google Calendar with Home Assistant doesn’t require access to any other services, you can select no in the final question.

After you have clicked next, you will be taken to the service account details. Here you will have to give your account a name. As you can see, I went for the obvious. You will also be assigned an account identification and, if you wish to do so, you can add an account description.

You can simply click yourself through part two and three, as nothing has to be changed and both parts are optional. Once complete, click on the button labelled done one final time.

The settings to create credentials for the Google Calendar API
Details required to create a new project for the Google Calendar integration with Home Assistant.

Generating a Client ID and Client Secret for Home Assistant

Unfortunately, the Google Calendar integration with Home Assistant isn’t complete yet. There are several further steps in the Google Cloud Console you will need to go through, before switching to Home Assistant. Once you click done in the previous step, you will be redirected to the APIs and services settings. Here you will need to configure a consent screen before moving on.

Once selected, choose the user type external and continue by clicking on the button labelled create. You are next required to enter a few details on your “app” (don’t be confused by the naming). Give the app a name, a good choice would be Home Assistant, and enter your email as the user support email. The app logo is, luckily, optional. Fill in any other required information before moving on.

As we won’t be using any scopes, you can skip the next step by clicking on save and continue. Finally, add your email as a test user. With that, the consent screen configuration is complete, and you can move on.

The Google Cloud Console displaying a message proclaiming that a consent screen has to be configured.
Selecting an external user type in the Google Cloud Console.
The configuration of the Home Assistant app in the Google Cloud Console, which will allow the integration of Google Calendar.

Creating credentials for the Google Calendar integration with Home Assistant

It is now finally time to create credentials, which allow Home Assistant to integrate with Google Calendar and fetch events. After completing the previous step, you should be redirected back to the APIs and services page. From there, select the option to create credentials and choose OAuth client ID.

Select the application type TVs and Limited Input devices from the dropdown and give it a name. This choice might not make any sense, but it is the correct one. As for the name, I once again recommend you enter something you will be able to recognize later, for example, Home Assistant Credentials. To finish things off, you will need to click on create.

A pop-up displaying your client identification and client secret will appear. Do not close this pop-up until you have copied both in to an external editor, as they will be needed later on. If you do accidentally close this pop-up, you will be able to find them in the credentials overview. Simply click on the pencil icon, and they will be displayed on the right-hand side. You must never share these credentials with anyone. If you have done so, delete the credentials immediately and create a new identification and secret.

The steps required to create a new OAuth client ID in the Google Cloud Console.
Creating an OAuth client
Give your application a recognizable name.
The Client ID and Client Secret that will be needed to integrate the Google Calendar with Home Assistant.
Copy both the Client ID and Client Secret from this pop-up.
The Home Assistant credentials in Home Assistant, after they have been created.
By clicking on the pencil icon, you can view your Home Assistant credentials.

Making sure the Google Calendar API is enabled

To save yourself from a future headache, it is recommended you double-check whether the Google Calendar API has been enabled by clicking on Library in the left-hand menu.

In the library, search for and select the Google Calendar API. If you have followed this guide correctly, you should see a green tick and the message API Enabled. If not, enable the API here.

The Library link in the Google Cloud Console navigation that allows you to see all APIs.
A green tick on the Google Calendar API. This means that the API has successfully been enabled.
If the tick is green, the Google Calendar API is enabled.

How to integrate Google Calendar with Home Assistant

I have good news for you: the integration of Google Calendar with Home Assistant is now almost complete. To finish things off, add the following three lines, which you should have saved in your text editor, to your configuration.yaml file:

google:
  client_id: YOUR_CLIENT_ID
  client_secret: YOUR_CLIENT_SECRET

As the client identification and secret strings are highly confidential, I recommend storing them in your secrets.yaml file, and not directly in the configuration file. There are two further optional options that can be configured:

  • By adding track_new_calendar: false, new calendars added to your Google Calendar account won’t be tracked and integrated with Home Assistant. You can select which calendars shall be tracked later on, so I would not include this variable and leave it set to default.
  • The line calendar_access: read_only will not grant Home Assistant the right to create new events or modify existing ones. When set to read-only, you will not be able to have events created by automations or scripts. If you want to do more than only display your Google Calendar, you will need to remove this line.

Once complete, it is simply a case of restarting Home Assistant and waiting for the authentication notification to appear. As of writing, there is however an issue that will likely prevent that from happening.

Advertisement

Google Calendar authentication code expired

There is a possibility that once Home Assistant has started again, an error message, stemming from the Google Calendar integration, will appear. This error message reads:

“Authentication code expired, please restart Home Assistant and try again”

However, no matter how many times you restart Home Assistant, the same message will continually appear. Thankfully, there is a workaround that has been published on GitHub: Enter the general settings and set your time zone to Etc/GMT. After saving the settings, restart Home Assistant and a notification prompting you to complete the authentication should appear. Simply click on the link in that notification, follow the steps, and enter your code.

Once the Google Calendar integration with Home Assistant setup is complete, you can change the time zone back to what you previously had set. The integration will continue working as expected.

An error message title Google Calendar Setup in Home Assistant displaying the following: Authentication code expired, please restart Home-Assistant and try again.
An error message that is frequently displayed when trying to integrate Google Calendar with Home Assistant.
The option to change the time zone to Etc/GMT in Home Assistant, which will make the integration with Google Calendar possible.
The setting can be changed after the final step required for the Google Calendar integration with Home Assistant.

Configuring individual Google Calendars

At this point, the Google Calendar integration with Home Assistant should be complete, and you should be able to see your individual calendars in the developer options. Additionally, Home Assistant will have created a new file with the name google_calendars.yaml. You can find this file in the same folder as the configuration.yaml file.

The contents of the google_calendars.yaml file created by Home Assistant. Displayed are the configurations for three Google Calendars.

Within this YAML file, you will find all the calendars stored in your Google Calendar account. There are several variables that can be customized using basic YAML. Just make sure you never change the cal_id, or things will stop working.

Required variables for the Google Calendar integration with Home Assistant

  • The name (what you see in the frontend) and device_id (what your scripts and automations will use) can be changed to your liking. Both are required.
  • By setting the variable track: to false, you can have Home Assistant ignore that specific calendar. For example, in the code posted above, I would set the weather calendar to not be tracked, as I already have an integration with MeteoSwiss set up in Home Assistant. You are required to keep this variable, whether you change it or not, in the configuration.

Optional variables for the Google Calendar integration with Home Assistant

  • By using ignore_availability, you can instruct Home Assistant to respect the free/busy flag in Google Calendar, or not.
  • The variable max_results allows you to set how many calendar events will be fetched by Home Assistant. The default setting is 5. If you wish to have more events fetched, you can increase this number.
  • Using search, you can include events that only have a certain term in their title. For example, if you wanted a calendar that will only track the days you have to put the bins out, you could set it to search: bins. If “bins” is also included in the events title, it will only display those events.
  • Finally, you can set an offset to pre-trigger the state change on the sensor. If you wanted the sensor to change half an hour before the event, you would have to add offset: !!-30. If you wanted it to change one and a half hours beforehand, you can use offset: !!-01:30.
Advertisement
Liam Alexander Colman, the author and maintainer of Home Assistant Guides.

About Liam Alexander Colman

Liam Alexander Colman has been using Home Assistant for various projects for quite some time. What started of with a Raspberry Pi quickly became three Raspberry Pis and eventually a full-blown server. I now use Unraid as my operating system and Home Assistant happily runs in a Docker container. My personal setup includes many Zigbee devices as well as integrations with existing products such as my Android TV box. Read on to find out more on how I got started with Home Assistant.

Leave a comment

Advertisement