Skip to content

feat(midea): Midea-Klimasteuerung TP1 — Protokoll-Kern + Admin-Konfig - #195

Merged
CallMeTechie merged 15 commits into
masterfrom
feat/midea-climate-tp1
Jun 26, 2026
Merged

CallMeTechie merged 15 commits into
masterfrom
feat/midea-climate-tp1

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Midea-Klimasteuerung TP1 — Protokoll-Kern + Admin-Konfig

Nativer Node.js-Port des Midea-LAN-Protokolls samt Cloud-Login, in-process im GateControl-Server, mit Admin-Seite zum Verbinden, Entdecken und Live-Testen von Midea-Klimageräten — lizenz-gegated über midea_integration (Community-Default aus, kein Blast-Radius für bestehende Nutzer).

Was drin ist (13 Tasks, subagent-getrieben mit TDD + zweistufigem Review je Task)

  • Protokoll-Kern (src/services/midea/): mideaCrypto (AES-ECB/CBC, CRC8, md5-Sign), mideaAc (0xAC Command-Build + State-Parse), mideaLan (V2-Paket, V3-8370-Framing + Handshake, UDP-Discovery, LanDevice TCP-Transport), mideaCloud (Login, Sign, get_token, udpid).
  • Persistenz: V60-Migration midea_devices + mideaDevices-Service. Secrets (token/key/Cloud-password/Cloud-session) durchgängig verschlüsselt at-rest (iv:tag:ct); redacted-Listing leak-frei (rechnet has_credentials ohne zu entschlüsseln).
  • Orchestrator (index.js): Per-Device-Mutex-Queue, lizenz-gegateter Poll-Loop (im Tick geprüft, unref()'d, idempotent), transaktionales addDevice (V3-Token VOR Persistenz), nicht-alarmierendes Offline.
  • Admin-API (/api/v1/midea): admin-only (Token-Auth abgelehnt, role==admin) + requireFeature('midea_integration'); 10 Endpoints; typisiertes Error-Mapping (2FA→409, Rate-Limit→429, not-found→404).
  • Admin-UI: /midea-Seite in allen 3 Themes, public/js/midea.js (XSS-escaped), i18n en+de, Sidebar-Nav + window.GC-Flags gegated.

Wire-Format ist durch echte Vektoren gesichert

Alle Krypto-/Parse-/Frame-/Discovery-/udpid-Tests laufen mit literalen, aus mill1000/midea-msmart vendored Vektoren un-skip-guarded in CI (V2/V3-Pakete, 14 AC-State-Vektoren inkl. Sub-Grad-Präzision, Discovery-Response, udpid byte-genau gegen die V3-Discovery-Response gegengeprüft). Nur 2 Tests sind skip-guarded — die echten Live-Pfade (GC_MIDEA_LIVE Hardware, GC_MIDEA_CLOUD Cloud-Login). Lokal: 40 midea-Tests, 38 grün / 2 Skip / 0 fail.

Finale Whole-Branch-Review (opus)

„Ready to merge with fixes" — fand 1 cross-cutting Lücke (Cloud-Session unverschlüsselt at-rest), bereits gefixt (fix(midea): encrypt cloud session token at rest). Alle übrigen Findings als acceptable-follow-up triagiert.

Offen (nach Merge)

  • Manueller Hardware-/Cloud-Live-Run gegen eine echte Anlage (Checkliste: docs/superpowers/plans/midea-tp1-manual-acceptance.md).
  • MSmartHome-Cloud-Login ist unbewiesen bis zum Live-Run — bei Fehler auf NetHome Plus umstellen (robusterer Fallback, gleicher Code-Pfad). Ehrlich dokumentiert, kein fake-grüner Test.
  • Doku-Batch unter /root/Dokumentation/.../midea/ (wie üblich nach Merge).

🤖 Generated with Claude Code

Comment thread src/services/midea/index.js Dismissed
Comment thread src/services/midea/index.js Dismissed
Comment thread src/services/midea/index.js Dismissed
Comment thread src/services/midea/mideaCrypto.js Dismissed
Comment thread src/services/midea/mideaCrypto.js Dismissed
@CallMeTechie
CallMeTechie merged commit aada6ed into master Jun 26, 2026
8 checks passed
@CallMeTechie
CallMeTechie deleted the feat/midea-climate-tp1 branch June 26, 2026 19:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants