Household tasks - automated nagging via Amazon echo, and Google Assistant


#1

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.

(creating a queue) Append to a list of strings while pulling the first item in the list
Unchanged Piston that is meant to loop every 5 mintues randomly stops running?
#2
2020-02-03 @ 15:32 - Added enhancement to pause the anouncements when presence sensor changes to away.
2020-02-03 @ 17:37 - Fixed bug to announce "nice job" when last item is removed.
                   - Add support to remove "#todo" from submitted task, this was to support adding tasks via text message (uses tasker).
                   - Added action to also send reminders via SMS, in addition to Echo announcement
2020-02-05 @ 17:53 - Added new command to read out entire queue

#3

Working on a new improvement…setting it up to also use the Join API for notifications on Chrome, Android and Windows 10.

I’m setting up a piston that will consolidate notifications for Echo, Android and Windows devices. Based on any criteria.

For example…if there has been motion in the garage, then include echo announcements on the garage echo. Otherwise, don’t.

And only perform echo announcements on the bedroom echo between certain hours.

Etc.