openclaw/skills/dog-walk/SKILL.md
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.
npx skillsauth add Dbochman/dotfiles dog-walkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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; per-route locking keeps concurrent polling, finalization, car marking, and delayed Fi enrichment from dropping one another's fields.distance_m, point_count, inferred end_location, and is_interhome_transit.7 AM-12 PM, 12 PM-5 PM, 5 PM-9 PM.Departure 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 (Crosstown residence, West Roxbury) | 30m | | Cabin (Cabin, 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) | Read-only presence-detect.sh observe <location> via the MBP (Crosstown) or locally (Cabin). Detects phone reconnecting without writing correlated presence state, pushing Taildrop, or triggering vacancy automation. 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 timestamps and distance, then merges all Walk segments that overlap our outing window ([our_started_at - 5min, our_ended_at + 5min]). Fi splits a single outing into multiple Walks when the dog pauses for Play/Rest (sniffing, yard time); the merge takes the earliest start, latest end, sum of distances, and records fi_walk_count for transparency. A background thread retries at 5 / 10 / 20 min after return to catch Walks Fi finalizes late — retries are idempotent and always scheduled so late segments can be merged in.crosstown-roomba dock command sends stop before dock because iRobot's MQTT dock is silently ignored during active cleaning. The CLI now skips stop+dock for any robot whose phase is charge (already on dock), so the verify-retry path doesn't re-stop a docked robot when only one needs a re-dock.Charging (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:
Manual CLI/dashboard start commands remain explicit operator actions and do not consult the automation snooze.
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 vacancytools
Use exact configured Reolink cameras through the local Home Hub for availability and power status, fresh stills, visual commentary, protected Dylan/Julia/household sharing, and reversible spotlight control. Supports trusted owner tasks and explicitly scoped proactive automations; not for Nest or Ring cameras, arbitrary recipients, recordings, account changes, or raw camera APIs.
data-ai
Privately manage Dylan and Julia's household plant inventory and care history by physical location, bed, and exact Flower Cam view. Use for confirmed plant onboarding from camera conversations, camera- or bed-filtered inventory, record corrections, individual or whole-bed care, and private filtered exports. Pair with reolink-camera when an owner asks about plants visible in Flower Cam images.
testing
Inspect and control the physically secured Reachy Mini at Crosstown through ClawBody. Use for requests to check Reachy, look around, express an emotion, play any official emotion or dance preset, speak proactively, mute or unmute its microphone, stop movement, or describe what its camera sees.
tools
Handle Reachy/iMessage handoffs, selective durable memory, forgetting, and diagnostics; automatic context comes from the gateway plugin.