From cd9ce65a11f3750ce17db79c9cf4e00e226a7d96 Mon Sep 17 00:00:00 2001 From: Petr Polezhaev Date: Thu, 17 Sep 2026 19:47:28 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20legacy=20=D0=B8=20apk=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=B2?= =?UTF-8?q?=20docs/,=20=D0=B4=D0=B5=D0=B4=D1=83=D0=BF=D0=BB=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B8=D1=81=D1=85=D0=BE=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2=20legacy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docs/legacy/: рабочая раскладка изменённого форка (main.py + пакет aircon/); плоские дубликаты .py удалены, вложенный .git клона удалён (это изменённая копия, а не чистый клон), __pycache__ и .gitignore апстрима убраны. Локальный config_kata.json не версионируется (содержит lanip_key устройства). - docs/apk/: манифест APK; бинарники *.apk и icon.png не версионируются. - Обновлены пути в документации и tools/. --- .gitignore | 6 +++--- apk/icon.png | Bin 5650 -> 0 bytes docs/LEGACY_ANALYSIS.md | 2 +- docs/PLAN_HOME_ASSISTANT.md | 2 +- docs/PROTOCOL.md | 8 ++++---- docs/README.md | 6 +++--- {apk => docs/apk}/manifest.json | 0 {legacy => docs/legacy/aircon}/__init__.py | 0 {legacy => docs/legacy/aircon}/aircon.py | 0 {legacy => docs/legacy/aircon}/app_mappings.py | 0 {legacy => docs/legacy/aircon}/config.py | 0 {legacy => docs/legacy/aircon}/control_value.py | 0 {legacy => docs/legacy/aircon}/discovery.py | 0 {legacy => docs/legacy/aircon}/error.py | 0 {legacy => docs/legacy/aircon}/mqtt_client.py | 0 {legacy => docs/legacy/aircon}/notifier.py | 0 {legacy => docs/legacy/aircon}/properties.py | 0 {legacy => docs/legacy/aircon}/query_handlers.py | 0 {legacy => docs/legacy}/main.py | 0 {legacy => docs/legacy}/requirements.txt | 0 {legacy => docs/legacy}/run.sh | 0 legacy/config_kata.json | 12 ------------ tools/probe_reference.py | 6 +++--- 23 files changed, 15 insertions(+), 27 deletions(-) delete mode 100644 apk/icon.png rename {apk => docs/apk}/manifest.json (100%) rename {legacy => docs/legacy/aircon}/__init__.py (100%) rename {legacy => docs/legacy/aircon}/aircon.py (100%) rename {legacy => docs/legacy/aircon}/app_mappings.py (100%) rename {legacy => docs/legacy/aircon}/config.py (100%) rename {legacy => docs/legacy/aircon}/control_value.py (100%) rename {legacy => docs/legacy/aircon}/discovery.py (100%) rename {legacy => docs/legacy/aircon}/error.py (100%) rename {legacy => docs/legacy/aircon}/mqtt_client.py (100%) rename {legacy => docs/legacy/aircon}/notifier.py (100%) rename {legacy => docs/legacy/aircon}/properties.py (100%) rename {legacy => docs/legacy/aircon}/query_handlers.py (100%) rename {legacy => docs/legacy}/main.py (100%) rename {legacy => docs/legacy}/requirements.txt (100%) rename {legacy => docs/legacy}/run.sh (100%) delete mode 100644 legacy/config_kata.json diff --git a/.gitignore b/.gitignore index bcdac92..b1d11e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Первоисточник для анализа — бинарники APK не версионируем (файлы лежат локально) -apk/*.apk +docs/apk/*.apk # Python __pycache__/ @@ -7,5 +7,5 @@ __pycache__/ .venv/ venv/ -# Вложенный клон апстрима legacy-скрипта (https://github.com/gyro-labs/AirCon) -legacy/aircon/ +# Локальный конфиг устройства (содержит lanip_key) +docs/legacy/config_kata.json diff --git a/apk/icon.png b/apk/icon.png deleted file mode 100644 index 8ebed03f693030b3903813c1ecfa882df1b2710b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5650 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 aYyg{xb0pOptCY)MFQBh&tW~Fh3jZHe$9oI_ diff --git a/docs/LEGACY_ANALYSIS.md b/docs/LEGACY_ANALYSIS.md index b5a50e0..d8b13b6 100644 --- a/docs/LEGACY_ANALYSIS.md +++ b/docs/LEGACY_ANALYSIS.md @@ -1,4 +1,4 @@ -# Анализ legacy-скрипта (`legacy/`): соответствие протоколу и найденные проблемы +# Анализ legacy-скрипта (`docs/legacy/`): соответствие протоколу и найденные проблемы Скрипт — форк проекта hisense_ac (deiger), адаптированный под FGLair. Общая логика протокола воспроизведена верно, но есть критические расхождения с APK и поведением diff --git a/docs/PLAN_HOME_ASSISTANT.md b/docs/PLAN_HOME_ASSISTANT.md index eab663f..35efb02 100644 --- a/docs/PLAN_HOME_ASSISTANT.md +++ b/docs/PLAN_HOME_ASSISTANT.md @@ -33,7 +33,7 @@ cffi-wheel — рабочий путь (HA-контейнеры: x86_64/aarch64 (extern "C"-шейм ядра); * `pyfglair/session.py` — pythonic-обёртка: `Session(cfg)`, колбэки ядра мостятся в `asyncio` через `loop.call_soon_threadsafe`; - * `pyfglair/provision.py` — облачный discovery (перенос `legacy/discovery.py` + * `pyfglair/provision.py` — облачный discovery (перенос `docs/legacy/aircon/discovery.py` на современный aiohttp): вход e-mail/пароль/регион → dsn, ip, oem_model, lanip_key, lanip_key_id; * CLI: `python -m pyfglair discover` / `python -m pyfglair monitor`. diff --git a/docs/PROTOCOL.md b/docs/PROTOCOL.md index 1959ecb..92f0c8f 100644 --- a/docs/PROTOCOL.md +++ b/docs/PROTOCOL.md @@ -3,7 +3,7 @@ Документ реконструирован по декомпилированному APK FGLair 3.4.3 (`com.fujitsu.fglair`, SDK `com.aylanetworks.aylasdk`, см. `AylaLanModule.java`, `AylaEncryption.java`, `AylaLanMessage.java`, `CreateDatapointCommand.java`, `AylaHttpServer.java`, -`com.cafbit.netlib.dns.NetThread`) и сверён с существующим скриптом `legacy/`. +`com.cafbit.netlib.dns.NetThread`) и сверён с существующим скриптом `docs/legacy/`. Всё, что помечено **[APK]**, подтверждено кодом приложения; **[LEGACY]** — известно только из скрипта; **[ПРОВЕРЕНО НА ПРИБОРЕ]** — проверено живыми экспериментами на AP-WC1E (сентябрь 2026, см. §10); **[HYP]** — правдоподобная гипотеза, @@ -100,7 +100,7 @@ key = HMAC_SHA256(K, HMAC_SHA256(K, msg) || msg) # 32 байта * **app-ключи** (приложение шифрует/подписывает, модуль проверяет) — из `msg_app`; * **dev-ключи** (модуль шифрует, приложение проверяет) — из `msg_dev`. -Совпадает с `legacy/config.py`. **[APK: AylaEncryption.generateSessionKeys]** +Совпадает с `docs/legacy/aircon/config.py`. **[APK: AylaEncryption.generateSessionKeys]** ### 3.3. Формат защищённого сообщения (envelope) @@ -347,7 +347,7 @@ data: {"id":"","ack_status":200,"ack_message":0,"dsn":"..."} * CN: `app_id=FGLairField-cn-id`, `app_secret=FGLairField-cn-zezg7Y60YpAvy3HPwxvWLnd4Oh4` `app_secret` = `-`; байты секрета — в -`legacy/app_mappings.py` (проверено: EU совпадает). +`docs/legacy/aircon/app_mappings.py` (проверено: EU совпадает). Endpoints: @@ -487,7 +487,7 @@ building_name, wifi_led_enable, service_contact_*, device_capabilities, refresh. ## 10. Проверено на приборе / осталось неизвестным -Проверено на AP-WC1E (fw 2.6.17-fgl2, ключ из `config_kata.json`), см. также §2, +Проверено на AP-WC1E (fw 2.6.17-fgl2, ключ из `docs/legacy/config_kata.json`), см. также §2, §4.1, §4.4, §5.1, §5.3, §6: полный цикл сессии, KDF/CBC-цепочка/подписи в обе стороны, GET/запись свойств, re-key, 401/400-игнорирование, 2 слота + 503, delete_session, mDNS :10276. Рабочий эталонный клиент: `tools/probe_reference.py`. diff --git a/docs/README.md b/docs/README.md index 33eaba1..4ba46f7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,8 +12,9 @@ | `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_reference.py` | Эталонный клиент протокола (проверен на приборе). | | `../tools/probe_mdns.py` | mDNS-проба (`.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 лежат локально, не версионируются). | ## Краткая выжимка протокола @@ -59,8 +60,7 @@ * APK FGLair 3.4.3 (`apk/com.fujitsu.fglair.apk`): классы `com.aylanetworks.aylasdk.lan.*`, `com.fujitsugeneral.aylasdk.*`, `com.cafbit.netlib.dns.NetThread`, JS-бандл `assets/www/dist/build.js`. -* Legacy-скрипт (`legacy/`) — форк hisense_ac; вложенный клон апстрима: - https://github.com/gyro-labs/AirCon (лежит в `legacy/aircon/`, не версионируется). +* Legacy-скрипт (`legacy/`) — изменённый форк gyro-labs/AirCon (hisense_ac). * Живые эксперименты на AP-WC1E (сентябрь 2026): сессии, re-key, 401/400, слоты/503, delete_session, записи, mDNS. Пробы: `tools/probe_*.py` (история — сессия анализа; рабочие артефакты оставлены в tools/). diff --git a/apk/manifest.json b/docs/apk/manifest.json similarity index 100% rename from apk/manifest.json rename to docs/apk/manifest.json diff --git a/legacy/__init__.py b/docs/legacy/aircon/__init__.py similarity index 100% rename from legacy/__init__.py rename to docs/legacy/aircon/__init__.py diff --git a/legacy/aircon.py b/docs/legacy/aircon/aircon.py similarity index 100% rename from legacy/aircon.py rename to docs/legacy/aircon/aircon.py diff --git a/legacy/app_mappings.py b/docs/legacy/aircon/app_mappings.py similarity index 100% rename from legacy/app_mappings.py rename to docs/legacy/aircon/app_mappings.py diff --git a/legacy/config.py b/docs/legacy/aircon/config.py similarity index 100% rename from legacy/config.py rename to docs/legacy/aircon/config.py diff --git a/legacy/control_value.py b/docs/legacy/aircon/control_value.py similarity index 100% rename from legacy/control_value.py rename to docs/legacy/aircon/control_value.py diff --git a/legacy/discovery.py b/docs/legacy/aircon/discovery.py similarity index 100% rename from legacy/discovery.py rename to docs/legacy/aircon/discovery.py diff --git a/legacy/error.py b/docs/legacy/aircon/error.py similarity index 100% rename from legacy/error.py rename to docs/legacy/aircon/error.py diff --git a/legacy/mqtt_client.py b/docs/legacy/aircon/mqtt_client.py similarity index 100% rename from legacy/mqtt_client.py rename to docs/legacy/aircon/mqtt_client.py diff --git a/legacy/notifier.py b/docs/legacy/aircon/notifier.py similarity index 100% rename from legacy/notifier.py rename to docs/legacy/aircon/notifier.py diff --git a/legacy/properties.py b/docs/legacy/aircon/properties.py similarity index 100% rename from legacy/properties.py rename to docs/legacy/aircon/properties.py diff --git a/legacy/query_handlers.py b/docs/legacy/aircon/query_handlers.py similarity index 100% rename from legacy/query_handlers.py rename to docs/legacy/aircon/query_handlers.py diff --git a/legacy/main.py b/docs/legacy/main.py similarity index 100% rename from legacy/main.py rename to docs/legacy/main.py diff --git a/legacy/requirements.txt b/docs/legacy/requirements.txt similarity index 100% rename from legacy/requirements.txt rename to docs/legacy/requirements.txt diff --git a/legacy/run.sh b/docs/legacy/run.sh similarity index 100% rename from legacy/run.sh rename to docs/legacy/run.sh diff --git a/legacy/config_kata.json b/legacy/config_kata.json deleted file mode 100644 index 0f31caa..0000000 --- a/legacy/config_kata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "AC000W002879281", - "app": "fglair-eu", - "model": "AP-WC1E", - "sw_version": "bc 2.6.17-fgl2 06/29/20 09:03:57 ID jre/mfg/2dfbf5d", - "dsn": "AC000W002879281", - "temp_type": "C", - "mac_address": "a0c9a00d61c9", - "ip_address": "192.168.88.3", - "lanip_key": "1uWOP3nGbSz2ysEfjJJVu+P0fxAQTg==", - "lanip_key_id": 62888 -} diff --git a/tools/probe_reference.py b/tools/probe_reference.py index dccc01b..3f02c9b 100644 --- a/tools/probe_reference.py +++ b/tools/probe_reference.py @@ -11,9 +11,9 @@ docs/PROTOCOL.md, включая поведение, подтверждённо - delete_session при выходе (освобождает один из 2 слотов модуля). Использование: - python probe_reference.py config_kata.json monitor 60 - python probe_reference.py config_kata.json get operation_mode fan_speed - python probe_reference.py config_kata.json set fan_speed 3 + python probe_reference.py docs/legacy/config_kata.json monitor 60 + python probe_reference.py docs/legacy/config_kata.json get operation_mode fan_speed + python probe_reference.py docs/legacy/config_kata.json set fan_speed 3 Зависимости: pycryptodome.""" import base64, hmac, json, random, socket, string, sys, threading, time import http.client