diff --git a/custom_components/xiaomi_home/miot/miot_device.py b/custom_components/xiaomi_home/miot/miot_device.py index 56637d62..a08d899e 100644 --- a/custom_components/xiaomi_home/miot/miot_device.py +++ b/custom_components/xiaomi_home/miot/miot_device.py @@ -515,9 +515,21 @@ def parse_miot_property_entity( prop.icon = self.icon_convert(prop.unit) device_class = SPEC_PROP_TRANS_MAP['properties'][prop_name][ 'device_class'] - prop.platform = device_class + + result = {'platform': platform, 'device_class': device_class} + + # optional: + prop_optional = SPEC_PROP_TRANS_MAP['properties'][prop_name].get('optional') + if prop_optional: + prop_optional_state_class = prop_optional.get('state_class') + if prop_optional_state_class: + result['state_class'] = prop_optional_state_class + + prop_optional_unit = prop_optional.get('unit_of_measurement') + if prop_optional_unit and not prop.unit: + result['unit_of_measurement'] = prop_optional_unit - return {'platform': platform, 'device_class': device_class} + return result def spec_transform(self) -> None: """Parse service, property, event, action from device spec.""" @@ -544,6 +556,12 @@ def spec_transform(self) -> None: if prop_entity: prop.platform = prop_entity['platform'] prop.device_class = prop_entity['device_class'] + if 'state_class' in prop_entity: + prop.state_class = prop_entity['state_class'] + if 'unit_of_measurement' in prop_entity: + prop.external_unit = self.unit_convert(prop_entity['unit_of_measurement']) + prop.icon = self.icon_convert(prop_entity['unit_of_measurement']) + # general conversion if not prop.platform: if prop.writable: