# chores configuration template. # # Copy this to the container host as (for example) # /opt/smart-home/chores/chores.env, fill in real values, and chmod 600 it. # Works with NOTHING filled in below except the identity/ntfy bits — the camera # checks, calendar busy-check, and trash-day-eve check each individually no-op if # left unconfigured. # --------------------------------------------------------------------------- # identity — required for nudging (who's home, who's near which room, who was # recently seen by a camera, and who's assigned which chore). Same token identity # itself uses. # # NOTE: this was `http://127.0.0.1:8097` and could never have worked — inside the # chores container that address is the chores container itself. Since _presence() # fails soft (logs, returns an empty list, waits for the next run), the symptom would # have been nudging that simply never happened, with no error anywhere obvious. # identity is an ordinary service on the same compose bridge network, so its # container name resolves via Docker's DNS. # --------------------------------------------------------------------------- IDENTITY_URL=http://identity:8097 IDENTITY_TOKEN= # --------------------------------------------------------------------------- # Trash-day-eve — same feed trash-calendar reads, this script only ever reads it # too (never writes to the calendar). Leave blank to skip this check entirely. # --------------------------------------------------------------------------- WASTE_ICS_URL= # --------------------------------------------------------------------------- # Household calendar busy-check (optional) — SAME CALDAV_* credentials as # digest-engine's ingest/caldav.py and trash-calendar, reused for a third, # independent READ (never a write here either). If set, a currently-active # calendar event whose summary contains one of CALDAV_QUIET_KEYWORDS pauses # nudging for that run — see README.md's honest limitation (this is household- # wide, not per-person; it can't tell only one person is busy). # --------------------------------------------------------------------------- CALDAV_URL= CALDAV_USERNAME= CALDAV_PASSWORD= CALDAV_VERIFY_TLS=true CALDAV_QUIET_KEYWORDS=busy,meeting,call,movie,sleep # --------------------------------------------------------------------------- # Camera checks — OFF until both FRIGATE_URL and CAMERA_WATCHPOINTS are set. No # camera hardware has been chosen yet (docs/project-plan.md §1.18) — leave this # blank until Tapo pan/tilt cameras are actually deployed as Frigate camera # sources. # # CAMERA_WATCHPOINTS format: "type:frigate_camera_name[:ptz_preset_name],...". # type must be "bin_full", "dishes", or "litter" ("has someone left trash out # somewhere it doesn't belong" — gets told to whoever the camera most recently # recognized nearby, not just whoever's home in general, see README.md). preset # is optional — omit it if the camera doesn't need to move. Example: # CAMERA_WATCHPOINTS=bin_full:driveway_cam:trash_preset,dishes:kitchen_cam,litter:hallway_cam # --------------------------------------------------------------------------- FRIGATE_URL= CAMERA_WATCHPOINTS= # Same LLM host as digest-engine/pantry-vision. OLLAMA_VISION_MODEL must be a # vision-capable model (see pantry-vision/README.md's identical caveat — plain text # models cannot see images at all). # # OLLAMA_TEXT_MODEL is OPTIONAL and does something narrower than it sounds: it only # PHRASES a reminder in a person's chore_reminder_style (set via identity's # POST /people//chore-settings, see identity/README.md) — it never decides who # gets nudged or when, that stays presence/calendar-driven, see check.py's module # docstring. Leave blank (default) and every reminder just uses the plain template, # same behavior as before this existed. OLLAMA_HOST=http://llm-host:11434 OLLAMA_VISION_MODEL=llava OLLAMA_TEXT_MODEL= # --------------------------------------------------------------------------- # Nudging — ntfy, already in the stack (ENABLE_NTFY in setup-container-host.sh). # A single shared topic, not per-person — the notification text names who it's # for, but everyone subscribed to this topic sees every nudge. Set up per-person # topics/subscriptions yourself if that's not granular enough for your household. # # NEGLECT_THRESHOLD_HOURS: how long an open chore sits before the system tries # redirecting the nudge to someone else who's around ("the next person that walks # by") instead of re-nagging whoever was last nudged. # --------------------------------------------------------------------------- # NOTE: this was `http://127.0.0.1:8090` and could never have worked — inside the # chores container, 127.0.0.1 is the chores container itself, not the host, so every # nudge would have failed to send (silently: _notify() logs and moves on). ntfy is an # ordinary service on the same compose bridge network, so its container name resolves # via Docker's DNS, on its INTERNAL port 80 rather than the 8090 published to the LAN. NTFY_URL=http://ntfy NTFY_TOPIC=chores NEGLECT_THRESHOLD_HOURS=4 # --------------------------------------------------------------------------- # CHORE_ASSIGNMENT_STRICT: what an assignment (set in identity's admin panel) # actually means when the assigned person isn't home. # # false (default) — nudge whoever IS home instead. The house rule stays "I don't # care who does it, as long as it gets done"; an absent assignee # doesn't get to be the reason the bin stays full. # true — wait for the assignee; nobody else is asked. # # Both are legitimate readings of "let me assign chores" — pick the one your # household means. Either way, a chore assigned to nobody still falls through to the # ordinary rotation, and litter ignores assignment entirely (see README.md). # --------------------------------------------------------------------------- CHORE_ASSIGNMENT_STRICT=false CHORES_DB_PATH=/data/chores.db LOG_LEVEL=INFO