petlibro: gate catbro behind petlibro_catbro_enabled (default false)
Summary
Feederhub (`roles/utilities`) now handles the live MQTT bridge + video plane catbro used to provide. Both stacks running side-by-side on nuc-mini fight for `:8554` (RTSP) and `:8555` (WebRTC) / `:1984`, so the default deploy of this role now ships only mosquitto.
Catbro stays available behind a flag for protocol research — its `--mode record` JSONL log is how we found `DEVICE_LOG_REPORT_EVENT` carries the Kalay UID, the real `MANUAL_FEEDING_SERVICE` cmd, etc. Flip the flag on for a capture session, off for normal operation:
``` ansible-playbook deploy/petlibro.yml -e petlibro_catbro_enabled=true ansible-playbook deploy/petlibro.yml -e petlibro_catbro_enabled=false ```
`remove_orphans: true` on the compose task tears down the running catbro container when the flag flips back off — without it the stale container would keep holding the go2rtc ports hostage from feederhub.
Implementation
- `defaults/main.yml`: new `petlibro_catbro_enabled` flag, defaults `false`
- `compose.yaml.j2`: catbro service block wrapped in `{% if %}`
- `tasks/main.yml`: catbro-specific tasks (clone, Dockerfile, creds.toml, go2rtc.yaml, src dir, data/catbro dir) gated with `when: petlibro_catbro_enabled | default(false)`. Build flag on the compose task handles the case where `catbro_git` is unregistered (clone skipped) via `default(false)`
- `README.md`: rewritten to lead with "mosquitto-only by default" and describe enabling catbro for capture sessions
Test plan
-
`ansible-playbook deploy/petlibro.yml` (default: catbro disabled) — `docker ps` should show only `petlibro-mosquitto`, no `petlibro-catbro`. The 8554/8555/1984 ports are free for feederhub. -
`ansible-playbook deploy/petlibro.yml -e petlibro_catbro_enabled=true` — catbro container appears. -
Toggle back to false → catbro disappears (`remove_orphans` does the work).