Auto Populating Dashboard for Kids Chores (Legacy Beta Users) #36
Replies: 5 comments 4 replies
-
Nice one dude. I'll get a look at this at some point as it looks real nice. thanks |
Beta Was this translation helpful? Give feedback.
-
🔄 Updated for Entity Name Changes in Version 0.1.8 🔄🏡 Kids Chores and Rewards DashboardA dashboard designed to work with Kids Chores, allowing children to easily track and claim their tasks and rewards, while parents can monitor progress, apply penalties and rewards, and approve completed chores. 🌟 OverviewKids can easily track and claim their tasks while parents can approve progress, apply penalties, and redeem rewards. This system provides: 📌 Features at a GlanceFor Kids 🧒✅ View and claim chores based on morning, daily, or overdue categories. For Parents 👩👦✅ Approve or deny completed chores with a simple hold action. 🎨 Kids Chore Dashboard🏠 OverviewThe Kids Dashboard is designed to give a simple, engaging interface for tracking chores, points, and rewards. It encourages kids to stay on top of their responsibilities in a fun, structured way. 🔹 Dashboard Sections1️⃣ Points & Progress Tracking
2️⃣ Chores Section ("Hold to Claim")
3️⃣ Rewards Section ("Hold to Redeem")
👩👦 Parent Chore Dashboard🏠 OverviewThe Parent Dashboard provides full control over chore approvals, penalties, and manual point adjustments. Parents can review pending approvals, apply penalties for missed tasks, and manually adjust points. 🔹 Features
📌 Parent Dashboard Sections1️⃣ Approvals Section ("Hold to Approve")
2️⃣ Penalties Section ("Hold to Apply")
3️⃣ Manual Points Adjustment
4️⃣ Activity Log (7-Day History)
🔧 How to Implement This DashboardFollow these steps to integrate the Kids Chore & Reward Dashboard into Home Assistant. 📌 Step 1: Install Custom CardsThis dashboard requires custom frontend cards to function correctly.
📌 Step 2: Create a New Section DashboardTo keep the dashboard organized, create a separate section for chore tracking. You can skip this step if you have an existing location you want to use.
📌 Step 3: Add the Kids Dashboard YAML
type: grid
cards:
- type: grid
square: false
columns: 1
cards:
- type: heading
heading: KIDNAME
heading_style: title
- type: grid
square: false
columns: 2
cards:
- type: entity
entity: sensor.kc_kidname_points
unit: Points
name: KIDNAME
- type: custom:mushroom-entity-card
entity: sensor.kc_kidname_highest_badge
layout: vertical
primary_info: state
secondary_info: none
fill_container: true
- type: tile
entity: sensor.kc_kidname_chores_completed_weekly
name: Weekly Progress
- type: tile
entity: sensor.kc_kidname_chores_completed_daily
name: Today's Progress
icon: mdi:clipboard-check-outline
- type: custom:mini-graph-card
name: Points
entities:
- entity: sensor.kc_kidname_points
hours_to_show: 168
group_by: date
smoothing: false
show:
state: false
name: true
icon: true
- type: heading
icon: mdi:check-circle
heading: "-------------------- Chores (Hold to Claim) --------------------"
heading_style: title
- type: custom:auto-entities
card:
square: false
type: grid
columns: 2
card_param: cards
filter:
template: >-
{%- set ns = namespace(Kid_name='', overdue_buttons=[],
am_buttons=[], pm_buttons=[], other_buttons=[], complete_buttons=[],
heading_card_blank='') -%} {%- set ns.Kid_name = 'Kidname' -%}
{%- set ns.heading_card_blank =
{
'type': 'heading',
'icon': ' ',
'heading': '',
'heading_style': 'title',
}
-%} {#-- Build a list of button entities for this kid --#} {%- set
prefix = 'button\\.kc_' ~ (ns.Kid_name|lower) ~ '_chore_claim_'
-%} {%- set buttons = states.button | selectattr('entity_id',
'match', '^' ~ prefix) | list -%}
{#-- Use namespace to persist changes across loop iterations --#}
{%- for button in buttons -%}
{%- set today_00 = as_timestamp(now().date()) -%}
{%- set today_12 = today_00 + (12 * 60 * 60) -%}
{%- set today_24 = today_00 + ((24 * 60 * 60) - 1) -%}
{%- set chore_sensor_id = button.entity_id | regex_replace('^button\\.kc_', 'sensor.kc_') | regex_replace('_claim_', '_status_') -%}
{%- set sensor_state = states(chore_sensor_id) -%}
{%- set due_date_str = state_attr(chore_sensor_id, 'due_date') -%}
{%- if sensor_state == 'overdue' -%}
{%- set ns.overdue_buttons = ns.overdue_buttons + [button] -%}
{%- elif sensor_state == 'claimed' or sensor_state == 'approved' or sensor_state == 'partial' -%}
{%- set ns.complete_buttons = ns.complete_buttons + [button] -%}
{%- else -%}
{%- if due_date_str is not none and due_date_str != 'unknown' -%}
{%- set due_date_ts = as_timestamp(due_date_str) -%}
{%- if today_00 <= due_date_ts < today_24 -%}
{%- if due_date_ts < today_12 -%}
{%- set ns.am_buttons = ns.am_buttons + [button] -%}
{%- elif due_date_ts < today_24 -%}
{%- set ns.pm_buttons = ns.pm_buttons + [button] -%}
{%- else -%}
{%- set ns.other_buttons = ns.other_buttons + [button] -%}
{%- endif -%}
{%- else -%}
{%- set ns.other_buttons = ns.other_buttons + [button] -%}
{%- endif -%}
{%- else -%}
{%- set ns.other_buttons = ns.other_buttons + [button] -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}
{%- set button_groups = [
{'name': '!!!!!!!!!!! Overdue !!!!!!!!!!!', 'buttons': ns.overdue_buttons, 'icon': 'mdi:alert-octagon'},
{'name': '---------- Morning ----------', 'buttons': ns.am_buttons, 'icon': 'mdi:alarm'},
{'name': '----------- Daily -----------', 'buttons': ns.pm_buttons, 'icon': 'mdi:weather-sunset-down'},
{'name': '---------- Anytime ----------', 'buttons': ns.other_buttons, 'icon': 'mdi:calendar-question'},
{'name': '---------- Complete ----------', 'buttons': ns.complete_buttons, 'icon': 'mdi:check-all'}
] -%}
{%- for group in button_groups -%}
{%- if group.buttons | length > 0 -%}
{%- set heading_card =
{
'type': 'heading',
'icon': group.icon,
'heading': group.name,
'heading_style': 'title',
}
-%}
{{- heading_card -}},
{{- ns.heading_card_blank -}},
{%- for button in group.buttons -%}
{%- set chore_sensor_id = button.entity_id | regex_replace('^button\\.kc_', 'sensor.kc_') | regex_replace('_claim_', '_status_') -%}
{%- set streak_chore_sensor_id = chore_sensor_id | regex_replace('_status_', '_streak_') -%}
{%- set primary = button.attributes.friendly_name.split(' - ')[2]~ (' (S)' if state_attr(chore_sensor_id, 'shared_chore') else '') -%}
{%- if button.state not in ['unknown', 'unavailable', 'error'] -%}
{%- set ts_diff = (now().timestamp() - as_timestamp(button.state)) | float(0) -%}
{%- set last_update = (
'%.0f minutes ago' % (ts_diff / 60)
if ts_diff < 3600 else
'%.0f hours ago' % (ts_diff / 3600)
if ts_diff < 86400 else
'%.0f days ago' % (ts_diff / 86400)
) -%}
{%- else -%}
{%- set last_update = '' -%}
{%- endif -%}
{%- set points = state_attr(chore_sensor_id, 'default_points') | string -%}
{%- set streak = states(streak_chore_sensor_id) | string -%}
{%- set secondary = 'Points: ' + points + '\n' + 'Streak: ' + streak + '\n' + 'Last: ' + last_update -%}
{{
{
'type': 'custom:mushroom-template-card',
'entity': button.entity_id,
'primary': primary,
'multiline_secondary': 'false',
'secondary': secondary,
'icon': button.attributes.icon,
'icon_color': (
'green' if states(chore_sensor_id) == 'approved' else
'yellow' if states(chore_sensor_id) == 'partial' else
'orange' if states(chore_sensor_id) == 'claimed' else
'red' if states(chore_sensor_id) == 'overdue' else
'grey'
),
'tap_action': {
'action': 'more-info'
},
'hold_action': {
'action': 'toggle'
},
}
}},
{%- endfor -%}
{%- if (group.buttons | length is odd) -%}{{ ns.heading_card_blank }},{%- endif -%}
{%- endif -%}
{%- endfor -%}
- type: heading
icon: mdi:star-settings
heading: "------------------ Rewards (Hold to Redeem) ------------------"
heading_style: title
- type: custom:auto-entities
card:
square: false
type: grid
columns: 2
card_param: cards
filter:
template: >-
{%- set ns = namespace(Kid_name='') -%} {%- set ns.Kid_name =
'Kidname' -%}
{%- set prefix = 'button\\.kc_' ~ (ns.Kid_name|lower) ~
'_reward_claim_'-%} {%- set buttons = states.button |
selectattr('entity_id', 'match', '^' ~ prefix) | list -%}
{%-for button in buttons -%}
{%- set reward_status_sensor_id = button.entity_id | regex_replace('^button\\.kc_', 'sensor.kc_') | regex_replace('_claim_', '_status_') -%}
{%- set reward_claims_sensor_id = reward_status_sensor_id | regex_replace('_status_', '_claims_') -%}
{%- set reward_approvals_sensor_id = reward_claims_sensor_id | regex_replace('_claims_', '_approvals_') -%}
{%- set primary = button.attributes.friendly_name.split(' - ')[2] -%}
{%- set cost = state_attr(reward_status_sensor_id, 'cost') -%}
{%- set claims = states(reward_claims_sensor_id) | string if states(reward_claims_sensor_id) != 'unknown' else 'N/A' -%}
{%- set approvals = states(reward_approvals_sensor_id) | string if states(reward_approvals_sensor_id) != 'unknown' else 'N/A' -%}
{%- set secondary = 'Cost: ' + (cost | string if cost else 'N/A') + '\n' + 'Claims: ' + claims + '\n' + 'Approved: ' + approvals-%}
{{
{
'type': 'custom:mushroom-template-card',
'entity': button.entity_id,
'primary': primary,
'secondary': secondary,
'multiline_secondary': 'false',
'icon': button.attributes.icon,
'icon_color': 'blue',
'tap_action': {
'action': 'more-info'
},
'hold_action': {
'action': 'toggle'
}
}
}},
{%- endfor -%}
sort:
method: friendly_name
📌 Step 4: Find and Replace "Kidname"Since this YAML uses a placeholder name, update it to match your child's name.
Note - If you are using something other than "points" for tracking, you will also need to do a find / replace of all versions being sure to match case. 📌 Step 5: Add the Parent Dashboard YAML
type: grid
cards:
- type: grid
square: false
columns: 1
grid_options:
columns: full
cards:
- type: heading
heading: KIDNAME PARENT
heading_style: title
- type: heading
icon: mdi:thumb-up
heading: "--------------- Approvals (Hold to Approve) ---------------"
heading_style: title
- type: custom:auto-entities
card:
square: false
type: grid
columns: 2
card_param: cards
filter:
template: >-
{%- set ns = namespace(Kid_name='', approve_chore_buttons=[],
approve_reward_buttons=[], heading_card_blank='',
has_approvals='false') -%} {%- set ns.Kid_name = 'Kidname' -%}
{%- set ns.heading_card_blank =
{
'type': 'heading',
'icon': ' ',
'heading': '',
'heading_style': 'title',
}
-%} {#-- Build a list of button entities for this kid --#} {%-
set prefix_pattern = 'button\\.kc_' ~ (ns.Kid_name|lower)
~'_(chore|reward)_(approval|disapproval)_' -%} {%- set buttons =
states.button | selectattr('entity_id', 'match', prefix_pattern) |
list-%}
{#-- Use namespace to persist changes across loop iterations --#}
{%- for button in buttons -%}
{%- set button_type = 'chore' if '_chore_' in button.entity_id else 'reward' -%}
{%- set sensor_id = button.entity_id | regex_replace('^button\\.kc_', 'sensor.kc_') | regex_replace('_(approval|disapproval)_', '_status_') -%}
{%- set sensor_state = states(sensor_id) -%}
{#-- Add to appropriate list if the state is 'claimed' --#}
{%- if sensor_state == 'claimed' -%}
{%- if button_type == 'chore' -%}
{%- set ns.approve_chore_buttons = ns.approve_chore_buttons + [button] -%}
{%- else -%}
{%- set ns.approve_reward_buttons = ns.approve_reward_buttons + [button] -%}
{%- endif -%}
{%- endif -%}
{%- endfor -%}
{%- set button_groups = [
{'name': '---------- Chores ----------', 'buttons': ns.approve_chore_buttons, 'icon': 'mdi:thumb-up-outline'},
{'name': '---------- Rewards----------', 'buttons': ns.approve_reward_buttons, 'icon': 'mdi:thumb-up-outline'},
] -%}
{%- for group in button_groups -%}
{%- if group.buttons | length > 0 -%}
{%- set ns.has_approvals = 'true' -%}
{%- set heading_card =
{
'type': 'heading',
'icon': group.icon,
'heading': group.name,
'heading_style': 'title',
}
-%}
{{- heading_card -}},
{{- ns.heading_card_blank -}},
{%- for button in group.buttons -%}
{%- set sensor_id = button.entity_id | regex_replace('^button\\.kc_', 'sensor.kc_') | regex_replace('_(approval|disapproval)_', '_status_') -%}
{%- set primary = button.attributes.friendly_name | regex_replace('^[^-]+ - ([^ ]+) .* - (.*)$', '\\1: \\2') -%}
{{
{
'type': 'custom:mushroom-template-card',
'entity': button.entity_id,
'primary': primary,
'icon': button.attributes.icon,
'icon_color': (
'green' if states(sensor_id) == 'approved' else
'yellow' if states(sensor_id) == 'partial' else
'orange' if states(sensor_id) == 'claimed' else
'red' if states(sensor_id) == 'overdue' else
'grey'
),
'tap_action': {
'action': 'more-info'
},
'hold_action': {
'action': 'toggle'
},
}
}},
{%- endfor -%}
{%- if (group.buttons | length is odd) -%}{{ ns.heading_card_blank }},{%-endif -%}
{%- endif -%}
{%- endfor -%} {%- if ns.has_approvals == 'false' -%}
{%- set heading_card =
{
'type': 'heading',
'icon': 'mdi:block-helper',
'heading': '--------- None Available ---------',
'heading_style': 'title',
}
-%}
{{- heading_card -}},
{{- ns.heading_card_blank -}},
{%- endif -%}
- type: heading
icon: mdi:cash-remove
heading: "------------------ Penalties (Hold to Apply) -----------------"
heading_style: title
- type: custom:auto-entities
card:
square: false
type: grid
columns: 2
card_param: cards
filter:
template: >-
{%- set ns = namespace(Kid_name='') -%}
{%- set ns.Kid_name = 'Kidname' -%}
{#-- Build a list of button entities for this kid --#}
{%- set prefix_pattern = 'button\\.kc_' ~
(ns.Kid_name|lower)~'_penalty_' -%}
{%- set buttons = states.button | selectattr('entity_id', 'match',
prefix_pattern) | list-%}
{% for button in buttons -%}
{%- set sensor_id = button.entity_id | regex_replace('^button\\.kc_', 'sensor.kc_') | regex_replace('_penalty_', '_penalties_applied_') -%}
{%- set primary = button.attributes.friendly_name |regex_replace("^[^-]+ - .*? (Penalty) - (.*)$", "\\1: \\2") -%}
{%- set penalty_points = state_attr(sensor_id, 'penalty_points') -%}
{%- set penalties_applied = states(sensor_id) -%}
{%- set secondary = 'Penalty: ' + (penalty_points | string if penalty_points else 'N/A') + '\n' + 'Count: ' + penalties_applied-%}
{{
{
'type': 'custom:mushroom-template-card',
'entity': button.entity_id,
'primary': primary,
'secondary': secondary,
'multiline_secondary': 'false',
'icon': button.attributes.icon,
'icon_color': 'blue',
'tap_action': {
'action': 'more-info'
},
'hold_action': {
'action': 'toggle'
}
}
}},
{%- endfor %}
sort:
method: friendly_name
- type: heading
icon: mdi:plus-circle-multiple
heading: "----------------- Manual Points (Hold to Apply) -----------------"
heading_style: title
- type: custom:auto-entities
card:
square: false
type: grid
columns: 2
card_param: cards
filter:
template: >-
{%- set ns = namespace(Kid_name='', button_list=[]) -%} {%- set
ns.Kid_name = 'Kidname' -%}
{#-- Build a list of button entities for this kid --#}
{%- set prefix_pattern = 'button\\.kc_' ~
(ns.Kid_name|lower)~'(.*?)_points$' -%}
{%- set buttons = states.button | selectattr('entity_id', 'match',
prefix_pattern) | list-%}
{% for button in buttons -%}
{{
{
'type': 'custom:mushroom-template-card',
'entity': button.entity_id,
'primary': button.attributes.friendly_name.split(ns.Kid_name + ' ')[1],
'icon': button.attributes.icon,
'icon_color': 'blue',
'tap_action': {
'action': 'more-info'
},
'hold_action': {
'action': 'toggle'
}
}
}},
{%- endfor %}
sort:
method: domain
numeric: true
ignore_case: false
reverse: false
- type: heading
icon: mdi:clipboard-text
heading: "------------------------ Activity Log (7 Day) ------------------------"
heading_style: title
- type: custom:auto-entities
card:
square: false
type: grid
columns: 1
card_param: cards
filter:
template: >-
{%- set ns = namespace(Kid_name='', entity_list=[]) -%} {%- set
ns.Kid_name = 'Kidname' -%}
{#-- Build a list of entities for this kid --#} {%- set
prefix_pattern = '(button|sensor)\\.kc_' ~ (ns.Kid_name|lower) ~ '_'
-%} {%- set entities = (states.button | selectattr('entity_id',
'match', prefix_pattern) | list) + (states.sensor |
selectattr('entity_id', 'match', prefix_pattern) | list) -%}
{%- for entity in entities -%}
{%- set ns.entity_list = ns.entity_list + [entity.entity_id] -%}
{%- endfor -%} {{
{
'type': 'logbook',
'title': '',
'hours_to_show': 168,
'target': {
'entity_id': ns.entity_list
},
}
}},
📌 Step 6: Find and Replace AgainSince the parent dashboard also references
Note - If you are using something other than "points" for tracking, you will also need to do a find / replace of all versions being sure to match case. 🎯 Finalizing the Dashboard
Your Kids Chore & Reward Dashboard is now fully functional in Home Assistant! 🎉 📌 Need help? Drop a comment below! 🚀 |
Beta Was this translation helpful? Give feedback.
-
I've done my dashboard slightly differently, my youngest is only just 5 so my focus was on colour coding. It makes up part of our larger dashboard which displays in our kitchen.
Not sure if it's helpful to anyone but this is the code
|
Beta Was this translation helpful? Give feedback.
-
I've modified @ccpk1 dashboard, while also taking idea's from @lkkliffen My kids don't care about badges so removed that section, got rid of the point graph to be able to have points, weekly progress and today's progress on one line. I will be adding a reward section as soon as me and the kids sit down and discuss what kind of rewards they would like to buy with their points. I've added applicable days to all chore's I've created so this will only display chores that are due that day, while also showing any chores they have missed from previous days, highlighting them in red. Chores in claimed or approved status get moved down to completed chores and are marked green.
|
Beta Was this translation helpful? Give feedback.
-
Looks good, I do like the simplicity of it. Interestingly, for completed chores, my kids both asked me not to have them move because they liked everything staying the same place so they could just see they were complete in place.... Yesterday I posted my updated dashboard in the home assistant forum projects. I completely revamped it so it covers many of the features that weren't easily accessed or viewed. The nice thing is you can setup the whole dashboard in a couple minutes, or maybe just pick and choose a few of the cards to modify. The other thing I wanted to mention is that we've been working on some wiki content to point people to. I highly recommend reading through the documents on Badges, Achievements and Challenges before you set any of them up. I was having a bit of a hard time understanding how I might use them until a lot of playing around. I was not very interested in them at first, but talking to the kids about how they might level up and earn multipliers, or have a bigger reward sitting 30 days out was pretty interesting to them. So jury is still out... https://github.com/ad-ha/kidschores-ha/wiki |
Beta Was this translation helpful? Give feedback.
-
This article only applies to users who created their instance during the beta and first preview version of the integration.
🚨 Why This Matters
The dashboard relies heavily on structured entity naming, and in version 0.1.8, the entity naming structure was completely changed. As a result, any beta testers who continue using the old format will face compatibility issues when adding new entities, as they will follow the updated naming convention.
🔄 Recommended Action for Beta Testers
To ensure seamless functionality with the auto-populating dashboards, the strong recommendation is to remove the integration and start over.
Best Upgrade Approach
Remove your current instance – This ensures all legacy entities are deleted.

Add Entry – This will walk you through the setup process apply the new entity naming format and prevent conflicts.
Start fresh with the new dashboard version – Avoid compatibility issues going forward. Link below.
🚀 Get the Latest Version
The updated version of this dashboard can be found here: [New Version](#)
📌 Legacy Content Below
After drawing inspiration from @ad-ha's dynamic dashboard concept in the Home Assistant forums, I refined the idea into a more polished version that I believe will be especially useful for those just getting started. I'm not sure if this is the best place to share it for easy discoverability, but I wanted to start here. In the future, it might be valuable to include examples like this in a wiki or official documentation to help new users integrate and customize their setups more effectively.
🏡 Kids Chores and Rewards Dashboard
A dashboard designed to work with Kids Chores, allowing children to easily track and claim their tasks and rewards, while parents can monitor progress, apply penalties and rewards, and approve completed chores.
🌟 Overview
Kids can easily track and claim their tasks while parents can approve progress, apply penalties, and redeem rewards.
This system provides:
✅ A kid-friendly interface for tracking daily tasks and earned points.
✅ A parent control panel for reviewing and managing chore approvals.
✅ Automated categorization of tasks based on due dates and statuses.
✅ Gamification elements like streaks, points, and rewards to encourage participation.
📌 Features at a Glance
For Kids 🧒
✅ View and claim chores based on morning, daily, or overdue categories.
✅ Track weekly progress, earned points, and completed tasks.
✅ Redeem rewards using an interactive button system.
For Parents 👩👦
✅ Approve or deny completed chores with a simple hold action.
✅ Apply penalties for missed or incomplete tasks.
✅ Manually adjust points when needed.
✅ Monitor all chore-related activity in a 7-day log.
🎨 Kids Chore Dashboard
🏠 Overview
The Kids Dashboard is designed to give a simple, engaging interface for tracking chores, points, and rewards. It encourages kids to stay on top of their responsibilities in a fun, structured way.
📌 Example Dashboard UI:

🔹 Dashboard Sections
1️⃣ Points & Progress Tracking
2️⃣ Chores Section ("Hold to Claim")
3️⃣ Rewards Section ("Hold to Redeem")
👩👦 Parent Chore Dashboard
🏠 Overview
The Parent Dashboard provides full control over chore approvals, penalties, and manual point adjustments. Parents can review pending approvals, apply penalties for missed tasks, and manually adjust points.
📌 Example Dashboard UI:

🔹 Features
📌 Parent Dashboard Sections
1️⃣ Approvals Section ("Hold to Approve")
2️⃣ Penalties Section ("Hold to Apply")
3️⃣ Manual Points Adjustment
4️⃣ Activity Log (7-Day History)
🔧 How to Implement This Dashboard
Follow these steps to integrate the Kids Chore & Reward Dashboard into Home Assistant.
📌 Step 1: Install Custom Cards
This dashboard requires custom frontend cards to function correctly.
custom:mushroom-template-card
)custom:auto-entities
)custom:mini-graph-card
)📌 Step 2: Create a New Section Dashboard
To keep the dashboard organized, create a separate section for chore tracking. You can skip this step if you have an existing location you want to use.
"Kids Chores"
)📌 Step 3: Add the Kids Dashboard YAML
📌 Step 4: Find and Replace "Kidname"
Since this YAML uses a placeholder name, update it to match your child's name.
Kidname
→ (e.g.,"Payton"
)kidname
→ (e.g.,"payton"
)KIDNAME
→ (e.g.,"PAYTON"
)Note - If you are using something other than "points" for tracking, you will also need to do a find / replace of all versions being sure to match case.
📌 Step 5: Add the Parent Dashboard YAML
📌 Step 6: Find and Replace Again
Since the parent dashboard also references
Kidname
, repeat the find-and-replace process.Kidname
kidname
KIDNAME
Note - If you are using something other than "points" for tracking, you will also need to do a find / replace of all versions being sure to match case.
🎯 Finalizing the Dashboard
Your Kids Chore & Reward Dashboard is now fully functional in Home Assistant! 🎉
📌 Need help? Drop a comment below! 🚀
Beta Was this translation helpful? Give feedback.
All reactions