Add pet/wildlife enums, event types, and MQTT topics
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
767bbf26ba
commit
aae857ec53
51
tests/unit/test_constants.py
Normal file
51
tests/unit/test_constants.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
"""Tests for new pet/wildlife constants."""
|
||||||
|
|
||||||
|
from vigilar.constants import (
|
||||||
|
CameraLocation,
|
||||||
|
EventType,
|
||||||
|
ThreatLevel,
|
||||||
|
Topics,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestThreatLevel:
|
||||||
|
def test_values(self):
|
||||||
|
assert ThreatLevel.PREDATOR == "PREDATOR"
|
||||||
|
assert ThreatLevel.NUISANCE == "NUISANCE"
|
||||||
|
assert ThreatLevel.PASSIVE == "PASSIVE"
|
||||||
|
|
||||||
|
def test_is_strenum(self):
|
||||||
|
assert isinstance(ThreatLevel.PREDATOR, str)
|
||||||
|
|
||||||
|
|
||||||
|
class TestCameraLocation:
|
||||||
|
def test_values(self):
|
||||||
|
assert CameraLocation.EXTERIOR == "EXTERIOR"
|
||||||
|
assert CameraLocation.INTERIOR == "INTERIOR"
|
||||||
|
assert CameraLocation.TRANSITION == "TRANSITION"
|
||||||
|
|
||||||
|
def test_is_strenum(self):
|
||||||
|
assert isinstance(CameraLocation.EXTERIOR, str)
|
||||||
|
|
||||||
|
|
||||||
|
class TestNewEventTypes:
|
||||||
|
def test_pet_events_exist(self):
|
||||||
|
assert EventType.PET_DETECTED == "PET_DETECTED"
|
||||||
|
assert EventType.PET_ESCAPE == "PET_ESCAPE"
|
||||||
|
assert EventType.UNKNOWN_ANIMAL == "UNKNOWN_ANIMAL"
|
||||||
|
|
||||||
|
def test_wildlife_events_exist(self):
|
||||||
|
assert EventType.WILDLIFE_PREDATOR == "WILDLIFE_PREDATOR"
|
||||||
|
assert EventType.WILDLIFE_NUISANCE == "WILDLIFE_NUISANCE"
|
||||||
|
assert EventType.WILDLIFE_PASSIVE == "WILDLIFE_PASSIVE"
|
||||||
|
|
||||||
|
|
||||||
|
class TestPetTopics:
|
||||||
|
def test_pet_detected_topic(self):
|
||||||
|
assert Topics.camera_pet_detected("front") == "vigilar/camera/front/pet/detected"
|
||||||
|
|
||||||
|
def test_wildlife_detected_topic(self):
|
||||||
|
assert Topics.camera_wildlife_detected("front") == "vigilar/camera/front/wildlife/detected"
|
||||||
|
|
||||||
|
def test_pet_location_topic(self):
|
||||||
|
assert Topics.pet_location("angel") == "vigilar/pets/angel/location"
|
||||||
@ -40,6 +40,12 @@ class EventType(StrEnum):
|
|||||||
VEHICLE_DETECTED = "VEHICLE_DETECTED"
|
VEHICLE_DETECTED = "VEHICLE_DETECTED"
|
||||||
KNOWN_VEHICLE_ARRIVED = "KNOWN_VEHICLE_ARRIVED"
|
KNOWN_VEHICLE_ARRIVED = "KNOWN_VEHICLE_ARRIVED"
|
||||||
UNKNOWN_VEHICLE_DETECTED = "UNKNOWN_VEHICLE_DETECTED"
|
UNKNOWN_VEHICLE_DETECTED = "UNKNOWN_VEHICLE_DETECTED"
|
||||||
|
PET_DETECTED = "PET_DETECTED"
|
||||||
|
PET_ESCAPE = "PET_ESCAPE"
|
||||||
|
UNKNOWN_ANIMAL = "UNKNOWN_ANIMAL"
|
||||||
|
WILDLIFE_PREDATOR = "WILDLIFE_PREDATOR"
|
||||||
|
WILDLIFE_NUISANCE = "WILDLIFE_NUISANCE"
|
||||||
|
WILDLIFE_PASSIVE = "WILDLIFE_PASSIVE"
|
||||||
|
|
||||||
|
|
||||||
# --- Sensor Types ---
|
# --- Sensor Types ---
|
||||||
@ -68,6 +74,8 @@ class RecordingTrigger(StrEnum):
|
|||||||
MANUAL = "MANUAL"
|
MANUAL = "MANUAL"
|
||||||
PERSON = "PERSON"
|
PERSON = "PERSON"
|
||||||
VEHICLE = "VEHICLE"
|
VEHICLE = "VEHICLE"
|
||||||
|
PET = "PET"
|
||||||
|
WILDLIFE = "WILDLIFE"
|
||||||
|
|
||||||
|
|
||||||
# --- Alert Channels ---
|
# --- Alert Channels ---
|
||||||
@ -103,6 +111,22 @@ class HouseholdState(StrEnum):
|
|||||||
ALL_HOME = "ALL_HOME"
|
ALL_HOME = "ALL_HOME"
|
||||||
|
|
||||||
|
|
||||||
|
# --- Threat Levels (Wildlife) ---
|
||||||
|
|
||||||
|
class ThreatLevel(StrEnum):
|
||||||
|
PREDATOR = "PREDATOR"
|
||||||
|
NUISANCE = "NUISANCE"
|
||||||
|
PASSIVE = "PASSIVE"
|
||||||
|
|
||||||
|
|
||||||
|
# --- Camera Location ---
|
||||||
|
|
||||||
|
class CameraLocation(StrEnum):
|
||||||
|
EXTERIOR = "EXTERIOR"
|
||||||
|
INTERIOR = "INTERIOR"
|
||||||
|
TRANSITION = "TRANSITION"
|
||||||
|
|
||||||
|
|
||||||
# --- MQTT Topics ---
|
# --- MQTT Topics ---
|
||||||
|
|
||||||
class Topics:
|
class Topics:
|
||||||
@ -148,6 +172,19 @@ class Topics:
|
|||||||
|
|
||||||
PRESENCE_STATUS = "vigilar/presence/status"
|
PRESENCE_STATUS = "vigilar/presence/status"
|
||||||
|
|
||||||
|
# Pet
|
||||||
|
@staticmethod
|
||||||
|
def camera_pet_detected(camera_id: str) -> str:
|
||||||
|
return f"vigilar/camera/{camera_id}/pet/detected"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def camera_wildlife_detected(camera_id: str) -> str:
|
||||||
|
return f"vigilar/camera/{camera_id}/wildlife/detected"
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def pet_location(pet_name: str) -> str:
|
||||||
|
return f"vigilar/pets/{pet_name}/location"
|
||||||
|
|
||||||
# System
|
# System
|
||||||
SYSTEM_ARM_STATE = "vigilar/system/arm_state"
|
SYSTEM_ARM_STATE = "vigilar/system/arm_state"
|
||||||
SYSTEM_ALERT = "vigilar/system/alert"
|
SYSTEM_ALERT = "vigilar/system/alert"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user