fix: 修复阻塞事件循环的警告
将 serial.tools.list_ports.comports() 和串口验证移到线程池执行 避免阻塞 HA 事件循环,消除 asyncio_blocking_operations 警告
This commit is contained in:
parent
cbb36d7300
commit
1af5333792
@ -30,6 +30,20 @@ from .const import (
|
||||
)
|
||||
|
||||
|
||||
def _get_serial_ports() -> list:
|
||||
"""获取可用串口列表(在同步线程中执行)."""
|
||||
import serial.tools.list_ports
|
||||
return serial.tools.list_ports.comports()
|
||||
|
||||
|
||||
def _test_serial_connection(device: str, baudrate: int) -> bool:
|
||||
"""测试串口连接(在同步线程中执行)."""
|
||||
import serial
|
||||
test_serial = serial.Serial(device, baudrate=baudrate, timeout=0.5)
|
||||
test_serial.close()
|
||||
return True
|
||||
|
||||
|
||||
class SigMeshGatewayConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
"""SigMesh Gateway 配置流程."""
|
||||
|
||||
@ -48,29 +62,24 @@ class SigMeshGatewayConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
self._errors = {}
|
||||
|
||||
if user_input is not None:
|
||||
# 验证串口连接
|
||||
# 验证串口连接(在线程池中执行,避免阻塞事件循环)
|
||||
try:
|
||||
import serial
|
||||
|
||||
test_serial = serial.Serial(
|
||||
await self.hass.async_add_executor_job(
|
||||
_test_serial_connection,
|
||||
user_input[CONF_SERIAL_DEVICE],
|
||||
baudrate=user_input.get(CONF_BAUDRATE, DEFAULT_BAUDRATE),
|
||||
timeout=0.5,
|
||||
user_input.get(CONF_BAUDRATE, DEFAULT_BAUDRATE),
|
||||
)
|
||||
test_serial.close()
|
||||
self._user_input = user_input
|
||||
# 进入配网配置步骤
|
||||
return await self.async_step_prov_config()
|
||||
except serial.SerialException as e:
|
||||
except (ImportError, serial.SerialException) as e:
|
||||
self._errors[CONF_SERIAL_DEVICE] = f"无法打开串口:{e}"
|
||||
except Exception as e:
|
||||
self._errors["base"] = f"验证失败:{e}"
|
||||
|
||||
# 获取可用串口列表
|
||||
# 获取可用串口列表(在线程池中执行,避免阻塞事件循环)
|
||||
try:
|
||||
import serial.tools.list_ports
|
||||
|
||||
ports = serial.tools.list_ports.comports()
|
||||
ports = await self.hass.async_add_executor_job(_get_serial_ports)
|
||||
port_list = [
|
||||
selector.SelectOptionDict(value=p.device, label=f"{p.device} - {p.description}")
|
||||
for p in ports
|
||||
|
||||
Loading…
Reference in New Issue
Block a user