🏡 KidsChores – Family Chore Management Integration

Hello Everyone,

Now that the weekend is approaching, and it might be a nice weekend project, I’m thrilled to release KidsChores into public-preview.

KidsChores is a brand-new integration that I have been developing to help your family managing chores, rewards, and responsibilities right from Home Assistant.

KidsChores is designed to bring fun, structure, and accountability into your home. Whether you’re looking to better manage your kids’ daily routines or simply want to engage them with a rewarding system, KidsChores is here to help.

Get started today and transform how your family handles chores, rewards, and more!

:star2: KidsChores Main Features

:girl::boy: Multi-User Management

  • Profile Creation & Customization:

    • Create and manage individual profiles for multiple kids and parents.
    • Track each child’s progress, achievements, and performance with ease.
  • Effortless Management:

    • Handle multiple kids with a single integration while monitoring individual statistics and trends.

:star: CUSTOMIZABLE POINTS SYSTEM

  • Personalize the points system by choosing your own name and icon (e.g., Stars, Bucks, Coins) to better resonate with your family.

:broom: Chore Management

  • Assign & Track Chores:

    • Define chores with detailed descriptions, icons, due dates, and recurring schedules (daily, weekly, or monthly).
    • Assign tasks to one or multiple kids and monitor each chore’s status (pending, claimed, approved, overdue, etc.) in real time.
  • Dynamic Chore States & Actions:

    • Leverage dynamic buttons to claim, approve, or disapprove chores—completion with built-in authorization and contextual notifications.
    • Monitor progress with sensors that update on a per-kid and global level.

:medal_sports: Rewards, Badges, Achievements & Challenges

  • Automated Rewards & Incentives:

    • Award badges automatically when chore milestones are achieved.
    • Enhance kids motivation with badge points multipliers.
    • Track progress through streaks and cumulative totals, and even assign extra points for special achievements.
  • Reward Redemption:

    • Kids can redeem rewards using their earned points. Parental approval is required to finalize any reward, ensuring accountability.

:balance_scale: Penalty Application

  • Accountability Measures:
    • Apply penalties for missed chores or behavior, automatically adjusting points and encouraging responsibility.
    • Use penalty buttons for manual intervention when needed.

:arrows_counterclockwise: Recurring Chores

  • Scheduled Task Management:
    • Set up recurring chores with automated due date resets so that daily, weekly, or monthly tasks are always on track.

:lock: Parental Approval Workflows

  • Approval Processes:
    • Both chores and reward redemptions require parental approval, adding an extra layer of oversight.
    • Actionable notifications include contextual buttons (e.g., approve, disapprove and 30-minute reminder actions) to streamline the approval process.

:chart_with_upwards_trend: Detailed Statistics & Analytics

  • Comprehensive Sensors:

    • Track daily, weekly, monthly, and cumulative metrics on chore completions, points earned, rewards redeemed, badges awarded, penalties applied, and more.
  • Historical Data & Trends:

    • Analyze long-term progress to identify trends, celebrate improvements, or pinpoint areas that need attention.
    • Build your own statistics from the sensors available and options inside Home Assistant.

:hammer_and_wrench: Customization & User-Friendly Interface

  • :hammer_and_wrench: Dynamic Buttons & Actions:

    • Manage chores and points directly from the Home Assistant UI with buttons for claiming, approving, redeeming, and adjusting points.
  • :wrench: Easy Setup & Maintenance:

    • Enjoy a user-friendly setup wizard and comprehensive configuration menus to add, edit, or delete kids, chores, badges, rewards, penalties, achievements, and challenges.
  • :globe_with_meridians: Multilingual Support:

    • Currently available in English and Spanish to cater to a diverse user base.

:closed_lock_with_key: Security & Privacy

  • Local Data Storage:
    All data is stored securely on your Home Assistant instance, ensuring your family’s information remains private.

  • No External Data Sharing:
    Your data never leaves your local network, keeping it safe from external access.

:loudspeaker: Community Feedback

  • Community Feedback:
    Share your thoughts, feature requests, and improvements to help make KidsChores the ultimate family management tool.

IMPORTANT:

Thank you all.

Cheers :beers:

UPDATE 01: 20250207 - Public Preview Release
UPDATE 02: 20250214 - Release 0.2.0

20 Likes

From the beta testing, there is already a nice set of cards and lovelace features that you may find interesting to use on your instance.

Check the posts below:

Hi everyone,

I have almost finished this integration to a state where it can be beta tested with a Release Candidate.

If you would like to do a test drive a help me figuring out issues, improvement areas and many other aspects, I would appreciate that you share your interest on this post.

Important before applying:
Please keep in mind that for beta-testing you would be required to:

  • Provide feedback
  • Understand how to obtain integration logs
  • Be willing to may loose some of the integration data in the future, before moving into a production state.

Any question, please let me know.

Cheers :beers:

Buy Me A Coffee

I would be interested to test this out. How couls i get started?

Hi @alrassia

Thanks for the interest. I hope I can give you some details within the upcoming days.

I was just trying the whole thing on my production instance and found an issue with the update of options, whenever an user wants to add or modify data. This leads to a big issue, where only initial data is handled between restarts.

Let me fix this first and I will let you have the details for the Beta RC.

Cheers,

I’m interested in this as well!

Same here. Integration sounds nice.

Hi @alrassia , @Mtnpilot & @pdsccode

Thank you all for the interest. Sent you all a PM with details on the integration and where to get it.

Cheers

I’m interested as well.

1 Like

Done :+1:

Sent you the details on a PM.

Interested here too, I was just looking over the holidays on creating something DiY

1 Like

I’m interested to. My wife and I were looking for something like this, but in analog - so why not doing it digital :wink:

Hi everyone,

For those who may want a sneak-peak into the integration, I just finished preparing a dashboard with auto-entities and mushroom card, so every change is automatically recorded, new entities added and so on:

This is just a sample, as there are many sensors available that you may personalize everything to your liking. In my case this works just well, as my kids still do not have an HA account and I will do the claiming (with direct approval) for them.

This looks amazing! Can’t wait to try it out!

Can you provide the config you used with auto-entities to get that set up?

Count me in.

Sure.

Here is the full configuration that I am using for one of the kids, including the summary, chore status, chore approval, rewards approval, penalties and manual points.

All of this is inside one section of a Sections dashboard:

type: grid
cards:
  - type: heading
    heading: KID_NAME
    heading_style: title
  - type: entity
    entity: sensor.kid_name_faros
    unit: Faros
    name: KID_NAME
  - type: custom:mushroom-entity-card
    entity: sensor.kid_name_highest_badge
    layout: vertical
    primary_info: state
    secondary_info: none
    fill_container: false
  - type: tile
    entity: sensor.kid_name_total_chores_completed
    name: Total Chores Completed
  - type: tile
    entity: sensor.kid_name_chores_completed_today
    name: Chores Completed Today
  - type: custom:mini-graph-card
    name: KID_NAME
    entities:
      - entity: sensor.kid_name_faros
    hours_to_show: 168
    group_by: date
    smoothing: false
    show:
      state: false
      name: false
      icon: false
  - type: heading
    heading: Chore Status
    heading_style: title
  - type: custom:auto-entities
    card:
      square: false
      type: grid
      columns: 2
    card_param: cards
    filter:
      template: |-
        {% for state in states.sensor -%}
          {%- if state.entity_id | regex_match("sensor.kid_name_status_", ignorecase=False) -%}
            {{
              {
                'type': 'custom:mushroom-template-card',
                'entity': state.entity_id,
                'primary': state.attributes.friendly_name.split('Kid Name - Status - ')[1],
                'secondary': (
                  'Approved' if state.state == 'approved' else
                  'Claimed' if state.state == 'claimed' else
                  'Pending' if state.state == 'pending' else
                  'Partial' if state.state == 'partial' else
                  'Pending'
                ),
                'icon': state.attributes.icon,
                'icon_color': (
                  'green' if state.state == 'approved' else
                  'orange' if state.state == 'claimed' else
                  'grey' if state.state == 'pending' else
                  'yellow' if state.state == 'partial' else
                  'grey'
                ),
                'tap_action': {
                  'action': 'more-info'
                }
              }
            }},
          {%- endif -%}
        {%- endfor %}
      exclude: []
    sort:
      method: friendly_name
  - type: heading
    icon: ""
    heading: Approve Chores
    heading_style: title
  - type: custom:auto-entities
    card:
      square: false
      type: grid
      columns: 2
    card_param: cards
    filter:
      template: |-
        {% for state in states.button -%}
          {%- if state.entity_id | regex_match("^button\.kid_name_approve_chore.*$", ignorecase=False) -%}
            {%- set sensor_suffix = state.entity_id.split('button.kid_name_approve_chore_')[1] -%}
            {%- set sensor_id = 'sensor.kid_name_status_' + sensor_suffix -%}
            {%- if state.state == 'unknown' -%}
              {%- set secondary = 'Unknown' -%}
            {%- else -%}
              {%- set delta = now().timestamp() - as_timestamp(state.state) -%}
              {%- if delta < 3600 -%}
                {%- set secondary = '%.0f minutes ago' % (delta / 60) -%}
              {%- elif delta < 86400 -%}
                {%- set secondary = '%.0f hours ago' % (delta / 3600) -%}
              {%- else -%}
                {%- set secondary = '%.0f days ago' % (delta / 86400) -%}
              {%- endif -%}
            {%- endif -%}
            {{
              {
                'type': 'custom:mushroom-template-card',
                'entity': state.entity_id,
                'primary': state.attributes.friendly_name.split('Kid Name - Approve Chore: ')[1],
                'secondary': secondary,
                'icon': state.attributes.icon,
                'icon_color': (
                  'green' if states('sensor.kid_name_status_' + sensor_suffix) == 'approved' else
                  'yellow' if states('sensor.kid_name_status_' + sensor_suffix) == 'partial' else
                  'orange' if states('sensor.kid_name_status_' + sensor_suffix) == 'claimed' else
                  'grey'
                ),
                'tap_action': {
                  'action': 'more-info'
                },
                'hold_action': {
                  'action': 'toggle'
                }
              }
            }},
          {%- endif -%}
        {%- endfor %}
    sort:
      method: friendly_name
  - type: heading
    icon: ""
    heading: Approve Rewards
    heading_style: title
  - type: custom:auto-entities
    card:
      square: false
      type: grid
      columns: 2
    card_param: cards
    filter:
      template: |-
        {% for state in states.button -%}
          {%- if state.entity_id | regex_match("^button\.kid_name_approve_reward.*$", ignorecase=False) -%}
            {{
              {
                'type': 'custom:mushroom-template-card',
                'entity': state.entity_id,
                'primary': state.attributes.friendly_name.split('Kid Name - Approve Reward: ')[1],
                'icon': state.attributes.icon,
                'icon_color': 'blue',
                'tap_action': {
                  'action': 'more-info'
                },
                'hold_action': {
                  'action': 'toggle'
                }
              }
            }},
          {%- endif -%}
        {%- endfor %}
    sort:
      method: friendly_name
  - type: heading
    icon: ""
    heading: Penalties
    heading_style: title
  - type: custom:auto-entities
    card:
      square: false
      type: grid
      columns: 2
    card_param: cards
    filter:
      template: |-
        {% for state in states.button -%}
          {%- if state.entity_id | regex_match("^button\.kid_name_apply_penalty.*$", ignorecase=False) -%}
            {{
              {
                'type': 'custom:mushroom-template-card',
                'entity': state.entity_id,
                'primary': state.attributes.friendly_name.split('Kid Name - Apply Penalty: ')[1],
                'icon': state.attributes.icon,
                'icon_color': 'blue',
                'tap_action': {
                  'action': 'toggle'
                },
                'hold_action': {
                  'action': 'more-info'
                }
              }
            }},
          {%- endif -%}
        {%- endfor %}
    sort:
      method: friendly_name
  - type: heading
    icon: ""
    heading: Manual Points
    heading_style: title
  - type: custom:auto-entities
    card:
      square: false
      type: grid
      columns: 2
    card_param: cards
    filter:
      template: |-
        {% for state in states.button -%}
          {%- if state.entity_id | regex_match("^button\.kid_name_\d+_faros(?:_\d+)?$", ignorecase=False) -%}
            {{
              {
                'type': 'custom:mushroom-template-card',
                'entity': state.entity_id,
                'primary': state.attributes.friendly_name.split('Kid Name ')[1],
                'icon': state.attributes.icon,
                'icon_color': 'blue',
                'tap_action': {
                  'action': 'toggle'
                },
                'hold_action': {
                  'action': 'more-info'
                }
              }
            }},
          {%- endif -%}
        {%- endfor %}
    sort:
      method: domain
      numeric: true
      ignore_case: false
      reverse: false

You just need to replace kid_name_ and Kid Name with the details from your Kid name and faros with you current points name on the integration, so the sensors/entities can directly match the templates!

Hope it helps

i’m very interested in helping out test this, it looks amazing

Hi,

Latest requires for beta-testing got the information sent.

My plan is to release this in the next 2 weeks, so if in the meanwhile some of you find something, please let me know at the earliest.

Cheers

Hi everyone,

@OptimusGREEN @alrassia @Mtnpilot @pdsccode @ccpk1 @marcelo002 @ptC7H12 @jmb123

So I just made a new beta release.

You should have it available on HACS already. If you have any issues while trying to update (for me, HACS was not showing the update button), just hit redownload from HACS and select version 0.1.1-beta-rc2.

Cheers

2 Likes