Skip to content

Commit 13384de

Browse files
Extend Matter lock to support selecting OperatingMode (home-assistant#157132)
Co-authored-by: Ludovic BOUÉ <[email protected]>
1 parent f5e5183 commit 13384de

File tree

9 files changed

+1056
-0
lines changed

9 files changed

+1056
-0
lines changed

homeassistant/components/matter/select.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@
2020
from .helpers import get_matter
2121
from .models import MatterDiscoverySchema
2222

23+
DOOR_LOCK_OPERATING_MODE_MAP = {
24+
clusters.DoorLock.Enums.OperatingModeEnum.kNormal: "normal",
25+
clusters.DoorLock.Enums.OperatingModeEnum.kVacation: "vacation",
26+
clusters.DoorLock.Enums.OperatingModeEnum.kPrivacy: "privacy",
27+
clusters.DoorLock.Enums.OperatingModeEnum.kNoRemoteLockUnlock: "no_remote_lock_unlock",
28+
clusters.DoorLock.Enums.OperatingModeEnum.kPassage: "passage",
29+
}
30+
DOOR_LOCK_OPERATING_MODE_MAP_REVERSE = {
31+
v: k for k, v in DOOR_LOCK_OPERATING_MODE_MAP.items()
32+
}
33+
2334
NUMBER_OF_RINSES_STATE_MAP = {
2435
clusters.LaundryWasherControls.Enums.NumberOfRinsesEnum.kNone: "off",
2536
clusters.LaundryWasherControls.Enums.NumberOfRinsesEnum.kNormal: "normal",
@@ -30,6 +41,7 @@
3041
NUMBER_OF_RINSES_STATE_MAP_REVERSE = {
3142
v: k for k, v in NUMBER_OF_RINSES_STATE_MAP.items()
3243
}
44+
3345
PUMP_OPERATION_MODE_MAP = {
3446
clusters.PumpConfigurationAndControl.Enums.OperationModeEnum.kNormal: "normal",
3547
clusters.PumpConfigurationAndControl.Enums.OperationModeEnum.kMinimum: "minimum",
@@ -580,4 +592,17 @@ def _update_from_device(self) -> None:
580592
vendor_id=(4619,),
581593
product_id=(4097,),
582594
),
595+
MatterDiscoverySchema(
596+
platform=Platform.SELECT,
597+
entity_description=MatterSelectEntityDescription(
598+
key="DoorLockOperatingMode",
599+
entity_category=EntityCategory.CONFIG,
600+
translation_key="door_lock_operating_mode",
601+
options=list(DOOR_LOCK_OPERATING_MODE_MAP.values()),
602+
device_to_ha=DOOR_LOCK_OPERATING_MODE_MAP.get,
603+
ha_to_device=DOOR_LOCK_OPERATING_MODE_MAP_REVERSE.get,
604+
),
605+
entity_class=MatterAttributeSelectEntity,
606+
required_attributes=(clusters.DoorLock.Attributes.OperatingMode,),
607+
),
583608
]

homeassistant/components/matter/strings.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,16 @@
246246
"device_energy_management_mode": {
247247
"name": "Energy management mode"
248248
},
249+
"door_lock_operating_mode": {
250+
"name": "Operating mode",
251+
"state": {
252+
"no_remote_lock_unlock": "No remote lock/unlock",
253+
"normal": "Normal",
254+
"passage": "Passage",
255+
"privacy": "Privacy",
256+
"vacation": "Vacation"
257+
}
258+
},
249259
"door_lock_sound_volume": {
250260
"name": "Sound volume",
251261
"state": {

tests/components/matter/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ async def integration_fixture(
125125
"pressure_sensor",
126126
"pump",
127127
"room_airconditioner",
128+
"secuyou_smart_lock",
128129
"silabs_dishwasher",
129130
"silabs_evse_charging",
130131
"silabs_laundrywasher",

0 commit comments

Comments
 (0)