#ADHD-friendly actionable notifications for chores

1 messages · Page 1 of 1 (latest)

steel remnant
#

Since iOS put Reminders into Calendar with iOS 18, I have been looking for a way to better track our reminders for chores, bills, and medication. Home Assistant seemed like the best replacement and I've mapped out a ton of actionable notifications that helps my family get our tasks done.
-# After I started all this, I found out that there was a way to disable Reminders in Calendar, but I am stubborn and went down this path anyway.

The automation that I've been talking the most about in #the-water-cooler is for our robovac. A notification is sent every night at 8:45 to remind us to clean up the floor; we can have it remind us later, which waits 30 minutes before running the notification script again, or mark it as complete which will wait until 1am and then trigger the vacuum to clean a set amount of rooms.

The Goal: Only run Rosey when we mark the actionable notification to clear the floor as "complete", and update a to-do list for our chores - a later project will have these dashboards on displays.

Here is a tree section for this automation to help visualize the workflow if you need it. 😄 Code for those interested will be in comments.

I built a dashboard with subviews for each category of tasks I have. This was so that when someone taps the notification, instead of long-pressing, it goes to a relevant screen rather than just opening HA. These are nothing more than panel or 2 card dashboards with to-do lists and calendars on them.

I started with the Confirmable Notification script blueprint built into HA. I set up Confirm to update the to-do item to Completed, and Dismiss with a wait action - I then saved the script before continuing, named it, and added on the action of turning on this script for Dismiss. This is the base of the script and if you're following along you will now need to take control of the script (under the 3 dot menu in the top right) in order to continue.

I went into the YAML editor to make sure I pointed the app to the right page when we tapped on the notification. Under the message line, I put in

    data:
      data:
        url: /dashboard-tasks/chores

and saved the script.

Once I had the notifications sending to my phone properly (with the correct message, title, both the confirm/dismiss text, and the tap action), I set on to figure out how to clear things from the to-do lists. I actually found a bug (as of this posting I have yet to submit GrimacingFluent) that led me to finding this blueprint which will remove a Completed item on a to-do list before adding it on again with a new due date and time. For this specific flow, I did not make any changes to the blueprint that required me to take control (however I did take control for other tasks to remove the time requirement).

To trigger the script and tie the actions together, I have a calendar for Chores with the tasks I need to complete on it, set for 1 minute. I created an automation that triggers on WHEN the calendar changes to On AND the message of the calendar is equal to the correct task THEN turn on the script for the notification.

The final missing piece was the robovac. I have a Roborock that is supported by the core integration - and only wanted specific rooms cleaned. I created an automation that is basically #3 on that page.

With this I completed my script - I added a Sequence building block, moved the to-do action in, then added a Wait trigger when the time is 1am and an automation trigger for the segment cleaning.

Now all you need to do is be consistent with clearing your notifications! 😄

rainbowsheep

#

Room cleaning automation

alias: Rosey's night cleaning
description: >-
  Sends Rosey to clean the dining room, living room, play area, and kitchen for
  cleaning overnight.
triggers: []
conditions: []
actions:
  - action: vacuum.send_command
    metadata: {}
    data:
      command: app_segment_clean
      params:
        - segments:
            - 18
            - 19
            - 20
            - 23
    target:
      entity_id: vacuum.rosey
mode: single
#

Notification trigger

alias: Clear the floor
description: Duh.
triggers:
  - trigger: state
    entity_id:
      - calendar.chores
    enabled: true
    to: "on"
conditions:
  - condition: state
    entity_id: calendar.chores
    attribute: message
    state: Clean the floor
actions:
  - action: script.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: script.clean_the_floor
mode: single
#

Notification script, with our random messages in there for funsies.

mode: restart
sequence:
  - alias: Set up variables
    variables:
      action_confirm: "{{ 'CONFIRM_' ~ context.id }}"
      action_dismiss: "{{ 'DISMISS_' ~ context.id }}"
  - alias: Send notification
    domain: mobile_app
    type: notify
    device_id: <snip>
    title: Clear the way for Rosey
    message: >-
      {{ ["The dust bunnies mock you. Clean.","Prepare the abyss for the robot's
      passage.","The vacuum's path is not limitless. Clear the way.","The floor
      awaits your cleansing hand. Prepare the desolate terrain for the robot
      vacuum's mechanical dominion.","As you succumb to the weight of your daily
      routine, do not forget the floor. Clean it, that it may be free from the
      crushing banality of dust and dirt.","The robot vacuum comes for all, but
      must you also surrender to its whims? Clear the path, lest it be said you
      were defeated by the mundane.","In a universe devoid of meaning, even the
      simplest tasks take on an existential weight. Clean your floor, that it
      may not be a perpetual reminder of your own insignificance.","The void
      within you may be bottomless, but at least your floor can be cleaned.
      Prepare the space for the robot's arrival, that it may serve as a fleeting
      distraction from the abyss that awaits us all."]  | random }}
    data:
      data:
        url: /dashboard-tasks/chores
      actions:
        - action: "{{ action_confirm }}"
          title: Picked stuff up
        - action: "{{ action_dismiss }}"
          title: Remind me later
   - alias: Awaiting response
    wait_for_trigger:
      - event_type: mobile_app_notification_action
        event_data:
          action: "{{ action_confirm }}"
        trigger: event
      - event_type: mobile_app_notification_action
        event_data:
          action: "{{ action_dismiss }}"
        trigger: event
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ wait.trigger.event.data.action == action_confirm }}"
        sequence:
          - sequence:
              - action: todo.update_item
                metadata: {}
                data:
                  item: Clear the floor for Rosey
                  status: completed
                target:
                  entity_id: todo.chores
              - wait_for_trigger:
                  - trigger: time
                    at: "01:00:00"
                continue_on_timeout: false
              - action: automation.trigger
                metadata: {}
                data:
                  skip_condition: false
                target:
                  entity_id: automation.rosey_s_night_cleaning
      - conditions:
          - condition: template
            value_template: "{{ wait.trigger.event.data.action == action_dismiss }}"
        sequence:
          - delay:
              hours: 0
              minutes: 30
              seconds: 0
              milliseconds: 0
          - action: script.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: script.clean_the_floor
alias: Clean the floor
description: ""
icon: mdi:robot-vacuum
grim wren
#

Very nice! I'll probably build something myself like this now. I just have an automation to remind me to run the vacuum if it hasn't been run the last couple of days, but it is way too often dismissed because of the floor being a mess of chords and dog toys

steel remnant
#

Since I built this process with my husband, a lot of this is to help him. The little things like the tap to load a dashboard is one of those QoL pieces I noticed he’d benefit from when he tapped on it as we tested things.

#

We have the same problem, kid toys, cords, and some things that need to be moved so the vacuum doesn’t get stuck lol.

quiet slate
#

Very nice and much cheaper than Roborock saros Z70. In our household I'm the notification automation that has to nudge the kids to clean up the floor...

steel remnant
#

I’m normally the one who goes around and picks everything up lol. There are some corners I know the vacuum doesn’t get and I sweep those out for it. No one else does.

This is at least one small step towards me not doing it all. 😂

deep tulip
steel remnant
#

Today I added in affirmation messages when we confirm the chore has been completed. This was mostly so that we can give some indicator to the other person that one of us completed it.

I realized I could add turning on the script with the messages in with the actions after the confirm button was pressed. Then I realized that instead of having a trigger in the automation for updating the to-do list, I can take over the blueprint and disable its trigger then trigger the automation as another action when confirm is pressed.

Before, because the blueprint is triggered by change of a to-do list, every automation I made from the blueprint was running to see if its message was the one changed. Now only one runs when its matching chore is completed.

steel remnant
#

Much pleasing.

inland hawk
steel remnant
#

The automations I set up for Bills reminders has a flaw.

I tried to figure out why I haven’t got notifications for a couple things that I should have. I had the automations set to trigger when the calendar turns on, but because I set the calendar items to “all day”, if there are items in sequential days, I don’t receive any new notifications because the calendar is set to “on” the entire time.

Need to set a time for them instead of all day. JoyStroke

inland hawk
#

interesting problem

steel remnant
#

I guess I’ll just make the events “12:00am - 11:59pm”…

old flower
steel remnant
#

lol, so far the random titles and messages it spits out are very amusing - smiles are great sources of dopamine. 😄

inland hawk
#

oooh. one of the new robovacs with built in arm could be used to hide loot to add incentive. 😄

steel remnant
#

LMAO

#

It'd give us things it found on the floor that we didn't put away as loot.

#

"Here's this sock found under the couch that you left. Great job completing that other task..."

steel remnant
# steel remnant I guess I’ll just make the events “12:00am - 11:59pm”…

I did this and found a probable bug in which some of the items were pushing up the end time by a minute, ending at midnight anyway.

My solution was to set the times for 5 minutes around midnight. Except last night I had 2 items and I discovered that you can't properly trigger on calendar State if you have more than 1 "message" set at the same time - it just does whatever the first message is. So I went through and offset everything that had more than 1 bill reminder. JoyStroke

inland hawk
#

i think the message is quite loud and clear. you cannot do two things simultaneously, and when you have had one full day task, the next day is off time.

vagrant egret
#

I need to subscribe to this so I can be reminded over and over to do this myself 😛 this is awesome!

steel remnant
#

It’s been working MOSTLY really well.

We’re really sucking on picking up for the vacuum still. I dunno what to do there yet…

But bills and other chores are kept up on! My favorite reminder is actually for dragging out the waste bins - it helps us know what week it is because our recycle is biweekly.

vagrant egret
#

I feel so seen lol, though I've been dealing with a hole in our floor this week (we had a water leak) so no vacuuming this week and yup I need constant reminding to put out the rubbish.