From e0023062c5f4444f72cc3bad9db6f3b6c0180b38 Mon Sep 17 00:00:00 2001 From: topsworld Date: Wed, 22 Jan 2025 14:11:16 +0800 Subject: [PATCH] feat: update miot device logic --- .../xiaomi_home/miot/miot_device.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/custom_components/xiaomi_home/miot/miot_device.py b/custom_components/xiaomi_home/miot/miot_device.py index 991e2b1..1465a45 100644 --- a/custom_components/xiaomi_home/miot/miot_device.py +++ b/custom_components/xiaomi_home/miot/miot_device.py @@ -903,14 +903,14 @@ class MIoTServiceEntity(Entity): siid=event.service.iid, eiid=event.iid, sub_id=sub_id) def get_map_value( - self, map_: dict[int, Any], key: int + self, map_: Optional[dict[int, Any]], key: int ) -> Any: if map_ is None: return None return map_.get(key, None) def get_map_key( - self, map_: dict[int, Any], value: Any + self, map_: Optional[dict[int, Any]], value: Any ) -> Optional[int]: if map_ is None: return None @@ -919,7 +919,7 @@ class MIoTServiceEntity(Entity): return key return None - def get_prop_value(self, prop: MIoTSpecProperty) -> Any: + def get_prop_value(self, prop: Optional[MIoTSpecProperty]) -> Any: if not prop: _LOGGER.error( 'get_prop_value error, property is None, %s, %s', @@ -927,7 +927,9 @@ class MIoTServiceEntity(Entity): return None return self._prop_value_map.get(prop, None) - def set_prop_value(self, prop: MIoTSpecProperty, value: Any) -> None: + def set_prop_value( + self, prop: Optional[MIoTSpecProperty], value: Any + ) -> None: if not prop: _LOGGER.error( 'set_prop_value error, property is None, %s, %s', @@ -936,13 +938,14 @@ class MIoTServiceEntity(Entity): self._prop_value_map[prop] = value async def set_property_async( - self, prop: MIoTSpecProperty, value: Any, update: bool = True + self, prop: Optional[MIoTSpecProperty], value: Any, + update_value: bool = True, write_ha_state: bool = True ) -> bool: - value = prop.value_format(value) if not prop: raise RuntimeError( f'set property failed, property is None, ' f'{self.entity_id}, {self.name}') + value = prop.value_format(value) if prop not in self.entity_data.props: raise RuntimeError( f'set property failed, unknown property, ' @@ -958,8 +961,9 @@ class MIoTServiceEntity(Entity): except MIoTClientError as e: raise RuntimeError( f'{e}, {self.entity_id}, {self.name}, {prop.name}') from e - if update: + if update_value: self._prop_value_map[prop] = value + if write_ha_state: self.async_write_ha_state() return True