Skip to content

Commit 2a5e0ae

Browse files
committed
Fix alarm control panel after HA 2024.11 #1484
1 parent 9653676 commit 2a5e0ae

File tree

1 file changed

+39
-16
lines changed

1 file changed

+39
-16
lines changed

custom_components/xiaomi_gateway3/alarm_control_panel.py

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
AlarmControlPanelEntity,
55
AlarmControlPanelEntityFeature,
66
)
7-
from homeassistant.const import STATE_ALARM_TRIGGERED
7+
from homeassistant.const import MAJOR_VERSION, MINOR_VERSION
88
from homeassistant.helpers.restore_state import RestoreEntity
99

1010
from .hass.entity import XEntity
@@ -15,7 +15,44 @@ async def async_setup_entry(hass, entry, async_add_entities) -> None:
1515
XEntity.ADD[entry.entry_id + "alarm_control_panel"] = async_add_entities
1616

1717

18-
class XAlarmControlPanel(XEntity, AlarmControlPanelEntity, RestoreEntity):
18+
if (MAJOR_VERSION, MINOR_VERSION) >= (2024, 11):
19+
from homeassistant.components.alarm_control_panel import AlarmControlPanelState
20+
21+
class XAlarmControlBase(XEntity, AlarmControlPanelEntity):
22+
mode: str = None
23+
trigger: bool = False
24+
25+
def set_state(self, data: dict):
26+
if self.attr in data:
27+
self.mode = data[self.attr]
28+
if "alarm_trigger" in data:
29+
self.trigger = data["alarm_trigger"]
30+
31+
self._attr_alarm_state = AlarmControlPanelState(
32+
"triggered" if self.trigger else self.mode
33+
)
34+
35+
def get_state(self) -> dict:
36+
return {self.attr: self._attr_alarm_state}
37+
38+
else:
39+
class XAlarmControlBase(XEntity, AlarmControlPanelEntity):
40+
mode: str = None
41+
trigger: bool = False
42+
43+
def set_state(self, data: dict):
44+
if self.attr in data:
45+
self.mode = data[self.attr]
46+
if "alarm_trigger" in data:
47+
self.trigger = data["alarm_trigger"]
48+
49+
self._attr_state = "triggered" if self.trigger else self.mode
50+
51+
def get_state(self) -> dict:
52+
return {self.attr: self._attr_state}
53+
54+
55+
class XAlarmControlPanel(XAlarmControlBase, RestoreEntity):
1956
_attr_code_arm_required = False
2057
_attr_supported_features = (
2158
AlarmControlPanelEntityFeature.ARM_HOME
@@ -24,24 +61,10 @@ class XAlarmControlPanel(XEntity, AlarmControlPanelEntity, RestoreEntity):
2461
| AlarmControlPanelEntityFeature.TRIGGER
2562
)
2663

27-
mode: str = None
28-
trigger: bool = False
29-
3064
def on_init(self):
3165
# TODO: test alarm disable
3266
self.listen_attrs.add("alarm_trigger")
3367

34-
def set_state(self, data: dict):
35-
if self.attr in data:
36-
self.mode = data[self.attr]
37-
if "alarm_trigger" in data:
38-
self.trigger = data["alarm_trigger"]
39-
40-
self._attr_state = STATE_ALARM_TRIGGERED if self.trigger else self.mode
41-
42-
def get_state(self) -> dict:
43-
return {self.attr: self._attr_state}
44-
4568
async def async_alarm_disarm(self, code=None):
4669
if self.trigger:
4770
self.device.write({"alarm_trigger": False})

0 commit comments

Comments
 (0)