TL;DR
Using voice only actions, you can queue up a list of to-do items. It then nags you every 5 minutes via Echo, to get that item done. Once you have completed the item…you can let it know either by voice, or by pushing a button of your choosing.
So this is a sort of work in progress. However, it is working perfectly so far. I’ve added some extra bells and whistles over time and I will likely be modifying this quite a bit over the next few weeks as I perfect it…and also as I clean up the logic.
I have pretty bad ADHD…I’m constantly getting distracted with what I need to get done, or forgetting that I was supposed to do something. List/Checklist apps work “ok” but usually I try to avoid my phone or computer as those are both black holes of procrastination for me. Having a fully automated verbal only system is perfect for keeping me productive and on task. So this is what I came up with.
So far I have been using it for 3 days, and it really is helping me with avoiding distraction and helping me stay on task.
Prerequisites:
- WebCoRE (obviously)
- Echo Speaks
- IFTTT
- Tasker (optional)
Hardware requirements (yes…both unfortunately):
- Echo device
- Google assistant device
The basic idea is that it’s all driven by a global string variable. The variable is a comma separated list of items. Every 5 minutes, the piston tells the Echo device to announce your current task. Once you indicate that you have finished this task, it removes it from the variable, and picks up the next item in the list.
I’d like to start this off by saying…I’m not attached to any of the phrases or verbs I have used…and I realize that some of the trigger/variable adjectives I’m using are not matching some of the voice phrase adjectives (for example…chore vs task vs list, etc). If you have suggestions of a more fluid system of voice commands, I’m all for it.
The actions I have set up so far are:
Ok google…
- queue up {{task to add to queue}}
- queue now {{task to add to queue}} - adds task to front of queue, overriding whatever the current task is
- stop queue - I may end up changing this to “pause”…because that’s what it does. It stops the verbal announcements but it does not clear the queue.
- clear queue - clears the queue
- resume queue - allows you to pick up where you left off after using “stop queue”
- repeat queue - reminds you of whatever task you are currently on
- queue item done - tells the piston that the current item has been completed and to move onto the next item. May change this simply to “done”. Not sure where else I would ever use that as a trigger for my Google home. Aka “ok Google done”.
- read queue - reads out the entire queue
Via tasker:
- if text message is received containing “#todo”, then add item to front of list
Okay. Here’s the WebCoRE configuration. It consists of two Pistons…one to manage the list (things like clear, add to front, add to back), and one to perform the announcements and manage the service (things like stop, resume, repeat, done).
First things first…create the global variable
string @ChoreQueue
Piston 1 - Managing the queue
Piston 2 - Running the queue
Piston 3 - Example of how to set up scheduled nagging todo lists
I’ve redacted this one for personal info, but it’s a simple piston to set up. The main point here is how to add new items to the front or back of the existing queue.
IFTTT configuration / voice actions:
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Queue up
------------------------------------------------------------------------
IF
Google Assistant
Say a phrase with a text ingredient
What do you want to say?
queue up $
What's another way to say it? (optional)
remind me to $
And another way? (optional)
remind me that $
What do you want the Assistant to say in response?
okay, added to your reminder list
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueBack
Method: GET
Content Type: application/json
Body: {"Chore": "{{TextField}}"}
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Queue now
------------------------------------------------------------------------
IF
Google Assistant
Say a phrase with a text ingredient
What do you want to say?
queue now $
What do you want the Assistant to say in response?
okay, added to the front of your reminder list
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueFront
Method: GET
Content Type: application/json
Body: {"Chore": "{{TextField}}"}
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Stop Queue
------------------------------------------------------------------------
IF
Google Assistant
Say a simple phrase
What do you want to say?
stop queue
What do you want the Assistant to say in response?
okay, I've stopped the queue. You can pick up where you left off at another time
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueStop
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Clear queue
------------------------------------------------------------------------
IF
Google Assistant
Say a simple phrase
What do you want to say?
clear queue
What do you want the Assistant to say in response?
okay, your list is now empty
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueClear
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Resume queue
------------------------------------------------------------------------
IF
Google Assistant
Say a simple phrase
What do you want to say?
resume queue
What do you want the Assistant to say in response?
starting your queue back up where you left off
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueResume
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Repeat queue
------------------------------------------------------------------------
IF
Google Assistant
Say a simple phrase
What do you want to say?
repeat queue
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueRepeat
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Queue item done
------------------------------------------------------------------------
IF
Google Assistant
Say a simple phrase
What do you want to say?
queue item done
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueDone
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Add via SMS
------------------------------------------------------------------------
IF
Webhook
Event Name: ChoreQueueSMS
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueFront
Method: GET
Content Type: application/json
Body: {"Chore": "{{TextField}}"}
------------------------------------------------------------------------
------------------------------------------------------------------------
-- Read entire queue
------------------------------------------------------------------------
IF
Google Assistant
Say a simple phrase
What do you want to say?
read queue
What's another way to say it? (optional)
what's left on my queue (punctuation is important, otherwise it will not match)
And another way? (optional)
what's left in my queue (punctuation is important, otherwise it will not match)
What do you want the Assistant to say in response?
okay, I've stopped the queue. You can pick up where you left off at another time
What do you want the Assistant to say in response?
request sent
THEN
Make a web request
URL: {{WebCoRE Webhook URL}}/ifttt/ChoreQueueRead
------------------------------------------------------------------------
Tasker Configuration:
IF
Received Text
Type: SMS
Content: *#todo*
THEN
HTTP Request
Method: Post
URL: {{IFTTT Webhook URL for ChoreQueueSMS}}
Body: {"value1":"%SMSRB"}
Known bugs:
- Each time you add a new item, it triggers Echo to announce the current item. Not the end of the world, but it does get annoying if you are trying to add multiple items in a row…I added a 2 second delay so it at least doesn’t talk the same time as the Google home is responding.
Future enhancements:
- Add multi-room announcements - will need time constraints so that if I’m using it when my GF has already gone to bed, it won’t be announcing things in the bedroom
Other notes:
- I recently learned about cast-web-api. It’s a solution for Google Home devices that is similar to Echo Speaks. It adds Google Home devices to your SmartThings account and you can use them to make verbal announcements. The only difference is that it appears that you have to run a server on your network, such as on a raspberry pi. I will likely be playing around with this, since it will eliminate my requirement of using both a google home AND an echo.