[CUSTOM INTEGRATION] Maintenance Supporter — Sensor-Triggered, Adaptive Maintenance for Your Home

[CUSTOM INTEGRATION] Maintenance Supporter — Sensor-Triggered, Adaptive Maintenance for Your Home

At some point, my smart home started outsmarting me. HVAC filters, pool pumps, 3D printer nozzles, water softener salt, washing machine cleaning cycles — every device on its own schedule, none of them talking to each other. I tried calendar reminders. I tried spreadsheets. I even tried a few HA integrations. But they all had the same problem: fixed intervals that ignored how I actually use my equipment. The pool pump that runs 12 hours a day in summer doesn’t need the same service interval as the one idling in winter.

The Problem

Most maintenance tracking comes down to “change the filter every 90 days.” But real maintenance doesn’t work like that. Your HVAC filter clogs faster when outdoor air quality drops. Your 3D printer nozzle wears out based on filament extruded, not calendar days. Your dehumidifier runtime varies by season. Fixed-interval reminders either fire too early (wasting parts and effort) or too late (risking equipment damage). And the existing HA integrations? They’re essentially calendar reminders with extra steps — no sensor awareness, no learning from history, no understanding of actual usage patterns.

What Is Maintenance Supporter?

Maintenance Supporter is a Home Assistant custom integration that tracks maintenance tasks based on how your equipment is actually used — not just how much time has passed. It connects directly to your HA sensors to trigger maintenance when thresholds are crossed, counters reached, or runtime accumulated. It learns from your completion history to suggest better intervals. And it provides a full-featured panel UI, Lovelace card, calendar integration, actionable notifications, QR codes for physical equipment, and multi-user task assignment — all with zero external Python dependencies.


Feature Tour

Dashboard Overview

The sidebar panel gives you an at-a-glance view of everything: KPI stats across all your maintenance objects, color-coded status badges (OK / Due Soon / Overdue / Triggered), sparkline progress bars showing how close each task is to being due, and budget tracking bars if you’ve set spending limits.


Task Detail with Sensor Triggers

Each task has a detail view showing its full configuration, history, and — if sensor-triggered — a progress chart tracking the sensor value over time. Here’s a task triggered by a counter sensor. The chart shows the value accumulating since the last service, with a prediction line showing when the next service will be due based on usage patterns.


Compound Triggers

Sometimes one condition isn’t enough. Compound triggers let you combine multiple trigger types with AND/OR logic. For example: service the pool pump when either runtime exceeds 500 hours or the pressure sensor crosses a threshold — whichever comes first. The historical chart shows both conditions side by side.


Mobile Notifications with Actions

When a task becomes due or a sensor trigger fires, you get actionable push notifications. Complete, Skip, or Snooze directly from your lockscreen — no need to open the app. Notification timing is configurable with quiet hours, per-status intervals, daily limits, and automatic bundling when multiple tasks fire at once.


QR Codes for Physical Equipment

Generate QR codes for any task, print them, and stick them on the equipment. Scanning the code opens the task directly in HA — or auto-completes it, depending on your configuration. Great for shared households or maintenance teams where not everyone lives in the HA app.


Lovelace Card

Don’t want the full panel? Embed a compact maintenance card in any Lovelace dashboard. It shows status dots, due dates, and quick-complete buttons for each task. Fully configurable — filter by object, group, or status.


Calendar Integration

All upcoming maintenance events appear as a native HA calendar entity. View them in the built-in calendar view, sync to your phone, or use them in automations.


Mobile Responsive

The full panel UI works on phones and tablets. All views — dashboard, object detail, task editing, history — adapt to smaller screens.


More Features

  • 5 trigger types: threshold, counter, state-change, runtime, and compound (combine any of the above with AND/OR logic)

  • Adaptive scheduling: learns from your completion history using exponentially weighted averages + Weibull reliability modeling to suggest optimal intervals

  • Seasonal adjustment: automatically adjusts intervals by season (hemisphere-aware) based on historical patterns

  • Environmental correlation: links tasks to environmental sensors (temperature, humidity, AQI) and adjusts intervals when conditions change

  • Sensor prediction: tracks sensor degradation trends and predicts when a trigger threshold will be crossed

  • NFC tag linking: tap an NFC tag to view or complete a task — perfect for equipment rooms

  • Multi-user task assignment: assign tasks to specific HA users with per-user notifications

  • Budget tracking: set monthly/yearly budgets with cost tracking per task (supports 10 currencies: EUR, USD, GBP, JPY, CHF, CAD, AUD, CNY, INR, BRL)

  • Task checklists: add step-by-step checklists to tasks

  • Task groups: organize tasks into logical groups

  • JSON & CSV export/import: full data export and import for backups, migration, or analysis

  • 7 languages: English, Spanish, Portuguese, French, German, Italian, Dutch

  • Sensor + binary sensor entities: every task exposes HA entities for use in automations

  • Calendar entity: native HA calendar integration

  • Completion feedback: mark whether maintenance was actually needed — feeds back into adaptive scheduling

  • SD card friendly: dynamic state is persisted to a dedicated store with 60-second write debouncing; sensor entities only write to recorder on actual status changes, not every update cycle — designed for Raspberry Pi / SD card setups

  • Zero external dependencies: pure Python, nothing to install beyond the integration itself


For Developers

If you want to contribute or run the integration locally for development, the repo includes a full Docker-based dev environment:

  • Docker Compose setup with a pre-configured Home Assistant instance (ha-dev container)

  • Custom components volume-mounted into /config/custom_components/ for live editing

  • Faketime support: shift HA’s system clock to test due-date logic, overdue states, and seasonal scheduling without waiting — enable via FAKETIME_ENABLED=true and set the offset in faketime.txt

  • .env-based configuration for HA tokens and settings

This makes it easy to test changes, reproduce bugs, and develop new features without touching your production HA instance.


Installation

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

  1. Click the badge above — or open HACS > three-dot menu > Custom repositories and add iluebbe/maintenance_supporter (category: Integration)

  2. Search for “Maintenance Supporter” in HACS and install

  3. Restart Home Assistant

  4. Go to Settings > Devices & Services > Add Integration and search for “Maintenance Supporter”

  5. The sidebar panel and Lovelace card become available automatically

GitHub: github.com/iluebbe/maintenance_supporter


Get Involved

Maintenance Supporter is actively maintained — currently at v1.0.17 with 1,416 tests covering the backend. If you run into issues, have feature requests, or want to contribute:

  • Bug reports & feature requests: GitHub Issues

  • Contributions welcome — PRs, translations, documentation, or just feedback from using it

I’d love to hear how you use it, what maintenance scenarios you’re tracking, and what features would make it more useful for your setup. Thanks for reading!

3 Likes

Update: v1.0.18 → v1.0.22

A few things have been fixed and improved since the original post.

HA 2026.3 Compatibility (v1.0.19)

If you updated to HA 2026.3 and dialogs looked broken (no title, no buttons) — that’s fixed since v1.0.19. HA changed the dialog internals; the integration now renders title and buttons within the dialog content for compatibility.

Also corrected: the minimum HA version in the manifest was wrong (said 2025.1.0, should have been 2025.7.0). Fixed now — if you’re on 2025.7+ you’re good.

Notification Improvements (v1.0.20)

  • Tapping “Complete” or “Skip” on a mobile notification now dismisses the notification properly (previously the action worked but the notification stuck around)

  • Tapping a notification now opens the task directly in the panel — deep-link support for both browser and Companion App

  • No more duplicate reminders right after completing/skipping from a notification

Threshold Timer Restart Recovery (v1.0.21)

The trigger_for_minutes timer on threshold triggers now survives HA restarts. Previously, if your HVAC airflow had been below threshold for 25 of the required 30 minutes and HA restarted, the timer would reset to zero. Now the exceeded-since timestamp is persisted — after restart, the trigger either fires immediately (if enough time has passed) or resumes with the remaining duration.

Clickable Entity IDs (v1.0.22)

Entity IDs shown in trigger views (threshold, counter, runtime, state-change) are now clickable links that open the entity’s “more info” dialog directly in HA. Makes it easy to check the current sensor value or history without leaving the panel.

Misc

  • Default UI language changed from German to English (v1.0.18)

  • Screenshots upgraded to 2x Retina resolution

  • hass.is_running guards prevent store writes during shutdown

  • 1,429 tests, 96% coverage

Update

  1. HACSIntegrations → find Maintenance Supporter → Update

  2. Restart HA

(If HACS doesn’t show the update yet: three-dot menu → “Recheck repositories”)

Bug reports / feature requests: GitHub Issues

Forgive my ignorance, but should notifications happen with the notify service set up or do I have to make automations to trigger notifications? They don’t seem to be working for me. Also, if I don’t have a user assigned to a task but have the notify service set up, will it notify me? Test notifications working fine, but nothing seems to trigger automatically.

Really appreciate this integration…been looking for something this robust.

Disregard. Finally got a notification…maybe they were just slow? Seems to be working now. Thanks

Glad it’s working! The first notification after setup can take up to 5 minutes since the integration checks task statuses on a regular
interval, not instantly. After that it picks up changes quickly.
Good to know: notifications only fire when a task actually reaches due soon, overdue, or triggered status — tasks that are still “OK” won’t
send anything. So if you just created a task with a due date weeks away, it’ll stay quiet until it enters the warning window.

Other points:

  • Quiet hours are on by default (22:00–08:00) — notifications get held until morning
  • Repeat intervals prevent spam: due-soon repeats every 24h, overdue every 12h, sensor-triggered sends once
  • Both are adjustable under the global integration settings

Update: v1.0.22 → v1.4.3 — what’s landed since March

It’s been a busy stretch since the last update reply on this thread back in March. Roughly 25 releases later, here’s the practical roundup. The recurring theme: less friction between “I marked the task done” and what should actually happen next — whether that’s the device acknowledging it, the manual being one click away, or just being able to tell at a glance which gadget needs attention.

A lot of what’s in here came directly from your feedback in this thread and on GitHub. Issue numbers are linked throughout — credit to everyone who shaped this.

TL;DR

  • Run any HA service when you complete a task — Roborock filter reset, HVAC button press, counter reset, custom notification (#41)

  • One QR-scan → record completion + reset the device (the lightning-bolt code, no dialog)

  • Manual link on every object — and on every task page belonging to that object (#43)

  • Notification titles you can actually read in the stack — pick Pool Pump over Maintenance Overdue! (#44)

  • Vacation mode — suppress notifications while you’re away, with a preview of what would have triggered

  • Print sheets of QR codes for a whole room in one go

  • Time-of-day scheduling — tasks flip OVERDUE at HH:MM instead of midnight, calendar events become real timed reminders

  • Sort, group-by, and one-click task/object creation in the panel (#34 / #35 / #36)

  • Read-only panel for non-admin users + per-user override for shared/family/hotel setups (#33)

  • Lovelace card overhaul — visual editor with object + status pickers, smart defaults

  • All 12 languages now uniformly translated everywhere (panel + config flow + phone notifications)


“I changed the filter, but my Roborock app still nags me”

That came from @cokeman0 (#41). His use case: marking maintenance done in HA was step one — but the device itself still thought it was overdue, and you’d have to open the vendor app or remember to press a separate button somewhere in HA.

Now any task can run a Home Assistant service when you complete it. Reset a Roborock filter counter (vacuum.send_command with command: reset_consumable), press the “filter dirty” reset button on your HVAC controller, fire counter.reset on your 3D-printer hour tracker, push a custom notification to your partner — whatever closes the loop.

The dialog has a service picker with autocomplete and a Test button so you can verify the wiring without saving.

Combine it with the new Quick-complete QR code (lightning-bolt icon — distinct from the regular check-mark QR) and the workflow becomes: stick the QR inside your Roborock dust-bin lid → swap filter → close lid → scan with phone → done. No dialog, no tapping, completion recorded and device counter reset in a single scan.

Quick-complete defaults — pre-fill notes / cost / duration once

A small recipe library (Roborock filters/brushes, HVAC button, 3D-printer counters, water-filter LED, push notifications) is in the docs. All gated behind a feature toggle, off by default — beginners aren’t confronted with HA service-call config on first run.


“Where did I put that PDF manual?”

From @byoung79 (#43): when you’re standing in front of a piece of equipment about to do maintenance, the manual is exactly what you want one click away — not buried in a Drive folder or stuck behind a Google search.

Each object now carries an optional Manual / documentation URL field. The link shows up on the object detail page right under the serial number:

…and (the bit that actually makes it useful) on every task page belonging to that object, so you don’t have to navigate back to the object first:

Real-world: tap the Filter Replacement task that’s overdue → manual one click away → off you go. Combine with the existing NFC-tag-on-task feature for full hands-free flow: scan tag at the device → task page opens → tap manual.


“I have 5 overdue notifications and I can’t tell which is which”

Same user, #44. When your phone stacks notifications, only the title is visible — and the default title was generic “Maintenance Overdue!” for everything. Five of those collapsed into one indistinguishable line.

New global setting under Settings → Notification settings → Notification title style:

| Choice | Title shown on the phone |

| Default | Maintenance overdue! / Maintenance triggered (the existing per-status text) |

| Object name as title | Pool Pump / HVAC System / Workshop Compressor |

| Task name as title | Filter cleaning / Oil change / Descale |

Default stays Default so existing setups don’t break — if anyone built automations filtering on the existing title strings, those keep working. Pick Object name and your stacked notifications instantly become readable at a glance.

While we’re on notifications: bundling (multiple due tasks for one object → one summary notification) and quiet hours are in there since the early days but worth a re-mention now that the title style makes them more useful.


“I’m going on holiday and I don’t want to hear about my pool pump”

Vacation mode. Set the start and end dates, and notifications get suppressed for the window — but with a preview that shows you what would have triggered while you were away, so there’s no “did I miss something?” moment when you get back.

Per-task exempt list for the few critical things that should still notify (e.g. Salt the water softener — has to happen). 3-day buffer at the end so you don’t get hit with everything on the day you land.

Lives behind a feature toggle, off by default. Settings → Vacation.


“I want stickers for everything in this room”

Print sheets of QR codes. Settings tab → Print QR codes → pick which objects, which actions (View / Complete / Skip / Quick-Complete) → click Generate → browser print dialog with a 3- or 4-column grid of labelled QR stickers ready for sticker paper. Each QR has the object/task/action label printed below so you don’t have to guess what’s what after cutting.

Useful pairing: print Quick-Complete QR codes, stick them on the equipment, and household members complete tasks by scanning — without ever opening the HA app.


Working with the panel feels noticeably nicer

A bunch of UX work landed in v1.0.41–v1.0.45 that didn’t get its own update post. The highlights:

  • Time-of-day scheduling (advanced feature, off by default). Tasks can flip from Due Soon to Overdue at a configured HH:MM in HA’s timezone instead of at midnight. Calendar events become 30-minute timed blocks so mobile calendar apps can set proper reminders. To compose a weekday pattern (e.g. “every Tuesday at 19:00”): create on Tuesday, interval_days=7, schedule_time="19:00", interval_anchor="planned" so a late completion doesn’t drag the next due date into Wednesday.

  • Sort & group-by on both the Tasks and Objects views (#35, #36). Sort by due date, area, group, or assigned user. Group into collapsible sections by area, group, or user. Choice persists in localStorage.

  • Overdue indicator on object cards (#35). Object cards now show a red dot + red left border the moment any of their tasks is overdue or triggered — scan a room and immediately see what needs attention.

  • Quick task / object creation from any view (#34). The Objects view has a + New Object button in the header; the Tasks view has a New Maintenance Task button (the dialog auto-renders an Object dropdown when no parent is preset). No more “leave list → go to objects → create object → return → create task”.

  • Group / area / responsible-user chips on each task row (#36). Sub-line chips render only when the corresponding data is present.

  • 5 advanced features wired directly into the panel so you don’t have to dig into Integration Options:

  • Send-test-notification button next to the notify service field

  • Re-analyze button on the adaptive recommendation card (refreshes Weibull/EWA/seasonal without waiting for the next coordinator cycle)

  • Environmental-sensor selector in the task dialog

  • Manual 12-month seasonal-overrides editor below the seasonal chart

  • Full Groups CRUD (create / edit / delete / multi-checkbox task selector)

  • Localized validation errors in all dialogs — when a schema rejection happens (name too long, etc.), the dialog shows e.g. “Name: too long (max 200 characters)” instead of raw voluptuous text.

  • Task checklist editor in the panel itself (was previously only reachable via Integration Options). Textarea, one step per line, gated on the existing Checklists feature flag.

  • Mobile dialogs no longer clip at narrow viewports.


For shared / family / hotel setups

Operator mode + per-user panel access (#33). By default, non-admin HA users now see a read-only panel — Settings tab, every create/edit/delete control, and the per-task three-dot menu are hidden. Only Complete and Skip remain on each task, so household members can mark things done without changing settings.

Admins can grant individual non-admin users full panel access via a new Panel Access section (Settings tab + config flow). Useful when one parent / partner needs full access but the kids only need Complete buttons. A repair flow surfaces an issue if a granted user is later deleted in HA, with a one-click Remove from list action.

The QR Code button stays available to everyone (it generates read-only links).


Lovelace card overhaul (v1.0.45)

The card got a meaningful upgrade:

  • Smart defaults on first add — when a user picks “Maintenance Supporter” from the card picker, the card now starts with filter_status: ["overdue", "triggered", "due_soon"] and max_items: 10. Shows the actionable tasks immediately rather than a flood of OK rows.

  • Visual editor with pickersEdit Card now has a status chip-row (Overdue / Triggered / Due Soon / OK), an object multi-checkbox list populated live from the integration, and an entity multi-picker scoped to maintenance_supporter entities.

  • entity_ids: config support — the card also accepts the HA-native entity_ids: [sensor.x, ...] config key alongside the existing filter_status / filter_objects.


More languages, now fully translated everywhere

Two community contributions landed in this stretch:

  • Russian — by @vmakeev (PR #19)

  • Ukrainian — by @rodion981 (multiple PRs)

Plus internal work to bring all 12 languages (English, German, Spanish, French, Italian, Dutch, Portuguese, Russian, Ukrainian, Polish, Czech, Swedish) to uniform coverage across all three surfaces: the panel UI, HA’s native config-flow + Repairs UI, and the actual phone notification messages.

If anything looks off in your language, native-speaker PRs are very welcome — translation files live at translations/<lang>.json and the panel ones in frontend-src/styles.ts.


Thanks :folded_hands:

This stretch was driven by your feedback. In rough order of how much shape they gave to what’s in here:

  • @byoung79 — long list of issues going back to the first weeks: serial number on objects, sort task list, link to objects from sidebar, the safety-interval and reset-date bugs above, plus this round’s manual-link and notification-title-style features (#43, #44)

  • @wxym5nnh6h-prog — shaped a huge chunk of the v1.0.41–v1.0.52 UX work: dashboard-card requests (#33), object/task views layout (#34, #35, #36), trigger-config audit findings (#37), warning-days bug (#38), groups setting card (#40)

  • @cokeman0 (Michael Dahl) — the Roborock-style “complete the loop with the device” use case (#41) and the cleanest bug repro of the year (#42)

  • @vikdb — the one-shot-tasks question that surfaced a useful workaround documented in #39

  • @vmakeev — Russian translation contribution (PR #19)

  • @rodion981 — Ukrainian translation contributions

  • Everyone else who’s translated, opened issues, or just told me what they’re maintaining with it — the use cases drive what gets built. :clinking_beer_mugs:


How to update

  1. HACS → Maintenance Supporter → Update

  2. Restart Home Assistant (recommended for the new ConfigEntry options + new field on the object schema)

  3. Hard-refresh the browser (Ctrl+Shift+F5) so the new panel bundle loads

If HACS doesn’t show the update yet: three-dot menu → “Recheck repositories”.

Bug reports / feature requests / “I’m using it for X and it’d be great if…”: GitHub Issues. And if you’re using the new completion-actions, manual-link, or QR features in an interesting way — tell me about it in the thread, that’s how the next round of features happens.

I have been obsessed with this for the last 2 days. I have replaced my "house chores" card on my kitchen dashboard with the maintenance tasks. However. I have one thing that is rubbing my brain the wrong way lol.

Can you help me understand why the pool check chlorine, due in 3 days, is in front of the check ph for the hot tub due in 1 day? Is there a way to force the due date to be the primary sort?

Love this so far.

Would you be upset if i submitted a feature request via github for a "one time maintenance" task?

:slight_smile:

Hey @brunkj — love that it clicked so fast, and thanks for the clear write-up (the screenshot helped). Two things:

The sort — fixed in v2.3.7 (just released).

You diagnosed it exactly. The card was sorting by status only (overdue → triggered → due soon → ok). Within the same status it fell back to the order tasks arrive from the backend (roughly object-creation order), so two "due soon" tasks weren't ordered by due date — that's why pool chlorine (3 days) sat above the hot-tub pH
(1 day).

v2.3.7 adds a secondary sort: within each status, soonest-due first (tasks with no due date go last). So your hot-tub pH (1 day) will now sit above the pool chlorine (3 days). Update via HACS, restart HA, and hard-reload the browser (Ctrl+Shift+F5) so the new card JS is picked up.

I kept status as the primary key on purpose — that way an overdue or sensor-triggered task always surfaces at the top instead of being buried under something merely "due soon" with fewer days. If you'd actually prefer a pure due-date sort that ignores status, say the word and I'll add it as a card option.

One-time maintenance — yes, please file it, and let's design it together.

Not upset at all — that's exactly the kind of request I want. It's come up before, so you'd be the second to ask, and I'd rather get the design right than bolt on a half-fit. A few questions for you (and anyone else following this thread — please chime in, the more real use cases the better):

  1. What are you actually tracking this way? A couple of concrete examples (one-off repair, warranty check, "replace this once it dies", a dated project task…) help me design something that fits more than one workflow.
  2. What should happen after you complete it? Disappear entirely? Stay as a greyed-out "done" entry you can still see? Or just stop scheduling but keep its history/cost record?
  3. Date-driven only, or sensor-driven too? i.e. "remind me once on this date" vs. "do this once when sensor X crosses a threshold, then never again".
  4. Should it count toward stats/budget/history, or stay out of the numbers since it's not recurring?

No need to answer all of it — even one or two of these helps. Drop it on the GitHub issue when you open it and I'll pick it up there.

In the meantime there's a workaround that behaves like a one-shot:

  • Set Interval days = (target date − today) and leave Last performed empty → the task flips to Overdue on exactly that date.
  • When it's done, toggle Enabled off via the task's three-dot menu (keeps the history) or just delete it.

Thanks again for the kind words — enjoy! :slightly_smiling_face:

1 Like

Hi,

That’s exactly what I was thinking—I also need some “one-time” tasks.

We just had a house built and moved in on 11/13/25, and the “package” includes 1-, 5-, and 10-year inspections.

So, in my case, I need three one-time tasks: on the anniversary of the move-in, with a trigger set 100 days in advance, so I can schedule the home inspection in time (they expect you to book it three months in advance).

Afterward, I’d like to keep the task in the system as “completed” so I can go back and view notes if needed.

And one small detail: could you add the option to specify months in addition to days? That is, a task that needs to be completed every six months.

Translated with DeepL.com (free version)

FANTASTIC!! Working like a champ :slight_smile:

So my thought for the one offs is just not have a recurring.

Examples: Pressure wash the deck. (not really a recurring thing, just maintenance that needs done).

My use case here (and this is my specific case) I have a dashboard in my kitchen and i used to have "house chores" on it. Those house chores are random things that need done around the house. Stuff like "pressure wash the deck", fix weather stripping, repair screen stupid cat broke. Things like that. Now, i know those are "tasks" or chores, but i was treating those difference as they are one offs that ANY one should be able to do. My parents come through town about once a quarter for a week and my pops gets bored. So he just looks at the house todo list and does stuff.

I have figured atleast some sort of a work around in my case, instead of doing the one off's in the maint system, I was looking at just having the maintenance system when something recurring becomes due, adding those as "todo's" to my "house chores" todo list. Would probably require marking it off in 2 places, but i could possibly figure out a way around that too :slight_smile:

I know my particular use case might not justify the feature .

Update — v2.6.0: one-time tasks + month/year intervals :spiral_calendar:

@Brunkj @Michael_Dahl this one's for you — the features you asked about are now live in v2.6.0:

1. One-time (non-recurring) tasks. A task can now have a single due date and no repeat. It behaves like any other task — Due Soon / Overdue status, advance warning, notifications, history — and once you complete it, it's archived (drops out of the active list automatically). Perfect for a single milestone or
reminder.

2. Interval units — days / weeks / months / years. Time-based tasks are no longer days-only:

  • "Every six months" → Time-based, interval 6, unit Months
  • A recurring multi-year check → interval 5, unit Years, etc.

The math is calendar-aware: months/years land on the real calendar date, the 31st / Feb 29 clamp to the last valid day, and leap years are handled. Tip: set Interval anchor → From planned date (no drift) if you want it to stay on exactly the same date each cycle instead of drifting with your completion date.

For the 1-/5-/10-year inspection milestones: I'd model each as a one-time task with its due date (installation date + 1 / 5 / 10 years) and an advance heads-up via Warning days before due — you'll get a Due Soon status and a notification ahead of time, then it archives once signed off. If a check genuinely repeats
(e.g. every 5 years), use Time-based + Years so it re-schedules itself.

You can set all of this in the task dialog (panel or card), and it round-trips through JSON / YAML / CSV export-import too.

Available now via HACS — hit Recheck repositories if you don't see v2.6.0 yet. Thanks for the suggestions, they shaped this release! Let me know how it works for your setups. :slightly_smiling_face:

Been using this for the last week. Beautiful!!! I even have my daughter picking up some of the regular stuff like testing the pool/hot tub chemicals. Awesome!!!

1 Like

Thank you for the great integration
Its extremely useful

I start usuing it and i have some suggestions to shear:

  1. some home unit like multi stage filter have multi filters with different due date to change, suggestions to add one custom for the unit and include all the stages but different tasks

  2. for some maintenance replacement good to include the remaining days count down in the integration section rather than OK statues to use it in bars

Thank you again

:tada: Maintenance Supporter is now in the HACS default store!

Happy update: as of June 20, 2026, Maintenance Supporter is part of the HACS default store. You no longer need to add it as a custom repository - just open HACS, search for “Maintenance Supporter”, and install.

  • New users: HACS → search “Maintenance Supporter” → Install → restart Home Assistant. That’s it.

  • Existing users: nothing changes — your current installation keeps working and updates exactly as before.

A big thank-you to everyone in this thread :folded_hands: - a lot of what shipped over the past months (one-time tasks, interval units in days/weeks/months/years, completion actions, vacation mode, the Lovelace card overhaul, multi-language support, and more) came straight from your feedback, ideas, and bug reports. It genuinely shaped the integration.

If you were waiting for the “official” HACS listing before trying it - now’s the time. Issues and ideas remain very welcome on GitHub (GitHub - iluebbe/maintenance_supporter: Home Assistant custom integration for tracking and managing maintenance tasks with adaptive scheduling, sensor-based triggers, and notifications · GitHub). Happy maintaining! :hammer_and_wrench:

HACS (Recommended)

Maintenance Supporter is available in the HACS default store (since 2026-06-20) - no custom repository needed.

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

  1. Open HACS, search for "Maintenance Supporter", and install it - or click the button above to open it directly.

  2. Restart Home Assistant

I just want to say thank you for building this integration. While there's several like it available, yours is most feature complete and just what I needed! :grinning_face:

1 Like

This is exactly what I was looking to get done! I've gone on a little NFC tag with some removable labels all over the house. Wife wasn't too happy until we went a 2 weeks and the place still looked semi decent. Now she's asking me to add to it!

I have a dishwasher counter that does a delta since I have a sensor that shows the run count. Which is awesome and I get a indicator showing how many runs till a cleaning cycle is needed.

Then I have my washer but instead of having a sensor for run count I had to make a binary sensor. Using the example, for a washer go figure, from your readme. I set that up and I'm not getting a run count. Is that right? I kind of expected to see little line with X / 20 like with the dishwasher. I can't even tell how many times it's tripped.

And the latest update now shows what I was expecting.

Thanks!!

1 Like

Thank you for the report!
Glad that you like it!

Update roundup: v2.9 → v2.18 — documents & manuals, household features, meter readings & end-of-month scheduling

It's been two busy weeks since the HACS-default-store announcement, and a lot has landed. Here's the practical tour - as usual, what it does for you rather than the full changelog.

Manuals & documents live on the object now (v2.11)

Attach PDFs, invoices, spare-part lists or photos directly to an object — stored safely under /config (so they ride along in every HA backup), deduplicated, taggable, searchable. You can link a document to a specific task, and for PDFs even set a jump-to page, so "how do I do this again?" is one click from the task you're standing in front of. Web links (for manuals that live online) work too.

Warranty tracking + objects table (v2.9)

Each object can carry a warranty date, shown as a colour-coded chip (green valid until / amber expires soon / red expired) — and an opt-in reminder pings you before it runs out. The All Objects view gained a sortable table with configurable columns and CSV export:

Archive instead of delete (v2.10)

Retiring a device no longer means losing its history: archived tasks/objects go inert (no notifications, no status counts) but keep their full cost and completion record. Archiving is instant with an Undo toast (v2.14), and optional retention rules can auto-archive completed one-offs.

The panel got a big usability pass (v2.15)

A new Today tab (what needs attention now — Overdue / Due today / This week, one-tap complete), a command palette ("/" fuzzy search across everything), a template gallery for one-click object creation, and bulk actions (select many tasks → complete/archive at once).

v2.17 — the household release

Eight features in one go; the highlights:

  • Task priorities (Low/Normal/High) and labels/tags — shown on rows, searchable
  • Shared tasks with rotation — assign a task to several household members and let responsibility rotate automatically on each completion (round-robin / least-completed / random). Great for the "whose turn is it?" debates :wink:
  • Completion photos — snap a picture when completing; it lands in the history timeline
  • Native To-do entity — a todo.maintenance list mirrors every active task; checking an item off completes the task. Works with the To-do card and Assist ("mark the filter change done")
  • Missed vs. skipped — skipping an overdue task records it honestly as Missed; an optional per-task completion window blocks checking things off too early
  • Lead-time reminders (e.g. 14/3/0 days before due) and warranty-expiry reminders

v2.18 (today) — meter readings & end-of-month scheduling

Straight from a GitHub feature request (#83):

  • A new Reading task type for recording values — utility-meter readings, level checks. Pairs nicely with completion photos (snap the meter display).
  • End-of-month scheduling: last day of the month, last business day, and a ±N-day offset on every calendar pattern. "Two days before the last working day of the month" is three clicks now.
  • Business days are Workday-aware: if you have HA's Workday integration configured, public holidays and custom working weeks are respected automatically.

For non-English users: v2.18 also fixes a v2.17 regression where the task/complete dialogs could show English while the rest of the panel was correctly localized. After updating, hard-refresh once (Ctrl+Shift+F5, or clear the Companion app's frontend cache).

Docs got a rewrite too — the README now starts from user stories, with the full reference split into FEATURES, EXAMPLES (copy-paste automations) and TROUBLESHOOTING.

As always: update via HACS, restart, and hard-refresh the browser once. Feedback, ideas and bug reports are very welcome - here or on GitHub.

When I add NFC tags I see the name of them in the dropdown to select for a task only until I restart, then they only show up as uupics.