docs: корректировки планов — монорепо, слои ayla/aircon, конверсии, приёмка

- PLAN_CORE: монорепозиторий (CMakeLists в корне; components/fglair,
  custom_components/fglair, include/fgl-aircon, src/{ayla,aircon},
  src/ayla/platform); логическое разделение ay­la (протокол+цикл) /
  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:
2026-09-21 13:20:29 +03:00
parent 790cee3c78
commit b21817ab9f
6 changed files with 625 additions and 453 deletions

View File

@@ -1,10 +1,10 @@
#!/usr/bin/env python3
"""Пассивная mDNS-проба модуля кондиционера: A-запрос <DSN>.local
на 224.0.0.251:5353 и :10276 (нестандартный порт Ayla из APK)."""
import socket, struct, sys, time
на 224.0.0.251:5353 и :10276 (нестандартный порт Ayla из APK).
Модуль отвечает ТОЛЬКО на :10276 (проверено на приборе).
DSN = "AC000W00REDACTED"
HOST = DSN + ".local"
Использование: python probe_mdns.py <DSN> (например AC000W00ABCD1234)"""
import socket, struct, sys, time
def qname(name):
out = b""
@@ -13,7 +13,6 @@ def qname(name):
return out + b"\x00"
def query_packet(txid):
# standard query, RD=1, one question: A, class IN
header = struct.pack(">HHHHHH", txid, 0x0100, 1, 0, 0, 0)
return header + qname(HOST) + struct.pack(">HH", 1, 1)
@@ -48,8 +47,7 @@ def parse_answers(buf):
off += 10
rdata = buf[off:off+rdlen]
if rtype == 1 and rdlen == 4:
ip = ".".join(str(b) for b in rdata)
found.append((name, ip, rclass, ttl))
found.append((name, ".".join(str(b) for b in rdata), rclass, ttl))
off += rdlen
return found
except Exception as e:
@@ -76,6 +74,9 @@ def probe(port, txid, wait=4.0):
s.close()
if __name__ == "__main__":
if len(sys.argv) != 2:
print(__doc__); sys.exit(1)
HOST = sys.argv[1] + ".local"
print("mDNS A?", HOST)
print("-- querying :5353")
probe(5353, 0x1234)