- config flow: template (A/B/F с пояснениями, значения с устройства, определение по oem_model; для неизвестных моделей — пробинг A/B/F тремя короткими сессиями) -> capabilities (23 тумблера с описаниями, дефолты из device_capabilities/num_dir/ответов) -> limits (диапазон/шаг, ручная конверсия); каждая страница с пометкой «значения определены автоматически, можно пропустить» - features.py: FeatureSet/LiveValues/device_default/resolve_features; entry.data["features"] хранит выбор пользователя; reconfigure предзаполняет; YAML-import получает дефолты - сущности создаются только для включённых фич: climate (режимы/скорости/ swing/пресеты), switch, select заслонок (caps+num_dir), датчик комнаты; исправлено появление select без ламелей - trial: caps/num_dir и presence-зонды (необязательные свойства), answered; координатор ждёт первые свойства перед созданием сущностей (feature- дефолты без гонки) - атрибут description у сущностей (HA не поддерживает тултипы) + описания фич в мастере (en/ru) - тесты: features, probing, обновлённые flow/entities/repairs; 57 components
268 lines
14 KiB
JSON
268 lines
14 KiB
JSON
{
|
||
"config": {
|
||
"step": {
|
||
"user": {
|
||
"title": "FGLair",
|
||
"menu_options": {
|
||
"cloud": "Вход в облако FGLair",
|
||
"manual": "Ввод параметров вручную",
|
||
"import_json": "Импорт config_*.json"
|
||
}
|
||
},
|
||
"cloud": {
|
||
"title": "Вход в облако FGLair",
|
||
"description": "Нужен однократно для провижинига: получает статический LAN-ключ устройства.",
|
||
"data": {
|
||
"email": "E-mail",
|
||
"password": "Пароль",
|
||
"region": "Регион"
|
||
},
|
||
"data_description": {
|
||
"region": "Регион аккаунта FGLair/Ayla"
|
||
}
|
||
},
|
||
"cloud_device": {
|
||
"title": "Выбор кондиционера",
|
||
"data": {
|
||
"dsn": "Устройство"
|
||
}
|
||
},
|
||
"manual": {
|
||
"title": "Параметры устройства",
|
||
"data": {
|
||
"host": "Хост (IP или DNS-имя)",
|
||
"device_port": "Порт модуля",
|
||
"dsn": "DSN",
|
||
"lanip_key": "LAN IP key",
|
||
"lanip_key_id": "LAN IP key ID",
|
||
"name": "Имя (необязательно)",
|
||
"model": "Модель / oem_model (необязательно)"
|
||
},
|
||
"data_description": {
|
||
"device_port": "По умолчанию 80; меняйте только для проброса портов",
|
||
"lanip_key": "Из облачного discovery или диагностики ESPHome"
|
||
}
|
||
},
|
||
"import_json": {
|
||
"title": "Импорт config_*.json",
|
||
"data": {
|
||
"config_json": "JSON конфигурации"
|
||
},
|
||
"data_description": {
|
||
"config_json": "Вставьте объект JSON, созданный fglair-discover или fglctl"
|
||
}
|
||
},
|
||
"template": {
|
||
"title": "Шаблон модуля",
|
||
"description": "С устройства прочитано:\n\n{device_values}\n\n{probe_note} Шаблон задаёт таблицу свойств модуля (имена, типы, конверсии); фактические возможности прибора уточняются на следующем шаге.\n\nЕсли не уверены — оставьте значение по умолчанию.",
|
||
"data": {
|
||
"template": "Шаблон"
|
||
},
|
||
"data_description": {
|
||
"template": "A — модули AP-WA/AP-WC/AP-WD: есть датчик температуры помещения, направления и swing заслонок, все флаги. B — модули AP-WB: без датчика температуры помещения и без направлений заслонок, шаг уставки 1,0 °C. F — как A, но для модулей AP-WF (monitor1, filter_sign_reset)."
|
||
}
|
||
},
|
||
"capabilities": {
|
||
"title": "Возможности прибора",
|
||
"description": "Тумблеры выставлены по данным устройства:\n\n{device_values}\n\nОтключите то, что прибор не умеет или что не нужно показывать. Сущности создаются только для включённых возможностей.\n\nЕсли не уверены — оставьте как есть.",
|
||
"data": {
|
||
"mode_cool": "Охлаждение",
|
||
"mode_dry": "Осушение",
|
||
"mode_fan": "Вентиляция",
|
||
"mode_heat": "Обогрев",
|
||
"mode_auto": "Автоматический режим",
|
||
"fan_quiet": "Тихая скорость",
|
||
"fan_low": "Низкая скорость",
|
||
"fan_medium": "Средняя скорость",
|
||
"fan_high": "Высокая скорость",
|
||
"fan_auto": "Автоскорость",
|
||
"swing_vertical": "Swing вертикальный",
|
||
"swing_horizontal": "Swing горизонтальный",
|
||
"economy_mode": "Экономичный режим",
|
||
"min_heat": "Минимальный обогрев",
|
||
"indoor_fan_control": "Управление вентилятором",
|
||
"powerful_mode": "Мощный режим",
|
||
"outdoor_low_noise": "Тихий наружный блок",
|
||
"coil_dry_mode": "Сушка испарителя",
|
||
"display_temperature": "Датчик температуры помещения",
|
||
"human_det_auto_save": "Автосохранение (датчик присутствия)",
|
||
"wifi_led_enable": "Wi-Fi индикатор",
|
||
"af_vertical_direction": "Заслонка вертикальная",
|
||
"af_horizontal_direction": "Заслонка горизонтальная"
|
||
},
|
||
"data_description": {
|
||
"mode_cool": "Охлаждение",
|
||
"mode_dry": "Осушение",
|
||
"mode_fan": "Вентиляция (без нагрева/охлаждения)",
|
||
"mode_heat": "Обогрев",
|
||
"mode_auto": "Автоматический режим",
|
||
"fan_auto": "Автоскорость вентилятора",
|
||
"fan_quiet": "Тихая скорость",
|
||
"fan_low": "Низкая скорость",
|
||
"fan_medium": "Средняя скорость",
|
||
"fan_high": "Высокая скорость",
|
||
"swing_vertical": "Качание заслонки по вертикали",
|
||
"swing_horizontal": "Качание заслонки по горизонтали",
|
||
"economy_mode": "Экономичный режим",
|
||
"min_heat": "Минимальный обогрев (поддержание +10 °C)",
|
||
"indoor_fan_control": "Управление вентилятором при работе наружного блока",
|
||
"powerful_mode": "Мощный режим (ускоренный выход на режим)",
|
||
"outdoor_low_noise": "Тихий наружный блок",
|
||
"coil_dry_mode": "Сушка испарителя",
|
||
"display_temperature": "Датчик температуры помещения",
|
||
"human_det_auto_save": "Автосохранение при отсутствии людей (датчик присутствия)",
|
||
"wifi_led_enable": "Индикатор Wi-Fi на модуле",
|
||
"af_vertical_direction": "Выбор положения вертикальной заслонки",
|
||
"af_horizontal_direction": "Выбор положения горизонтальной заслонки"
|
||
}
|
||
},
|
||
"limits": {
|
||
"title": "Уставка (диапазон и шаг)",
|
||
"description": "Диапазон/шаг заданы автоматически (у A/F шаг 0,5 °C, у B — 1,0). При необходимости включите ручную конверсию коэффициентами (единицы API — 0,1 °C).\n\nЕсли не уверены — оставьте как есть.",
|
||
"data": {
|
||
"temp_min": "Минимум уставки (°C)",
|
||
"temp_max": "Максимум уставки (°C)",
|
||
"temp_step": "Шаг уставки (°C)",
|
||
"temp_num": "Числитель конверсии",
|
||
"temp_den": "Знаменатель конверсии",
|
||
"temp_offset": "Смещение конверсии (0,1 °C)"
|
||
},
|
||
"data_description": {
|
||
"temp_num": "display = raw × num / den + offset; raw — протокольное значение (уставка — 0,1 °C)",
|
||
"temp_den": "display = raw × num / den + offset",
|
||
"temp_offset": "display = raw × num / den + offset"
|
||
}
|
||
}
|
||
},
|
||
"error": {
|
||
"cannot_connect": "Не удалось подключиться к устройству",
|
||
"no_slots": "Оба LAN-слота заняты (приложение FGLair или ESPHome). Освободите один и повторите",
|
||
"key_mismatch": "LAN-ключ не совпадает с устройством; повторите discovery или импортируйте config заново",
|
||
"timeout": "Устройство не вышло на связь за отведённое время",
|
||
"invalid_auth": "Неверный e-mail или пароль",
|
||
"invalid_import": "Некорректный config JSON",
|
||
"no_devices": "В аккаунте не найдено устройств",
|
||
"unknown": "Неожиданная ошибка",
|
||
"properties_missing": "Устройство подключилось, но не отдало базовые свойства",
|
||
"invalid_range": "Минимум должен быть меньше максимума"
|
||
},
|
||
"abort": {
|
||
"already_configured": "Устройство уже настроено",
|
||
"invalid_import": "Некорректный config JSON",
|
||
"cannot_connect": "Не удалось подключиться к устройству",
|
||
"no_slots": "Оба LAN-слота заняты",
|
||
"key_mismatch": "LAN-ключ не совпадает с устройством",
|
||
"timeout": "Устройство не вышло на связь за отведённое время",
|
||
"properties_missing": "Устройство подключилось, но не отдало базовые свойства",
|
||
"unique_id_mismatch": "Это другое устройство (не совпадает unique ID)",
|
||
"reconfigure_successful": "Перенастройка выполнена"
|
||
}
|
||
},
|
||
"entity": {
|
||
"sensor": {
|
||
"room_temperature": {
|
||
"name": "Температура в помещении"
|
||
},
|
||
"error_code": {
|
||
"name": "Код ошибки"
|
||
},
|
||
"connection_state": {
|
||
"name": "Состояние связи",
|
||
"state": {
|
||
"idle": "Покой",
|
||
"registering": "Регистрация",
|
||
"online": "На связи",
|
||
"recovering": "Восстановление",
|
||
"offline": "Не в сети",
|
||
"key_error": "Ошибка ключа"
|
||
}
|
||
}
|
||
},
|
||
"binary_sensor": {
|
||
"connectivity": {
|
||
"name": "Связь"
|
||
},
|
||
"defrost": {
|
||
"name": "Разморозка"
|
||
},
|
||
"maintenance": {
|
||
"name": "Обслуживание"
|
||
},
|
||
"oil_recovery": {
|
||
"name": "Возврат масла"
|
||
},
|
||
"pump_down": {
|
||
"name": "Pump down"
|
||
},
|
||
"check_operation": {
|
||
"name": "Проверка работы"
|
||
},
|
||
"simultaneous": {
|
||
"name": "Одновременные операции"
|
||
},
|
||
"different_modes": {
|
||
"name": "Разморозка/масло/прочие режимы (шаблон B)"
|
||
}
|
||
},
|
||
"switch": {
|
||
"economy_mode": {
|
||
"name": "Экономичный режим"
|
||
},
|
||
"powerful_mode": {
|
||
"name": "Мощный режим"
|
||
},
|
||
"coil_dry_mode": {
|
||
"name": "Сушка испарителя"
|
||
},
|
||
"min_heat": {
|
||
"name": "Минимальный обогрев"
|
||
},
|
||
"outdoor_low_noise": {
|
||
"name": "Тихий наружный блок"
|
||
},
|
||
"human_det_auto_save": {
|
||
"name": "Автосохранение при отсутствии людей"
|
||
},
|
||
"wifi_led_enable": {
|
||
"name": "Wi-Fi индикатор"
|
||
},
|
||
"indoor_fan_control": {
|
||
"name": "Управление вентилятором"
|
||
}
|
||
},
|
||
"select": {
|
||
"af_vertical_direction": {
|
||
"name": "Положение заслонки (верт.)"
|
||
},
|
||
"af_horizontal_direction": {
|
||
"name": "Положение заслонки (гориз.)"
|
||
}
|
||
}
|
||
},
|
||
"issues": {
|
||
"key_mismatch": {
|
||
"title": "FGLair: не совпадает LAN-ключ",
|
||
"description": "Устройство {device} ({host}) отклонило сохранённый LAN-ключ (несовпадение key_id). Используйте «Настроить заново» на карточке интеграции: вход в облако получит актуальный ключ, либо вставьте новый config_*.json.",
|
||
"fix_flow": {
|
||
"step": {
|
||
"confirm": {
|
||
"title": "FGLair: не совпадает LAN-ключ",
|
||
"description": "Подтвердите — интеграция перезагрузится (устройство {device}, {host}). Если ключ всё ещё неверен, используйте «Настроить заново» на карточке интеграции: вход в облако FGLair получит актуальный ключ, либо вставьте новый config_*.json. Repair исчезнет, когда устройство выйдет на связь."
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"options": {
|
||
"step": {
|
||
"init": {
|
||
"title": "LAN-ключ FGLair",
|
||
"description": "Полный LAN-ключ (для secrets.yaml ESPHome). Скопируйте его или вставьте новый, чтобы заменить сохранённый. DSN: {dsn}; key ID: {lanip_key_id}; host: {host}. Сохранение изменённого ключа перезагружает устройство.",
|
||
"data": {
|
||
"lanip_key": "LAN-ключ"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|