Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Janitor support needed to unclog another Toilet protocol 🪠 #1806

Closed
jamsinclair opened this issue May 16, 2022 · 15 comments · Fixed by #1811
Closed

Janitor support needed to unclog another Toilet protocol 🪠 #1806

jamsinclair opened this issue May 16, 2022 · 15 comments · Fixed by #1811
Assignees
Labels
enhancement Pending Confirmation Waiting for confirmation from user

Comments

@jamsinclair
Copy link
Collaborator

jamsinclair commented May 16, 2022

Hey there!

I'm back with a new Japanese Toilet Washlet protocol. This is a different brand and differs significantly from what was last seen in #706.

I've used the auto_analyse_raw_data.py script to try generate a basic send/recv class, however it seems like this protocol will need some massaging beyond my expertise to get a working class functioning.

The remote seems to send two different states:

  • 78 bit state (For more operational commands)
  • 234 bit state (For more complex settings)

If you anyone is able to help point me in getting a functioning send/recv class I can try help debug and refine from there 🤓

Version/revision of the library used

v2.8.2

Output of raw data from IRrecvDumpV2.ino or V3 (if applicable)

Full Flush:

Timestamp : 000151.400
Library   : v2.8.2

Protocol  : UNKNOWN
Code      : 0x43BD67B3 (82 Bits)
uint16_t rawData[163] = {6266, 2734,  598, 540,  598, 1626,  598, 512,  622, 516,  598, 514,  598, 510,  598, 514,  628, 512,  596, 514,  600, 512,  598, 538,  600, 1622,  600, 512,  598, 540,  602, 510,  598, 512,  598, 512,  624, 514,  598, 512,  598, 512,  598, 514,  624, 512,  598, 514,  598, 1652,  596, 514,  598, 1626,  598, 1650,  598, 514,  598, 512,  598, 540,  598, 514,  596, 1626,  626, 512,  574, 1648,  598, 1650,  598, 514,  598, 512,  594, 544,  596, 514,  598, 37996,  6182, 2764,  598, 514,  600, 1648,  600, 512,  596, 514,  598, 540,  598, 512,  600, 512,  598, 512,  624, 514,  598, 514,  598, 512,  596, 1652,  598, 514,  598, 512,  596, 540,  598, 514,  598, 512,  598, 512,  598, 540,  596, 516,  596, 514,  598, 512,  574, 564,  598, 1626,  568, 542,  624, 1624,  626, 1622,  598, 514,  596, 514,  598, 514,  596, 540,  600, 1622,  598, 512,  600, 1650,  598, 1624,  596, 540,  600, 512,  598, 514,  596, 514,  622};  // UNKNOWN 43BD67B3

Light Flush:

Timestamp : 000175.684
Library   : v2.8.2

Protocol  : UNKNOWN
Code      : 0xE5B58773 (82 Bits)
    uint16_t rawData[163] = {6264, 2736,  598, 540,  602, 1622,  600, 510,  622, 516,  600, 512,  596, 514,  596, 514,  626, 512,  596, 514,  600, 510,  598, 538,  628, 1596,  598, 512,  600, 536,  598, 514,  598, 512,  598, 514,  624, 514,  598, 512,  602, 510,  598, 512,  624, 514,  596, 514,  598, 1652,  598, 514,  600, 510,  598, 514,  600, 1648,  600, 512,  596, 514,  598, 538,  600, 1624,  598, 514,  624, 512,  598, 514,  600, 1648,  598, 512,  600, 512,  596, 514,  598, 40244,  6186, 2760,  596, 514,  598, 1650,  600, 512,  598, 512,  598, 540,  598, 514,  596, 514,  598, 512,  624, 514,  600, 510,  600, 512,  598, 1650,  598, 514,  596, 514,  596, 514,  626, 512,  598, 512,  598, 512,  598, 540,  598, 514,  598, 512,  600, 512,  598, 540,  598, 1624,  598, 512,  626, 512,  598, 514,  598, 1624,  624, 512,  598, 514,  598, 512,  600, 1650,  624, 488,  598, 512,  598, 542,  594, 1624,  598, 516,  594, 540,  594, 518,  596};  // UNKNOWN E5B58773

Oscillate Bidet Function

Timestamp : 000200.759
Library   : v2.8.2

Protocol  : UNKNOWN
Code      : 0x4AC5E8B3 (246 Bits)
uint16_t rawData[491] = {6262, 2738,  600, 538,  596, 1624,  598, 512,  652, 486,  628, 484,  600, 510,  596, 516,  650, 488,  622, 488,  626, 484,  598, 540,  600, 1624,  602, 510,  596, 540,  602, 510,  598, 514,  598, 512,  626, 512,  598, 512,  598, 512,  598, 514,  626, 510,  598, 514,  598, 512,  598, 1650,  600, 1622,  600, 538,  596, 514,  600, 510,  596, 514,  596, 542,  598, 514,  598, 1624,  626, 1622,  598, 512,  600, 512,  620, 516,  598, 512,  598, 514,  598, 40244,  6184, 2764,  598, 514,  598, 1650,  598, 514,  596, 516,  596, 542,  598, 512,  596, 516,  600, 510,  624, 512,  598, 512,  596, 516,  598, 1652,  600, 512,  598, 512,  598, 540,  596, 518,  594, 514,  598, 512,  596, 542,  598, 512,  596, 514,  598, 512,  598, 540,  598, 514,  598, 1622,  624, 1626,  598, 514,  598, 512,  626, 512,  596, 514,  596, 514,  596, 540,  598, 1624,  600, 1650,  600, 512,  600, 510,  598, 512,  596, 540,  598, 512,  600, 40244,  6186, 2760,  600, 512,  596, 1626,  624, 514,  598, 512,  600, 512,  598, 512,  626, 512,  598, 512,  598, 512,  596, 540,  600, 510,  600, 1622,  600, 538,  596, 514,  596, 514,  598, 514,  624, 514,  596, 516,  596, 514,  600, 512,  622, 514,  600, 512,  600, 510,  600, 538,  602, 1622,  600, 1648,  626, 512,  572, 512,  598, 514,  650, 488,  598, 512,  594, 516,  598, 1652,  598, 1626,  598, 514,  624, 514,  596, 512,  600, 512,  598, 540,  596, 40246,  6184, 2736,  598, 538,  598, 1624,  598, 512,  598, 540,  598, 512,  600, 512,  596, 514,  600, 538,  626, 486,  598, 514,  596, 514,  652, 1596,  594, 516,  624, 514,  594, 516,  598, 514,  622, 490,  596, 540,  596, 514,  624, 488,  594, 514,  598, 538,  598, 512,  598, 514,  594, 516,  596, 540,  600, 1622,  572, 566,  600, 512,  570, 542,  598, 512,  598, 540,  600, 512,  594, 516,  598, 1652,  600, 512,  598, 514,  596, 514,  624, 514,  598, 42468,  6182, 2764,  624, 490,  594, 1652,  600, 512,  596, 514,  596, 540,  600, 512,  598, 516,  596, 514,  598, 538,  598, 516,  598, 512,  570, 1678,  596, 514,  596, 514,  598, 512,  624, 512,  594, 516,  596, 514,  600, 510,  626, 512,  596, 516,  594, 516,  598, 538,  598, 512,  596, 514,  596, 514,  596, 1652,  600, 514,  594, 516,  622, 514,  600, 512,  598, 514,  596, 514,  624, 514,  596, 1626,  598, 514,  622, 516,  594, 516,  598, 514,  596, 42496,  6184, 2764,  596, 516,  598, 1624,  626, 512,  598, 512,  596, 516,  600, 512,  624, 514,  598, 514,  594, 516,  596, 516,  620, 516,  600, 1624,  596, 540,  598, 514,  600, 512,  596, 516,  596, 542,  594, 516,  598, 514,  594, 516,  624, 512,  598, 512,  596, 514,  596, 514,  624, 514,  596, 516,  598, 1650,  594, 518,  596, 514,  596, 516,  596, 542,  596, 514,  596, 516,  596, 514,  596, 1652,  598, 514,  596, 514,  624, 514,  622, 488,  596};  // UNKNOWN 4AC5E8B3

...There are many more commands, I'll keep track of them once we can correctly decode the data being sent.

Product

Brand: Toto
Model: Washlet Toilet NJ
Manual File: https://www.d-resi.jp/dt/nishi-shinjuku/limited/imgs/pdf/book6.pdf

Circuit diagram and hardware used (if applicable)

Board: NodeMCU v1.0
Receiver: KY-022
Transmitter: KY-005

@jamsinclair jamsinclair changed the title Janitor support needed to debug another Japanese Toilet WIP May 16, 2022
@jamsinclair jamsinclair changed the title WIP Janitor support needed to debug another Japanese Toilet 🪠 May 16, 2022
@jamsinclair jamsinclair changed the title Janitor support needed to debug another Japanese Toilet 🪠 Janitor support needed to unclog another Toilet protocol 🪠 May 16, 2022
@crankyoldgit
Copy link
Owner

crankyoldgit commented May 17, 2022

I'll drop everything & get right on it. Your Number Two problem is my Number One priority.

@crankyoldgit
Copy link
Owner

I warn you in advance, this protocol looks more complicated than the last toilet we supported.
Page 62 of the manual may happen as we test this. (i.e. Around page 32 of the PDF)

In all seriousness, it appears to be either a repeating 39 bit message, or for the longer ones, two different 39 bit codes.
This may take some contemplation time. I hope you have some reading material handy near the device. It might take a while.

crankyoldgit added a commit that referenced this issue May 17, 2022
* Add `sendToto()` and `decodeToto()` routines.
  - Note: They only support the short/simple messages at present.
  - Codes produced from this may change. This is NOT final in any way.
* Update supported devices.
* Add unit tests to cover new changes.

This is primarily hobbled together to collect data to see if we can reduce the size of this protocol (in bits).
It won't decode the different "second" code in the longer messages yet.

For #1806
@crankyoldgit crankyoldgit self-assigned this May 17, 2022
@crankyoldgit crankyoldgit added enhancement more info Pending Confirmation Waiting for confirmation from user labels May 17, 2022
@crankyoldgit
Copy link
Owner

@jamsinclair It's time for you to do some "Testing on the Toilet".
I've created branch "toto_toilet" https://github.com/crankyoldgit/IRremoteESP8266/tree/toto_toilet
It should have basic decoding (and sending) for the simple "short" messages. But NOT the longer ones.
i.e. It will probably decode those ones too, but half the data will be missing.

We need to do some analysis on the messages produced to see how we can cram the 39 + 39 bits of the longer codes into 64 bits.

Things I am looking for:

  1. Do all of the codes you can produce have a constant/unchanging bits/bytes/section? i.e. If we can shrink 39 bits to 32 for each part of the short & long codes then we can fit it into a uint64_t safely.
  2. Do all of the long codes (e.g. long: rawData[491] vs short: rawData[163] have the same 39 bit code at the start perhaps?
  3. Any other ideas or patterns. e.g. each hex digit is bit-flipped with the blah-blah bits.

Let me know how the code goes etc.

The "long" codes appear quite funky. They appear to use different sized gaps and a different number of repeats of the sub-code.

You may be able to hack support for the longer codes using the smaller codes too. e.g.

// send a Full Flush.
irsend.sendToto(0x200800B0B0);  // send a Full Flush. The code is sent twice.
delay(30 * 1000);  // Wait 30 seconds
// Simulate sending a long message. e.g. Oscillate Bidet
irsend.sendToto(0x2008006060, kTotoBits, 2);  // Send the First half (39 bits) is sent 3 times.
irsend.sendToto(0x2008001010, kTotoBits, 2);  // Send the Second half (39 bits) is sent 3 times.
// Technically, there is no gap between the second & third send of the data in the second half of the protocol.
// The above doesn't emulate that part, but I'd guess it would work.

Looking at the pictures in the manual (sorry, my skill at understanding Japanese is 0.0001%) it looks like there is some controls that have a range of possible values. i.e. spray pressure & position. We might be able to glean a bit ordering for the data from those values if they increase linearly.

Anyway. Off ya go. Collect some data if it works.

@jamsinclair
Copy link
Collaborator Author

jamsinclair commented May 17, 2022

Thanks for the branch and insight @crankyoldgit! Rolling up my sleeves and getting into the dirty work 🔧

it appears to be either a repeating 39 bit message or for the longer ones, two different 39 bit codes

Hmm, something I seem to recall from previous toilet is there's two IR blasters in the remote (one on each end). Only one message was needed to reach the receiver on the bowl to activate it. I believe that may be a redundancy measure depending on where the remote and bowl end up located in the bathroom.

Looking at the pictures in the manual (sorry, my skill at understanding Japanese is 0.0001%) it looks like there is some controls that have a range of possible values. i.e. spray pressure & position.

Unfortunately my Japanese isn't much better, despite living here 😅 , but yes there's some range values that'll would be good to decode if possible. From some preliminary testing it seems that there a indeed particular bytes that change on increase/decrease. Much like an AC remote I'm inclined to believe the whole state is sent on key press. (Edit: I was completely wrong. Don't jump to conclusions without data!)

@NiKiZe
Copy link
Collaborator

NiKiZe commented May 17, 2022

Is there any message when you for example change pressure? Or how does any other message change after the pressure is changed?

Maybe you can isolate one transmitter and reduce noise?

@crankyoldgit
Copy link
Owner

Hmm, something I seem to recall from previous toilet is there's two IR blasters in the remote (one on each end). Only one message was needed to reach the receiver on the bowl to activate it. I believe that may be a redundancy measure depending on where the remote and bowl end up located in the bathroom.

That's possible. But we emulate what we see, for maximum compatibility.

Unfortunately my Japanese isn't much better, despite living here 😅 , but yes there's some range values that'll would be good to decode if possible. From some preliminary testing it seems that there a indeed particular bytes that change on increase/decrease. Much like an AC remote I'm inclined to believe the whole state is sent on key press.

Thanks for the insight. I look forward to the data and your analysis and replay attempts.

I hope to hear next that you're flush with success. Hope it doesn't drive you round the bend.

@jamsinclair
Copy link
Collaborator Author

Hmmm, it seems my trusty ESP8266 dev kit is in a bad state. Unable to re-flash it. Depending on if I can fix it, I might be at mercy of worldwide freight until my replacement arrives ✈️ .

Hope y'all didn't get pumped up on this porcelain wonder of a protocol.

@crankyoldgit
Copy link
Owner

Unable to re-flash it

Aww man, that's crap!
At least you're close to China.

@jamsinclair
Copy link
Collaborator Author

jamsinclair commented May 19, 2022

I've managed to battle with my board and got it to flash ⚡️🙌 (Seems like USB connector is a bit dodgy).

Looks like the protocol should be quite simple with some fun extra caveats.

  1. Do all of the codes you can produce have a constant/unchanging bits/bytes/section? i.e. If we can shrink 39 bits to 32 for each part of the short & long codes then we can fit it into a uint64_t safely.

Yes, it seems like we can safely condense the codes down to 24 bits. The starting 0x2008 bits are the same across all commands.

  1. Do all of the long codes (e.g. long: rawData[491] vs short: rawData[163] have the same 39 bit code at the start perhaps?

No. They do differ, but out of all the commands only two were the long ones:

Part One Part Two
Oscillate Bidet 0x2008006060 0x2008001010
Stop Bidet 0x2008AADA70 0x2008000000
  1. Any other ideas or patterns. e.g. each hex digit is bit-flipped with the blah-blah bits.

I've got a Google Sheet with all the commands and their bits.

Two features, Water & Seat Temperatures do seem to pair their data together. Note the "Stateful Codes" section. It's clear that there's some pattern between the nibbles.


You may be able to hack support for the longer codes using the smaller codes too. e.g.

I can confirm the code you mentioned above, hacking the two repeating codes, does indeed work on the toilet

// Simulate sending a long message. e.g. Oscillate Bidet
irsend.sendToto(0x2008006060, kTotoBits, 2);  // Send the First half (39 bits) is sent 3 times.
irsend.sendToto(0x2008001010, kTotoBits, 2);  // Send the Second half (39 bits) is sent 3 times.
// Technically, there is no gap between the second & third send of the data in the second half of the protocol.
// The above doesn't emulate that part, but I'd guess it would work.

@crankyoldgit
Copy link
Owner

Thanks for that. It's very helpful.
I'm going to go with 24 bits per part and assume the 0x2008 (15 bits) at the start. That way we can shrink it down to 48 bits. i.e. Inside a uint64_t.

crankyoldgit added a commit that referenced this issue May 19, 2022
* Shrink messages down to 24 bits, by expecting a 15 bit prefix. (0x2008)
* Experimental support for sending longer codes.
  - e.g. `sendToto(0x006060001010, kTotoLongBits);  // Oscillate Bidet`
* Refactor sending to include prefix.
* Refactor decoding to expect a prefix.
* Prep work for decoding Long messages (not ready yet)

For #1806
@crankyoldgit
Copy link
Owner

I've just updated the branch to reflect that and some improvements.
It's a work in progress, as it doesn't fully support decoding the long messages.

I also think the last byte of the data is an xor checksum of the two previous bytes. So we can probably shrink it further if need be.
e.g. Pressure 5 is 0x602040 & 0x60 ^ 0x20 equals 0x40.

I still need to work out the bit ordering. I think we may need to reverse it for the numbers to increase linearly.

Let me know how it goes.

@jamsinclair
Copy link
Collaborator Author

jamsinclair commented May 20, 2022

I still need to work out the bit ordering. I think we may need to reverse it for the numbers to increase linearly.

So I've updated the google sheet and added a panel with all the codes in LSB First order.

Correct me if I'm misunderstanding, but we're looking for some kind of linear pattern in a nibble? If so, I think your assumption is correct and it's likely LSB First ordering.

  Nibble (Index) Decimal
Pressure 1 0010 (5) 2
Pressure 2 0011 (5) 3
Pressure 3 0100 (5) 4
Pressure 4 0101 (5) 5
Pressure 5 0110 (5) 6
Position 1 0101 (4) 5
Position 2 0100 (4) 4
Position 3 0011 (4) 3
Position 4 0010 (4) 2
Position 5 0001 (4) 1

*Looks like I have the nozel positions the wrong way around 😅

I also think the last byte of the data is an xor checksum of the two previous bytes. So we can probably shrink it further if need be.

Seems like that's the case for all the codes I see, looks like we could update it to a 16 bits code.

crankyoldgit added a commit that referenced this issue May 22, 2022
* Change bit order to LSB per #1806 (comment)
* Finish adding support for long (48bit) codes.
* Update unit tests accordingly.
  - Add tests for long (48 bit) codes.

Fingers crossed, this should do it.
Fixes #1806
@crankyoldgit
Copy link
Owner

@jamsinclair I've updated the branch and created PR #1811
I think this does everything. i.e. LSBF and supports sending & decoding the long (48 bit) messages.
It also does the (xor) integrity check.

You'll have to recapture all of your codes again, but, I think this should be final. Touch wood (or Toilet Paper).

Let me know how it goes.

@jamsinclair
Copy link
Collaborator Author

jamsinclair commented May 24, 2022

Thanks for connecting all the pipes and unclogging the protocol into its current state. I've learnt a lot this second time around 👏 👏 👏

I can confirm that with your code in #1811:

  • Can decode both 24 bit and 48 bit messages correctly ✅
  • The devices responds accordingly to the sent commands for both 24 bit and 48 bit messages ✅

I believe we can close the lid on this fine issue now?

crankyoldgit added a commit that referenced this issue May 24, 2022
* Add `sendToto()` and `decodeToto()` routines.
   - Supports two (2) bit sizes, 24 (short) & 48 (long) bit codes.
   - Includes/assumes a standard bit prefix to ensure it fits into a `uint64_t`.
   - `Xor` integrity check.
   - LSBF order based on user analysis. 

* Update supported devices.
* Add unit tests to cover new changes.

_Legs crossed_, this should do it for the _Number Two_ toilet protocol supported by this library.
_Roll_ on the next one.

Fixes #1806
crankyoldgit added a commit that referenced this issue Sep 15, 2022
_v2.8.3 (20220915)_

**[Bug Fixes]**
- Fix `#if` for DECODE_COOLIX48 (#1796)
- Add missing `prev`s to `decodeToState()` (#1783)

**[Features]**
- Add `pause()` function to ESP32 when receiving. (#1871)
- ARGO: Argo add `sendSensorTemp()` (#1858 #1859)
- HAIER_AC160: Experimental detail support. (#1852 #1804)
- BOSCH144: Add IRac class support (#1841)
- Mitsubishi_AC: update left vane in `IRac` class (#1837)
- Basic support for Daikin 312bit/39byte A/C protocol. (#1836 #1829)
- Experimental basic support for Sanyo AC 152 bit protocol. (#1828 #1826)
- GREE: Add model support for `YX1FSF`/Soleus Air Windown A/C (#1823 #1821)
- Experimental basic support for Bosch 144bit protocol. (#1822 #1787)
- Experimental basic support for TCL AC 96 bit protocol. (#1820 #1810)
- Add basic support for clima-butler (52bit) RCS-SD43UWI (#1815 #1812)
- TOTO: An experimental _(s)wipe_ at support for Toto Toilets. (#1811 #1806)
- CARRIER_AC128: Experimental Basic support for Carrier AC 128bit protocol. (#1798 #1797)
- HAIER_AC160: Add basic support for Haier 160bit protocol. (#1805 #1804)
- DAIKIN: Add basic support for 200-bit Daikin protocol. (#1803 #1802)
- FUJITSU: Improve handling of 10C Heat mode. (#1788 #1780)
- FUJITSU: Improve handling of short (command only) messages. (#1784 #1780)

**[Misc]**
- Improve the `_IRREMOTEESP8266_VERSION_VAL` macro (#1875 #1870)
- SONY: Update supported devices. (#1872)
- SAMSUNG: Update supported devices (#1873)
- NEC: Update supported devices (#1874)
- Give IRmacros.h smaller scope to avoid impacting projects using IRremoteESP8266 (#1857 #1853 #1851)
- Inhibit protocol names for not-included protocols (#1853 #1851)
- Test out codeql static analysis (#1842)
- Remove pylint disable=no-self-use (#1817)
- Fujitsu General: update supported devices (#1813)
- DAIKIN: Update supported devices (#1808 #1807)
- Fujitsu: Update supported remote info. (#1801 #1794)
- DAIKIN128: Update supported devices (#1754)
- Voltas: Add link to manual for 122LZF A/C. (#1800 #1799 #1238)
- Daikin128: Additional unit test. (#1795 #1754)
- MIDEA: Update supported devices (#1791 #1790)
crankyoldgit added a commit that referenced this issue Sep 16, 2022
**_v2.8.3 (20220915)_**

**[Bug Fixes]**
- Fix `#if` for DECODE_COOLIX48 (#1796)
- Add missing `prev`s to `decodeToState()` (#1783)

**[Features]**
- Add `pause()` function to ESP32 when receiving. (#1871)
- ARGO: Argo add `sendSensorTemp()` (#1858 #1859)
- HAIER_AC160: Experimental detail support. (#1852 #1804)
- BOSCH144: Add IRac class support (#1841)
- Mitsubishi_AC: update left vane in `IRac` class (#1837)
- Basic support for Daikin 312bit/39byte A/C protocol. (#1836 #1829)
- Experimental basic support for Sanyo AC 152 bit protocol. (#1828 #1826)
- GREE: Add model support for `YX1FSF`/Soleus Air Windown A/C (#1823 #1821)
- Experimental basic support for Bosch 144bit protocol. (#1822 #1787)
- Experimental basic support for TCL AC 96 bit protocol. (#1820 #1810)
- Add basic support for clima-butler (52bit) RCS-SD43UWI (#1815 #1812)
- TOTO: An experimental _(s)wipe_ at support for Toto Toilets. (#1811 #1806)
- CARRIER_AC128: Experimental Basic support for Carrier AC 128bit protocol. (#1798 #1797)
- HAIER_AC160: Add basic support for Haier 160bit protocol. (#1805 #1804)
- DAIKIN: Add basic support for 200-bit Daikin protocol. (#1803 #1802)
- FUJITSU: Improve handling of 10C Heat mode. (#1788 #1780)
- FUJITSU: Improve handling of short (command only) messages. (#1784 #1780)

**[Misc]**
- Improve the `_IRREMOTEESP8266_VERSION_VAL` macro (#1875 #1870)
- SONY: Update supported devices. (#1872)
- SAMSUNG: Update supported devices (#1873)
- NEC: Update supported devices (#1874)
- Give IRmacros.h smaller scope to avoid impacting projects using IRremoteESP8266 (#1857 #1853 #1851)
- Inhibit protocol names for not-included protocols (#1853 #1851)
- Test out codeql static analysis (#1842)
- Remove pylint disable=no-self-use (#1817)
- Fujitsu General: update supported devices (#1813)
- DAIKIN: Update supported devices (#1808 #1807)
- Fujitsu: Update supported remote info. (#1801 #1794)
- DAIKIN128: Update supported devices (#1754)
- Voltas: Add link to manual for 122LZF A/C. (#1800 #1799 #1238)
- Daikin128: Additional unit test. (#1795 #1754)
- MIDEA: Update supported devices (#1791 #1790)
@crankyoldgit
Copy link
Owner

FYI, the changes mentioned above have now been included in the new v2.8.3 release of the library.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Pending Confirmation Waiting for confirmation from user
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants