Releases: botts7/dreame-scheduler
Release list
v0.3.4 — Maintenance panel + can't-get-home fix
Two changes: a maintenance panel for the add-on, and a fix for false "can't get home" alerts.
What's new
Maintenance panel (0.3.3). The report/robot data now carries each wear part's remaining-life % and its reset-button entity, powering a new Maintenance card in the add-on (filter, brushes, mop pad, sensors, detergent, silver-ion) with a one-tap Reset per part.
"Can't get home" watchdog now only watches the return trip (0.3.4). It was firing mid-clean on long runs — an auto-reclean pass re-covers already-counted floor, so cleaned-m² and task-% sit flat even though the robot is cleaning fine, and the watchdog mistook that for "stuck." It now arms only once the robot is heading for the dock (sticky through a mid-return reposition, cleared when it docks). Normal cleans no longer trip it; the real case (sent home, can't get back) still fires.
Full notes: https://github.com/botts7/dreame-scheduler/blob/main/CHANGELOG.md
v0.3.2 — Station fault no longer re-blocks cleaning
Stops a station fault from re-blocking cleaning the next day.
What's fixed
When a dock fault ends a run — most commonly "mop install failed" (the robot can't mount its mop pads) — the scheduler now:
- Stops the robot's task, so its firmware can't auto-resume the doomed mop job. (Dreame firmware re-runs a paused task on its own; that task then fails again and "blocks" cleaning the next day.)
- No longer queues an auto-retry — the un-done rooms simply stay pending for the weekly catch-up, which picks them up once the station's fixed, instead of hammering a broken mop every time the house empties.
Fixes a real case where a jammed mop-pad mount left the same three rooms failing across multiple days.
Full notes: https://github.com/botts7/dreame-scheduler/blob/main/CHANGELOG.md
v0.3.1 — Station / mop-install fault handling
Handles a dock/station fault (can't mount the mop pads) cleanly.
What's fixed
- Station / mop-install alert. A dock setup fault — most commonly "mop install failed" (the robot can't mount its mop pads) — now gets its own clear alert: "🧩 can't set up at the dock — check the mop pads are seated and the tray's clear," with the real error code. The robot can't fix this itself, so the run is ended (un-done rooms defer to the weekly catch-up) instead of retrying.
- No more wedged runs. A run that errored but whose robot has since returned to the dock (no active error, parked, not mid-recovery) is now finalised promptly instead of sitting open — previously an errored suspended run could block the next day's dispatch for up to 24 h. Healthy suspended runs (paused for presence, waiting to resume when empty) are unaffected.
Prompted by a live case: pebbles knocked off a plant were vacuumed up, jammed the mop-pad mount, and left the daily run stuck for hours.
Full notes: https://github.com/botts7/dreame-scheduler/blob/main/CHANGELOG.md
v0.3.0 — Maintenance/consumable alerts + real error codes
Maintenance / consumable alerts — plus real error codes in fault alerts.
Highlights
- Wear-part low alerts. The scheduler now watches the robot's own remaining-life counters for the filter, main & side brushes, mop pad, dirt sensors, detergent and silver-ion module, and sends a notification the first time any drops to/below a threshold (default 10%). Each alert has two buttons: Reset counter — once you've replaced the part, this presses the robot's own reset so the count starts fresh — and Dismiss. It alerts once per part and won't nag again until the part is replaced. New options: Alert when a wear-part runs low (on by default) and the threshold %.
- Real error codes in alerts. Fault alerts (needs-a-hand, recovering, overreach) now include the robot's actual reported error (e.g.
right_wheel_speed), not just a friendly summary — so a recurring hardware fault is visible instead of hidden behind "a firmware hiccup". The overreach alert also names the room(s) the robot strayed into. - Wheel-speed faults treated as hardware. A
wheel_speederror (drive wheel not turning at the commanded speed — slipping / jammed / something wound round the axle) now asks you to check the wheel instead of a futile reverse-out, matching howwheel_motoris already handled.
Current wear-part life is also surfaced on the robot-status attributes for dashboards.
Full notes: https://github.com/botts7/dreame-scheduler/blob/main/CHANGELOG.md
v0.2.3 — Tangle-aware recovery
Bug-fix release — smarter handling when the robot gets tangled in a cable or cord.
What's fixed
A cable / cord / cloth tangle (the robot reports it as a suffocate) used to run the full reverse-out recovery — up to three reverses. But you can't reverse out of a wrap: backing up just drags the tangle around, and because dragging registers as "movement" the reverse-moved-nothing safety check never caught it — so the robot kept reversing until it gave up, and often had to be rescued by hand.
Now a tangle gets one gentle reverse (in case it's a loose cord it can back off), a short grace period for the robot's own recovery, and then a clear "🪢 Vacuum is tangled — please free it by hand" alert instead of grinding. It sends the "✅ all clear" once you've freed it and it's back on the dock.
Also fixed a stale recovery notification that claimed it had "walled off the spot" (recovery no longer does that).
Full notes: https://github.com/botts7/dreame-scheduler/blob/main/CHANGELOG.md
v0.2.2 — Fix return-to-dock loop during mop-pad wash
Bug-fix release — stops a return-to-dock loop during mop-pad washing.
What's fixed
When a run had been paused because someone was home, the scheduler kept the robot on the dock by treating any cleaning state as it having escaped. But a mop-pad wash / dry cycle also reports cleaning while the robot is sitting on the dock — so the scheduler fired return_to_base on every wash-cycle blip and looped for the whole wash (state flipping cleaning ↔ docked every few seconds).
It now tells a genuine escape apart from the robot being home / washing / drying at the station, so a wash cycle is left alone. The return-on-arrival step is likewise skipped when the robot is already home.
Pre-existing (affected 0.2.0 and 0.2.1). Recommended update for anyone using presence-paused runs.
Full notes: https://github.com/botts7/dreame-scheduler/blob/main/CHANGELOG.md
v0.2.1 — Honor native per-room settings + clearer stuck alerts
Honors the robot's own per-room settings, with clearer and self-resolving stuck alerts.
Highlights
- Honor native per-room settings (new default). The scheduler now respects the mode / mop / suction you set per room in the Dreame app — a room you set to sweep-only stays sweep-only. Vacuum before mop (which force-mopped the whole house) is skipped while this is on. Fixes wet mop pads being dragged onto a carpet the robot was natively set to sweep, which stalled the wheel motor.
- Wheel-motor / hardware faults now ask you to check the wheels (something tangled / a jam) instead of a futile reverse-out that then mis-reads as "beached".
- Honest stuck wording — "beached, lift it onto flat floor" only when the drop sensor actually fired; otherwise "stuck, needs a check".
- "All clear" follow-up — after a "needs help" alert, once the robot sorts itself out and docks you get a "✅ all clear, no action needed".
- New "can't get home" watchdog (detect & adapt). Catches a robot that's moving but getting nowhere — circling, repositioning, or blocked while returning. It tracks real progress (task-progress %, cleaned m², or netting closer to the dock), so a slow-but-real clean is never mistaken for a stall, and flags "🛟 can't get home" if nothing improves for 8 minutes. Works for manual/native runs too, and clears itself with the "✅ all clear" once docked.
Full notes: https://github.com/botts7/dreame-scheduler/blob/main/CHANGELOG.md
v0.2.0 — Self-healing recovery, trap learner, scheduling controls
A big feature + reliability release: the scheduler now heals itself when the
robot gets stuck, keeps an honest list of rooms it can't reach, and gives you
finer control over how and when each room is cleaned.
Integration (custom_components/dreame_scheduler)
Self-healing recovery. When the robot gets into trouble mid-clean the
scheduler tries to fix it and carry on instead of leaving it stranded:
- Reverses out of a wedge and resumes, re-routing around the spot; route/path
errors are now treated as recoverable. - Detects a beaching / high-centre (drive wheels off the floor) — where no
command can help — and asks for a hand instead of grinding through futile
retries. - Treats an obstruction as a moment, not a wall: it resumes and lets the robot
re-plan rather than fencing off good floor. - Puts the robot's own photo of the obstacle in the alert so you can see what
stopped it. - Silent-stuck and stranded watchdogs catch a robot that stopped moving with no
error, or was left away from the dock after a run, and notify you. - Wakes a deep-'sleeping' robot that would otherwise ignore a dispatch.
Recurring-trap learner. Learns where the robot repeatedly gets stuck across
separate runs, tells fixed hazards (worth walling off) apart from path blocks
(not), and suggests a permanent no-go zone for one-tap approval — it never walls
off floor on its own.
Clean-by-hand list. Rooms the robot genuinely can't reach for weeks become a
Home Assistant to-do list, and clear themselves when the room is next cleaned.
Scheduling.
- Rooms scheduled on several weekdays now clean on each of those days — fixes
multi-day rooms that were silently collapsing to a single weekly clean. - Mop every N sweeps (per room): sweep every scheduled day and mop-after-
sweep every 2nd/3rd/… day, so damp-mopping needn't happen every time. - Door-retry (opt-in): a room skipped for a shut door is retried the same day
once its door has been open long enough to be sure the room is free — away-only,
or while-home if you trust the open-timer.
Reliability. Recovery resumes only the run's own rooms (never a stray whole-
house clean); the robot is reined in if it wanders into rooms it wasn't sent to;
a run that swept implausibly little area isn't credited as done; a manual "clean
now" that merely parks isn't hijacked; the stale-house nudge is gated to daytime;
and mojibake in notification text is fixed.
Labs (opt-in). "Show me where I'm stuck" — the robot drives to an unreachable
room and signals there so you can find the blockage.
Add-on (Dreame Scheduler panel)
- Clean-by-hand list and one-tap trap-learner Apply in the GUI.
- Send test notification button, and a warning for rooms scheduled on no days.
- Branding: wordmark banner as the store logo; Roboto bundled locally so the UI
font loads correctly through ingress.
Project
- CI:
actions/checkoutv4 → v7 (clears the Node 20 deprecation). - Added GitHub issue templates (bug report + feature request).
Thanks
- dreacon34 (Reddit) — for the idea of
driving the schedule off HA sensors to detect room availability, and
re-attempting a room later instead of skipping it (shaped the door-sensor skip,
the opt-in door-retry, and the adaptive-scheduling direction). - DatRandomBoi ("Anton") (HA Community) — for the per-room "mop every N
sweeps" cadence.
v0.1.1 - Branding & packaging
Branding and packaging release — no behaviour changes.
- Bundled brand artwork in
custom_components/dreame_scheduler/brand/, so Home Assistant and HACS display the Dreame Scheduler icon and logo directly (HA Brands Proxy API, 2026.3.0+; local images take priority over the CDN). - README refresh — wordmark banner, a Highlights row (presence-aware cleaning / weekly reporting / self-healing from a stuck robot), privacy-blurred screenshots, and dynamic version + license badges that track releases.
- CI — HACS validation now runs with no ignored checks (brands satisfied by the bundled
brand/folder).
Upgrading from 0.1.0 requires no configuration changes.