Skip to content

Commit 447fb68

Browse files
lboueTheJulianJES
andauthored
Add Matter OperationalError sensor (home-assistant#151991)
Co-authored-by: TheJulianJES <[email protected]>
1 parent 750a7c9 commit 447fb68

File tree

5 files changed

+590
-0
lines changed

5 files changed

+590
-0
lines changed

homeassistant/components/matter/icons.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@
123123
"evse_fault_state": {
124124
"default": "mdi:ev-station"
125125
},
126+
"operational_error": {
127+
"default": "mdi:alert-circle"
128+
},
126129
"pump_control_mode": {
127130
"default": "mdi:pipe-wrench"
128131
},

homeassistant/components/matter/sensor.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,14 @@
8686
clusters.OperationalState.Enums.OperationalStateEnum.kError: "error",
8787
}
8888

89+
OPERATIONAL_STATE_ERROR_MAP = {
90+
# enum with known Error state values which we can translate
91+
clusters.OperationalState.Enums.ErrorStateEnum.kNoError: "no_error",
92+
clusters.OperationalState.Enums.ErrorStateEnum.kUnableToStartOrResume: "unable_to_start_or_resume",
93+
clusters.OperationalState.Enums.ErrorStateEnum.kUnableToCompleteOperation: "unable_to_complete_operation",
94+
clusters.OperationalState.Enums.ErrorStateEnum.kCommandInvalidInState: "command_invalid_in_state",
95+
}
96+
8997
RVC_OPERATIONAL_STATE_MAP = {
9098
# enum with known Operation state values which we can translate
9199
**OPERATIONAL_STATE_MAP,
@@ -94,6 +102,29 @@
94102
clusters.RvcOperationalState.Enums.OperationalStateEnum.kDocked: "docked",
95103
}
96104

105+
RVC_OPERATIONAL_STATE_ERROR_MAP = {
106+
# enum with known Error state values which we can translate
107+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kNoError: "no_error",
108+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kUnableToStartOrResume: "unable_to_start_or_resume",
109+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kUnableToCompleteOperation: "unable_to_complete_operation",
110+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kCommandInvalidInState: "command_invalid_in_state",
111+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kFailedToFindChargingDock: "failed_to_find_charging_dock",
112+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kStuck: "stuck",
113+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kDustBinMissing: "dust_bin_missing",
114+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kDustBinFull: "dust_bin_full",
115+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kWaterTankEmpty: "water_tank_empty",
116+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kWaterTankMissing: "water_tank_missing",
117+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kWaterTankLidOpen: "water_tank_lid_open",
118+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kMopCleaningPadMissing: "mop_cleaning_pad_missing",
119+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kLowBattery: "low_battery",
120+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kCannotReachTargetArea: "cannot_reach_target_area",
121+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kDirtyWaterTankFull: "dirty_water_tank_full",
122+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kDirtyWaterTankMissing: "dirty_water_tank_missing",
123+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kWheelsJammed: "wheels_jammed",
124+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kBrushJammed: "brush_jammed",
125+
clusters.RvcOperationalState.Enums.ErrorStateEnum.kNavigationSensorObscured: "navigation_sensor_obscured",
126+
}
127+
97128
BOOST_STATE_MAP = {
98129
clusters.WaterHeaterManagement.Enums.BoostStateEnum.kInactive: "inactive",
99130
clusters.WaterHeaterManagement.Enums.BoostStateEnum.kActive: "active",
@@ -1101,6 +1132,19 @@ def _update_from_device(self) -> None:
11011132
# don't discover this entry if the supported state list is empty
11021133
secondary_value_is_not=[],
11031134
),
1135+
MatterDiscoverySchema(
1136+
platform=Platform.SENSOR,
1137+
entity_description=MatterSensorEntityDescription(
1138+
key="OperationalStateOperationalError",
1139+
translation_key="operational_error",
1140+
device_class=SensorDeviceClass.ENUM,
1141+
entity_category=EntityCategory.DIAGNOSTIC,
1142+
options=list(OPERATIONAL_STATE_ERROR_MAP.values()),
1143+
device_to_ha=lambda x: OPERATIONAL_STATE_ERROR_MAP.get(x.errorStateID),
1144+
),
1145+
entity_class=MatterSensor,
1146+
required_attributes=(clusters.OperationalState.Attributes.OperationalError,),
1147+
),
11041148
MatterDiscoverySchema(
11051149
platform=Platform.SENSOR,
11061150
entity_description=MatterListSensorEntityDescription(
@@ -1194,6 +1238,19 @@ def _update_from_device(self) -> None:
11941238
# don't discover this entry if the supported state list is empty
11951239
secondary_value_is_not=[],
11961240
),
1241+
MatterDiscoverySchema(
1242+
platform=Platform.SENSOR,
1243+
entity_description=MatterSensorEntityDescription(
1244+
key="RvcOperationalStateOperationalError",
1245+
translation_key="operational_error",
1246+
device_class=SensorDeviceClass.ENUM,
1247+
entity_category=EntityCategory.DIAGNOSTIC,
1248+
options=list(RVC_OPERATIONAL_STATE_ERROR_MAP.values()),
1249+
device_to_ha=lambda x: RVC_OPERATIONAL_STATE_ERROR_MAP.get(x.errorStateID),
1250+
),
1251+
entity_class=MatterSensor,
1252+
required_attributes=(clusters.RvcOperationalState.Attributes.OperationalError,),
1253+
),
11971254
MatterDiscoverySchema(
11981255
platform=Platform.SENSOR,
11991256
entity_description=MatterOperationalStateSensorEntityDescription(

homeassistant/components/matter/strings.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,30 @@
441441
"evse_soc": {
442442
"name": "State of charge"
443443
},
444+
"operational_error": {
445+
"name": "Operational error",
446+
"state": {
447+
"no_error": "No error",
448+
"unable_to_start_or_resume": "Unable to start or resume",
449+
"unable_to_complete_operation": "Unable to complete operation",
450+
"command_invalid_in_state": "Command invalid in current state",
451+
"failed_to_find_charging_dock": "Failed to find charging dock",
452+
"stuck": "Stuck",
453+
"dust_bin_missing": "Dust bin missing",
454+
"dust_bin_full": "Dust bin full",
455+
"water_tank_empty": "Water tank empty",
456+
"water_tank_missing": "Water tank missing",
457+
"water_tank_lid_open": "Water tank lid open",
458+
"mop_cleaning_pad_missing": "Mop cleaning pad missing",
459+
"low_battery": "Low battery",
460+
"cannot_reach_target_area": "Cannot reach target area",
461+
"dirty_water_tank_full": "Dirty water tank full",
462+
"dirty_water_tank_missing": "Dirty water tank missing",
463+
"wheels_jammed": "Wheels jammed",
464+
"brush_jammed": "Brush jammed",
465+
"navigation_sensor_obscured": "Navigation sensor obscured"
466+
}
467+
},
444468
"pi_heating_demand": {
445469
"name": "Heating demand"
446470
},

0 commit comments

Comments
 (0)