Source code for aioafero.v1.models.security_system

"""Representation of an Afero Security System and its corresponding updates."""

from dataclasses import dataclass, field

from aioafero.v1.models import features

from .resource import ResourceTypes
from .standard_mixin import StandardMixin


[docs] @dataclass(kw_only=True) class SecuritySystem(StandardMixin): """Representation of an Afero Security Panel.""" type: ResourceTypes = ResourceTypes.SECURITY_SYSTEM alarm_state: features.ModeFeature | None = None siren_action: features.SecuritySensorSirenFeature | None = None @property def supports_away(self) -> bool: """States if the panel supports away mode.""" return "arm-away" in self.alarm_state.modes @property def supports_arm_bypass(self) -> bool: """States if the panel supports arm-bypass mode.""" return False @property def supports_home(self) -> bool: """States if the panel supports home mode.""" return "arm-stay" in self.alarm_state.modes @property def supports_night(self) -> bool: """States if the panel supports night mode.""" return False @property def supports_vacation(self) -> bool: """States if the panel supports vacation mode.""" return False @property def supports_trigger(self) -> bool: """States if the panel supports manually triggering.""" return "alarming-sos" in self.alarm_state.modes
[docs] @dataclass class SecuritySystemPut: """States that can be updated for a Security System.""" alarm_state: features.ModeFeature | None = None siren_action: features.SecuritySensorSirenFeature | None = None disarm_pin: features.SecuritySystemDisarmPin | None = None numbers: dict[tuple[str, str | None], features.NumbersFeature] | None = field( default_factory=dict, repr=False, init=False ) selects: dict[tuple[str, str | None], features.SelectFeature] | None = field( default_factory=dict, repr=False, init=False )