4
4
AlarmControlPanelEntity ,
5
5
AlarmControlPanelEntityFeature ,
6
6
)
7
- from homeassistant .const import STATE_ALARM_TRIGGERED
7
+ from homeassistant .const import MAJOR_VERSION , MINOR_VERSION
8
8
from homeassistant .helpers .restore_state import RestoreEntity
9
9
10
10
from .hass .entity import XEntity
@@ -15,7 +15,44 @@ async def async_setup_entry(hass, entry, async_add_entities) -> None:
15
15
XEntity .ADD [entry .entry_id + "alarm_control_panel" ] = async_add_entities
16
16
17
17
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 ):
19
56
_attr_code_arm_required = False
20
57
_attr_supported_features = (
21
58
AlarmControlPanelEntityFeature .ARM_HOME
@@ -24,24 +61,10 @@ class XAlarmControlPanel(XEntity, AlarmControlPanelEntity, RestoreEntity):
24
61
| AlarmControlPanelEntityFeature .TRIGGER
25
62
)
26
63
27
- mode : str = None
28
- trigger : bool = False
29
-
30
64
def on_init (self ):
31
65
# TODO: test alarm disable
32
66
self .listen_attrs .add ("alarm_trigger" )
33
67
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
-
45
68
async def async_alarm_disarm (self , code = None ):
46
69
if self .trigger :
47
70
self .device .write ({"alarm_trigger" : False })
0 commit comments