Custom component for Home Assistant to enable adding to and updating lists on Google Keep.
Add the gkeep
folder and its contents to the custom_components
folder in your Home Assistant configuration directory, and add the gkeep
component to your configuration.yaml
file.
gkeep:
username: "this_is_my_username@gmail.com"
password: "this_is_my_Google_App_password"
list_name: "Grocery"
list_name
is an optional configuration key that sets a default name for the Keep list to update.
This component relies on gkeepapi, an unofficial client for the Google Keep API.
The original intended use of this component was to restore the capability of Google Assistant to add things to Google Keep lists. I accomplish this with a combination of this custom component running on Home Assistant and IFTTT.
With this custom component loaded, two services named gkeep.add_to_list
and gkeep.sync_shopping_list
are available.
This service call has two data inputs: title
and things
, where title
is the title of the Google Keep list to update, and things
is a either a list or string of things to add to the list.
A string input for things
is parsed for multiple things separated by 'and' and/or commas.
Here is an example of using the service in an automation to add batteries for smart home devices to a list titled "Home Supplies":
automation:
- alias: Low Battery Notification
trigger:
- platform: numeric_state
entity_id:
- sensor.front_door_battery
- sensor.hallway_smoke_co_alarm_battery
- sensor.bedroom_sensor_battery
below: 20
action:
service: gkeep.add_to_list
data:
title: 'Home Supplies'
things: 'Batteries for {{ trigger.to_state.name }}.'
If the Home Assistant Shopping List integration is enabled, you can use this service to synchronize your google keep list into the home assistant shopping list.
This service call has just one data input: title
that is the Google Keep list to sync.
Here is an example of using the service in an automation to sync the list after adding an items:
automation:
- alias: Low Battery Notification
trigger:
- platform: numeric_state
entity_id:
- sensor.front_door_battery
- sensor.hallway_smoke_co_alarm_battery
- sensor.bedroom_sensor_battery
below: 20
action:
- service: gkeep.add_to_list
data:
title: 'Home Supplies'
things: 'Batteries for {{ trigger.to_state.name }}.'
- delay:
seconds: 10
- service: gkeep.sync_shopping_list
data:
title: 'Home Supplies'
Another approach could be to schedule the sync once in a while:
automation:
- alias: Sync google keep
trigger:
- platform: time_pattern
hours: "07"
minutes: 0
seconds: 0
action:
- service: gkeep.sync_shopping_list
data:
title: 'Home Supplies'
A combination of the Google Assistant trigger and the Webhooks action is used to trigger the new Home Assistant service via Google Assistant. One IFTTT applet must be made per Google Keep list of interest, with the list name (e.g., 'Grocery' in the example below) hardcoded into the applet. For example:
IF: Google Assistant/Say a phrase with a text ingredient
Add $ to the grocery list
Okay, adding $ to your grocery list
THEN: Webhooks/Make a web request
https://thisismyhassurl.org/api/webhook/ABCXYZ123456
POST
application/json
{ "action":"call_service", "service":"gkeep.add_to_list", "title":"Grocery", "things":"{{TextField}}" }
A Home Assistant automation to receive and process Google Assistant inputs via IFTTT can have the form:
automation:
- alias: Google Keep list update
trigger:
platform: event
event_type: ifttt_webhook_received
event_data:
action: call_service
action:
service_template: '{{ trigger.event.data.service }}'
data_template:
title: '{{ trigger.event.data.title }}'
things: '{{ trigger.event.data.things }}'