docs: корректировки планов — монорепо, слои ayla/aircon, конверсии, приёмка
- PLAN_CORE: монорепозиторий (CMakeLists в корне; components/fglair,
custom_components/fglair, include/fgl-aircon, src/{ayla,aircon},
src/ayla/platform); логическое разделение ayla (протокол+цикл) /
aircon (конверсии+шаблоны+API); тесты зеркалят слои (tests/{ayla,aircon});
конверсии: шаблон / линейные коэффициенты / функция-указатель
(лямбды ESPHome); оценка httpd/json (jsmn вендор, свой мини-httpd на
BSD-сокетах, conan не нужен); README библиотеки в M4.
- PLAN_ESPHOME: host вместо ip_address (DNS + Ayla-mDNS :10276),
секреты в примерах, кастомные конверсии через !lambda, advanced-пример
(триггеры режимов + LVGL с пропусками), README-план, скрипт приёмки
(aioesphomeapi + HA REST).
- PLAN_HOME_ASSISTANT: шаг config flow с превью рассчитанных значений
шаблона (через cffi в C-ядро, без дублей), README с HACS-инструкцией
и заглушками под скриншоты с описаниями, приёмка (long-lived token).
- Убраны реальные dsn/ip/lanip_key/key_id из примеров; probe_mdns.py
принимает DSN аргументом.
This commit is contained in:
@@ -1,20 +1,37 @@
|
||||
# aircon / FGLair local control — документация
|
||||
# aircon / FGLair local control
|
||||
|
||||
Реконструкция LAN-протокола FGLair (Fujitsu General, платформа Ayla) и планы
|
||||
реализации стека локального управления кондиционером.
|
||||
монорепозитория стека локального управления кондиционером: базовая C++
|
||||
библиотека + интеграции ESPHome и Home Assistant.
|
||||
|
||||
## Состав
|
||||
## Состав репозитория (целевая структура)
|
||||
|
||||
```
|
||||
CMakeLists.txt # базовая библиотека (корень)
|
||||
include/fgl-aircon/ # публичный API (уровень aircon: конверсии, шаблоны)
|
||||
src/ayla/ # протокол Ayla LAN + главный цикл сообщений
|
||||
platform/{posix,esp-idf}/ # платформенный слой
|
||||
src/aircon/ # конверсии, шаблоны A/B/F, реализация API
|
||||
third_party/jsmn/ # вендоренный JSON-парсер (MIT)
|
||||
components/fglair/ # ESPHome external component
|
||||
custom_components/fglair/ # Home Assistant custom component
|
||||
tests/{ayla,aircon}/ # тесты протокола / конверсий и шаблонов
|
||||
tests/acceptance/ # полуавтоматическая приёмка ESPHome<->HA
|
||||
tools/ # probe_reference.py, probe_mdns.py, fglair-discover
|
||||
docs/ # документация (ниже) + материалы анализа
|
||||
```
|
||||
|
||||
## Документация
|
||||
|
||||
| Файл | Назначение |
|
||||
|------|-----------|
|
||||
| `PROTOCOL.md` | Спецификация LAN-протокола: шифрование, эндпоинты, машина состояний, тайминги, свойства FGLair. Для людей и агентов. Факты помечены `[APK]` / `[LEGACY]` / `[ПРОВЕРЕНО НА ПРИБОРЕ]` / `[HYP]`. |
|
||||
| `LEGACY_ANALYSIS.md` | Разбор legacy-скрипта: что верно, баги, причины «рассинхронизации ключей» и перегрузки модуля. |
|
||||
| `PLAN_CORE_LIBRARY.md` | План C++20-библиотеки `fglair-core` (Linux + ESP-IDF). |
|
||||
| `PLAN_HOME_ASSISTANT.md` | План HA-интеграции (`pyfglair` wheel + custom component). |
|
||||
| `PLAN_ESPHOME.md` | План external component для ESPHome (только ESP-IDF framework). |
|
||||
| `../tools/probe_mdns.py` | mDNS-проба (`<DSN>.local`, порт 10276). |
|
||||
| `legacy/` | Изменённый legacy-скрипт (форк [gyro-labs/AirCon](https://github.com/gyro-labs/AirCon) / hisense_ac): `main.py` + пакет `aircon/` + рабочий конфиг `config_kata.json`. |
|
||||
| `apk/` | Материалы анализа APK FGLair 3.4.3 (`manifest.json`; сами .apk лежат локально, не версионируются). |
|
||||
| `PLAN_CORE_LIBRARY.md` | План C++20-библиотеки `fgl-aircon` (Linux + ESP-IDF): слои ayla/aircon, конверсии, оценка httpd/json-библиотек, монорепо-структура. |
|
||||
| `PLAN_HOME_ASSISTANT.md` | План HA-интеграции: pyfglair (cffi wheel), config flow с превью шаблона, HACS-README со скриншотами. |
|
||||
| `PLAN_ESPHOME.md` | План ESPHome-компонента: host+DNS, секреты, кастомные конверсии-лямбды, advanced-пример, приёмка. |
|
||||
| `legacy/` | Изменённый legacy-скрипт (форк [gyro-labs/AirCon](https://github.com/gyro-labs/AirCon) / hisense_ac): `main.py` + пакет `aircon/`. Локальный `config_kata.json` не версионируется (содержит lanip_key). |
|
||||
| `apk/` | Материалы анализа APK FGLair 3.4.3 (`manifest.json`; .apk-бинарники лежат локально, не версионируются). |
|
||||
|
||||
## Краткая выжимка протокола
|
||||
|
||||
@@ -39,21 +56,35 @@
|
||||
|
||||
## Ключевые решения (по уточнениям владельца)
|
||||
|
||||
* Монорепозиторий: библиотека в корне, `components/fglair` (ESPHome),
|
||||
`custom_components/fglair` (HA); тесты зеркалят слои (`tests/ayla`,
|
||||
`tests/aircon`); библиотека логически разделена на `src/ayla` (протокол)
|
||||
и `src/aircon` (конверсии/шаблоны/API), публичный интерфейс —
|
||||
`include/fgl-aircon/`.
|
||||
* Конверсии свойств задаются шаблоном по умолчанию, коэффициентами
|
||||
(linear) или функцией-указателем (ESPHome — лямбды, HA — коэффициенты
|
||||
+ превью рассчитанных значений при настройке).
|
||||
* `lanip_key` **статичен** (зашит в модуль; за 5 лет ротаций не было).
|
||||
Облако используется только для первового provisioning'а (HA config flow или
|
||||
CLI `fglair-discover`); при несовпадении `key_id` — устойчивая ошибка,
|
||||
лечение правкой конфига вручную. Для ESPHome ключ копируется из диагностики
|
||||
HA или получается CLI-той.
|
||||
* ESP-IDF везде (Arduino-фреймворк ESPHome не поддерживаем), язык ядра — C++20
|
||||
(без исключений/RTTI/heap после init), public API — C++-классы + extern "C"
|
||||
шейм для cffi-bindings HA.
|
||||
Облако — только provisioning (HA config flow, CLI `fglair-discover`);
|
||||
для ESPHome ключ копируется из диагностики HA или CLI. При несовпадении
|
||||
`key_id` — устойчивая ошибка, лечение правкой конфига вручную.
|
||||
* ESPHome: везде ESP-IDF framework, подключение по `host` (DNS/mDNS), все
|
||||
чувствительные значения — через `!secret`.
|
||||
* HTTP/JSON: собственный мини-httpd/httpc на BSD-сокетах (одна реализация
|
||||
для lwip/posix) + вендоренный jsmn; esp_http_server/cJSON/ArduinoJson
|
||||
отвергнуты (обоснование — PLAN_CORE §7). Conan не нужен.
|
||||
* Приёмка: полуавтоматический скрипт `tests/acceptance/` (HA long-lived
|
||||
token + REST, ESPHome через aioesphomeapi; quick/burst и 24-часовой
|
||||
режимы).
|
||||
|
||||
## Порядок реализации
|
||||
|
||||
1. `fglair-core` (M0–M5) — ядро, mock-тесты, эталон уже проверен на приборе.
|
||||
2. `pyfglair` + HA-интеграция (H1–H4) — параллельно с E1–E2.
|
||||
1. `fgl-aircon` (M0–M4) — ядро (ayla → aircon), mock-тесты; эталон
|
||||
`tools/probe_reference.py` уже проверен на приборе.
|
||||
2. `pyfglair` + HA-интеграция (H1–H5) — параллельно с E1–E2.
|
||||
3. ESPHome-компонент (E1–E4).
|
||||
4. Уточнение оставшихся неизвестных (PROTOCOL.md §10) по мере эксплуатации.
|
||||
4. Приёмочные прогоны (quick + 24 ч), README компонентов.
|
||||
5. Уточнение оставшихся неизвестных (PROTOCOL.md §10) по мере эксплуатации.
|
||||
|
||||
## Источники
|
||||
|
||||
@@ -62,5 +93,4 @@
|
||||
`com.cafbit.netlib.dns.NetThread`, JS-бандл `assets/www/dist/build.js`.
|
||||
* Legacy-скрипт (`legacy/`) — изменённый форк gyro-labs/AirCon (hisense_ac).
|
||||
* Живые эксперименты на AP-WC1E (сентябрь 2026): сессии, re-key, 401/400,
|
||||
слоты/503, delete_session, записи, mDNS. Пробы: `tools/probe_*.py`
|
||||
(история — сессия анализа; рабочие артефакты оставлены в tools/).
|
||||
слоты/503, delete_session, записи, mDNS. Рабочие артефакты — `tools/`.
|
||||
|
||||
Reference in New Issue
Block a user