wen_jxpx 发表于 2021-4-21 11:02:52

关于hassos自定义插件无法使用的问题

2021-04-21 10:53:45 ERROR (MainThread) Error while setting up yunmi_water_heater platform for water_heater
Traceback (most recent call last):
File "/config/custom_components/yunmi_water_heater/water_heater.py", line 217, in yunmi_login
    res = requests.get(url, headers=headers)
File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 394, in _make_request
    conn.request(method, url, **httplib_request_kw)
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 234, in request
    super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/usr/local/lib/python3.8/http/client.py", line 1255, in request
    self._send_request(method, url, body, headers, encode_chunked)
File "/usr/local/lib/python3.8/http/client.py", line 1266, in _send_request
    self.putrequest(method, url, **skips)
File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 214, in putrequest
    return _HTTPConnection.putrequest(self, method, url, *args, **kwargs)
File "/usr/src/homeassistant/homeassistant/util/async_.py", line 150, in protected_loop_func
    check_loop()
File "/usr/src/homeassistant/homeassistant/util/async_.py", line 139, in check_loop
    raise RuntimeError(
RuntimeError: I/O must be done in the executor; Use `await hass.async_add_executor_job()` at custom_components/yunmi_water_heater/water_heater.py, line 217: res = requests.get(url, headers=headers)在docker环境中可以正常使用,但在202104版的hassos里提示改错误,按提示添加代码依旧无法启动该插件,请问下哪位大佬清楚原因。源码见附件





jyz_0501 发表于 2021-4-21 22:30:51

HA 升级版本所致,等待插件更新吧

wen_jxpx 发表于 2021-4-22 09:01:52

jyz_0501 发表于 2021-4-21 22:30
HA 升级版本所致,等待插件更新吧

我就是插件作者 哈哈。 没看明白怎么改。。。 对python不是很熟悉。

jyz_0501 发表于 2021-4-22 09:46:58

wen_jxpx 发表于 2021-4-22 09:01
我就是插件作者 哈哈。 没看明白怎么改。。。 对python不是很熟悉。

哈哈 ,好尴尬, 最近是有这个问题,我峥果浴霸也是这个错误await hass.async_add_executor_job()

wen_jxpx 发表于 2021-4-22 11:27:29

jyz_0501 发表于 2021-4-22 09:46
哈哈 ,好尴尬, 最近是有这个问题,我峥果浴霸也是这个错误await hass.async_add_executor_job()   ...

按提示 改成async方法 并加协成作业,报错是不会了,但是日志打不出来,插件也不可用,感觉上就是一直在等待这个作业执行,并没有进行下一步。

zcw159357 发表于 2021-5-28 04:51:20

import aiohttp
...

async def asyncGet(url, headers):
    async with aiohttp.ClientSession(headers=headers) as session:
      async with session.get(url) as response:
            _LOGGER.info('res: ' + str(response.status))
            html = await response.text()
            _LOGGER.info('html: ' + str(html))
            return html

async def yunmi_login(self):
    ...
    res_list = json.loads(await asyncGet(url, headers))
    ...

async def update(self):
    ...
    await self.yunmi_login()
    ...


大概这么个意思 试试看 我自己用的按照这个思路改了是正常了

XCray 发表于 2021-5-28 06:20:03

jyz_0501 发表于 2021-4-22 09:46
哈哈 ,好尴尬, 最近是有这个问题,我峥果浴霸也是这个错误await hass.async_add_executor_job()   ...

我jio着应该这么回复:
哈哈,那你就赶快更新;P

wen_jxpx 发表于 2021-6-4 21:00:32

XCray 发表于 2021-5-28 06:20
我jio着应该这么回复:
哈哈,那你就赶快更新

实在更新不动,ha底层多线程协同机制有变化。

wen_jxpx 发表于 2021-6-4 21:01:34

zcw159357 发表于 2021-5-28 04:51
import aiohttp
...



回头试试看。谢谢。

wen_jxpx 发表于 2021-6-8 11:27:24

zcw159357 发表于 2021-5-28 04:51
import aiohttp
...



试了下,不行。因为我有跨类调用。主要是加了async,调试都很麻烦。。。
页: [1] 2
查看完整版本: 关于hassos自定义插件无法使用的问题