• v0.2.0-rc.7 123bdd2570

    v0.2.0-rc.7
    Some checks failed
    CI / Lint, type-check, test (library, 3.11.0) (push) Successful in 30s
    CI / Shell scripts and documentation links (push) Successful in 17s
    CI / Lint, type-check, test (library, 3.14) (push) Successful in 35s
    CI / Test the dependency floors the package advertises (push) Successful in 22s
    Publish / Publish to PyPI (push) Successful in 30s
    CI / Type-check + test the integration (push) Successful in 2m37s
    Publish / Create releases + Linux binary (Forgejo, NAS, GitHub) (push) Has been cancelled
    Publish / Update the Homebrew tap formula (stable or -rc per tag) (push) Has been cancelled
    Publish / Bridge the macOS .pkg → NAS (push) Has been cancelled
    Pre-release

    Cody Bryant released this 2026-08-11 12:44:31 -07:00 | 140 commits to main since this release

    Thanks 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 gains empty-cycle and power, 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, .deb and
      .rpm for 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.
    • robotStatus 10 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 auto works. 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_removed is 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 from select.<robot>_clean_cycle_wait_time to
      number.<robot>_clean_cycle_wait_time.
    • Breaking (library): Hazard.MOTOR, MotorCommandError and allow_motor are
      gone. A written press is the same event as a physical one, so the robot's own
      interlocks apply either way. Power still requires allow_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