Full guide here (recommended reading from here - better formatting and includes all my latest updates and improvements): https://smarthomepursuits.com/chore-tracking-with-point-system-in-home-assistant/
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.