New here? This is the final part of the OpenNeato series. Parts X1–X4 covered the problem (Neato cloud shutdown), the fix (ESP32 + OpenNeato firmware), the hardware wiring, and the dashboard features. This part covers putting the robot to actual work: running a full cleaning cycle, sending it back to dock, setting a schedule, and keeping the firmware updated.
Running a Full House Clean
From the dashboard, tap House. The robot plays its startup chime, lifts off the dock, and begins its systematic room scan — exactly as it did when the original Neato app was alive.
The D3's cleaning pattern hasn't changed: it maps the room first using LIDAR, then runs methodical parallel passes across the floor rather than the random-bounce pattern used by cheaper robots. The difference is noticeable, especially in larger rooms.
During cleaning, the dashboard updates in real time:
- Status changes from Active to the current action (scanning, cleaning, returning)
- Mode shows the current state
- Battery percentage updates as the run progresses
If the battery drops below a threshold mid-clean, the robot returns to dock automatically, charges, and resumes where it left off — the same behavior as before.
To stop early: tap Pause then Send to Base. The robot navigates back to the dock and powers down the brush motor.
Auto-Dock
The Send to Base button in the dashboard (visible during any active mode) triggers an immediate return-to-dock sequence. The robot uses its LIDAR map and dock IR sensors to locate and approach the charging station.
This works even if the robot has wandered far from the dock — as long as it has a continuous map of the space, it can navigate back.
If the robot seems confused about dock location (can happen after manual driving if the map gets disoriented), placing the robot manually within about 1.5 meters of the dock and tapping Send to Base usually resolves it.
Setting a Cleaning Schedule
Go to Settings → Cleaning Schedule.
The scheduler shows a 7-day grid. Tap any day to set a cleaning time for that day. The ESP32 stores the schedule locally — no internet required, no server to sync with. As long as the D3 is docked and powered, the ESP32 will trigger the cleaning at the scheduled time.
A few practical notes:
- The robot needs to be docked and charged at the scheduled time, or the run won't start
- The ESP32 needs to maintain WiFi connection to keep its internal clock synced (it uses NTP time servers)
- The timezone setting in Settings → Device affects when scheduled runs fire — set it correctly for your location
Push Notifications with ntfy.sh
For phone alerts when cleaning finishes (or when something goes wrong):
Step 1 — Go to ntfy.sh and note a topic name. It can be anything — something like myneato-alerts-[random string] to avoid collisions with other users. No account needed for basic use.
Step 2 — In OpenNeato: Settings → Notifications → enter the topic name.
Step 3 — On your phone, install the ntfy app (iOS or Android) and subscribe to the same topic.
From this point, the ESP32 sends a push notification when: cleaning starts, cleaning finishes, the robot gets stuck, or the battery is critically low. Delivered directly to the phone, no Neato account, no Vorwerk infrastructure.
Updating the Firmware
OpenNeato is actively developed — new features and bug fixes appear on the GitHub releases page as the project matures. Updating is straightforward.
Method 1 — Web OTA (Over The Air): In the dashboard, go to Settings → About → Check for Update. If a newer version is available, the dashboard will offer a one-tap update. The ESP32 downloads the new firmware over WiFi and reboots. No computer, no USB cable needed.
Method 2 — Manual re-flash:
If OTA isn't working (or if the firmware is corrupted), connect the ESP32 to a laptop via USB-C and run openneato-flash again exactly as in Part X2. The process is identical to the initial flash — it downloads the latest version and overwrites the existing firmware. WiFi credentials are preserved.
After any firmware update, check Settings → Device to confirm the TX/RX GPIO pin assignments are still correct — these should persist across updates but are worth verifying.
What OpenNeato Restored (Final Summary)
| Feature | Status |
|---|---|
| Dashboard with live status and battery | ✅ Working |
| Full house clean | ✅ Working |
| Spot clean | ✅ Working |
| Pause / Resume | ✅ Working |
| Auto-dock (Send to Base) | ✅ Working |
| Manual drive with live LIDAR map | ✅ Working |
| Cleaning schedule | ✅ Working |
| Push notifications | ✅ Working |
| Firmware OTA updates | ✅ Working |
| Zone cleaning | 🚧 In development |
| No-go lines | 🚧 In development |
A D3 that had been reduced to "press the physical button and hope" now does everything it did before — scheduled autonomous cleaning, auto-dock, remote start from a phone — with no cloud dependency and no subscription.
Closing Thoughts on the OpenNeato Project
This series started with a robot that a corporate decision had quietly made less capable overnight. It ends with that same robot running on fully local infrastructure, doing its job, sending notifications to a phone, and updating its own firmware when new versions are available.
Full credit goes to renjfk and the OpenNeato contributors on GitHub. The project is still early — zone cleaning and no-go lines are still coming — but the core features are solid, the installation is genuinely accessible, and the community around it is active.
If you own a Neato D3 through D7 that lost its cloud connection, the fix exists. It costs about $5 in hardware and an afternoon of careful work.
Phase 3 continues with Part 22 — GPS Waypoint Logger with the NEO-6M module.

