A Home Assistant custom integration for ChoreBoard, enabling you to track chores, assignments, leaderboards, and completion status directly within Home Assistant.
- 8 sensor types covering all aspects of chore tracking
- System-wide sensors for outstanding, late, and pool chores
- Per-user sensors for individual tracking and leaderboards
- Statistics sensors for chore breakdown and completion history
- Arcade mode support with speed-run leaderboards
- Mark chores complete with helper credits and user selection
- Claim pool chores and assign to specific users
- Undo completions for mistake correction
- Full multi-user support for household management
- Automatic polling of ChoreBoard API for updates
- Completion information on all chores (who, when, helpers)
- Point tracking for gamification
- Weekly and all-time leaderboards
- User Selection Support: All sensors include users data in their attributes
- Pool Chores Feature: Enables user selection dialogs in ChoreBoard Card v1.1.0+
- Dedicated Users Sensor:
sensor.choreboard_usersfor easy user access - Automatic User Discovery: Card automatically finds users from any ChoreBoard sensor
- Open HACS in your Home Assistant instance
- Click on "Integrations"
- Click the three dots in the top right corner
- Select "Custom repositories"
- Add this repository URL and select "Integration" as the category
- Click "Install"
- Restart Home Assistant
- Copy the
custom_components/choreboarddirectory to your Home Assistantcustom_componentsdirectory - Restart Home Assistant
- Add the integration via the UI
- Go to Settings > Devices & Services
- Click "Add Integration"
- Search for "ChoreBoard"
- Enter your ChoreBoard credentials:
- Username: Your ChoreBoard username
- Secret Key: Django SECRET_KEY from your ChoreBoard backend
- URL: Your ChoreBoard backend URL (e.g., http://localhost:8000)
- Select which users to monitor
- Click "Submit"
The integration uses HMAC-SHA256 authentication with your Django SECRET_KEY to generate secure API tokens.
The integration automatically creates sensors based on your ChoreBoard data and monitored users.
Tracks all incomplete, non-overdue chores.
State: Count of outstanding chores
Attributes:
chores: List of chore details including:id: Chore instance IDname: Chore namedescription: Chore descriptionassigned_to: Username and display namedue_at: Due date/timepoints: Point valuelast_completed_by: Who last completed this chorelast_completed_at: When it was last completedwas_late: Whether last completion was latehelpers: List of helpers on last completion
Tracks all overdue chores.
State: Count of late chores
Attributes: Same as Outstanding Chores
Tracks all unassigned chores available for claiming.
State: Count of pool chores
Attributes:
chores: List of pool chore details
Statistics about chore distribution.
State: Total chore count
Attributes:
total_chores: Total number of chorespool_chores: Number of pool choresassigned_chores: Number of assigned chorespool_percentage: Percentage in poolassigned_percentage: Percentage assignedstatus_breakdown: Count by status (POOL, ASSIGNED, etc.)
Recent chore completions across all users.
State: Count of recent completions
Attributes:
completions: List of recent completions with:chore_name: Name of completed chorecompleted_by: User who completed itcompleted_at: Completion timestampwas_late: Whether completion was latehelpers: List of helpers with names and pointspoints_earned: Points awarded
Current week's point rankings.
State: Number of users on leaderboard
Attributes:
users: List of users with:rank: Current rankname: Display nameusername: Usernamepoints: Weekly points total
Lifetime point rankings.
State: Number of users on leaderboard
Attributes: Same as Weekly Leaderboard
Speed-run high scores for arcade-enabled chores.
State: Number of high scores
Attributes:
chore_id: ID of the chorechore_name: Name of the chorescores: List of high scores with:rank: Rank positionusername: User who set the scoretime_seconds: Time in secondstime_formatted: Formatted time stringachieved_at: When the score was set
For each monitored user, the following sensors are created:
Chores assigned to this user.
State: Count of user's chores
Attributes:
username: User's usernamechores: List of assigned chores (same attributes as Outstanding Chores)
Chores due today or overdue for this user.
State: Count of immediate chores
Attributes: Same as My Chores
User's current week point total.
State: Weekly points (float)
Unit: points
Attributes:
username: Usernamedisplay_name: Display namepoints: Weekly pointsclaims_today: Number of chores claimed today
User's lifetime point total.
State: All-time points (float)
Unit: points
Attributes:
username: Usernamedisplay_name: Display namepoints: All-time pointsweekly_points: Current week points
Dedicated sensor providing all ChoreBoard users for card integration.
State: Number of users (integer)
Attributes:
users: Array of all users with complete user data:id: User ID (required for service calls)username: Login usernamedisplay_name: Display namefirst_name: First namecan_be_assigned: Whether user can receive chore assignmentseligible_for_points: Whether user can earn pointsweekly_points: Current week's pointsall_time_points: Lifetime pointsclaims_today: Number of pool chores claimed today (optional)
count: Number of users
Usage: This sensor is specifically designed for ChoreBoard Card v1.1.0+ user selection dialogs. All ChoreBoard sensors include this users array in their attributes, so the card can find user data from any configured sensor.
Mark a chore as completed, optionally with helpers and on behalf of another user.
Parameters:
chore_id(required): The chore instance IDhelpers(optional): List of user IDs who helped (will receive partial points)completed_by_user_id(optional): User ID to complete on behalf of (defaults to authenticated user)
Examples:
# Simple completion
service: choreboard.mark_complete
data:
chore_id: 42
# With helpers
service: choreboard.mark_complete
data:
chore_id: 42
helpers: [2, 3]
# Complete on behalf of another user
service: choreboard.mark_complete
data:
chore_id: 42
completed_by_user_id: 5
# Complete with helpers on behalf of another user
service: choreboard.mark_complete
data:
chore_id: 42
helpers: [2, 3]
completed_by_user_id: 5Claim a pool chore for yourself or assign it to another user.
Parameters:
chore_id(required): The pool chore instance IDassign_to_user_id(optional): User ID to assign to (defaults to authenticated user)
Examples:
# Claim for yourself
service: choreboard.claim_chore
data:
chore_id: 42
# Assign to another user
service: choreboard.claim_chore
data:
chore_id: 42
assign_to_user_id: 3Undo a chore completion (admin only).
Parameters:
chore_id(required): The completion ID to undo
Example:
service: choreboard.undo_completion
data:
chore_id: 123automation:
- alias: "Pool Chores Available"
trigger:
- platform: numeric_state
entity_id: sensor.pool_chores
above: 0
action:
- service: notify.family
data:
title: "Chores Available"
message: >
{{ states('sensor.pool_chores') }} chores are available in the pool!automation:
- alias: "Late Chore Reminder"
trigger:
- platform: time
at: "09:00:00"
condition:
- condition: numeric_state
entity_id: sensor.late_chores
above: 0
action:
- service: notify.persistent_notification
data:
title: "Overdue Chores"
message: >
You have {{ states('sensor.late_chores') }} overdue chores!automation:
- alias: "Weekly Leaderboard"
trigger:
- platform: time
at: "20:00:00"
condition:
- condition: time
weekday:
- sun
action:
- service: notify.family
data:
title: "Weekly Leaderboard"
message: >
This week's leader: {{ state_attr('sensor.leaderboard_weekly', 'users')[0]['name'] }}
with {{ state_attr('sensor.leaderboard_weekly', 'users')[0]['points'] }} points!automation:
- alias: "Complete Chore Button"
trigger:
- platform: event
event_type: zha_event
event_data:
device_id: button_device_id
command: "on"
action:
- service: choreboard.mark_complete
data:
chore_id: >
{{ state_attr('sensor.john_my_immediate_chores', 'chores')[0]['id'] }}See CLAUDE.md for detailed development instructions.
For developers: This integration is developed alongside the ChoreBoard backend, which is available at ../ChoreBoard for local development and testing. You have full access to modify the ChoreBoard API as needed to support integration features.
For production deployments, users will configure their own ChoreBoard backend URL when setting up the integration in Home Assistant.
# Create virtual environment
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux/Mac
# Install dependencies
pip install -r requirements_dev.txt
# Setup pre-commit hooks
pre-commit install
# Run tests
pytest tests/ -v
# Run linting
ruff check .
mypy custom_components/choreboard/This repository uses a fully automated release pipeline that requires zero manual steps. Releases are triggered automatically when semantic versioning branches are merged to main.
-
Create a semantic version branch:
git checkout -b feature/1.5.0 # For new features # or git checkout -b bugfix/1.4.7 # For bug fixes # or git checkout -b hotfix/1.4.8 # For critical fixes
-
Make your changes and commit:
git add . git commit -m "feat: Add new feature" git push -u origin feature/1.5.0
-
Create and merge a pull request:
gh pr create --title "feat: Add new feature" # Review, approve, and merge via GitHub UI
-
Automation handles the rest:
- ✅ Updates
manifest.jsonto version 1.5.0 - ✅ Commits and pushes to main (bypass rulesets with deploy key)
- ✅ Creates
choreboard.ziparchive - ✅ Publishes GitHub release with notes
- ✅ Uploads ZIP asset automatically
- ✅ Updates
The auto-release workflow recognizes these patterns:
feature/X.Y.Z- New features (minor version bump)bugfix/X.Y.Z- Bug fixes (patch version bump)hotfix/X.Y.Z- Critical fixes (patch version bump)release/X.Y.Z- Release preparationX.Y.ZorvX.Y.Z- Direct version branches
Examples:
feature/1.5.0→ Release v1.5.0bugfix/1.4.7→ Release v1.4.7hotfix/2.0.1→ Release v2.0.1
The automated release workflow requires:
- SSH Deploy Key: Configured to bypass repository rulesets
- Semantic Versioning: Branch names must follow semver pattern
- Code Owner Approval: Pull requests require approval before merge
The workflow is 100% automated and handles:
| Step | Description | Status |
|---|---|---|
| Branch Detection | Supports squash, regular, and direct merges | ✅ |
| Version Extraction | Parses semver from branch name | ✅ |
| Manifest Update | Updates custom_components/choreboard/manifest.json |
✅ |
| Commit & Push | Uses SSH deploy key to bypass rulesets | ✅ |
| ZIP Creation | Bundles integration into choreboard.zip |
✅ |
| Release Creation | Publishes GitHub release with auto-generated notes | ✅ |
| Asset Upload | Attaches ZIP to release automatically | ✅ |
Workflow Duration: ~20-25 seconds per release
The auto-release workflow (.github/workflows/auto-release.yml) is a single self-contained workflow that:
- Triggers on push to
mainbranch - Detects merged branch name from commit message
- Validates semantic versioning pattern
- Updates manifest, creates release, and uploads assets
- No separate workflows or manual steps required
For issues and feature requests, please use the GitHub issue tracker.
This project is licensed under the MIT License.