Chore Tracking with Point System in Home Assistant

by Danny
4 comments

In this guide, I’m going to show you how to create your own chore or task tracker within Home Assistant, using only default Home Assistant features – no third-party products or additional addons/integrations are needed. You can optionally assign a point value to each chore, allowing your kids to earn “points” for completing their tasks. I consider this setup to be similar to a sticker chart or reward system.

This setup has several moving parts, but I will document each step in detail so you can recreate it yourself. We will be creating Home Assistant Scripts, Helpers, Automations, and using Counters for this.

By the end of the guide, you will have created:

  • Toggleable chores in a lovelace card
  • Incrementing points after a task is complete
  • Grid card with buttons to add, remove, or reset the counter
  • Automations to reset daily chores & reset points counter weekly
  • Automation to send notification once daily chores are complete
  • Automation to send notification when point threshold is reached, earning your child their allowance

I also wanted to give credit where credit is due, so thanks /u/brandroidian for the inspiration. I first stumbled upon this Reddit thread a few months ago and loved the idea. He didn’t have a points system for it, so I wanted to expand on his idea a little.


Step 1: Create “Input Booleans” for Chores

The first thing we need to do is create a few chores. To do this, we are using input booleans, which are basically going to be dummy entities that can be triggered from a script later on.

Navigate to Configuration > Helpers. Click Add Helper.

Choose the Toggle helper and give it name. I already have chore_1 – 7 created, so for this example I’m using chore_8.

I recommend naming them chore_1, chore_2, chore_3, etc, as this is what the Entity ID will be named. If you name the entity something like Sweep_Kitchen at this step, your entity will end up being input_boolean.sweep_kitchen. This isn’t necessarily a problem, but when it comes to adding chores to the Lovelace card, it will be easier to search for and add chores 1-5 to the entities card, rather than trying to remember the exact entity name.

You can choose an icon if you’d like, but this can be customized later on so I wouldn’t worry about it here. You can now see the Entity ID it created.

Click the entity so you can name it something useful, like “Sweep Kitchen” and click Update.

Now, you have a easy to remember chore name but the entity ID is short and easy to find later on.

To start, I recommend creating 3-5 chores. You can always add more later.


Step 2: Create an entities card

Optional: If you will be using this for your kids, I recommend creating a new view for each child.

Click Add Card > Entities.

Name it something like “Morning Chores”, uncheck Show Header Toggle, toggle Color Icons by State, and then add your chore_8 entity. Add the rest of your chore entities.


Step 3: Create a Chore Counter for Points/Reward System

Navigate to Configuration > Helpers. Click Add Helper, and choose “Counter“.

Name it Chore Counter, set initial value to 0, and Step Size to 1 (This will add 1 point each time a chore is completed).

Step 4: Create Add, Remove, and Reset Counter Scripts

Next, we need to create a few scripts. This is so we can trigger adding points from button clicks and automations.

Navigate to Configuration > Scripts > Add Script.

Add 1 Point Script

Name: Add 1 Point

Icon: hass-plus-thick

Under Sequence, choose call service and counter.increment.


Remove 1 Point Script

Name: Remove 1 Point

Icon: hass:minus-thick

Under Sequence, choose call service and counter.decrement.


Reset Points Script

Name: Reset Points

Icon: hass:backup-restore

Under Sequence, choose call service and counter.reset.


Step 5: Create Lovelace Grid card to Add, Remove, or Reset Counter

Navigate to your child’s view again. Click Add Card > Grid. This will add a grid of helpful cards to allow you or your child to add, remove, or reset points. For box 4, we can set instructions and for box 5, you show the number of points your child has earned.

Set Columns to 3. Click the + button to add 5 cards to the grid.

Boxes 1-3 are button cards.
Box 4 is a markdown card.
Box 5 is an entity.

Here are the 5 grid cards I created.

Go ahead and test out your buttons. It should now add, remove, and reset your counter correctly and the points will be visible in box 5.

Step 6: Create Automations

Automation#1: Increment counter once chore is completed

It’s great that we can now add add points from Lovelace, but I want to avoid having my kids need to toggle the chore as complete, and then click a button. So let’s automate that.

Configuration > Automations > Create Automation.

Name it something like “If task complete, then add 1 point”

For triggers, choose State and the entity of your chore. Add “On” to the To field. If you have 5 chores, you will add 5 triggers.

For Actions, choose call service and use the script you just created called script.add_one_point.

Here is the full yaml if you’d prefer to just copy and paste this into the automation

alias: If Task Complete Then Add 1 Point
description: ''
trigger:
  - platform: state
    entity_id: input_boolean.chore_1
    to: 'on'
  - platform: state
    entity_id: input_boolean.chore_2
    to: 'on'
  - platform: state
    entity_id: input_boolean.chore_3
    to: 'on'
  - platform: state
    entity_id: input_boolean.chore_4
    to: 'on'
  - platform: state
    entity_id: input_boolean.chore_5
    to: 'on'
  - platform: state
    entity_id: input_boolean.chore_6
    to: 'on'
  - platform: state
    entity_id: input_boolean.chore_7
    to: 'on'
condition: []
action:
  - service: script.add_one_point
mode: single
max: 10

To test, go back to your child’s view and toggle a chore on and off. It should successfully add a point to your counter. Toggling off with do nothing – it won’t add or remove points.

Automation #2: Reset chores at 1am

This one was a fun automation to create. You can either hardcode a time to reset the entity state to off in the automation, or, if you’d like to be able to change the time from lovelace, you can create a date/time helper.

I’ll show you how to create the helper in this example. For this automation, you can set the time from Lovelace to reset the state of the chores to Off at 1am. Here’s what a date/time helper looks like in Lovelace:

Configurations > Helpers > Add Helper > Date and/or time

Name it Chore Date Helper and choose time only.

Then, add this as an entity to your existing “Morning Chores” entities card.

Now, create a new automation. Name it “Reset Chores“, give it a Trigger Type of value of a date/time helper, and choose the input_datetime.chore_date_helper

Conditions: Time Fixed Time, Fixed Time and toggle Monday-Sunday.

Actions: call service using service anem “input_boolean.turn_off”

Targets: Pick entity (Chore 1-5)

And here is the full yaml for this automation:

alias: 'Reset Chores'
description: ''
trigger:
  - platform: time
    at: input_datetime.chore_points_date_helper
condition:
  - condition: time
    weekday:
      - mon
      - tue
      - wed
      - thu
      - fri
      - sat
      - sun
action:
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.chore_1
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.chore_2
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.chore_3
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.chore_4
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.chore_5
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.chore_6
  - service: input_boolean.turn_off
    data: {}
    entity_id: input_boolean.chore_7
mode: single

To test this out, go back to Lovelace, toggle on your chores, and then set the value of the date/time helper to 1 minute ahead of what time it is now. Once the automation triggers, it should turn off the chores. You will eventually want this time to something overnight so the chore tracker resets before they wake up the next day.

Automation #3: Reset Points Weekly

This is similar to automation #2, except we are resetting points once per week instead of daily. We can still use the date/time helper which is great, we will just tell it to only run on Mondays at 1am.

Create a new automation and name it Reset Chore Counter.

Under Conditions, toggle Monday only.

Under Actions, call service and choose counter.reset. Choose Pick entity and select chore counter.

Full yaml:

alias: 'Reset Chore Counter'
description: ''
trigger:
  - platform: time
    at: input_datetime.chore_points_date_helper
condition:
  - condition: time
    weekday:
      - mon
action:
  - service: counter.reset
    target:
      entity_id: counter.chore_counter
mode: single

Automation #4: If points threshold is reached, send me a notification

This automation will let you know once your kid has reached your arbitrary “number” of points needed to earn their allowance (or whatever reward system you choose). Again, very similar to rewarding a child for filling up a sticker chart. If they have 5 chores a day to complete, they earned 5 points. 5 points x 7 days a week = 35 points.

Give it a name. Under Triggers, choose Numeric State and set to 34 (or one less than your arbitrary number). This is so you the automation triggers once it hits 35 points.

Under Actions, send a notification:

Fully yaml:

alias: Chore Points Threshold Reached
description: ''
trigger:
  - platform: numeric_state
    entity_id: counter.chore_counter
    above: '34'
condition: []
action:
  - device_id: b9ae47b5fe201965b76b088888888
    domain: mobile_app
    type: notify
    title: Daughter has completed her weekly chores!
    message: Reminder to take daughter out for ice cream!
mode: single

Wrapping Up

This was an incredibly fun project to work on. Prior to this, I had never used helpers, scripts, or counters. It was a great learning experience, and I hope you guys find it useful as well!

As I created this, I realized this can definitely be expanded upon for things other than just your kids chores. For example, create tasks for mowing the lawn, taking medicine, or washing the car. I use the app TickTick for my own personal checklist, but having a few repetitive things directly in Home Assistant is pretty awesome.

Good luck! Let me know if you have any questions or run into any issues along the way.

4 comments

You may also like

4 comments

Jace June 4, 2021 - 11:37 pm

Nice cool write up for chores. Been looking for a good starting point and you brought it! I have a question…
I added another counter with a step value of 25 which I wanted it to be 25 cents. So it works fine, but can you help me with the entity card showing the counter itself? Is there a way to have it treated like money, instead of numbers. Now I see 25, 50 etc. Is there a way to have it say $0.25, – $1.00 and so on.
Thank you much!

Reply
Danny June 8, 2021 - 2:03 am

Thank you! It took a lot of trial and error but I’m pretty happy with the end result. I did play around with decimals/dollar amounts but was unsuccessful. The lowest step interval we can increase by is 1. The closest thing I could come up with was:

1. Edit the Grid Card. Change the “Points” card name to “Money” and changed the points card icon to hass:cash
2. Edited my automations to only add 1 point once 4 chores were complete (assuming each chore is worth .25 cents = $1 earned).

If I come up with a better method in the future, I’ll let you know!

Reply
Thomas June 7, 2021 - 3:24 pm

Great writeup! I really like that you are not using third party addons of integrations because in my opion they could interfere with the HA upgrades. I’m thinking of using this for our chores list in the student house I’m currently living.

Do you think it possible to use concepts from this article to make something like https://github.com/bruxy70/Garbage-Collection ? I want to implement something like for a while now.

Reply
Danny June 8, 2021 - 1:55 am

I don’t use garbage collection myself, but you could definitely add “take out trash” as a chore and configure an automation to alert you if the trash hasn’t been taken out by a certain time.

Reply

Leave a Comment