diff --git a/custom_components/xiaomi_home/miot/miot_device.py b/custom_components/xiaomi_home/miot/miot_device.py index 1f3f1862..993f2e5c 100644 --- a/custom_components/xiaomi_home/miot/miot_device.py +++ b/custom_components/xiaomi_home/miot/miot_device.py @@ -57,6 +57,7 @@ CONCENTRATION_PARTS_PER_BILLION, CONCENTRATION_PARTS_PER_MILLION, DEGREE, + EntityCategory, LIGHT_LUX, PERCENTAGE, SIGNAL_STRENGTH_DECIBELS, @@ -549,6 +550,9 @@ def parse_miot_service_entity( # Optional actions # Optional events miot_service.platform = platform + # entity_category: + if entity_category := SPEC_SERVICE_TRANS_MAP[service_name].get('entity_category'): + miot_service.entity_category = entity_category return entity_data def parse_miot_property_entity(self, miot_prop: MIoTSpecProperty) -> bool: @@ -899,6 +903,7 @@ def __init__( self._attr_name = ( f'{"* "if self.entity_data.spec.proprietary else " "}' f'{self.entity_data.spec.description_trans}') + self._attr_entity_category = entity_data.spec.entity_category # Set entity attr self._attr_unique_id = self.entity_id self._attr_should_poll = False diff --git a/custom_components/xiaomi_home/miot/miot_spec.py b/custom_components/xiaomi_home/miot/miot_spec.py index eaede61c..042b2e1a 100644 --- a/custom_components/xiaomi_home/miot/miot_spec.py +++ b/custom_components/xiaomi_home/miot/miot_spec.py @@ -476,6 +476,7 @@ class _MIoTSpecBase: device_class: Any state_class: Any external_unit: Any + entity_category: str | None spec_id: int @@ -494,6 +495,7 @@ def __init__(self, spec: dict) -> None: self.device_class = None self.state_class = None self.external_unit = None + self.entity_category = None self.spec_id = hash(f'{self.type_}.{self.iid}') diff --git a/custom_components/xiaomi_home/miot/specs/specv2entity.py b/custom_components/xiaomi_home/miot/specs/specv2entity.py index 0061f79d..f118dfad 100644 --- a/custom_components/xiaomi_home/miot/specs/specv2entity.py +++ b/custom_components/xiaomi_home/miot/specs/specv2entity.py @@ -51,6 +51,7 @@ from homeassistant.const import ( CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, + EntityCategory, LIGHT_LUX, UnitOfEnergy, UnitOfPower, @@ -264,7 +265,8 @@ 'events': set, 'actions': set }, - 'entity': str + 'entity': str, + 'entity_category'?: str, } } """ @@ -282,10 +284,23 @@ }, 'entity': 'light' }, - 'indicator-light': 'light', 'ambient-light': 'light', 'night-light': 'light', 'white-light': 'light', + 'indicator-light': { + 'required': { + 'properties': { + 'on': {'read', 'write'} + } + }, + 'optional': { + 'properties': { + 'mode', 'brightness', + } + }, + 'entity': 'light', + 'entity_category': EntityCategory.CONFIG, + }, 'fan': { 'required': { 'properties': {