Skip to content

Add support for WTWN3 (F4J7TN1W) washer and RC90U2_WW (RC9DN9029) dryer - #177

Open
kristinn93 wants to merge 2 commits into
anszom:masterfrom
kristinn93:lg-laundry
Open

Add support for WTWN3 (F4J7TN1W) washer and RC90U2_WW (RC9DN9029) dryer#177
kristinn93 wants to merge 2 commits into
anszom:masterfrom
kristinn93:lg-laundry

Conversation

@kristinn93

Copy link
Copy Markdown

Two new handlers, one commit each, with tests against captured frames.

  • WTWN3 (LG F4J7TN1W), ThinQ1 washer. Same frame as WTDN3 minus the dryer byte; tables from LG's modelJson. Confirmed live: power, states up to Washing, course/wash/spin/temp/rinse, times, door lock, tub clean count. Option bits, child lock, remote start and the commands are spec-only so far (synthetic fixtures, labelled).

  • RC90U2_WW (LG RC9DN9029), ThinQ2 heat pump dryer. US-dryer AABB dialect with the 25-byte EU record from LG's modelJson. Read-only. Confirmed live: power, Ready/Running, phase, 11 courses, dry level, Eco Hybrid, times, Delay End. Damp dry beep, hand iron, errors and Paused/End are spec-only. Unexplained bits are not exposed.

kristinn93 and others added 2 commits September 8, 2026 21:39
LG F4J7TN1W 8 kg front-load washer (TITAN2 platform), ThinQ1 with the
QCA4002 module (FwVer QC_Modem_1.2.80). Its 28-byte status frame has the
same layout as the already supported WTDN3 (F2J7HG1W) without the dryer
byte, so the handler mirrors WTDN3 and reuses its STATES/ERRORS tables.
The course, wash, temperature, rinse and spin tables come from LG's own
modelJson for WTWN3 (Monitoring.protocol / Value / Course / SmartCourse).

Exposes power (switch), start/pause buttons, status, error and
error_message, course (base course, overridden by a downloaded course
in byte 20), wash, temp, spin, rinse, TurboWash, pre-wash, steam, crease
care, medic rinse, door lock, child lock, remote start, standby, washes
since tub clean and initial/remaining/delay-start time.

Confirmed on a real F4J7TN1W: power, status through Off, Ready,
Measuring and Washing of a Tub Clean cycle, course, wash, spin,
temperature, rinse, times, door lock (locked once the cycle starts) and
the tub clean counter. The remaining fixtures are a real Mix cycle
captured from a WTWN3 plus two synthetic frames, clearly labeled,
covering the option bits, child lock, remote start and the
downloaded-course override; those follow the spec and the WTDN3 handler
and have not been exercised on this machine yet.

Developed with the assistance of Claude (Anthropic).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
LG RC9DN9029 9 kg DUAL Inverter heat pump dryer (EU/Nordic market),
ThinQ2 with the QCOM_QCA4010 module (clip_hna_v1.9.230, protocolVer 4.9).

It speaks the same AABB dialect as the US dryers (RV13B6ES_D_US_WIFI,
RV13B6BSD_D_US_WIFI): 0x30 0xEC status updates carrying a previous and a
current record, a single-record 0x30 0xEB reply to the family-wide F0ED
status request (sent once per connect so the entities survive a rethink
restart), a 0x30 0x31 serial frame and 0x30 0x19 / 0x30 0x72 events. The
record itself is the 25-byte EU layout prefixed 0x00 0x19 and follows
LG's modelJson Monitoring.protocol for RC90U2_WW byte for byte, so it
needs its own handler rather than an alias.

Exposes power, status, phase (published only while a cycle runs, the
byte is stale when idle), error and error_message, course (base course
overridden by a downloaded course in byte 20), dry level, Eco Hybrid,
remaining/initial time, delay end time and flag, anti crease, child
lock, damp dry beep and hand iron. No commands: the AABB
command codes used by the EU washers are unverified on this dryer.

All test fixtures are real frames captured live while driving the
panel: power off/on, eleven courses (one of them downloaded) with their
default dry level / Eco Hybrid / time estimate, the Dry Level button,
Delay End, and the start of a Cool Air cycle (Running, Cooling phase,
remaining time counting down). Anti crease and child lock were each
toggled by a panel button not yet matched to its label; damp dry beep,
hand iron and the error table follow the spec and have not been
observed. Option2 is not decoded: its RemoteStart bit was set for a
whole cycle started from the panel and did not react to arming Remote
Start on the panel, so its meaning is unconfirmed.

Developed with the assistance of Claude (Anthropic).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.

1 participant