1 """Interfaces with Egardia/Woonveilig alarm control panel."""
3 from __future__
import annotations
10 AlarmControlPanelEntity,
11 AlarmControlPanelEntityFeature,
12 AlarmControlPanelState,
19 CONF_REPORT_SERVER_CODES,
20 CONF_REPORT_SERVER_ENABLED,
21 CONF_REPORT_SERVER_PORT,
24 REPORT_SERVER_CODES_IGNORE,
27 _LOGGER = logging.getLogger(__name__)
30 "ARM": AlarmControlPanelState.ARMED_AWAY,
31 "DAY HOME": AlarmControlPanelState.ARMED_HOME,
32 "DISARM": AlarmControlPanelState.DISARMED,
33 "ARMHOME": AlarmControlPanelState.ARMED_HOME,
34 "HOME": AlarmControlPanelState.ARMED_HOME,
35 "NIGHT HOME": AlarmControlPanelState.ARMED_NIGHT,
36 "TRIGGERED": AlarmControlPanelState.TRIGGERED,
43 add_entities: AddEntitiesCallback,
44 discovery_info: DiscoveryInfoType |
None =
None,
46 """Set up the Egardia Alarm Control Panael platform."""
47 if discovery_info
is None:
50 discovery_info[
"name"],
51 hass.data[EGARDIA_DEVICE],
52 discovery_info[CONF_REPORT_SERVER_ENABLED],
53 discovery_info.get(CONF_REPORT_SERVER_CODES),
54 discovery_info[CONF_REPORT_SERVER_PORT],
61 """Representation of a Egardia alarm."""
63 _attr_code_arm_required =
False
64 _attr_supported_features = (
65 AlarmControlPanelEntityFeature.ARM_HOME
66 | AlarmControlPanelEntityFeature.ARM_AWAY
70 self, name, egardiasystem, rs_enabled=False, rs_codes=None, rs_port=52010
72 """Initialize the Egardia alarm."""
80 """Add Egardiaserver callback if enabled."""
82 _LOGGER.debug(
"Registering callback to Egardiaserver")
87 """Poll if no report server is enabled."""
93 """Handle the Egardia system status event."""
94 if (statuscode := event.get(
"status"))
is not None:
100 """Look at the rs_codes and returns the status from the code."""
104 for status_group, codes
in self.
_rs_codes_rs_codes.items()
106 if statuscode == code
112 """Parse the status."""
113 _LOGGER.debug(
"Parsing status %s", status)
115 if status.lower().strip() != REPORT_SERVER_CODES_IGNORE:
116 _LOGGER.debug(
"Not ignoring status %s", status)
117 newstatus = STATES.get(status.upper())
118 _LOGGER.debug(
"newstatus %s", newstatus)
121 _LOGGER.error(
"Ignoring status")
124 """Update the alarm status."""
129 """Send disarm command."""
132 except requests.exceptions.RequestException
as err:
134 "Egardia device exception occurred when sending disarm command: %s",
139 """Send arm home command."""
142 except requests.exceptions.RequestException
as err:
144 "Egardia device exception occurred when sending arm home command: %s",
149 """Send arm away command."""
152 except requests.exceptions.RequestException
as err:
154 "Egardia device exception occurred when sending arm away command: %s",
None alarm_arm_away(self, str|None code=None)
None alarm_arm_home(self, str|None code=None)
None alarm_disarm(self, str|None code=None)
def parsestatus(self, status)
def __init__(self, name, egardiasystem, rs_enabled=False, rs_codes=None, rs_port=52010)
def lookupstatusfromcode(self, statuscode)
def handle_status_event(self, event)
None async_added_to_hass(self)
None schedule_update_ha_state(self, bool force_refresh=False)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)