v3.9.0
TaskMate v3.9.0
This release introduces a unified Notifications system with an admin UI, time-gated alerts, and actionable mobile callbacks. Plus a handful of bug fixes and i18n polish.
✨ New Features
Unified Notifications system (#342, #344)
The biggest change in this release: notifications are now centrally managed instead of scattered across coordinators.
What's new for users:
- New Notifications tab in the admin panel — a single matrix where you set, per recipient, which alert types they receive (chore approvals, reward claims, badge earned, bedtime, streak-at-risk, all-chores-done).
- Per-recipient
notify_service— each child and each parent can route to a different mobile/discord/etc service, with a master enable/disable per type. - Custom scheduled notifications — add your own recurring alerts with
day_mask(e.g. weekdays only), custom time, message template, and recipient list. - Actionable approve / reject buttons on mobile push for pending chore approvals and reward claims — act directly from the notification.
- Time-gated alerts that automatically fire at the right moment:
- Bedtime reminder — fires near a child's bedtime if chores remain.
- Streak-at-risk — fires before the streak cutoff if today's chores are still open.
- All chores done — fires once per child per day when everything's complete, then resets at midnight.
- Power-user events — the integration now emits
taskmate_*state-change events on the HA event bus, so you can wire your own Node-RED / automation flows alongside (or instead of) the built-in dispatcher.
Behind the scenes:
- New
NotificationCoordinatorwith a dispatcher layer; legacy ad-hoc notify helpers retired. - Storage CRUD and a first-run migration that imports any existing notify settings.
- 8 locales updated with strings for the new UI.
🐛 Fixes
Settings page — "Message malformé" / numeric save error (#350, PR #356)
ha-textfield type="number" doesn't reliably reflect its type onto the JS property, so _doSaveSettings() was sending history_days, calendar_projection_days, and perfect_week_bonus as strings. The WS schema validates these with vol.All(int, …) and rejected them, surfacing as a Message malformé / expected int for dictionary value toast. The panel now detects the declared type via getAttribute() with el.type as a fallback, so numeric values are coerced before being sent.
"Parent did it" didn't clear today's assignee on rotations (#351, PR #355)
When a parent marked a rotation chore complete on behalf of a child, the chore showed as done but the rotation's current assignee wasn't cleared, so the same child still appeared as today's responsible on the panel until the next rotation tick. Parent-complete now clears today's assignee for rotation chores, matching the child-completed flow.
French translations for task group policies (#353, PR #354)
The Sticky and Spread task group policy labels weren't localised in the French UI. Both now read in French alongside their original explanations.
Child Stats sensor unit_of_measurement (#346, PR #347)
The Child Stats sensor was hardcoding "chores" as its unit, ignoring the user's HA language. The unit is now translated.
Child Badges sensor unit_of_measurement (PR #349)
Same fix as above, for the Child Badges sensor.
Lint cleanups (PR #343, #345)
Dropped unused imports flagged by ruff (including a stray pytest import in an events test) so CI stays green.
📈 Upgrade Instructions
- Open HACS → Integrations → TaskMate.
- Click Redownload and select version 3.9.0.
- Restart Home Assistant (notification scheduler + dispatcher hook into startup).
- Hard-refresh your browser (Ctrl+Shift+R / Cmd+Shift+R) so the new panel JS loads.
- Visit the new Notifications tab in the TaskMate admin panel and check that your existing
notify_servicesettings carried over from the first-run migration. Tweak the matrix to taste.
If you have existing automations that rely on the old ad-hoc notify helpers, switch them to listen for the new taskmate_* events on the HA event bus.
Full Changelog: v3.8.2...v3.9.0