Home Assistant: Chore Tracking

Inspired by some prior solutions, I wanted to share some modifications (improvements?) that I have made to what I've found.
Source Materials
The article I found first provided a very clear step-by-step instruction on getting started:

The general concept is as follows:
- Create
input_boolean
helpers which represent the chores. - Create a Chore Dashboard to make chore discovery and completion easy.
- Create Automations which track chore completion and will gamify the results - encouraging completion and rewarding after a regular time-interval.
- Reset chores at a regular time-interval (generally, daily) to keep up.
I have been looking for fun ways to reward doing "chores" at our house, and this seemed like an easy task to try out. I liked what I read, but I wanted to make some changes to the advertised approach which I will dive into more detail below:
- YAML configuration of chores
- Naming standardization that has meaning
- Simplify reset Automations
- Advanced resetting and chore assignments
YAML Configuration
My first modification to the guide was to modify my configuration habits. I was impressed by Carlo Costanzo's Home Assistant Config repository and felt like source control management of my own Home Assistant configuration would be an easy task to pick-up and give me a better backup/restore/maintenance option for my installation over time. I've never had a problem using the user interface for this as the team has made many improvements in the years I've been running Home Assistant. As a tinkerer, I know I can't let things "just work"...
Since I had already installed the Studio Code Server add-on, it was easy for me to dive directly to my /homeassistant
folder and see my installation's configuration.

Taking a look at the configuration.yaml
file, this can be a concise starting point to how all of your YAML gets loaded into Home Assistant. Instead of keeping any explicit data in this file, it can instead point to broken out files (or folders) to load in assets that you've kept in a neat file structure.
For example, let's review input_boolean
(which is equivalent in the UI to creating a "Toggle" Helper in Settings > Devices & services > Helpers > Create):

Line 25 above will include any .yaml
files within the input_boolean/
directory that can be seen in the full directory screenshot above. See Home Assistant's documentation on splitting your configuration which will describe the different !include
directives you see above. There's a file in there (only one so far) named chore_booleans.yaml
which contains named chore input_boolean
entities:

After you've made these changes, you can load the entities into Home Assistant through the Settings blade.


Now, if you navigate to the Helpers page, you should see your chores:

You'll see that Helpers created through the UI are editable, but our YAML entities have a "Read-Only" icon on the right. The caveat of using YAML-defined entities means that you'll also need to configure/edit your entities in your files, too.
That's probably all to cover about using YAML instead of the UI to configure the chores for now. While I don't have my installation public in terms of my YAML configuration, I'm not completely ruling that out in the future.
Meaningful Naming Conventions
The previous article specified using Chore entities that are just numbered to simplify referencing chores in Dashboard/lovelace cards (ie input_boolean.chore_1
, input_boolean.chore_2
, ...). As seen in the previous section, I chose a naming convention that I could group/categorize with:
chore_<task>(_<assignee>)
- Prefix:
chore_
lets me immediately distinguish this entity as a Chore - Task:
<task>
lets me specify a name which will make logical sense if I reference it within an Automation or Dashboard card - Assignee:
_<assignee>
lets me specify a Person that will explicitly own the Chore. Since these Chore Entities are still statically set in YAML, I am locking myself out of rotating assignments based on Entity ID alone. I may consider how to do this later ... but for now, I'm mostly concerned with isolating a child's Chores from parents'. So this works for me at the moment.
To get past the annoyance of remembering the specific Chore entity names, we can use the power of YAML templating in our Dashboard cards! Or, check out what HACS has!
To accomplish this, I used auto-entities
from the frontend category.

Then, created a new empty Dashboard named "Chores" (creative!) and added the card (as YAML, of course):
type: custom:auto-entities
card:
type: entities
title: Chores
show_header_toggle: false
state_color: true
filter:
include:
- entity_id: input_boolean.chore_*
exclude:
- entity_id: input_boolean.chore_*_elliott
Instead of having to list each Entity ID you want to display, this add-on allows you to use Regex match syntax for your entities. In one tile, I include chore_
and exclude chore_elliott
to show only parent chores. In another tile, I include specifically chore_*_elliott
to separate them. It can now look like this:

Simplify Reset Automations
Again, instead of manually specifying all of the Entity IDs that we created (which is tedious as they are added/removed over time), we can use templating!
- alias: Reset Chore
description: 'Reset chores daily'
trigger:
- platform: time
at: 01:00:00
condition: []
action:
- service: homeassistant.turn_off
target:
entity_id: '{{ states.input_boolean | map(attribute=''entity_id'') | select(''match'', ''input_boolean.chore_'') | join('','') }}'
data: {}
alias: Turn off input_boolean.chore_*
mode: single
From the Automation UI, it looks like this:

In the "Then do" section, you'll see it's set to call Home Assistant's core homeassistant.turn_off
service on a templated Entity list of input_boolean
objects which match an entity_id
attribute of input_boolean.chore_
- and that's it!
This is a clean way to reset all Chore entities daily. If you want more refined control over which Chores reset daily (versus weekly/monthly), you could consider refining your Chore naming convention to indicate _daily
, _monthly
, or otherwise. You may also have a better idea, I may be fixated on this approach too much at this time.
Advanced Resetting and Chore Assignments
As mentioned, the naming convention of Chores determining how often they're reset (or even allowed to be "un-toggled" from the Dashboard) is something I'm considering.
Chore assignment rotation is also something I may consider if we even decide to use this approach. I'm looking forward to scouring the internet in the future as others share their own solutions.