✨ New Features
- Target Humidity Sensor — New optional diagnostic sensor (
target_humidity_sensor) reads byte 12 from settings response packet (0x02). Supports premium models (e.g. MSZ-LN) that expose humidity targets. Zero impact on existing configs. (#649, #652) - Native
remote_temperature_source— Recommended method now uses direct sensor binding instead of lambda. Previous lambda method documented as alternate. (#624)
🏗️ Architecture Refactor (Phases 1→4)
- Phase 1 — Naming conventions (
tempMode→use_temperature_encoding_b_), struct default initialization, simplifiedoperator=. (#637) - Phase 2 — Pure protocol functions extracted into
cn105_protocol.h(checksum, temperature encode/decode, byte-map lookups). Header-only, zero-dependency, fully testable. (#638) - Phase 3A — Standalone
FrameParserclass for byte-by-byte UART frame assembly. Replaces inline parsing state and 4 obsolete methods. Net -83 lines. (#640) - Phase 3B —
std::optionallookups replace silent fallback-to-index-0 behavior. Unknown protocol bytes now keep previous value + emitESP_LOGW. (#639) - Phase 4 —
DriverStateFSM enum (BOOT → WAIT_WIFI → WAIT_GRACE → CONNECTING → CONNECTED → DISCONNECTED) replaces 6 scattered connection booleans. Net -6 member variables. (#642)
🐛 Bug Fixes
- Log spam —
checkPendingWanted*now emits exactly 1 log line per user action instead of 11+. - Setpoint regression — Fix UI briefly reverting to stale temperature on non-temperature SET commands (fan/vane/mode changes).
isUARTConnected_compile error — README examples updated to useisUARTReady_()accessor from FSM refactor. (#645)- Error code 0x80 — Mask bit 7 status flag so
0x80 sub 0x00correctly reports "No Error". (#646) - Compressor frequency idle — Set compressor frequency to zero when heat pump is idle. Thanks @ldwaard! (#643)
🧪 Testing
- 183 unit tests (up from 0) via GoogleTest + CMake FetchContent.
- CI gate: unit tests must pass before ESPHome compile.
- 30+ tests from real captured UART frames (live atom-s3 session).
- Coverage: checksum, temperature encode/decode, byte-map lookups, FrameParser lifecycle, settings/status decoding, SET packet roundtrips.
📄 Documentation
- Comparison with native ESPHome
mitsubishi_cn105component — feature table, architecture comparison, decision guide. (#648) - Experimental Features section added (target humidity, split vanes).
- Removed obsolete ESP-IDF 5.4.x UART warning (stable for months).
⚙️ CI/CD
- Build workflow updated for Node.js 20 deprecation. (#641)
Full Changelog: 2026.5.1...2026.5.2