|
1 | 1 | """Support for Freebox alarms."""
|
2 |
| -import logging |
3 | 2 | from typing import Any
|
4 | 3 |
|
5 | 4 | from homeassistant.components.alarm_control_panel import (
|
|
9 | 8 | from homeassistant.config_entries import ConfigEntry
|
10 | 9 | from homeassistant.const import (
|
11 | 10 | STATE_ALARM_ARMED_AWAY,
|
12 |
| - STATE_ALARM_ARMED_NIGHT, |
| 11 | + STATE_ALARM_ARMED_HOME, |
13 | 12 | STATE_ALARM_ARMING,
|
14 | 13 | STATE_ALARM_DISARMED,
|
15 | 14 | STATE_ALARM_TRIGGERED,
|
|
25 | 24 | "alarm1_arming": STATE_ALARM_ARMING,
|
26 | 25 | "alarm2_arming": STATE_ALARM_ARMING,
|
27 | 26 | "alarm1_armed": STATE_ALARM_ARMED_AWAY,
|
28 |
| - "alarm2_armed": STATE_ALARM_ARMED_NIGHT, |
| 27 | + "alarm2_armed": STATE_ALARM_ARMED_HOME, |
29 | 28 | "alarm1_alert_timer": STATE_ALARM_TRIGGERED,
|
30 | 29 | "alarm2_alert_timer": STATE_ALARM_TRIGGERED,
|
31 | 30 | "alert": STATE_ALARM_TRIGGERED,
|
| 31 | + "idle": STATE_ALARM_DISARMED, |
32 | 32 | }
|
33 | 33 |
|
34 | 34 |
|
35 |
| -_LOGGER = logging.getLogger(__name__) |
36 |
| - |
37 |
| - |
38 | 35 | async def async_setup_entry(
|
39 | 36 | hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
|
40 | 37 | ) -> None:
|
@@ -76,63 +73,33 @@ def __init__(
|
76 | 73 | self._command_state = self.get_command_id(
|
77 | 74 | node["type"]["endpoints"], "signal", "state"
|
78 | 75 | )
|
79 |
| - self._set_features(self._router.home_devices[self._id]) |
| 76 | + |
| 77 | + self._attr_supported_features = ( |
| 78 | + AlarmControlPanelEntityFeature.ARM_AWAY |
| 79 | + | (AlarmControlPanelEntityFeature.ARM_HOME if self._command_arm_home else 0) |
| 80 | + | AlarmControlPanelEntityFeature.TRIGGER |
| 81 | + ) |
80 | 82 |
|
81 | 83 | async def async_alarm_disarm(self, code: str | None = None) -> None:
|
82 | 84 | """Send disarm command."""
|
83 |
| - if await self.set_home_endpoint_value(self._command_disarm): |
84 |
| - self._set_state(STATE_ALARM_DISARMED) |
| 85 | + await self.set_home_endpoint_value(self._command_disarm) |
85 | 86 |
|
86 | 87 | async def async_alarm_arm_away(self, code: str | None = None) -> None:
|
87 | 88 | """Send arm away command."""
|
88 |
| - if await self.set_home_endpoint_value(self._command_arm_away): |
89 |
| - self._set_state(STATE_ALARM_ARMING) |
| 89 | + await self.set_home_endpoint_value(self._command_arm_away) |
90 | 90 |
|
91 | 91 | async def async_alarm_arm_home(self, code: str | None = None) -> None:
|
92 | 92 | """Send arm home command."""
|
93 |
| - if await self.set_home_endpoint_value(self._command_arm_home): |
94 |
| - self._set_state(STATE_ALARM_ARMING) |
| 93 | + await self.set_home_endpoint_value(self._command_arm_home) |
95 | 94 |
|
96 | 95 | async def async_alarm_trigger(self, code: str | None = None) -> None:
|
97 | 96 | """Send alarm trigger command."""
|
98 |
| - if await self.set_home_endpoint_value(self._command_trigger): |
99 |
| - self._set_state(STATE_ALARM_TRIGGERED) |
| 97 | + await self.set_home_endpoint_value(self._command_trigger) |
100 | 98 |
|
101 |
| - async def async_update_signal(self): |
102 |
| - """Update signal.""" |
103 |
| - state = await self.get_home_endpoint_value(self._command_state) |
| 99 | + async def async_update(self) -> None: |
| 100 | + """Update state.""" |
| 101 | + state: str | None = await self.get_home_endpoint_value(self._command_state) |
104 | 102 | if state:
|
105 |
| - self._set_state(state) |
106 |
| - |
107 |
| - def _set_features(self, node: dict[str, Any]) -> None: |
108 |
| - """Add alarm features.""" |
109 |
| - # Search if the arm home feature is present => has an "alarm2" endpoint |
110 |
| - can_arm_home = False |
111 |
| - for nodeid, local_node in self._router.home_devices.items(): |
112 |
| - if nodeid == local_node["id"]: |
113 |
| - alarm2 = next( |
114 |
| - filter( |
115 |
| - lambda x: (x["name"] == "alarm2" and x["ep_type"] == "signal"), |
116 |
| - local_node["show_endpoints"], |
117 |
| - ), |
118 |
| - None, |
119 |
| - ) |
120 |
| - if alarm2: |
121 |
| - can_arm_home = alarm2["value"] |
122 |
| - break |
123 |
| - |
124 |
| - if can_arm_home: |
125 |
| - self._attr_supported_features = ( |
126 |
| - AlarmControlPanelEntityFeature.ARM_AWAY |
127 |
| - | AlarmControlPanelEntityFeature.ARM_HOME |
128 |
| - ) |
129 |
| - |
| 103 | + self._attr_state = FREEBOX_TO_STATUS.get(state) |
130 | 104 | else:
|
131 |
| - self._attr_supported_features = AlarmControlPanelEntityFeature.ARM_AWAY |
132 |
| - |
133 |
| - def _set_state(self, state: str) -> None: |
134 |
| - """Update state.""" |
135 |
| - self._attr_state = FREEBOX_TO_STATUS.get(state) |
136 |
| - if not self._attr_state: |
137 |
| - self._attr_state = STATE_ALARM_DISARMED |
138 |
| - self.async_write_ha_state() |
| 105 | + self._attr_state = None |
0 commit comments