-
v0.2.0-rc.7
Pre-releaseSome checks failedCI / Lint, type-check, test (library, 3.11.0) (push) Successful in 30sCI / Shell scripts and documentation links (push) Successful in 17sCI / Lint, type-check, test (library, 3.14) (push) Successful in 35sCI / Test the dependency floors the package advertises (push) Successful in 22sPublish / Publish to PyPI (push) Successful in 30sCI / Type-check + test the integration (push) Successful in 2m37sPublish / Create releases + Linux binary (Forgejo, NAS, GitHub) (push) Has been cancelledPublish / Update the Homebrew tap formula (stable or -rc per tag) (push) Has been cancelledPublish / Bridge the macOS .pkg → NAS (push) Has been cancelledreleased this
2026-08-11 12:44:31 -07:00 | 140 commits to main since this releaseThanks to @CryingPecan, whose LitterHopper robot
on ESP 1.4.4 is behind much of what's below. Protocol detail lives in
docs/devices/litter-robot-4/.Added
- The clean cycle and reset buttons are back, and this time they work: they
synthesise the same button press the panel sends. Proven on ESP 1.1.75 and 1.4.4. - Empty cycle and Power buttons, disabled by default and named
(danger)— an
empty cycle dumps the globe into the drawer, and Power takes the robot off the
network. The CLI gainsempty-cycleandpower, which prompt first. - Pet weight actually works. Recent rc builds doubled the reading; weights now
match the household scale (raw ÷ 100, the cloud's own units). - LitterHopper support: connected, fill gauge, and an out-of-litter alert the
firmware itself never raises. The hopper entities switch themselves on the first
time a hopper reports. - Litter level as a percentage. It calibrates itself over time; one button press
with the globe filled to the line pins it immediately. - New entities: last cat visit, last visit duration, waste drawer last moved,
and panel brightness for bright and dark rooms. - Activity-derived entities survive a restart instead of reading unknown until
the next cat visit. - New install channels:
brew install sisyphusmd/tap/whiskerless,.deband
.rpmfor amd64 and arm64, and standalone Linux binaries for both. None of them
need a system Python — the audience is someone provisioning a robot from a laptop
that has none.
Fixed
- A robot without a LitterHopper no longer grows hopper entities. The dispense
burst turns out to fire on hopperless robots too, so it no longer counts as proof
a hopper exists — only a real hopper link report (0x57) switches the entities on. - The weekday sleep schedule now arms every day. It is a per-day bitmask, not a
switch, and turning it on armed Sunday alone — so it looked fine if you tested on
a Sunday and did nothing all week. - The panel sleep schedule can actually be set. The sleep and wake time entities
wrote a register the firmware only computes, so they never did anything. - Litter readings are suppressed while the globe is not level. Mid-cycle the
sensors read the globe rather than the litter, and that was published as a level. robotStatus10 is the clean cycle on every firmware; the old map called it a
cat pause. The boot cycle and the filter-change wizard are mapped too — both move
the globe, and while unmapped their readings published as real litter levels.whiskerless set night-light-mode autoworks. Every spelling the command
accepts used to crash — and it is the command in the README quickstart.- The declared Home Assistant minimum was wrong (2025.2.0), so a user on 2025.2
could install this and watch it fail. It is 2025.3.0. - Every settings write is verified by reading it back, a multi-register write no
longer loses one of its parts, and broker failures are reported rather than raised
as a traceback. - The hopper no longer drops to unknown on a link code that is not a disconnect, and
one dispense can no longer prove an empty hopper on its own.
Changed
- Breaking:
binary_sensor.<robot>_waste_drawer_removedis replaced by
sensor.<robot>_waste_drawer_last_moved. The robot reports that the drawer moved
and never which way — nine codes turned up across removals and insertions alike. - Breaking: clean cycle wait time is a number (3–30 minutes), not a select. Move
automations fromselect.<robot>_clean_cycle_wait_timeto
number.<robot>_clean_cycle_wait_time. - Breaking (library):
Hazard.MOTOR,MotorCommandErrorandallow_motorare
gone. A written press is the same event as a physical one, so the robot's own
interlocks apply either way. Power still requiresallow_dangerous. - Last visit duration needs ESP 1.4.4, so it ships disabled and switches on the
first time a robot reports one. On 1.1.75 that register has never appeared, and the
sensor would otherwise read unknown for the life of the robot. - Cat detected follows the scale, not the sensors looking into the globe, so it
can stay on for hours after a cat leaves. Automate on it as "the robot is busy
with a cat" rather than "there is a cat in the box right now".
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- The clean cycle and reset buttons are back, and this time they work: they