Перейти к содержанию

Сигналы

Приложение читает из DiPlus 137 сигналов (132 с CAN-маппингом + 5 синтетических). Полный каталог с китайскими/английскими названиями и ключами — в файле SIGNALS.md репозитория.

Структура сигнала

Каждый сигнал описан в signals.yaml (источник истины для кодогенерации):

Поле Описание
key стабильный snake_case ключ (window_fl, soc, …) — используется в payload для HA
name китайское имя для запроса к DiPlus API
description английское имя
type num (число) или enum (текст/перечисление)
unit единица измерения для HA (%, °C, mm, …)
icon иконка MDI
state_class measurement для числовых (long-term statistics)
labels переводы enum-значений

Переводы значений

DiPlus отдаёт значения на китайском. Приложение переводит их через два словаря:

  • value_trans — точные соответствия (开启中 → opening, 有车接近 → car approaching, …);
  • ENUM_LABELS — индексные маппинги для enum-сигналов.

В HA уходят уже переведённые значения. Непереведённое значение не теряется — передаётся как есть, а в лог пишется предупреждение Untranslated value.

Синтетические сигналы

Не запрашиваются из DiPlus — формируются самим приложением:

  • app_version — версия приложения (с номером сборки);
  • wifi_ssid, wifi_bssid, wifi_ip, wifi_signal — текущая Wi-Fi сеть ГУ;
  • geo_<id> — виртуальные датчики геозон.

Неподдерживаемые сигналы

Если автомобиль не отвечает на какой-то сигнал (другая комплектация, прошивка), он помечается unsupported: показывается в таблице телеметрии без галочки, продолжает опрашиваться, но в HA не отправляется. Если после обновления ПО сигнал появится — он сам вернётся в выгрузку.

Добавление/изменение сигналов (для разработчиков)

  1. Правьте signals.yaml в корне репозитория.
  2. Запустите python scripts/signals_tool.py regenerate — обновятся CANDataReader.java, SignalTranslator.java, const.py, SIGNALS.md.
  3. Прогоните тесты: pytest tests/ и DiPlus-to-hass/run_java_tests.sh.

Регенерация идемпотентна и сохраняет версию интеграции и служебные блоки (геозоны).