235 lines
6.6 KiB
Python
235 lines
6.6 KiB
Python
"""Store constants."""
|
|
|
|
import datetime
|
|
|
|
import voluptuous as vol
|
|
from homeassistant.const import (
|
|
ATTR_NAME,
|
|
CONF_CODE,
|
|
CONF_MODE,
|
|
ATTR_ENTITY_ID,
|
|
)
|
|
from homeassistant.helpers import config_validation as cv
|
|
from homeassistant.components.alarm_control_panel import (
|
|
AlarmControlPanelState,
|
|
AlarmControlPanelEntityFeature,
|
|
)
|
|
|
|
VERSION = "1.10.13"
|
|
NAME = "Alarmo"
|
|
MANUFACTURER = "@nielsfaber"
|
|
|
|
DOMAIN = "alarmo"
|
|
|
|
CUSTOM_COMPONENTS = "custom_components"
|
|
INTEGRATION_FOLDER = DOMAIN
|
|
PANEL_FOLDER = "frontend"
|
|
PANEL_FILENAME = "dist/alarm-panel.js"
|
|
|
|
PANEL_URL = "/api/panel_custom/alarmo"
|
|
PANEL_TITLE = NAME
|
|
PANEL_ICON = "mdi:shield-home"
|
|
PANEL_NAME = "alarm-panel"
|
|
|
|
INITIALIZATION_TIME = datetime.timedelta(seconds=60)
|
|
SENSOR_ARM_TIME = datetime.timedelta(seconds=5)
|
|
|
|
STATES = [
|
|
AlarmControlPanelState.ARMED_AWAY,
|
|
AlarmControlPanelState.ARMED_HOME,
|
|
AlarmControlPanelState.ARMED_NIGHT,
|
|
AlarmControlPanelState.ARMED_CUSTOM_BYPASS,
|
|
AlarmControlPanelState.ARMED_VACATION,
|
|
AlarmControlPanelState.DISARMED,
|
|
AlarmControlPanelState.TRIGGERED,
|
|
AlarmControlPanelState.PENDING,
|
|
AlarmControlPanelState.ARMING,
|
|
]
|
|
|
|
ARM_MODES = [
|
|
AlarmControlPanelState.ARMED_AWAY,
|
|
AlarmControlPanelState.ARMED_HOME,
|
|
AlarmControlPanelState.ARMED_NIGHT,
|
|
AlarmControlPanelState.ARMED_CUSTOM_BYPASS,
|
|
AlarmControlPanelState.ARMED_VACATION,
|
|
]
|
|
|
|
ARM_MODE_TO_STATE = {
|
|
"away": AlarmControlPanelState.ARMED_AWAY,
|
|
"home": AlarmControlPanelState.ARMED_HOME,
|
|
"night": AlarmControlPanelState.ARMED_NIGHT,
|
|
"custom": AlarmControlPanelState.ARMED_CUSTOM_BYPASS,
|
|
"vacation": AlarmControlPanelState.ARMED_VACATION,
|
|
}
|
|
|
|
STATE_TO_ARM_MODE = {
|
|
AlarmControlPanelState.ARMED_AWAY: "away",
|
|
AlarmControlPanelState.ARMED_HOME: "home",
|
|
AlarmControlPanelState.ARMED_NIGHT: "night",
|
|
AlarmControlPanelState.ARMED_CUSTOM_BYPASS: "custom",
|
|
AlarmControlPanelState.ARMED_VACATION: "vacation",
|
|
}
|
|
|
|
COMMAND_ARM_NIGHT = "arm_night"
|
|
COMMAND_ARM_AWAY = "arm_away"
|
|
COMMAND_ARM_HOME = "arm_home"
|
|
COMMAND_ARM_CUSTOM_BYPASS = "arm_custom_bypass"
|
|
COMMAND_ARM_VACATION = "arm_vacation"
|
|
COMMAND_DISARM = "disarm"
|
|
|
|
COMMANDS = [
|
|
COMMAND_DISARM,
|
|
COMMAND_ARM_AWAY,
|
|
COMMAND_ARM_NIGHT,
|
|
COMMAND_ARM_HOME,
|
|
COMMAND_ARM_CUSTOM_BYPASS,
|
|
COMMAND_ARM_VACATION,
|
|
]
|
|
|
|
EVENT_DISARM = "disarm"
|
|
EVENT_LEAVE = "leave"
|
|
EVENT_ARM = "arm"
|
|
EVENT_ENTRY = "entry"
|
|
EVENT_TRIGGER = "trigger"
|
|
EVENT_FAILED_TO_ARM = "failed_to_arm"
|
|
EVENT_COMMAND_NOT_ALLOWED = "command_not_allowed"
|
|
EVENT_INVALID_CODE_PROVIDED = "invalid_code_provided"
|
|
EVENT_NO_CODE_PROVIDED = "no_code_provided"
|
|
EVENT_TRIGGER_TIME_EXPIRED = "trigger_time_expired"
|
|
EVENT_READY_TO_ARM_MODES_CHANGED = "ready_to_arm_modes_changed"
|
|
|
|
ATTR_MODES = "modes"
|
|
ATTR_ARM_MODE = "arm_mode"
|
|
ATTR_CODE_DISARM_REQUIRED = "code_disarm_required"
|
|
ATTR_CODE_MODE_CHANGE_REQUIRED = "code_mode_change_required"
|
|
ATTR_REMOVE = "remove"
|
|
ATTR_OLD_CODE = "old_code"
|
|
|
|
ATTR_TRIGGER_TIME = "trigger_time"
|
|
ATTR_EXIT_TIME = "exit_time"
|
|
ATTR_ENTRY_TIME = "entry_time"
|
|
|
|
ATTR_ENABLED = "enabled"
|
|
ATTR_USER_ID = "user_id"
|
|
|
|
ATTR_CAN_ARM = "can_arm"
|
|
ATTR_CAN_DISARM = "can_disarm"
|
|
ATTR_DISARM_AFTER_TRIGGER = "disarm_after_trigger"
|
|
ATTR_IGNORE_BLOCKING_SENSORS_AFTER_TRIGGER = "ignore_blocking_sensors_after_trigger"
|
|
|
|
ATTR_REMOVE = "remove"
|
|
ATTR_IS_OVERRIDE_CODE = "is_override_code"
|
|
ATTR_AREA_LIMIT = "area_limit"
|
|
ATTR_CODE_FORMAT = "code_format"
|
|
ATTR_CODE_LENGTH = "code_length"
|
|
|
|
ATTR_AUTOMATION_ID = "automation_id"
|
|
|
|
ATTR_TYPE = "type"
|
|
ATTR_AREA = "area"
|
|
ATTR_MASTER = "master"
|
|
|
|
ATTR_TRIGGERS = "triggers"
|
|
ATTR_ACTIONS = "actions"
|
|
ATTR_EVENT = "event"
|
|
ATTR_REQUIRE_CODE = "require_code"
|
|
|
|
ATTR_NOTIFICATION = "notification"
|
|
ATTR_VERSION = "version"
|
|
ATTR_STATE_PAYLOAD = "state_payload"
|
|
ATTR_COMMAND_PAYLOAD = "command_payload"
|
|
|
|
ATTR_FORCE = "force"
|
|
ATTR_SKIP_DELAY = "skip_delay"
|
|
ATTR_CONTEXT_ID = "context_id"
|
|
|
|
PUSH_EVENT = "mobile_app_notification_action"
|
|
|
|
EVENT_ACTION_FORCE_ARM = "ALARMO_FORCE_ARM"
|
|
EVENT_ACTION_RETRY_ARM = "ALARMO_RETRY_ARM"
|
|
EVENT_ACTION_DISARM = "ALARMO_DISARM"
|
|
EVENT_ACTION_ARM_AWAY = "ALARMO_ARM_AWAY"
|
|
EVENT_ACTION_ARM_HOME = "ALARMO_ARM_HOME"
|
|
EVENT_ACTION_ARM_NIGHT = "ALARMO_ARM_NIGHT"
|
|
EVENT_ACTION_ARM_VACATION = "ALARMO_ARM_VACATION"
|
|
EVENT_ACTION_ARM_CUSTOM_BYPASS = "ALARMO_ARM_CUSTOM_BYPASS"
|
|
|
|
EVENT_ACTIONS = [
|
|
EVENT_ACTION_FORCE_ARM,
|
|
EVENT_ACTION_RETRY_ARM,
|
|
EVENT_ACTION_DISARM,
|
|
EVENT_ACTION_ARM_AWAY,
|
|
EVENT_ACTION_ARM_HOME,
|
|
EVENT_ACTION_ARM_NIGHT,
|
|
EVENT_ACTION_ARM_VACATION,
|
|
EVENT_ACTION_ARM_CUSTOM_BYPASS,
|
|
]
|
|
|
|
MODES_TO_SUPPORTED_FEATURES = {
|
|
AlarmControlPanelState.ARMED_AWAY: AlarmControlPanelEntityFeature.ARM_AWAY,
|
|
AlarmControlPanelState.ARMED_HOME: AlarmControlPanelEntityFeature.ARM_HOME,
|
|
AlarmControlPanelState.ARMED_NIGHT: AlarmControlPanelEntityFeature.ARM_NIGHT,
|
|
AlarmControlPanelState.ARMED_CUSTOM_BYPASS: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS, # noqa: E501
|
|
AlarmControlPanelState.ARMED_VACATION: AlarmControlPanelEntityFeature.ARM_VACATION,
|
|
}
|
|
|
|
SERVICE_ARM = "arm"
|
|
SERVICE_DISARM = "disarm"
|
|
SERVICE_SKIP_DELAY = "skip_delay"
|
|
|
|
CONF_ALARM_ARMED_AWAY = "armed_away"
|
|
CONF_ALARM_ARMED_CUSTOM_BYPASS = "armed_custom_bypass"
|
|
CONF_ALARM_ARMED_HOME = "armed_home"
|
|
CONF_ALARM_ARMED_NIGHT = "armed_night"
|
|
CONF_ALARM_ARMED_VACATION = "armed_vacation"
|
|
CONF_ALARM_ARMING = "arming"
|
|
CONF_ALARM_DISARMED = "disarmed"
|
|
CONF_ALARM_PENDING = "pending"
|
|
CONF_ALARM_TRIGGERED = "triggered"
|
|
|
|
SERVICE_ARM_SCHEMA = cv.make_entity_service_schema(
|
|
{
|
|
vol.Required(ATTR_ENTITY_ID): cv.entity_id,
|
|
vol.Optional(CONF_CODE, default=""): cv.string,
|
|
vol.Optional(CONF_MODE, default=AlarmControlPanelState.ARMED_AWAY): vol.In(
|
|
[
|
|
"away",
|
|
"home",
|
|
"night",
|
|
"custom",
|
|
"vacation",
|
|
CONF_ALARM_ARMED_AWAY,
|
|
CONF_ALARM_ARMED_HOME,
|
|
CONF_ALARM_ARMED_NIGHT,
|
|
CONF_ALARM_ARMED_CUSTOM_BYPASS,
|
|
CONF_ALARM_ARMED_VACATION,
|
|
]
|
|
),
|
|
vol.Optional(ATTR_SKIP_DELAY, default=False): cv.boolean,
|
|
vol.Optional(ATTR_FORCE, default=False): cv.boolean,
|
|
vol.Optional(ATTR_CONTEXT_ID): int,
|
|
}
|
|
)
|
|
|
|
SERVICE_DISARM_SCHEMA = cv.make_entity_service_schema(
|
|
{
|
|
vol.Required(ATTR_ENTITY_ID): cv.entity_id,
|
|
vol.Optional(CONF_CODE, default=""): cv.string,
|
|
vol.Optional(ATTR_CONTEXT_ID): int,
|
|
}
|
|
)
|
|
|
|
SERVICE_SKIP_DELAY_SCHEMA = cv.make_entity_service_schema(
|
|
{
|
|
vol.Required(ATTR_ENTITY_ID): cv.entity_id,
|
|
}
|
|
)
|
|
|
|
SERVICE_ENABLE_USER = "enable_user"
|
|
SERVICE_DISABLE_USER = "disable_user"
|
|
SERVICE_TOGGLE_USER_SCHEMA = vol.Schema(
|
|
{
|
|
vol.Required(ATTR_NAME, default=""): cv.string,
|
|
}
|
|
)
|