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:

Full 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

Points Gauge

Update 8/31/21: I’ve recently revamped my setup a little bit. My daughter goes to her dads a few days a week every other week, which made tracking points on the weeks she was here a little more difficult. So, I used a gauge card instead of just displaying the overall points and and set different point thresholds for each gauge. Less points are needed when she isn’t here the full week and now she can see her progress.

Home Week Gauge:

Away Week Gauge:

Also, instead of hardcoding the “reset” time in the automation, I use a Date/Time Helper. I edited my automation to use the value of a date/time helper and added a card to Lovelace so I can adjust the reset time from the Lovelace if I wanted.

Restricting Access to Buttons

I added the Lovelace Restriction Card to Home Assistant via HACS. This allows me to lock my “Add 1 Point” and “Remove 1 Point” Lovelace buttons so my kids can’t add points themselves.

Viewing History of Completed Chores

If you’d like a quick and easy way to see how many chores were completed, the easiest way I could figure this out was using a history card and the mini-graph addon.

Let’s say your points script resets on Sunday night, but you forgot to see if the weekly chores were completed. With this card, you can view the history for the last 36 hours to see if number of completed chores were met.

image
entities:
  - counter.chore_counter
icon: hass:broom
hour24: false
hours_to_show: 36
name: Chore Counter History
show:
  extrema: true
  graph: bar
  icon: true
  name: true
  name_adaptive_color: true
  icon_adaptive_color: true
type: custom:mini-graph-card

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.


My Favorite Home Assistant Devices

Below are some of the Home Assistant-compatible devices I personally use in my home. I highly recommend each of them.

The full list of all Home Assistant compatible & recommended devices I use can be found on my Equipment List page.

Similar Posts

19 Comments

  1. 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!

    1. 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!

  2. 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.

    1. 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.

  3. I have two kids. If i want to use this i need to make double sets of each helper? For example input_datetime.chore_points_date_helper_kid1 & input_datetime.chore_points_date_helper_kid2 ?

    1. Does each kid have their own set of chores or share them? If each has their own, then you are correct – you would basically need do this process twice – create new input boolean chores, create a new Chore Counter helper, new scripts to add/remove points, and automations to add points when clicked or reset them. You can use the value of the date/timer helper though, so you won’t need another of those.

  4. Great writeup! I see an issue. If the kid toggles a chore on, the counter is incremented. If they then turn around and toggle it off and back on again, they get “double credit” and the counter increments again for the same chore. I’m sure my kid will find a way to game the system 🙂

    1. If you use the “Lovelace Restriction Card” you can set it up so that once the input boolean is set to on it becomes “locked”.

  5. This was a really great, straight forward, and concise write up. Thanks!

    1. Thank you! It took a lot of tinkering but I’m pretty happy with the end result. Glad you found it useful too!

      1. One question. A commentator mentioned using the Lovelace Restriction Card to “lock” a boolean once it has been toggled. I used the Restriction Card add-on (thanks to your other write up) to lock the plus, minus, and reset buttons. How could I go about locking the toggles to a single switch as mentioned above?

  6. One question. A commentator mentioned using the Lovelace Restriction Card to “lock” a boolean once it has been toggled. I used the Restriction Card add-on (thanks to your other write up) to lock the plus, minus, and reset buttons. How could I go about locking the toggles to a single switch as mentioned above?

      1. Awesome! I’ll look into that. Thank you so much!

  7. Hello, have you ever considered how to have 2 sets of “chores”? Such as daily chores that are worth 1 point and weekly chores worth 5 points? I thought I could just duplicate the action to be in my automation 5 times but that doesn’t work. I’m assuming there is an easy way to do it but I just don’t know what it is yet…?

    1. Duh… I figured it out… I had tried but I forgot to add the script after I created it… 🙂

      1. That would work. You could also create a “Add 5 Point” script, with a step increment of 5.

  8. Hi there, this guide is great, I am finding however that some of the settings are not where they should be. I’ve found the rest, but when creating the counter I can’t see a step increment at all. Have I not enabled some advanced option somewhere?

  9. What a great guide! Any thoughts on the following? We have 2 kids. Once a certrain task is done, the task should move to the next person. So Kid 1 got a reminder of a chore, did the task that day and earns the point. Rotation should kick in so the next day a reminder will be sent to kid 2 to do the chore. Kid 2 does the task and gets a point and the reminder gets rotated back to kid 1 again.

Leave a Reply

Your email address will not be published. Required fields are marked *