Новая архитектура телеметрии и исследования — JSON-реестры сенсоров/команд/профилей (141 сенсор / 29 команд / 3 профиля авто), ProbeEngine с автоопределением типа авто по скору ответов сигналов (полный прогон при первом запуске и каждый 3-й запуск, лёгкая проверка каналов между ними) и SourceManager, который централизованно решает, откуда читать, по реестру, активным каналам и отчёту исследования; system-сенсоры (GPS/устройство) читаются всегда.
GPS 1 Гц — координаты/скорость/азимут снимаются каждую секунду и передаются батчами окном ~4 с; GPS-минимум присутствует в интеграции всегда.
Секция настроек «Исследование системы» — выбор типа авто из car_profiles.json, чекбоксы каналов с доступностью из отчёта, статус исследования и экспорт probe_report.json.
Анонимные отчёты исследования (опционально, выключено по умолчанию) — PHP-приёмник на сайте (/api/probe-report) с валидацией схемы и rate-limit; MCP-API (/api/mcp: list_car_profiles, signal_availability, channel_availability, raw_reports) для анализа доступности сигналов/каналов по моделям.
Новые каналы — OBD-II ELM327 по TCP/WiFi (опционально, выключен по умолчанию), честные availability-пробы DiPlus Push и BYD Cloud, Voyah (только чтение) через рефлексию к вендорскому CANBus-сервису.
Фикс пропадания сенсоров из телеметрии — DiPlus при обвале сервера больше не помечает исправные сигналы как «неподдерживаемые» (ошибка соединения не считается свойством сигнала). Ранее после обвала DiPlus до 130 сенсоров (включая window_rr / sunroof / sunshade) навсегда прятались из телеметрии; группа «известно неподдерживаемых» сигналов периодически пере-изолируется, чтобы вернувшиеся сигналы снова стали активными.
Настройки — иконки разделов в одну строку с названием (слева); «Протоколы» → «Сервисы / источники данных», «Технические» → «Опции»; «Геозоны» — отдельный пункт левой колонки; язык, «Обновить пресеты» и импорт/экспорт конфигурации перенесены в «Опции», секция «Прочее» убрана.
Исследование каналов — модальное окно с прогресс-баром на время зондирования.
Анализ логов — разбор сценария пропадания сенсоров на BYD Song Pro 2022 задокументирован в info/telemetry_signal_disappearance_analysis.md.
Профиль автомобиля — производитель (BYD / «Универсальный авто с Android»), марка/модель и год выпуска в настройках; VIN и версия ПО снова попадают в телеметрию (ранее исключались из слияния сенсоров).
«Исследование каналов» для универсального авто — зондирование DiPlus, ADB, системных свойств и экспериментальных каналов с отчётом (экран + лог + файл research_*.txt); отчёт прикладывается к отправляемому логу.
Первый запуск новой версии — автоматически открываются настройки автозапуска и окно «О программе».
Нативная запись команд (бета) — команды применяются через прямой канал записи autoservice (service call autoservice 6, тот же setInt, что использует HelperDaemon BYD) в дополнение к DiPlus HTTP. Карта команд в assets/native_commands.json сопоставляет команду с адресами; native и DiPlus взаимно подменяют друг друга, так что команда выполняется, пока жив хотя бы один интерфейс. Режим auto запоминает, какой интерфейс отвечал последним.
Верификация записи и отчёт об интерфейсе — результат команды включает использованный интерфейс (native/diplus) и число фоллбэков; запись, принятая интерфейсом, не показывается как ошибка, даже если связанный сенсор недоступен или не подтвердил значение.
Чистка native-телеметрии — passenger_seatbelt (мигающий fid) и trunk (не читающийся fid) убраны из native-карты чтения; оба продолжают работать через DiPlus.
Интервал телеметрии 7 с — цикл native-чтения (4,5–5,5 с) больше не гоняется со следующим тиком; пропуски циклов (до ~120/сессию) устранены.
Нативная телеметрия (бета) — чтение сигналов напрямую с ГУ через on-device ADB (service call autoservice), в обход сервера DiPlus. Источник выбирается в настройках (diplus/native/auto); debug-режим сравнивает native-значения с DiPlus в логе.
Выверка таблицы команды→сенсоры — expectedValue приведены к фактическим enum-переводам, устранены ложные state mismatch для команд дверей/окон/замков/багажника/климата/света.
Фикс загрузки интеграции — бинарные сенсоры больше не падают с ImportError: cannot import name 'ONLINE_OFFLINE_SECONDS'; порог онлайн/офлайн задан в const.py (60 с).
Диапазоны команд приведены к реальным возможностям DiPlus — температура кондиционера 17–30 (дроби отвергаются, иначе DiPlus открывает NaviActivity), вентилятор 1–7, SOC 15–70, внешняя громкость 0–99.
Сигналы num → enum — sentry_state, parked_recording_switch, parked_sentry_alarm, lead_car_start_state переведены в перечисления с нормальными метками.
История сущностей с реальными метками времени — пакеты телеметрии реплеятся в recorder HA по времени сбора каждого снапшота (HA 2024.6+): история показывает фактическую траекторию, а не один тик.
Запоминание параметров пресетов — проценты окон, температура/обдув климата сохраняются; диалог редактирования пресета предлагает «Сохранить» / «Сохранить и применить» и не выполняет команды молча.
Диалоги действий пресетов — сетка кнопок — вместо списка; у пресета «Окна» кнопки Закрыть / Открыть (4 стекла на 100 %) / Проветрить / Свои значения.
Пресеты дашборда v4 — порт зарядки больше не «отключён» на подключённом пистолете (truthy покрывает реальные значения AC/DC-пистолета и Ready); режим охраны стал пресетом с 3 кнопками-действиями; детские замки объединены в одну плитку с 4 действиями; удалён дубль-пресет «Закрыть окна»; «Вентилятор климата» и «Темп. климата» переименованы; сравнение опций select нормализовано (без учёта _ / + : - и пробелов).
Сенсор зарядки в HA — бинарный сенсор зарядки включается на Ready/started/charging/full (раньше машина на активной зарядке присылала Ready и сенсор оставался выключенным).
Дедупликация экспорта лога — повторные timestamp-строки из секций «In-memory» и «Persistent File» больше не дублируются.
Единый источник версии — тест согласованности следит, чтобы версия приложения и интеграции совпадала везде; AndroidManifest очищен от устаревшей версии.
Трёхрежимная запись лога в файл: Выкл (файл не ведётся, только экспорт по запросу) / Базовый (события и ошибки, без RAW) / Подробный (всё, включая тела RAW-ответов DiPlus).
Лог в памяти — всегда подробный (буфер с ограничением по размеру): экспорт в любой момент даёт полную картину независимо от режима записи в файл.
Легаси-настройка «Подробный лог» мигрирует в новый режим автоматически; экспорт/импорт конфигурации поддерживает file_log_mode (и старый ключ).
Пустое значение условия геозоны = inside — правила с пустым значением у geo_* сенсора работают без ручной правки (для «снаружи» укажите outside явно).
«Подробный лог» управляет объёмом — RAW-ответы DiPlus пишутся только при включённой настройке; базовый лог ведётся всегда в память и файл с ротацией 5 МБ.
Фикс ошибок HA из-за '∞': числовые сенсоры больше не падают с ValueError на нечисловых значениях (бесконечный расход на стоянке) — состояние unknown, сырое значение в атрибуте raw_value.
total_energy: класс состояния total_increasing → total — убраны предупреждения рекордера «not strictly increasing».
Правила по фронту — на каждый переход: 30-минутный кулдаун больше не применяется к edge-правилам (остаётся для уровневых). «Открыть двери на паркинге» теперь работает на каждом паркинге, включая короткие поездки.
Удержание условия (debounce): новый параметр правила — условие должно держаться истинным N секунд перед срабатыванием; защита от флапа сигналов.
Диагностика правил: в логе срабатываний — prev/current состояние и значения сенсоров; логируются смены состояний геозон.
Валидация редактора: условие с пустым значением не сохранить; для geo-сенсоров подсказки inside/outside; поле «мин. интервал» отмечено серым для edge-правил.
Быстрее телеметрия: неподдерживаемые сигналы опрашиваются отдельной группой — рабочие группы не сплитятся (~в 3 раза меньше запросов, чище лог).
Дефолт анти-зацикливания снижен до 60 с (миграция со 1800 для edge-правил).
Геозоны в Home Assistant — каждая зона появляется как binary_sensor.<авто>_geofence_<название> (on = внутри); в списке зон приложения — время последнего посещения.
PNG-иконки пресетов вместо эмодзи (подмена своими файлами icons/<имя>.png, эмодзи как запасной вариант).
Новый вид плиток с зонами — трёхстрочный layout (иконка / ➖ значение ➕ / название).
Автодополнение действий правил — локализованные enum-варианты, диапазоны min..max, ранее использованные значения.
Время последнего срабатывания правила — отдельно для прямой и else-ветки.
Кнопка принудительного обновления пресетов с отображением версии пакета.
Пауза таймера режима редактирования при открытых диалогах; единый стиль FAB (56dp).
Стабильность: устранена потеря циклов телеметрии (ConcurrentModificationException), движок правил защищён от ложных срабатываний при старте, чище логи (geo_, getDiPars), переведено «приближается автомобиль».
Стабильные единицы сенсоров в интеграции (mm для осадков, % для громкости) — чинит long-term statistics.
Движок правил — локальные автоматизации: множественные условия (AND/OR/NOT), несколько действий, else-ветка, «один раз за поездку», персистентное состояние, экспорт/импорт (формат v2).
Геозоны с редактором на карте (OpenStreetMap) — виртуальные датчики geo_<id> для правил.