AlexxIT / YandexStation

Управление Яндекс.Станцией и другими устройствами умного дома с Алисой из Home Assistant
https://t.me/AlexxIT_SmartHome
MIT License
1.36k stars 124 forks source link

Нет статуса устройства "недоступно" #332

Closed Sergmasharov closed 1 year ago

Sergmasharov commented 1 year ago

Имеется умная розетка (Xiaomi Mi Smart Plug Wi-Fi Basic), проброшенная в HA через интеграцию Yandex.Station.

yandex_station:
  include:
  - Насос  # розетка на даче

При обесточивании розетки алиса говорит что устройство недоступно, а в ХА статус "выключено". Очень полезно было бы отображать статус "недоступно"

Вот лог при попытке включения обесточенной розетки:

`Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/yandex_station/core/yandex_quasar.py:325
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 12:21:58 (1 occurrences)
Last logged: 12:21:58

[139697678717168] {'request_id': '3a26ccfe-4842-411f-b670-4601aef86a1c', 'status': 'error', 'code': 'DEVICE_UNREACHABLE', 'message': 'Устройство не отвечает. Проверьте, вдруг оно выключено или пропал интернет.'}
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 200, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1745, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1782, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 213, in handle_service
    await service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 678, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 943, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 715, in _handle_entity_call
    await result
  File "/config/custom_components/yandex_station/switch.py", line 72, in async_turn_on
    await self.quasar.device_action(self.device['id'], on=True)
  File "/config/custom_components/yandex_station/core/yandex_quasar.py", line 325, in device_action
    assert resp['status'] == 'ok', resp
AssertionError: {'request_id': '3a26ccfe-4842-411f-b670-4601aef86a1c', 'status': 'error', 'code': 'DEVICE_UNREACHABLE', 'message': 'Устройство не отвечает. Проверьте, вдруг оно выключено или пропал интернет.'}
`
AlexxIT commented 1 year ago

Не вижу у Яндекса такого API для устройств. Оно есть только для колонок. Неудачную попытку выполнить команду на устройстве можно поймать. Только непонятно, когда устройство нужно будет возвращать назад онлайн.

Sergmasharov commented 1 year ago

А как тогда колонка сообщает статус устройства? Когда оно недоступно, колонка не говорит что выключена розетка. Вот удалось лог с запроса на устройство (iot.quasar.yandex.ru)

{"status":"ok","request_id":"40997c95-22a9-4c72-9477-c076aaf5aeca","id":"39f2faa7-d559-4bb0-adee-d1b0f36abe95","name":"Насос","names":["Насос"],"type":"devices.types.socket","icon_url":"https://avatars.mds.yandex.net/get-iot/icons-devices-devices.types.socket.svg/orig","state":"online","groups":[],"room":"Дача","capabilities":[{"retrievable":true,"type":"devices.capabilities.on_off","state":{"instance":"on","value":false},"parameters":{"split":false}}],"properties":[],"info_message":"Похоже, что ваше устройство привязано к региону \"Китай\", время реакции может составлять до нескольких секунд","skill_id":"ad26f8c2-fc31-4928-a653-d829fda7e6c2","external_id":"M1GAxtaW9A0LXNwZWMtdjIVhIAFGAtjaHVhbmdtaS1tMxUUGAkyMzY4OTM2NTYV9AgsA.2","favorite":false}
AlexxIT commented 1 year ago

Действительно есть поле online. Проглядел

AlexxIT commented 1 year ago

https://github.com/AlexxIT/YandexStation/releases/tag/v3.12.1