mirror of
https://github.com/XiaoMi/ha_xiaomi_home.git
synced 2026-01-12 03:40:43 +08:00
Compare commits
5 Commits
7733b71374
...
90e9eb46a4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90e9eb46a4 | ||
|
|
b40d357230 | ||
|
|
1258d3f3d3 | ||
|
|
64d9d54170 | ||
|
|
059eee33e0 |
@ -224,6 +224,15 @@ class FeatureFanMode(MIoTServiceEntity, ClimateEntity):
|
|||||||
_prop_fan_level: Optional[MIoTSpecProperty]
|
_prop_fan_level: Optional[MIoTSpecProperty]
|
||||||
_fan_mode_map: Optional[dict[int, str]]
|
_fan_mode_map: Optional[dict[int, str]]
|
||||||
|
|
||||||
|
# HomeKit Bridge: fan_modes must be "auto"、"low"、"medium"、"high"
|
||||||
|
_fan_mode_translation_map = {
|
||||||
|
"自动": "auto",
|
||||||
|
"低风": "low",
|
||||||
|
"中风": "medium",
|
||||||
|
"高风": "high",
|
||||||
|
}
|
||||||
|
_fan_mode_translation_map_rev = {v: k for k, v in _fan_mode_translation_map.items()}
|
||||||
|
|
||||||
def __init__(self, miot_device: MIoTDevice,
|
def __init__(self, miot_device: MIoTDevice,
|
||||||
entity_data: MIoTEntityData) -> None:
|
entity_data: MIoTEntityData) -> None:
|
||||||
"""Initialize the feature class."""
|
"""Initialize the feature class."""
|
||||||
@ -243,7 +252,13 @@ class FeatureFanMode(MIoTServiceEntity, ClimateEntity):
|
|||||||
self.entity_id)
|
self.entity_id)
|
||||||
continue
|
continue
|
||||||
self._fan_mode_map = prop.value_list.to_map()
|
self._fan_mode_map = prop.value_list.to_map()
|
||||||
self._attr_fan_modes = prop.value_list.descriptions
|
# save org fan speed
|
||||||
|
self._raw_fan_modes = prop.value_list.descriptions
|
||||||
|
self._attr_fan_modes = [
|
||||||
|
self._fan_mode_translation_map.get(mode, mode)
|
||||||
|
for mode in self._raw_fan_modes
|
||||||
|
]
|
||||||
|
|
||||||
self._attr_supported_features |= ClimateEntityFeature.FAN_MODE
|
self._attr_supported_features |= ClimateEntityFeature.FAN_MODE
|
||||||
self._prop_fan_level = prop
|
self._prop_fan_level = prop
|
||||||
elif prop.name == 'on' and prop.service.name == 'fan-control':
|
elif prop.name == 'on' and prop.service.name == 'fan-control':
|
||||||
@ -264,7 +279,11 @@ class FeatureFanMode(MIoTServiceEntity, ClimateEntity):
|
|||||||
if fan_mode == FAN_ON:
|
if fan_mode == FAN_ON:
|
||||||
await self.set_property_async(prop=self._prop_fan_on, value=True)
|
await self.set_property_async(prop=self._prop_fan_on, value=True)
|
||||||
return
|
return
|
||||||
mode_value = self.get_map_key(map_=self._fan_mode_map, value=fan_mode)
|
|
||||||
|
chinese_fan_mode = self._fan_mode_translation_map_rev.get(fan_mode, fan_mode)
|
||||||
|
|
||||||
|
mode_value = self.get_map_key(map_=self._fan_mode_map, value=chinese_fan_mode)
|
||||||
|
|
||||||
if mode_value is None or not await self.set_property_async(
|
if mode_value is None or not await self.set_property_async(
|
||||||
prop=self._prop_fan_level, value=mode_value):
|
prop=self._prop_fan_level, value=mode_value):
|
||||||
raise RuntimeError(f'set climate prop.fan_mode failed, {fan_mode}, '
|
raise RuntimeError(f'set climate prop.fan_mode failed, {fan_mode}, '
|
||||||
@ -278,9 +297,15 @@ class FeatureFanMode(MIoTServiceEntity, ClimateEntity):
|
|||||||
if self._prop_fan_level is None and self._prop_fan_on:
|
if self._prop_fan_level is None and self._prop_fan_on:
|
||||||
return (FAN_ON if self.get_prop_value(
|
return (FAN_ON if self.get_prop_value(
|
||||||
prop=self._prop_fan_on) else FAN_OFF)
|
prop=self._prop_fan_on) else FAN_OFF)
|
||||||
return self.get_map_value(
|
|
||||||
|
current_chinese_mode = self.get_map_value(
|
||||||
map_=self._fan_mode_map,
|
map_=self._fan_mode_map,
|
||||||
key=self.get_prop_value(prop=self._prop_fan_level))
|
key=self.get_prop_value(prop=self._prop_fan_level))
|
||||||
|
|
||||||
|
if current_chinese_mode is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return self._fan_mode_translation_map.get(current_chinese_mode, current_chinese_mode)
|
||||||
|
|
||||||
|
|
||||||
class FeatureSwingMode(MIoTServiceEntity, ClimateEntity):
|
class FeatureSwingMode(MIoTServiceEntity, ClimateEntity):
|
||||||
|
|||||||
@ -1527,6 +1527,8 @@ class MIoTClient:
|
|||||||
if did not in filter_dids:
|
if did not in filter_dids:
|
||||||
continue
|
continue
|
||||||
device_old = self._device_list_gateway.get(did, None)
|
device_old = self._device_list_gateway.get(did, None)
|
||||||
|
gw_state_old = device_old.get(
|
||||||
|
'online', False) if device_old else False
|
||||||
gw_state_new: bool = False
|
gw_state_new: bool = False
|
||||||
device_new = gw_list.pop(did, None)
|
device_new = gw_list.pop(did, None)
|
||||||
if device_new:
|
if device_new:
|
||||||
@ -1540,7 +1542,7 @@ class MIoTClient:
|
|||||||
device_old['online'] = False
|
device_old['online'] = False
|
||||||
# Update cache group_id
|
# Update cache group_id
|
||||||
info['group_id'] = group_id
|
info['group_id'] = group_id
|
||||||
if not gw_state_new:
|
if (gw_state_old == gw_state_new) and (not gw_state_new):
|
||||||
continue
|
continue
|
||||||
self.__update_device_msg_sub(did=did)
|
self.__update_device_msg_sub(did=did)
|
||||||
state_old: Optional[bool] = info.get('online', None)
|
state_old: Optional[bool] = info.get('online', None)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user