123 lines
6.7 KiB
Plaintext
123 lines
6.7 KiB
Plaintext
# 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 one of:
|
|
# bin_full — is the bin full
|
|
# dishes — is the sink/counter dirty
|
|
# litter — has someone left trash out somewhere it doesn't belong
|
|
# groceries_out_of_place — is there food still standing out that belongs in a
|
|
# fridge/freezer/cupboard
|
|
# The last two are told to whoever the camera most recently recognized nearby, not
|
|
# just whoever's home in general, and neither can be assigned or exempted away —
|
|
# see README.md. groceries_out_of_place also has a much shorter neglect fuse than
|
|
# everything else (below), because the failure mode is spoiled food, not untidiness.
|
|
# 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,groceries_out_of_place:kitchen_cam
|
|
# ---------------------------------------------------------------------------
|
|
FRIGATE_URL=
|
|
CAMERA_WATCHPOINTS=
|
|
|
|
# How long groceries may stand out before the nudge is redirected to somebody else,
|
|
# overriding NEGLECT_THRESHOLD_HOURS for that one chore type. 30 minutes by default:
|
|
# the default four hours is a sensible wait for a crisp packet and far too long for a
|
|
# tub of ice cream.
|
|
GROCERIES_NEGLECT_THRESHOLD_HOURS=0.5
|
|
|
|
# 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/<id>/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
|