Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

OpenLitter

BuildLicense: GPL v3Platform: ESP32Latest releasePRs Welcome

Open source ESP32 replacement firmware for the Litter Robot 1, 2 and 3.

OpenLitter brings a dead Litter Robot back to life with a cheap ESP32, an L298N motor driver, the original DC motor, and a couple of Hall sensors. It exposes a mobile-friendly Web UI (PWA), real-time WebSocket updates, optional MQTT with Home Assistant auto-discovery, optional weight and mmWave presence sensors, and OTA updates.

Important

This is community firmware. It is not affiliated with Whisker / Litter Robot. Use at your own risk.


Features

  • PWA Web UI — installable app on your phone, dark mode, fully offline-capable, zero CDN dependencies.
  • Real-time updates via WebSockets (no polling, no refresh) — live state badge, live HOME/DUMP/CAT sensor pills, live last cycle.
  • Robust state machine with watchdog (per phase), anti-pinch with grace period, and a boot-time HOME check that recovers from power cuts mid-cycle.
  • Configurable cycle mechanics — pause at DUMP (waste falls) and sand-shake leveling past HOME (CW + back CCW) tunable from the Web UI; defaults match a real Litter Robot.
  • Manual command set — Cycle, Empty, Reset (full clean), Home (park without dump), Pause, Resume, Tare. Distinct grace periods for manual pause (5 min) vs anti-pinch pause (15 s).
  • Self-healing WiFi — falls back to an OpenLitter-Setup access point on first boot or repeated failures; cleaning cycles keep working offline.
  • Optional MQTT with Home Assistant auto-discovery (state sensor, weight, cat-present binary sensor, command buttons, availability LWT).
  • Optional weight sensor (HX711 + 4 load cells under the feet) for cat detection by weight delta.
  • Optional mmWave presence sensor (HLK-LD2410C) as an extra confirmation layer.
  • Last 20 cleaning cycles kept in history (NVS, survives reflashes), with a per-day bar chart on the dashboard for at-a-glance trends over the last 7 days.
  • Live logs in the browser — Logs tab streams state transitions, WiFi/MQTT/Update events in real time over WebSocket. Filter by Info/Warn/Error, pause, copy or download as .txt.
  • In-browser firmware update — drop a firmware.bin / littlefs.bin onto the Web UI; progress bar + post-reboot polling, no PC tools required. See docs/updating.md.
  • ArduinoOTA push from PlatformIO for developers, with password protection.
  • mDNS — reach the device at openlitter.local.
  • 100% configurable pins and switch type (NC/NO) from the Web UI — no recompile needed for most settings.
  • Companion Home Assistant integration + Lovelace card at davdlic/OpenLitter-HA — local-push, auto-discovery, native HA Update entity that flashes both firmware and Web UI from a release.

Compatibility

ModelStatusNotes
Litter Robot 1✅ SupportedSame motor + Hall sensor topology
Litter Robot 2✅ SupportedSame motor + Hall sensor topology
Litter Robot 3✅ SupportedDrop-in replacement for the original mainboard

OpenLitter does not support the Litter Robot 4 (different mechanical and electronic architecture).


Hardware

Required

PartNotes
ESP32 dev boardAny ESP32 (NodeMCU-32S, DevKitC, WROOM-32...)
L298N H-BridgeDrives the original 12 V DC globe motor
12 V power supplySized for the original motor (≥ 2 A recommended)
2× position sensorsOriginal in globe detect the HOME and DUMP magnets on the globe.
1× micro switchOriginal in pedal. NC or NO, both supported

Optional

PartNotes
HX711 + 4× load cells4 cells (one per foot), 20 kg or 50 kg each, summed in parallel
HLK-LD2410C24 GHz mmWave presence sensor, mounted near the globe opening

Wiring

See docs/wiring_diagram.md for the full pinout table, the reference schematic (interactive Cirkit Designer view) and the connection diagram. Defaults:

FunctionESP32 pinNotes
Motor IN119L298N IN1
Motor IN221L298N IN2
Motor EN (PWM)18L298N ENA, set to -1 to disable
Hall HOME22Home position sensor
Hall DUMP23Inverted/dump position sensor
Cat micro switch16Pedal switch + cable safety in parallel
HX711 DOUT34Optional, if weight sensor enabled
HX711 SCK35Optional
LD2410C RX4Optional
LD2410C TX5Optional

All pins are configurable from the Web UI — these are only defaults.


Installation

1. Get the code

git clone https://github.com/davdlic/OpenLitter.git
cd OpenLitter

2. Install PlatformIO

Install VS Code and the PlatformIO extension.

3. Configure (optional, all of this is also editable from the Web UI later)

Edit src/config.h if you want to change the default pin map or enable optional sensors at compile time.

4. Build & upload firmware

In PlatformIO: BuildUpload, or:

pio run -t upload

5. Upload the Web UI to LittleFS

pio run -t buildfs -t uploadfs

6. First boot

On first boot OpenLitter starts an access point:

  • SSID:OpenLitter-Setup
  • Password:openlitter
  • IP:192.168.4.1

Open http://192.168.4.1 from your phone, scan and pick your home WiFi, save. The device reboots and joins your network. From then on it is reachable at http://openlitter.local.

Boot recovery

Every boot — power-on, power-cut recovery, OTA restart, factory reset, fresh install, intentional reboot from the Web UI — the firmware runs a full reset cycle: CCW → DUMP → pause → CW → leveling → HOME. Always lands at HOME in a known-good state regardless of where the globe was. The UI surfaces this as the RESETTING state and the cycle is not counted in history (it's a startup routine, not a cleaning).


Configuration

The full list of compile-time defaults lives in src/config.h. At runtime, every relevant setting is editable from the Web UI under Settings:

  • Network — WiFi credentials, hostname, static IP, recovery AP password.
  • Timing — wait-after-cat, cat fallback timeout, cycle watchdog (per phase), anti-pinch reverse time, cycle/empty pause at DUMP, cycle level overshoot (sand shake past HOME).
  • Hardware — motor pins, motor speed, Hall pins, switch pin and type (NC/NO), debounce.
  • Sensors — weight sensor (capacity, threshold, tare), LD2410C presence sensor.
  • MQTT — broker, port, credentials, topic base, HA auto-discovery toggle.
  • System — in-browser firmware/filesystem update, OTA toggle, history size, factory reset, config import/export, restart.

Settings, WiFi credentials and cycle history are persisted in the ESP32 NVS partition (Arduino Preferences, namespace openlitter). Re-running pio run -t uploadfs to update the Web UI no longer wipes user data.


Optional sensors

See docs/sensors.md for installation details (load cell placement under the feet, LD2410C mounting position, calibration procedure).


Home Assistant

OpenLitter integrates with Home Assistant in two ways:

  1. MQTT — enable MQTT in the Web UI and turn on HA auto-discovery. Entities show up automatically: state sensor, weight sensor, cat-present binary sensor, cycle/empty/reset/pause buttons.
  2. HACS custom integration — lives at davdlic/OpenLitter-HA. Adds richer entities (full history, raw HOME/DUMP/CAT sensors, firmware-update entity that flashes via /api/update), bus events for Logbook + automations, diagnostics download, reconfigure/reauth flows, plus a Lovelace card with rotating-globe animation. See docs/home_assistant.md for setup.

Changelog

See CHANGELOG.md for the per-release history.


Contributing

PRs are very welcome. See CONTRIBUTING.md for guidelines, code style, and how to report bugs.


License

OpenLitter is licensed under the GNU General Public License v3.0. See LICENSE for the full text.

This means you are free to use, modify and redistribute the code, but any derivative work must also be released under GPL v3.


Disclaimer

OpenLitter is not affiliated with, endorsed by, or sponsored by Whisker (Litter Robot). All trademarks belong to their respective owners. The firmware is provided as is, with no warranty — see the GPL v3 disclaimer.

About

Revive your broken Litter Robot 1/2/3 with an ESP32. Open source firmware with Web UI, MQTT, Home Assistant auto-discovery and fully configurable hardware.

Topics

Resources

Contributing

Stars

2 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages