I’ve released an integration to help manage household chores and thought I would share it with the community.
Chore helper has had several feature releases lately and has been stable for me, though I don’t have much feedback from other users yet. Version 0.5.0 was just released with additional features and bug fixes.
This integration adds a new Helper to Home Assistant named Chore. Chores are heavily inspired by and originally based on the Garbage Collection integration, so scheduling them works in a fairly similar manner with additional options.
Example chores you could create:
- “Mow the lawn” - 2 weeks after it was last mowed, only on Saturdays, starting in April and ending in November
- “Change the HVAC filter” - 1 month after it was last changed, marked complete by an automation listening to the state of a contact sensor on your filter cover
- “Pay bill” - scheduled manually via automation for 2 weeks after you get a bill notification email from the provider
- “Clean my hard drive” - scheduled via automation when your hard drive space is above 70%, marked complete via automation when your hard drive space drops below 60%
There is absolutely nothing wrong with the Garbage Collection integration, it’s wonderful, however Chore Helper can also be used for garbage collection if you don’t want to use both integrations. Just note that there are a few differences currently in how you would set it up in Chore Helper:
- Given that you’re tracking the chore to put the garbage out, not the actual collection, I’d recommend making the due date 1 day before collection.
- Unlike Garbage Collection, chores don’t complete themselves automatically. You can use an automation that completes the garbage collection chore when the state is -1, since that means your garbage collection is over and would advance it to the next date.
The idea behind this integration is to recreate the basic functionality that I use from the Tody app on my phone in Home Assistant so that the data can be available on my home displays, used in automations and notifications, and shown in a calendar view. Grocy offers chore scheduling as well, but a home ERP is a bit heavy of a solution for my needs, and I wanted to see if I could make something purely as a Home Assistant component.
Chores can be scheduled to recur “every N days/weeks/months/years” (scheduled based on start date), “after N days/weeks/months/years” (scheduled based on completion date), or can be scheduled manually via a service call. Each type of scheduling offers different options available in the UI, such as week numbers and days of the week for monthly chores. The options can be updated at any time.
A chore calendar is automatically created containing events for the next due date of each chore, as well as projected future due dates. Chores have a setting to be hidden from the calendar as well.
Unlike Garbage Collection, chores are never completed automatically, only by calling the “chore_helper.complete” service. This means that chore due dates can be in the past, signifying an overdue chore. The main state is a positive or negative number of days away from the due date, and there are attributes indicating the next due date, the last completion date, whether the task is overdue, the number of days overdue, as well as any active date offsets, manually-added dates, and manually-removed (e.g. skipped) dates.
There are services for completing a chore, adding a manual date to a chore, removing a date from a chore (e.g. skipping a due date), offsetting the due date of a chore by a number of days, and triggering an update of the state of a chore.
Icons can be set for each chore in various states so you can visually see what’s in the future, due tomorrow, due today, or overdue.
There is a known issue I haven’t resolved yet related to how bare dates show in the Home Assistant UI–they always appear a day early for some reason, even though the underlying value is correct and shows up right on the calendar. For example, the due date in the screenshot below is actually 4/10/2023, but it shows as the 9th within the attributes. I don’t know why this happens yet.
I’m actively working on better documentation as well as implementing missing functionality and considering some new ideas, such as:
- Optional due times so that a chore can be due at a certain time on the due date
- The concept of chore assignments (still working out how this should function)
- A device for each chore which encapsulates additional entities, such as buttons for completing or skipping a chore so that you can use the integration without manually calling services
- An option to show overdue tasks on today’s calendar date
I will also be working on a Chore Cards repository soon, offering ready-made cards for single chores as well as lists of chores.
Feel free to weigh in with your thoughts on these ideas, or your own ideas!
I’ve been using Auto Entities to create filtered cards of chores with a tap action of calling the complete service. It works quite well! Here is a screenshot of the cards in action the code that creates them:
There would be an Overdue card here if I had overdue chores to show. Also, I’m using card themes for slight color differences in this example, but I didn’t include them in this code for portability
- type: custom:auto-entities
card:
type: entities
title: Overdue
filter:
include:
- integration: chore_helper
state: "< 0"
options:
tap_action:
action: call-service
service: chore_helper.complete
service_data:
entity_id: this.entity_id
sort:
method: state
numeric: true
show_empty: false
- type: custom:auto-entities
card:
type: entities
title: Today
filter:
include:
- integration: chore_helper
state: "= 0"
options:
tap_action:
action: call-service
service: chore_helper.complete
service_data:
entity_id: this.entity_id
sort:
method: state
numeric: true
show_empty: false
- type: custom:auto-entities
card:
type: entities
title: Upcoming
state_color: true
show_header_toggle: true
filter:
include:
- integration: chore_helper
state 1: "> 0"
state 2: "<= 7"
options:
tap_action:
action: call-service
service: chore_helper.complete
service_data:
entity_id: this.entity_id
sort:
method: state
numeric: true
show_empty: false
Screenshots:
Note: You can name the chores whatever you want when first creating them, the name field is just not available when editing existing chores.