feat(Q1,Q4): add HighlightsConfig, KioskConfig, HIGHLIGHT/TIMELAPSE triggers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Aaron D. Lee 2026-04-03 19:06:08 -04:00
parent 23d5bf062a
commit d69bf6d6af
3 changed files with 44 additions and 0 deletions

View File

@ -109,6 +109,25 @@ def test_vigilar_config_has_location():
assert cfg.location.latitude == 0.0 assert cfg.location.latitude == 0.0
def test_highlights_config_defaults():
from vigilar.config import HighlightsConfig
assert HighlightsConfig().enabled is True
assert HighlightsConfig().generate_time == "06:00"
def test_kiosk_config_defaults():
from vigilar.config import KioskConfig
assert KioskConfig().ambient_enabled is True
assert KioskConfig().camera_rotation_s == 10
def test_recording_trigger_highlight():
from vigilar.constants import RecordingTrigger
assert RecordingTrigger.HIGHLIGHT == "HIGHLIGHT"
def test_recording_trigger_timelapse():
from vigilar.constants import RecordingTrigger
assert RecordingTrigger.TIMELAPSE == "TIMELAPSE"
class TestCameraConfigLocation: class TestCameraConfigLocation:
def test_default_location_is_interior(self): def test_default_location_is_interior(self):
from vigilar.config import CameraConfig from vigilar.config import CameraConfig

View File

@ -297,6 +297,27 @@ class VisitorsConfig(BaseModel):
face_crop_dir: str = "/var/vigilar/faces" face_crop_dir: str = "/var/vigilar/faces"
# --- Highlights Config ---
class HighlightsConfig(BaseModel):
enabled: bool = True
generate_time: str = "06:00"
max_clips: int = 10
clip_duration_s: int = 5
cameras: list[str] = Field(default_factory=list)
event_types: list[str] = Field(default_factory=list)
class KioskConfig(BaseModel):
ambient_enabled: bool = True
camera_rotation_s: int = 10
alert_timeout_s: int = 30
predator_alert_timeout_s: int = 60
dim_start: str = "23:00"
dim_end: str = "06:00"
highlight_play_time: str = "07:00"
# --- Location Config --- # --- Location Config ---
class LocationConfig(BaseModel): class LocationConfig(BaseModel):
@ -358,6 +379,8 @@ class VigilarConfig(BaseModel):
health: HealthConfig = Field(default_factory=HealthConfig) health: HealthConfig = Field(default_factory=HealthConfig)
pets: PetsConfig = Field(default_factory=PetsConfig) pets: PetsConfig = Field(default_factory=PetsConfig)
visitors: VisitorsConfig = Field(default_factory=VisitorsConfig) visitors: VisitorsConfig = Field(default_factory=VisitorsConfig)
highlights: HighlightsConfig = Field(default_factory=HighlightsConfig)
kiosk: KioskConfig = Field(default_factory=KioskConfig)
security: SecurityConfig = Field(default_factory=SecurityConfig) security: SecurityConfig = Field(default_factory=SecurityConfig)
location: LocationConfig = Field(default_factory=LocationConfig) location: LocationConfig = Field(default_factory=LocationConfig)
cameras: list[CameraConfig] = Field(default_factory=list) cameras: list[CameraConfig] = Field(default_factory=list)

View File

@ -82,6 +82,8 @@ class RecordingTrigger(StrEnum):
VEHICLE = "VEHICLE" VEHICLE = "VEHICLE"
PET = "PET" PET = "PET"
WILDLIFE = "WILDLIFE" WILDLIFE = "WILDLIFE"
HIGHLIGHT = "HIGHLIGHT"
TIMELAPSE = "TIMELAPSE"
# --- Alert Channels --- # --- Alert Channels ---