AlexxIT / YandexStation

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

Aqara E1 Thermostat - не передаются значения HVAC mode #432

Closed Leviann closed 8 months ago

Leviann commented 8 months ago

При добавлении термостата Aqara E1, модель SRTS-A01, не передаются значения hvac. Что, в целом, ожидаемо, так как в приложении Яндекса режимов так же нет. Однако HA не понимает такого и валится с ошибками при попытке отрендерить любую карточку, связанную с термостатом. 2024-01-08 17:27:09.238 ERROR (MainThread) [homeassistant.components.homekit.type_thermostats] climate.battery: Received invalid HVAC mode: unknown

Попытался обойти эту проблему через customize.yaml:

climate.battery:
  min_temp: 5
  max_temp: 35
  hvac_modes:
    - "off"
    - "heat"

Однако при установке "heat" появляется ошибка:

2024-01-08 17:26:59.560 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [140394607210048] {'request_id': '5f0fda6c-5888-4e03-84de-3e092fd238d2', 'status': 'error', 'code': 'INTERNAL_ERROR', 'message': 'Случилось что-то непонятное. Подождите немного и попробуйте ещё раз.'}
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 238, in handle_call_service
    response = await hass.services.async_call(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2149, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2186, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 272, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 882, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 952, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/yandex_station/climate.py", line 124, in async_set_hvac_mode
    await self.quasar.device_action(
  File "/config/custom_components/yandex_station/core/yandex_quasar.py", line 353, in device_action
    assert resp["status"] == "ok", resp
           ^^^^^^^^^^^^^^^^^^^^^^
AssertionError: {'request_id': '5f0fda6c-5888-4e03-84de-3e092fd238d2', 'status': 'error', 'code': 'INTERNAL_ERROR', 'message': 'Случилось что-то непонятное. Подождите немного и попробуйте ещё раз.'}

Что интересно - термостат таки включается.

Есть ли способ это как-то исправить?

AlexxIT commented 8 months ago

Нужно получить описание устройства (пример тут #366):

AlexxIT commented 8 months ago

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

Leviann commented 8 months ago

Надо бы настроить уведомления от гитхаба :) Спасибо огромное, батарея теперь заработала исправно!

На всякий случай все же передам описание устройства:

{
    "status": "ok",
    "request_id": "",
    "id": "",
    "name": "Батарея",
    "names": [
        "Батарея"
    ],
    "type": "devices.types.thermostat",
    "icon_url": "https://avatars.mds.yandex.net/get-iot/icons-devices-devices.types.thermostat.svg/orig",
    "state": "online",
    "groups": [],
    "room": "Моя комната",
    "capabilities": [
        {
            "reportable": true,
            "retrievable": true,
            "type": "devices.capabilities.on_off",
            "state": {
                "instance": "on",
                "value": false
            },
            "parameters": {
                "split": false
            }
        },
        {
            "reportable": true,
            "retrievable": true,
            "type": "devices.capabilities.range",
            "state": {
                "instance": "temperature",
                "value": 5
            },
            "parameters": {
                "instance": "temperature",
                "name": "температура",
                "unit": "unit.temperature.celsius",
                "random_access": true,
                "looped": false,
                "range": {
                    "min": 5,
                    "max": 30,
                    "precision": 0.5
                }
            }
        }
    ],
    "properties": [
        {
            "type": "devices.properties.float",
            "retrievable": true,
            "reportable": true,
            "parameters": {
                "instance": "temperature",
                "name": "температура",
                "unit": "unit.temperature.celsius"
            },
            "state": {
                "percent": null,
                "status": null,
                "value": 28.1
            },
            "state_changed_at": "2024-01-16T12:37:18Z",
            "last_updated": "2024-01-16T12:39:16Z"
        }
    ],
    "skill_id": "",
    "external_id": "lumi.04nf4420209a57g4",
    "favorite": true
}