mirror of
https://github.com/XiaoMi/ha_xiaomi_home.git
synced 2026-01-18 08:00:42 +08:00
fix: fix device remove error
This commit is contained in:
parent
69f1d38a19
commit
8a1b38ef56
@ -330,21 +330,10 @@ async def async_remove_config_entry_device(
|
|||||||
'remove device failed, invalid domain, %s, %s',
|
'remove device failed, invalid domain, %s, %s',
|
||||||
device_entry.id, device_entry.identifiers)
|
device_entry.id, device_entry.identifiers)
|
||||||
return False
|
return False
|
||||||
device_info = identifiers[1].split('_')
|
|
||||||
if len(device_info) != 2:
|
|
||||||
_LOGGER.error(
|
|
||||||
'remove device failed, invalid device info, %s, %s',
|
|
||||||
device_entry.id, device_entry.identifiers)
|
|
||||||
return False
|
|
||||||
did = device_info[1]
|
|
||||||
if did not in miot_client.device_list:
|
|
||||||
_LOGGER.error(
|
|
||||||
'remove device failed, device not found, %s, %s',
|
|
||||||
device_entry.id, device_entry.identifiers)
|
|
||||||
return False
|
|
||||||
# Remove device
|
# Remove device
|
||||||
await miot_client.remove_device_async(did)
|
await miot_client.remove_device2_async(did_tag=identifiers[1])
|
||||||
device_registry.async_get(hass).async_remove_device(device_entry.id)
|
device_registry.async_get(hass).async_remove_device(device_entry.id)
|
||||||
_LOGGER.info(
|
_LOGGER.info(
|
||||||
'remove device, %s, %s, %s', device_info[0], did, device_entry.id)
|
'remove device, %s, %s', identifiers[1], device_entry.id)
|
||||||
return True
|
return True
|
||||||
|
|||||||
@ -55,6 +55,7 @@ from urllib.parse import urlencode
|
|||||||
from urllib.request import Request, urlopen
|
from urllib.request import Request, urlopen
|
||||||
from paho.mqtt.matcher import MQTTMatcher
|
from paho.mqtt.matcher import MQTTMatcher
|
||||||
import yaml
|
import yaml
|
||||||
|
from slugify import slugify
|
||||||
|
|
||||||
MIOT_ROOT_PATH: str = path.dirname(path.abspath(__file__))
|
MIOT_ROOT_PATH: str = path.dirname(path.abspath(__file__))
|
||||||
|
|
||||||
@ -92,6 +93,11 @@ def randomize_float(value: float, ratio: float) -> float:
|
|||||||
return value * (1 - ratio + random.random()*2*ratio)
|
return value * (1 - ratio + random.random()*2*ratio)
|
||||||
|
|
||||||
|
|
||||||
|
def slugify_name(name: str, separator: str = '_') -> str:
|
||||||
|
"""Slugify a name."""
|
||||||
|
return slugify(name, separator=separator)
|
||||||
|
|
||||||
|
|
||||||
class MIoTMatcher(MQTTMatcher):
|
class MIoTMatcher(MQTTMatcher):
|
||||||
"""MIoT Pub/Sub topic matcher."""
|
"""MIoT Pub/Sub topic matcher."""
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,7 @@ from homeassistant.core import HomeAssistant
|
|||||||
from homeassistant.components import zeroconf
|
from homeassistant.components import zeroconf
|
||||||
|
|
||||||
# pylint: disable=relative-beyond-top-level
|
# pylint: disable=relative-beyond-top-level
|
||||||
from .common import MIoTMatcher
|
from .common import MIoTMatcher, slugify_name
|
||||||
from .const import (
|
from .const import (
|
||||||
DEFAULT_CTRL_MODE, DEFAULT_INTEGRATION_LANGUAGE, DEFAULT_NICK_NAME, DOMAIN,
|
DEFAULT_CTRL_MODE, DEFAULT_INTEGRATION_LANGUAGE, DEFAULT_NICK_NAME, DOMAIN,
|
||||||
MIHOME_CERT_EXPIRE_MARGIN, NETWORK_REFRESH_INTERVAL,
|
MIHOME_CERT_EXPIRE_MARGIN, NETWORK_REFRESH_INTERVAL,
|
||||||
@ -872,6 +872,13 @@ class MIoTClient:
|
|||||||
# Update notify
|
# Update notify
|
||||||
self.__request_show_devices_changed_notify()
|
self.__request_show_devices_changed_notify()
|
||||||
|
|
||||||
|
async def remove_device2_async(self, did_tag: str) -> None:
|
||||||
|
for did in self._device_list_cache:
|
||||||
|
d_tag = slugify_name(name=f'{self.cloud_server}_{did}')
|
||||||
|
if did_tag == d_tag:
|
||||||
|
await self.remove_device_async(did)
|
||||||
|
break
|
||||||
|
|
||||||
def __get_exec_error_with_rc(self, rc: int) -> str:
|
def __get_exec_error_with_rc(self, rc: int) -> str:
|
||||||
err_msg: str = self._i18n.translate(key=f'error.common.{rc}')
|
err_msg: str = self._i18n.translate(key=f'error.common.{rc}')
|
||||||
if not err_msg:
|
if not err_msg:
|
||||||
|
|||||||
@ -75,7 +75,7 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
from homeassistant.helpers.entity import DeviceInfo
|
from homeassistant.helpers.entity import DeviceInfo
|
||||||
from homeassistant.components.switch import SwitchDeviceClass
|
from homeassistant.components.switch import SwitchDeviceClass
|
||||||
from homeassistant.util import slugify
|
|
||||||
|
|
||||||
# pylint: disable=relative-beyond-top-level
|
# pylint: disable=relative-beyond-top-level
|
||||||
from .specs.specv2entity import (
|
from .specs.specv2entity import (
|
||||||
@ -85,6 +85,7 @@ from .specs.specv2entity import (
|
|||||||
SPEC_PROP_TRANS_MAP,
|
SPEC_PROP_TRANS_MAP,
|
||||||
SPEC_SERVICE_TRANS_MAP
|
SPEC_SERVICE_TRANS_MAP
|
||||||
)
|
)
|
||||||
|
from .common import slugify_name
|
||||||
from .const import DOMAIN
|
from .const import DOMAIN
|
||||||
from .miot_client import MIoTClient
|
from .miot_client import MIoTClient
|
||||||
from .miot_error import MIoTClientError, MIoTDeviceError
|
from .miot_error import MIoTClientError, MIoTDeviceError
|
||||||
@ -334,11 +335,11 @@ class MIoTDevice:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def did_tag(self) -> str:
|
def did_tag(self) -> str:
|
||||||
return slugify(f'{self.miot_client.cloud_server}_{self._did}')
|
return slugify_name(f'{self.miot_client.cloud_server}_{self._did}')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def gen_did_tag(cloud_server: str, did: str) -> str:
|
def gen_did_tag(cloud_server: str, did: str) -> str:
|
||||||
return slugify(f'{cloud_server}_{did}')
|
return slugify_name(f'{cloud_server}_{did}')
|
||||||
|
|
||||||
def gen_device_entity_id(self, ha_domain: str) -> str:
|
def gen_device_entity_id(self, ha_domain: str) -> str:
|
||||||
return (
|
return (
|
||||||
@ -355,21 +356,24 @@ class MIoTDevice:
|
|||||||
) -> str:
|
) -> str:
|
||||||
return (
|
return (
|
||||||
f'{ha_domain}.{self._model_strs[0][:9]}_{self.did_tag}_'
|
f'{ha_domain}.{self._model_strs[0][:9]}_{self.did_tag}_'
|
||||||
f'{self._model_strs[-1][:20]}_{slugify(spec_name)}_p_{siid}_{piid}')
|
f'{self._model_strs[-1][:20]}_{slugify_name(spec_name)}'
|
||||||
|
f'_p_{siid}_{piid}')
|
||||||
|
|
||||||
def gen_event_entity_id(
|
def gen_event_entity_id(
|
||||||
self, ha_domain: str, spec_name: str, siid: int, eiid: int
|
self, ha_domain: str, spec_name: str, siid: int, eiid: int
|
||||||
) -> str:
|
) -> str:
|
||||||
return (
|
return (
|
||||||
f'{ha_domain}.{self._model_strs[0][:9]}_{self.did_tag}_'
|
f'{ha_domain}.{self._model_strs[0][:9]}_{self.did_tag}_'
|
||||||
f'{self._model_strs[-1][:20]}_{slugify(spec_name)}_e_{siid}_{eiid}')
|
f'{self._model_strs[-1][:20]}_{slugify_name(spec_name)}'
|
||||||
|
f'_e_{siid}_{eiid}')
|
||||||
|
|
||||||
def gen_action_entity_id(
|
def gen_action_entity_id(
|
||||||
self, ha_domain: str, spec_name: str, siid: int, aiid: int
|
self, ha_domain: str, spec_name: str, siid: int, aiid: int
|
||||||
) -> str:
|
) -> str:
|
||||||
return (
|
return (
|
||||||
f'{ha_domain}.{self._model_strs[0][:9]}_{self.did_tag}_'
|
f'{ha_domain}.{self._model_strs[0][:9]}_{self.did_tag}_'
|
||||||
f'{self._model_strs[-1][:20]}_{slugify(spec_name)}_a_{siid}_{aiid}')
|
f'{self._model_strs[-1][:20]}_{slugify_name(spec_name)}'
|
||||||
|
f'_a_{siid}_{aiid}')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self) -> str:
|
def name(self) -> str:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user