Add support for the RV13B6ES_D_US_WIFI electric dryer - #134
Open
Danimal4326 wants to merge 1 commit into
Open
Conversation
Deliberately a separate handler rather than an alias of RV13B6BSD_D_US_WIFI.
The frame layout is identical, but Wrinkle Care is rec[15] bit 0x10 on this
model, not rec[16] bit 0x10 -- and rec[16] bit 0x10 is never set here, so
aliasing would report Wrinkle Care permanently OFF. There is a regression test
pinning that specific offset.
Three fields the related model does not decode are also mapped:
* Remote Start (rec[16] bit 0x01). RV13B6BSD_D_US_WIFI documents this as not
findable in any device frame, "appears cloud-side only"; it is simply at a
different bit here.
* More/Less Time (rec[12], a signed byte of minutes against the course
default).
* Load items (rec[23]).
* Signal / beeper volume (rec[11]: 0x00 Off, 0x01 Low, 0x04 High).
Every offset except Signal was confirmed by capturing live traffic with
tools/rethink-capture.ts --cloud while driving the physical panel, and matching
each byte change against the LG cloud's own decoded washerDryer state at the
same timestamp. Signal is the exception and is commented as such: the cloud
sends no signal field for this dryer in a full allDeviceInfoUpdate snapshot, so
that byte was mapped from the wire alone and tied to the panel's Off/Low/High
indicator by reading the lit LED after each press.
Fields that could not be confirmed are omitted rather than guessed: error codes
were never triggered, and the rec[15] 0x40 "panel awake" bit is not exposed as
an entity since it belongs to no single option.
All test fixtures are real captured frames, with the confirming cloud field
named in a comment above each one.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a driver for the LG RV13B6ES_D_US_WIFI electric dryer (deviceType 202, thinq2).
Why it isn't an alias
The frame layout is identical to
RV13B6BSD_D_US_WIFI, so aliasing was the obvious first move — but it would ship a silent bug. Wrinkle Care isrec[15]bit0x10on this model, notrec[16]bit0x10, andrec[16]bit0x10is never set here, so an alias would report Wrinkle Care permanently OFF.tests/cloud/devices/RV13B6ES_D_US_WIFI.test.tshas a regression test pinning that specific offset.Fields the related model doesn't decode
rec[16]bit0x01RV13B6BSD_D_US_WIFIdocuments this as not findable in device frames, "appears cloud-side only" — it's just at a different bit hererec[12], signedrec[23]loadItemrec[11]0x00Off,0x01Low,0x04HighHow it was confirmed
Live capture with
tools/rethink-capture.ts --cloudwhile driving the physical panel, matching every byte change against the LG cloud's own decodedwasherDryerstate at the same timestamp. All 14 course values, both time fields, all five dry levels and temperatures, and every option bit were observed directly, including a full Speed Dry run through Drying → Cooling → End.Signal is the one exception and is commented as such in the source. The cloud sends no signal field for this dryer in a full
allDeviceInfoUpdatesnapshot, so that byte was mapped from the wire alone and tied to the panel's Off/Low/High indicator by reading the lit LED after each press. Flagging it explicitly since it's a weaker standard than the rest of the file.Anything unconfirmed is omitted rather than guessed — error codes were never triggered, and the
rec[15]0x40"panel awake" bit isn't exposed as an entity since it belongs to no single option.Testing
All fixtures in the test file are real captured frames, each with the confirming cloud field named in a comment above it. Full suite passes (356 tests). The driver has also been running against the physical appliance via MQTT discovery in Home Assistant, reporting 17 entities that track the panel through complete cycles.
🤖 Generated with Claude Code
https://claude.ai/code/session_01EdP8L3BhHJFWX1ZKfQLCcM