Automated dog walk detection and Roomba control. Detects departures via Fi GPS collar, starts Roombas, and monitors return via Ring motion + WiFi + Fi GPS. Use when asked about dog walks, Roomba automation during walks, or walk tracking.
Detects dog walks via Fi GPS collar (departure) and manages Roomba automation with multi-signal return detection (Ring motion + WiFi + Fi GPS).
home_location.walk_id and origin_location fields at departure.~/.openclaw/dog-walk/routes/<location>/<YYYY-MM-DD>/<walk_id>.json.distance_m, point_count, inferred end_location, and is_interhome_transit.7 AM-12 PM12 PM-5 PM5 PM-9 PMDeparture uses combo triggers for fast detection (~1 min), with a GPS geofence fallback.
Typical latency: ~1 minute
This trigger works without Ring (e.g., leaving through back door at cabin) and fires as soon as Fi recognizes the walk activity.
Typical latency: ~1-2 minutes
If no combo trigger fires, the GPS-only path still works:
Typical latency: ~5-7 minutes (normal), ~2 minutes (accelerated)
Acceleration: When the base station is disconnected OR Fi activity is Walk, polling switches from 3min to 30s and the confirmation threshold drops from 3min to 60s. Backyard time does not trigger departure — the 30m geofence (Crosstown) / 75m geofence (Cabin) is large enough that GPS still shows Potato at home even with base station BLE out of range (~30-50m).
Walk hours: 7 AM-12 PM, 12-5 PM, 5-9 PM
Pre-checks:
Per-location Roomba commands:
| Location | Start | Dock |
|---|---|---|
| Crosstown | crosstown-roomba start all | crosstown-roomba dock all |
| Cabin | roomba start floomba + roomba start philly | roomba dock floomba + roomba dock philly |
Fi GPS geofences:
| Location | Radius |
|---|---|
| Crosstown (19 Crosstown Ave, West Roxbury) | 30m |
| Cabin (95 School House Rd, Phillipston) | 75m |
After departure, the return monitor uses three signals — any one triggers Roomba docking:
| Signal | Interval | How it works |
|---|---|---|
| Ring motion | Event-driven | Person detected at doorbell during monitoring |
| WiFi / network presence | Every 30s (after 10min) | ARP scan (Crosstown via MBP) or Starlink gRPC (Cabin). Detects phone reconnecting to WiFi. Ignored for first 10 minutes — phones linger on WiFi at the front door. |
| Fi GPS | Every 30s | Polls Potato's Fi collar GPS. Docks when Potato re-enters home geofence. Base-station echo detection prevents false "at home" readings. |
| Fi GPS (inter-home) | Every 30s | If Potato enters the other home's geofence during monitoring, the walk is auto-finalized as an inter-home transit. Roombas dock at origin, home anchor updates to the new location. |
OngoingWalk path is fetched (dense polyline) and merged into the route fileactivityFeed for authoritative walk timestamps and distance. If Fi hasn't finalized the walk yet (common — feed still shows the previous walk), a background thread retries at 5, 10, and 20 minutes. Only applied when the detected departure falls within the Fi walk window (fi_start to fi_end, ±5min tolerance) — prevents matching wrong walks.crosstown-roomba dock command sends stop before dock because iRobot's MQTT dock is silently ignored during active cleaningCharging (on dock) in status). If not, it retries the dock command up to 2 times (3min between each). If still not docked after all retries, sends an iMessage warning. State is updated with dock_verified: true/false and dock_retry_count.On departure, the collar switches to LOST_DOG mode for high-frequency GPS (~15-30s updates vs ~3-7min in NORMAL). This produces dense route data for dashboard mapping.
Battery protection: If consecutive GPS readings show car speeds (>30mph) for 6+ minutes, the collar switches back to NORMAL to avoid unnecessary drain during inter-home car trips. Speed resets if Potato slows to walking pace.
The collar always resets to NORMAL when the walk ends (via the return monitor's finally block). On listener startup, the collar mode is checked and reset to NORMAL if stuck in LOST_DOG (safety net for crashes/power outages).
Roomba automation can be temporarily disabled per-location via the Roomba Dashboard (port 8553). When snoozed:
Snooze state is stored at ~/.openclaw/dog-walk/snooze.json and expires automatically.
Dashboard UI: Snooze bar on the Roomba Dashboard (port 8553) with 1h / 3h / 8h / Indef presets per location, plus a Clear button.
API: POST http://localhost:8553/api/snooze with {"location": "crosstown", "minutes": 60} (or "all", 0 to clear).
Start commands have a 2-hour cooldown to prevent re-triggering. Dock commands always execute immediately — Roombas should never be left running because of a cooldown.
dog-walk-start <location> # "cabin" or "crosstown"
Starts Roombas and signals the listener to begin return monitoring via inbox IPC.
~/.openclaw/dog-walk/state.json~/.openclaw/dog-walk/history/YYYY-MM-DD.jsonl~/.openclaw/dog-walk/routes/<location>/<YYYY-MM-DD>/<walk_id>.json~/.openclaw/dog-walk/inbox/The listener runs as a persistent KeepAlive LaunchAgent (ai.openclaw.dog-walk-listener).
To check:
launchctl list | grep dog-walk-listener # should show PID
tail -f ~/.openclaw/logs/dog-walk-listener.log
To restart:
launchctl unload ~/Library/LaunchAgents/ai.openclaw.dog-walk-listener.plist
launchctl load ~/Library/LaunchAgents/ai.openclaw.dog-walk-listener.plist
Recent dog-walk changes touched these paths:
openclaw/skills/dog-walk/dog-walk-listener.pyopenclaw/bin/dog-walk-dashboard.pyopenclaw/bin/roomba-dashboard.pyopenclaw/skills/fi-collar/fi-api.pyIf deploying to the Mac Mini, make sure the updated files are present under ~/.openclaw/, then restart:
launchctl kickstart -k gui/$(id -u)/ai.openclaw.dog-walk-listener
launchctl kickstart -k gui/$(id -u)/ai.openclaw.dog-walk-dashboard
launchctl kickstart -k gui/$(id -u)/ai.openclaw.roomba-dashboard
Quick verification:
tail -20 ~/.openclaw/logs/dog-walk-listener.log
tail -20 ~/.openclaw/logs/dog-walk-dashboard.log
tail -20 ~/.openclaw/logs/roomba-dashboard.log
curl -s http://localhost:8552/api/routes?days=30 | jq '.meta'
curl -s http://localhost:8553/api/roombas | jq '.'
This skill handles dog walk detection and Roomba automation triggered by Fi GPS departure.
For related tasks, switch to:
com.openclaw.vacancy-actions) is separate — starts Roombas on vacancy