• v0.2.0-rc.30 b05b2ba0da

    v0.2.0-rc.30
    All checks were successful
    Publish / Update the Homebrew tap formula (stable or -rc per tag) (push) Successful in 6m47s
    Publish / Create releases + Linux binary (Forgejo, NAS, GitHub) (push) Successful in 26m33s
    Publish / Bridge the macOS .pkg → NAS (push) Successful in 3s
    Publish / Add the bottle block to the tap (second pass) (push) Successful in 20s
    Publish / Prune the candidates this release supersedes (push) Has been skipped
    CI / Shell scripts and documentation links (push) Successful in 18s
    CI / Test the dependency floors the package advertises (push) Successful in 54s
    Publish / Refuse anything that is not a release tag (push) Successful in 1s
    CI / Lint, type-check, test (library, 3.14) (push) Successful in 1m6s
    CI / Lint, type-check, test (library, 3.11.0) (push) Successful in 1m10s
    Publish / Publish to PyPI (push) Successful in 26s
    CI / Type-check + test the integration (push) Successful in 2m26s
    Pre-release

    Cody Bryant released this 2026-08-18 13:57:22 -07:00 | 25 commits to main since this release

    The release where the robot stopped being read-only. Clean cycle and Reset are
    real buttons now, and whiskerless issues the certificates your broker needs
    instead of leaving that to you.

    Thanks to @CryingPecan, whose LitterHopper robot
    is behind much of the hopper work. Protocol detail lives in
    docs/devices/litter-robot-4/.

    Breaking changes

    • Broker usernames and passwords are gone--username, --password and
      WHISKERLESS_PASSWORD. Everything authenticates by certificate now.
    • One broker per machine. --host and --ca moved off the everyday commands
      onto setup. A separate broker is a separate store: point WHISKERLESS_HOME at
      it.
    • --port and --insecure are gone. The robot's port is fixed in its firmware
      and it always checks the broker's name, so both could only point the CLI somewhere
      the robot cannot follow. A saved port is ignored, not an error.
    • whiskerless adopt is removed. Re-provision instead.
    • The store moved to ~/whiskerless. Your old ~/.whiskerless is moved there
      on first run.
    • binary_sensor.…_waste_drawer_removedsensor.…_waste_drawer_last_moved.
      The robot never reports which way the drawer moved.
    • switch.…_panel_sleep_mode is now a binary sensor — the firmware refuses
      direct writes. Use the weekday schedule entities.
    • Clean cycle wait time is a number (3–30 minutes), not a select.
    • Library: Hazard.MOTOR, MotorCommandError, allow_motor,
      LitterRobot4Client and WhiskerlessAuthError are removed. Power still needs
      allow_dangerous.

    Added

    • Clean cycle and Reset buttons. Empty cycle, Power and WiFi ship disabled and
      marked (danger) — each costs a litter refill or takes the robot off the
      network. The CLI gains empty-cycle, power and wifi-toggle.
    • whiskerless runs a certificate authority for you. whiskerless setup makes
      the CA, your broker's certificate and this machine's identity, then prints the
      three files your broker needs. Bring your own with --ca and --ca-key.
    • Each robot gets its own certificate, written over BLE and named for its
      serial — so your broker can stop accepting anonymous clients.
    • whiskerless backup and whiskerless restore — the whole store in one
      optionally-encrypted file. The CA key is the one thing you cannot regenerate.
    • The CLI remembers your robots. provision saves them; robots, use and
      forget manage them. A second robot asks only for its serial and WiFi password.
    • Provisioning verifies the WiFi join, so a mistyped password fails loudly
      instead of leaving you a robot that never appears.
    • Litter level as a percentage — self-calibrating, or pinned with one press.
    • LitterHopper support: connected, fill gauge, and an out-of-litter alert the
      firmware never raises. A dispense arrives as three messages ~20 s apart, so the
      level survives a restart and one dispense cannot prove an empty hopper.
    • New entities: last cat visit, visit duration (disabled until your robot
      proves it reports one), waste drawer last moved, panel brightness for bright and
      dark rooms, and excess-weight detection.
    • whiskerless status, calibrate and panel-reset.
    • New install channels: apt and dnf repositories, Homebrew with prebuilt
      bottles, .deb/.rpm, a signed macOS .pkg, and standalone Linux binaries —
      none of which need a system Python. Packages are GPG-signed
      (4BBACD5A6FF38564); setup is in the README.

    Fixed

    • Cat detection no longer mistakes weight on the scale for a cat, handling the
      robot is not a visit, and long visits are no longer dropped.
    • robotStatus 10 is the clean cycle. Unmapped, its readings were published as
      real litter levels. Readings are also suppressed while the globe is not level.
    • The globe motor fault sensor watches the activity stream, where the fault
      actually appears — the state document sat at 0 through a real fifty-minute fault.
    • Panel sleep and wake times can be set, and the weekday schedule arms every
      day rather than only Sunday.
    • whiskerless setup survives a long hostname, and reissues the broker's
      certificate when you move the broker — if it holds your CA's key. A certificate
      it did not issue is reported, never overwritten.
    • Provisioning stops scanning the moment it finds your robot — a robot only
      advertises while you hold Connect, and it was spending that window.
    • Errors are sentences, not stack traces. --debug still gives the traceback.
    • A short press of Connect toggles WiFi off, which the docs called harmless —
      the robot vanishes from your broker and looks dead. Hold it for pairing mode.
    • The declared Home Assistant minimum is correct (2025.3.0).

    Changed

    • The Refresh button is on by default, on existing installs too.
    • Manual calibration buttons ship disabled — the robot calibrates itself.
    Downloads