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

Electra A/C aircon control #1033

Closed
ShonP40 opened this issue Jan 30, 2020 · 77 comments
Closed

Electra A/C aircon control #1033

ShonP40 opened this issue Jan 30, 2020 · 77 comments

Comments

@ShonP40
Copy link

ShonP40 commented Jan 30, 2020

I recently updated my WeMos D1 Mini from v0.5.6 to v2.7.3 because I saw that it has an Home Assistant integration.
After I updated, I noticed that none of my IR commands that I used before to control my Electra A/C work.
I tried the new aircon menu and the main functions in it are working great but the Quiet, Turbo, Econo, Light, Filter, Clean, Beep functions do nothing.
My A/C has an option to toggle the display, turbo mode and clean mode and I was able to use them in the past with the old version (via A/C complex commands).

So, can you fix those commands please (in the aircon menu)?
And do I need to re-record the old "complex" commands I have so they would work again?

And is there a way to toggle options in the aircon menu with a URL?

@crankyoldgit
Copy link
Owner

crankyoldgit commented Jan 31, 2020

FYI, v0.5.6 was the version of IRMQTTServer, not the library version (currently v2.7.3), Back then, the library was v2.5.1.

In the v2.6.0 release notes we had to change the bit ordering of the Electra protocol.
e.g. "Change per byte bit-order in Electra protocol. (#648)"

That's probably why your old codes no longer work. If you reverse the bit order of each byte you send, you will probably get a working message again.
e.g. 0x01 (0b00000001)-> 0x80 (0b10000000), 0x02 (0b00000010) -> 0x40 (0b01000000), etc.
0x0102 -> 0x4080. i.e. Bit's with in the each byte are reversed, not the order of the bytes.

"Detailed" Electra support wasn't added until v2.6.3 of the library. (#788)

You are now attempting to use the "Common A/C" API to control the Electra device. Different models and brands have different levels of support.

This is what is currently supported by the library for Electra: https://github.com/crankyoldgit/IRremoteESP8266/blob/master/src/IRac.cpp#L464-L488
i.e. Quiet, Turbo, Econo, Light, Filter, Clean & Beep are not (yet) supported for Electra.

So the library/code/example is working as intended at the moment.

My A/C has an option to toggle the display, turbo mode and clean mode and I was able to use them in > the past with the old version (via A/C complex commands).

So, can you fix those commands please (in the aircon menu)?

If you can work out what parts/bits of the uint8_t state[] change for those given modes, I can add code to support them. e.g. Follow the instructions/guide here: https://github.com/crankyoldgit/IRremoteESP8266/wiki/Adding-support-for-a-new-AC-protocol for how to work out which bits do what etc.

And do I need to re-record the old "complex" commands I have so they would work again?

Per earlier, yes (or no). The bit ordering changed for the Electra protocol, so you can either re-capture the messages with the current IRrecvDumpV2 example, or do the bit-math to reverse them yourself.

And is there a way to toggle options in the aircon menu with a URL?

It is just a html form. You should be able to construct & submit a URL with the correct arguments to make the changes you want.
Do some Googling, example the HTML page source, and you will work out how to do that.
e.g.

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

So I probably looked at the wrong version number.

How many codes will I need to record so you’ll add a more detailed support for my A/C?

Will it be enough to record a couple (with those options toggled on or off) or will I have to record everything?

@crankyoldgit
Copy link
Owner

How many codes will I need to record so you’ll add a more detailed support for my A/C?

How long is a piece of string? ;-)

Read: https://github.com/crankyoldgit/IRremoteESP8266/wiki/Adding-support-for-a-new-AC-protocol#working-out-the-details & https://github.com/crankyoldgit/IRremoteESP8266/wiki/Adding-support-for-a-new-AC-protocol#binary-settings

As you're probably looking at "binary" controls/settings, you are probably only looking at a couple of messages per setting.

Will it be enough to record a couple (with those options toggled on or off) or will I have to record everything?

It all depends. It will only take you as many as it takes you to understand what bits are changing & why.

@crankyoldgit
Copy link
Owner

Also, can you please provide the Brand & Model numbers for your A/C head unit and your remote?

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

A/C and remote brand: Electra
A/C Model: ELECTRA Classic INV 17 / AXW12DCS
Remote Model: YKR-M/003E

@crankyoldgit
Copy link
Owner

Thanks. Looking forward to your reverse-engineering/analysis of your capture data so I can add your missing features.

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

Btw, How can I select Electra A/C when controlling it through Home Assistant using MQTT?

@crankyoldgit
Copy link
Owner

crankyoldgit commented Jan 31, 2020

Select ELECTRA on the HTML page, and the device (via MQTT retain) will remember it even beyond reboots.

via MQTT-only, read: https://github.com/crankyoldgit/IRremoteESP8266/blob/master/examples/IRMQTTServer/IRMQTTServer.ino#L182-L189
e.g. send ELECTRA to the MQTT topic ir_server/ac/cmnd/protocol etc.
Again, it only needs to be done once.

[Edit: fixed the link to the docs]

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

oh, ok, ty.

And last thing: How can I add my temperature sensor to it so it will show up correctly and know the room temp? (my temperature sensor is already connected and working in home assistant).

@crankyoldgit
Copy link
Owner

crankyoldgit commented Jan 31, 2020

You will have to add the code to IRMQTTServer yourself for that if you want to do it on the same device.

Or use another device that reports the temp sensor results to where ever you've told HA's MQTT climate to look for it. e.g. https://www.home-assistant.io/integrations/climate.mqtt/#current_temperature_topic

FYI, all of that is out of scope for this library/support channel.
e.g. https://github.com/crankyoldgit/IRremoteESP8266/wiki/Frequently-Asked-Questions#i-want-to-change-the-example-code-to-make-it-do-something-different-but-i-dont-know-how-please-help-me
and it's really a Home Assistant config issue. ;-)

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

My temperature sensor is connected to my RPI's GPIO pins with the onewire protocol.

@crankyoldgit
Copy link
Owner

Then have it report it to MQTT to the topic you've setup in that HA doc I linked.

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

ok, I'll try that

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

Hmm, MQTT commands are doing nothing when I try to turn on the A/C (for example).

Here is the MQTT command wemos_d1_mini_ac_remote/ac/cmnd/ELECTRA_AC/power

The ESP is connected to my RPI

@crankyoldgit
Copy link
Owner

Sorry, I gave you the wrong link to the docs earlier. See: https://github.com/crankyoldgit/IRremoteESP8266/blob/master/examples/IRMQTTServer/IRMQTTServer.ino#L182-L189

e.g. Try sending on to wemos_d1_mini_ac_remote/ac/cmnd/power

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

still nothing

@crankyoldgit
Copy link
Owner

What does the ac page on the ESP running IRMQTTServer say?

@crankyoldgit
Copy link
Owner

i.e. http://your_esp.local/aircon

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

image

@crankyoldgit
Copy link
Owner

And what is the "Climate Information" section say on the "info" tab/page?

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

image

@crankyoldgit
Copy link
Owner

According to that, the MQTT topic you need to send to is homeassistant/ac/cmnd/power and send it with a payload of on

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

ok, its working.
But can I change that topic?

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

and why doesn't it work if I add ELECTRA_AC?

@crankyoldgit
Copy link
Owner

But can I change that topic?

You set it in your initial setup. To reset it, you need to reset the config on the ESP device. e.g. https://github.com/crankyoldgit/IRremoteESP8266/blob/master/examples/IRMQTTServer/IRMQTTServer.ino#L58-L59

 * If you need to reset the WiFi and saved settings to go back to "First Boot",
 * visit:  http://<your_esp's_ip_address>/reset

It will use the MQTT prefix. If it isn't set, it will use the hostname as the start of the MQTT topic.

and why doesn't it work if I add ELECTRA_AC?

Because that isn't how MQTT topics work. It's only listening on certain ones. You just used a different topic that it isn't programmed to listen too.

@ShonP40
Copy link
Author

ShonP40 commented Jan 31, 2020

and how do I update it? Do I need to create a bin file?

@ShonP40
Copy link
Author

ShonP40 commented Feb 9, 2020

  1. Its still not toggling the light (the A/C beeps and nothing happens).

  2. I re-recorded the Turbo mode commands

A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off

Code      : 0xC387E0006000200000200008D2 (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off
uint16_t rawData[211] = {9192, 4446,  668, 1602,  644, 1608,  668, 506,  670, 508,  694, 506,  722, 504,  694, 1608,  642, 1618,  694, 1604,  668, 1606,  696, 1608,  668, 510,  694, 506,  668, 512,  692, 508,  646, 1644,  690, 506,  696, 530,  670, 530,  670, 532,  668, 530,  668, 1632,  616, 1634,  668, 1644,  642, 536,  668, 532,  646, 534,  668, 532,  642, 538,  670, 532,  642, 538,  668, 542,  642, 536,  668, 532,  642, 538,  668, 532,  642, 536,  668, 1630,  642, 1638,  694, 542,  668, 532,  668, 532,  668, 532,  668, 532,  668, 532,  668, 534,  668, 534,  668, 542,  668, 532,  668, 532,  668, 532,  668, 532,  668, 532,  668, 1634,  642, 534,  642, 548,  666, 532,  642, 538,  668, 534,  640, 538,  668, 534,  640, 540,  666, 534,  640, 550,  666, 534,  640, 538,  692, 558,  666, 534,  666, 534,  668, 534,  666, 534,  666, 544,  666, 534,  666, 534,  666, 534,  666, 534,  666, 532,  666, 1638,  638, 536,  640, 550,  666, 534,  638, 540,  666, 534,  640, 540,  666, 536,  638, 540,  666, 536,  640, 550,  666, 534,  638, 540,  664, 534,  638, 1640,  664, 536,  690, 536,  664, 536,  664, 546,  666, 532,  664, 1636,  612, 540,  664, 536,  638, 1640,  664, 534,  690, 1638,  612, 1642,  742};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0xD2};

A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo on - clean off

Code      : 0xC387E000604020000020000812 (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off
uint16_t rawData[211] = {9188, 4442,  718, 1608,  692, 1608,  694, 506,  640, 512,  666, 514,  666, 512,  692, 1606,  666, 1620,  720, 1606,  666, 1604,  666, 1612,  718, 508,  690, 510,  684, 516,  666, 534,  668, 1644,  640, 532,  646, 532,  666, 534,  640, 540,  666, 534,  640, 1636,  666, 1634,  640, 1648,  614, 538,  640, 540,  640, 540,  666, 534,  640, 540,  666, 536,  640, 542,  664, 546,  638, 540,  666, 534,  638, 540,  666, 536,  638, 540,  664, 1632,  640, 1638,  692, 546,  664, 534,  666, 534,  666, 534,  664, 536,  664, 536,  666, 534,  664, 1638,  638, 548,  638, 540,  664, 536,  638, 542,  664, 538,  638, 540,  664, 1634,  638, 540,  664, 570,  666, 538,  662, 538,  662, 538,  662, 560,  666, 560,  588, 562,  612, 562,  586, 576,  614, 564,  614, 566,  640, 560,  614, 566,  640, 560,  614, 566,  640, 562,  612, 576,  642, 560,  614, 568,  638, 560,  614, 566,  640, 558,  614, 1642,  662, 562,  666, 570,  640, 560,  640, 560,  640, 560,  640, 560,  640, 560,  640, 562,  640, 562,  640, 572,  638, 560,  638, 562,  638, 562,  620, 1658,  608, 566,  618, 582,  612, 568,  614, 598,  588, 590,  614, 1660,  614, 586,  614, 586,  640, 1666,  582, 592,  614, 588,  586, 594,  692};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x40, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0x12};

@crankyoldgit
Copy link
Owner

crankyoldgit commented Feb 10, 2020

  1. Its still not toggling the light (the A/C beeps and nothing happens).

Then you are going to need to do more analysis on exactly what changes, and why between the "changing the light" messages and other "normal" messages. e.g. A temp change.

  1. I re-recorded the Turbo mode commands

Thanks.
Differences marked in bold.

turbo off:
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0xD2};

turbo on:
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x40, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0x12};

The last byte is the checksum, so we can ignore that.
That leaves state[5] controlling turbo. Specifically the 5th Least Significant Bit(LSB) of state[5].

I'll code something up based on that soon.

Edit:
Sigh. Bit math fail! That should have been the 7th LSB.

crankyoldgit added a commit that referenced this issue Feb 10, 2020
@crankyoldgit
Copy link
Owner

@ShonP40 Turbo support added. Please redownload and test.

@ShonP40
Copy link
Author

ShonP40 commented Feb 10, 2020

Ok, I’ll do it today

@ShonP40
Copy link
Author

ShonP40 commented Feb 10, 2020

1. I re-recorded the light command:

A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off - pressed light

Code      : 0xC387E0006000200000200015DF (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: Toggle, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9192, 4446,  670, 1604,  642, 1608,  696, 504,  720, 506,  696, 506,  694, 504,  694, 1606,  642, 1618,  694, 1606,  668, 1608,  694, 1608,  668, 510,  694, 506,  668, 512,  720, 506,  620, 1642,  718, 506,  668, 532,  668, 532,  668, 532,  668, 530,  670, 1632,  616, 1636,  642, 1646,  694, 532,  668, 532,  668, 532,  668, 532,  668, 532,  668, 534,  668, 534,  668, 542,  668, 532,  668, 532,  668, 532,  668, 532,  668, 532,  668, 1632,  642, 1632,  640, 546,  668, 530,  694, 532,  668, 532,  668, 532,  668, 532,  668, 534,  668, 534,  668, 544,  668, 532,  668, 532,  642, 532,  666, 534,  668, 530,  614, 1638,  640, 536,  642, 546,  668, 532,  694, 532,  668, 532,  668, 534,  666, 534,  666, 534,  668, 534,  666, 544,  666, 532,  666, 534,  666, 534,  666, 534,  666, 534,  666, 534,  666, 536,  666, 544,  666, 534,  666, 534,  666, 534,  666, 534,  666, 534,  666, 1638,  612, 540,  666, 546,  640, 538,  666, 534,  640, 538,  666, 536,  638, 540,  666, 536,  640, 542,  664, 544,  638, 1638,  690, 534,  612, 1638,  640, 536,  638, 1642,  688, 536,  664, 536,  664, 544,  664, 1634,  640, 1630,  640, 1638,  690, 1634,  638, 1634,  640, 536,  664, 1636,  638, 1642,  744};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x15, 0xDF};

2. Turbo is not working so I re-recorded its commands again

A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo on - clean off

Code      : 0xC387E000604020000020000812 (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9190, 4448,  668, 1606,  642, 1610,  694, 506,  720, 506,  694, 506,  694, 506,  692, 1608,  640, 1620,  692, 1606,  666, 1608,  694, 1608,  666, 512,  692, 508,  660, 520,  692, 508,  648, 1640,  690, 510,  694, 532,  666, 534,  668, 532,  668, 532,  666, 1634,  614, 1636,  666, 1646,  640, 538,  666, 534,  640, 540,  666, 534,  640, 540,  666, 536,  640, 540,  666, 546,  640, 538,  666, 534,  640, 540,  666, 536,  638, 540,  666, 1630,  640, 1658,  692, 546,  666, 534,  664, 536,  664, 536,  664, 536,  664, 536,  664, 536,  664, 1638,  640, 570,  614, 564,  640, 538,  636, 566,  640, 560,  614, 564,  640, 1634,  638, 564,  640, 570,  666, 560,  640, 560,  640, 560,  640, 560,  640, 562,  640, 560,  640, 562,  640, 570,  640, 560,  640, 560,  640, 560,  640, 560,  640, 560,  640, 560,  640, 560,  640, 572,  640, 560,  638, 560,  640, 560,  640, 560,  640, 560,  640, 1640,  610, 566,  640, 570,  614, 566,  640, 560,  614, 566,  640, 562,  614, 566,  640, 584,  614, 568,  640, 570,  612, 568,  638, 562,  612, 564,  638, 1662,  610, 564,  640, 562,  664, 562,  636, 574,  638, 560,  638, 1640,  610, 566,  638, 562,  610, 1644,  660, 562,  658, 568,  622, 580,  688};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x40, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0x12};

A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off

Code      : 0xC387E0006000200000200008D2 (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9192, 4448,  666, 1606,  640, 1610,  666, 510,  666, 512,  664, 536,  692, 534,  666, 1636,  612, 1646,  692, 1608,  664, 1610,  692, 1610,  666, 514,  690, 510,  662, 516,  664, 534,  640, 1648,  692, 508,  716, 510,  690, 510,  664, 536,  666, 534,  670, 1652,  612, 1640,  664, 1646,  638, 540,  692, 508,  638, 540,  664, 536,  638, 540,  666, 536,  638, 542,  664, 546,  638, 540,  664, 536,  638, 542,  664, 538,  638, 540,  664, 1634,  636, 1642,  690, 546,  664, 536,  662, 536,  662, 538,  660, 540,  636, 542,  636, 538,  664, 538,  664, 546,  664, 536,  610, 540,  636, 542,  636, 540,  636, 562,  690, 1640,  608, 544,  664, 548,  636, 544,  662, 538,  610, 568,  664, 536,  636, 544,  662, 538,  636, 542,  662, 550,  636, 544,  662, 538,  636, 542,  658, 564,  614, 546,  634, 566,  632, 548,  662, 550,  620, 558,  636, 564,  636, 544,  662, 562,  614, 564,  638, 1638,  636, 542,  660, 550,  688, 562,  638, 538,  652, 548,  662, 562,  612, 590,  612, 562,  638, 542,  658, 552,  634, 564,  582, 572,  608, 578,  600, 1692,  612, 588,  664, 540,  636, 588,  638, 572,  636, 562,  636, 1642,  582, 594,  612, 586,  586, 1692,  612, 586,  638, 1666,  586, 1670,  712};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0xD2};

Do I need to select another A/C model?
I've tried light and turbo with the Default model and with the model 6.

crankyoldgit added a commit that referenced this issue Feb 10, 2020
@crankyoldgit
Copy link
Owner

  1. Turbo is not working so I re-recorded its commands again

Okay, I utterly failed with my bit math for Turbo (See Edit: in #1033 (comment))
I've just pushed a fix for that, so please re-download and test etc.

Do I need to select another A/C model?

Nope. Electra doesn't (yet) have support for different models. It's all the same so far.

  1. I re-recorded the light command:

I'm not sure you get it. You have to analyse and isolate what has changed and be able to predict/explain what should happen (which bytes and bits change) when you set/toggle a feature.
You need to compare to previous known states to see what changes.
e.g.

  • Set the remote to: A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off, and the light should be off.
  • Press "Off"/Power etc. Capture that message. (Message 1)
    • The remote should now be: A/C off - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off
  • Press "On"/Power etc. Capture that message. (Message 2)
    • The remote should now be: A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off
  • Press the "light" button. Capture that message. (Message 3)
    • The remote/ac unit should now be: A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off - Light on/pressed
  • Press "Off"/Power etc. Capture that message. (Message 4)
    • The remote should now be: A/C off - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off
  • Press "On"/Power etc. Capture that message. (Message 5)
    • The remote should now be: A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off
  • Press the "light" button. Capture that message. (Message 6)
    • The remote/ac unit should now be: A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off - Light off/pressed
  • Press "Off"/Power etc. Capture that message. (Message 7)
    • The remote should now be: A/C off - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off
  • Press "On"/Power etc. Capture that message. (Message 8)
    • The remote should now be: A/C on - Cooling mode - 24° - Fan speed set to 1 - flaps off - turbo off - clean off

IF Light is really a toggle switch, Messages 3 & 6 should be identical. If they are not, then it isn't a toggle. It's storing the information somewhere in the state[]. Isolate it!
Also, if it is a toggle Messages 1, 4, & 7 should be identical to each other. Same for Messages 2, 5, & 8.
Compare Messages 2 & 3 together. Describe/document/analyse what has changed between those states, because that's what controls the light setting. (See the known & expected differences below. i.e. You can always ignore the last byte)

IF Light is not a toggle, Messages 3 & 6 will probably be different. Compare those two messages to see what changes.

In all cases, Messages 1 & 7, and Messages 2 & 8 should be identical, if not. We've got problems.

The known & expected differences between those states are:

  • state[12] (i.e. the very last byte) will always change. You can ignore it. e.g. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0xD2};
  • state[9] (i.e. 4th last byte) will change with the Power setting. e.g. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x08, 0xD2}; If you follow my example (and don't set clean) 0x20 means On, & 0x00 means Off.

If anything other than state[9] and state[12] changes, it is some how involved with the light function.

When you've worked it out, get back to me with what you've worked out & the data.

P.S. You don't need to include the rawData line anymore.

@ShonP40
Copy link
Author

ShonP40 commented Feb 10, 2020

Ok, ty.
I’ll do those things tomorrow or in 2 days.

@ShonP40
Copy link
Author

ShonP40 commented Feb 12, 2020

1. Turbo is working!

2. Here are the commands you requested me to record (I really don't know that to look for in them. When you tell me to look at a specific state, nothing is different between the messages so idk how to find the one you meant):

1

Code      : 0xC387E0006000200000000005AF (104 Bits)
Mesg Desc.: Power: Off, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9192, 4446,  668, 1606,  668, 1602,  694, 504,  720, 506,  722, 478,  696, 504,  694, 1606,  668, 1592,  694, 1606,  668, 1608,  694, 1606,  668, 510,  696, 506,  668, 510,  694, 506,  668, 1620,  694, 506,  720, 506,  694, 506,  692, 508,  694, 506,  694, 1606,  642, 1610,  694, 1618,  666, 512,  688, 512,  666, 512,  694, 508,  666, 512,  692, 510,  666, 512,  694, 518,  666, 512,  694, 506,  666, 512,  694, 528,  666, 510,  668, 1632,  666, 1612,  692, 544,  694, 508,  692, 506,  692, 508,  692, 508,  692, 510,  690, 510,  666, 536,  690, 520,  692, 506,  694, 506,  692, 508,  692, 590,  692, 534,  612, 1634,  690, 510,  636, 528,  690, 508,  638, 540,  692, 510,  662, 518,  666, 536,  638, 540,  688, 512,  640, 550,  664, 536,  638, 542,  664, 536,  638, 542,  664, 538,  638, 542,  664, 538,  636, 552,  664, 536,  636, 542,  690, 534,  638, 538,  662, 538,  662, 538,  610, 542,  636, 578,  614, 556,  648, 536,  636, 544,  660, 540,  636, 544,  662, 540,  636, 544,  662, 548,  610, 1688,  614, 562,  686, 1642,  608, 544,  662, 540,  636, 546,  660, 540,  634, 554,  660, 1636,  608, 1668,  686, 1638,  636, 1636,  610, 564,  636, 1666,  636, 542,  636, 1664,  742};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0xAF};

2

Code      : 0xC387E0006000200000200005CF (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9192, 4446,  694, 1576,  668, 1582,  696, 482,  694, 480,  722, 478,  748, 478,  722, 1580,  670, 1590,  720, 1578,  696, 1580,  722, 1580,  696, 484,  722, 478,  696, 484,  724, 476,  696, 1592,  722, 476,  748, 478,  722, 478,  722, 478,  724, 474,  722, 1578,  670, 1582,  722, 1590,  696, 482,  724, 478,  696, 482,  722, 478,  696, 482,  724, 478,  696, 486,  722, 488,  698, 482,  722, 480,  696, 482,  722, 480,  694, 484,  720, 1578,  694, 1584,  746, 490,  722, 478,  722, 478,  722, 478,  720, 480,  720, 480,  722, 480,  722, 480,  720, 490,  720, 478,  722, 478,  722, 480,  720, 480,  720, 478,  720, 1582,  668, 506,  668, 520,  696, 506,  692, 488,  712, 512,  642, 512,  694, 508,  666, 512,  694, 506,  668, 522,  694, 506,  668, 512,  692, 508,  666, 512,  694, 506,  668, 514,  692, 508,  668, 524,  692, 508,  666, 512,  694, 508,  666, 514,  692, 506,  666, 1612,  692, 508,  718, 518,  692, 508,  692, 508,  690, 510,  690, 510,  692, 536,  664, 512,  690, 536,  666, 518,  690, 1612,  636, 514,  690, 1610,  662, 514,  688, 512,  716, 510,  690, 512,  688, 522,  688, 1610,  638, 1612,  690, 1610,  662, 1614,  690, 512,  716, 510,  688, 1612,  636, 1616,  770};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x05, 0xCF};

3

Code      : 0xC387E0006000200000200015DF (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: Toggle, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9220, 4418,  696, 1574,  670, 1580,  696, 480,  696, 480,  724, 476,  748, 478,  720, 1580,  668, 1592,  722, 1576,  696, 1580,  724, 1576,  698, 482,  722, 478,  698, 484,  722, 476,  696, 1592,  722, 478,  748, 478,  722, 476,  724, 478,  722, 476,  722, 1580,  670, 1580,  722, 1590,  698, 482,  722, 478,  696, 482,  698, 504,  694, 484,  722, 478,  694, 486,  722, 488,  696, 484,  720, 478,  672, 508,  698, 502,  672, 506,  700, 1598,  672, 1606,  724, 512,  700, 500,  698, 500,  700, 504,  696, 502,  722, 480,  698, 504,  698, 506,  696, 514,  720, 478,  698, 502,  696, 504,  722, 478,  722, 478,  720, 1582,  694, 480,  670, 520,  696, 506,  690, 486,  718, 486,  668, 506,  696, 504,  718, 480,  696, 506,  642, 518,  666, 510,  666, 512,  690, 508,  718, 508,  692, 510,  688, 512,  690, 512,  662, 548,  664, 536,  664, 536,  664, 536,  664, 538,  662, 534,  666, 1640,  610, 542,  664, 546,  640, 540,  666, 534,  640, 538,  666, 534,  640, 538,  668, 534,  642, 538,  666, 542,  640, 1636,  694, 506,  718, 1610,  640, 512,  672, 1628,  664, 512,  688, 512,  690, 546,  662, 1638,  634, 1640,  636, 1664,  636, 1662,  638, 1664,  586, 564,  634, 1644,  664, 1668,  712};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x15, 0xDF};

4

Code      : 0xC387E0006000200000000005AF (104 Bits)
Mesg Desc.: Power: Off, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9202, 4436,  698, 1576,  698, 1578,  722, 476,  724, 476,  724, 476,  670, 480,  698, 1580,  696, 1590,  748, 1578,  696, 1574,  698, 1580,  750, 476,  724, 476,  724, 476,  724, 476,  724, 1588,  698, 476,  698, 482,  724, 476,  698, 482,  724, 476,  696, 1580,  724, 1576,  698, 1592,  722, 476,  750, 476,  724, 476,  724, 476,  724, 476,  724, 478,  724, 478,  724, 486,  724, 498,  672, 482,  722, 478,  698, 484,  722, 478,  696, 1580,  722, 1580,  696, 492,  722, 478,  698, 482,  724, 476,  696, 484,  722, 498,  696, 484,  722, 478,  696, 494,  722, 478,  698, 482,  722, 480,  696, 482,  724, 476,  696, 1584,  722, 478,  748, 490,  722, 478,  722, 478,  722, 478,  720, 478,  722, 478,  722, 478,  722, 478,  722, 490,  720, 480,  720, 480,  720, 480,  718, 482,  668, 534,  718, 480,  722, 480,  722, 490,  670, 528,  672, 528,  720, 480,  690, 512,  662, 538,  662, 538,  670, 532,  662, 548,  662, 538,  662, 536,  664, 538,  662, 538,  662, 538,  690, 512,  634, 566,  636, 546,  668, 1584,  634, 538,  662, 1616,  688, 538,  662, 538,  670, 560,  634, 540,  656, 554,  672, 1628,  628, 1640,  694, 1584,  686, 1640,  694, 478,  694, 1584,  720, 480,  746, 1582,  772};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0xAF};

5

Code      : 0xC387E0006000200000200005CF (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9190, 4446,  668, 1604,  668, 1608,  694, 506,  694, 506,  694, 506,  642, 510,  666, 1610,  670, 1616,  720, 1604,  668, 1604,  668, 1610,  720, 506,  694, 508,  692, 508,  692, 508,  692, 1620,  664, 510,  644, 534,  670, 530,  640, 538,  666, 532,  640, 1636,  666, 1634,  640, 1648,  666, 532,  720, 532,  614, 534,  640, 534,  614, 540,  640, 538,  640, 540,  666, 544,  640, 538,  666, 534,  640, 540,  666, 534,  640, 538,  666, 1632,  640, 1640,  692, 544,  666, 534,  666, 534,  666, 534,  666, 534,  666, 534,  666, 536,  666, 534,  666, 546,  666, 534,  666, 534,  666, 534,  666, 534,  664, 534,  666, 1638,  638, 536,  638, 552,  664, 534,  638, 540,  664, 536,  638, 542,  664, 536,  638, 542,  664, 538,  638, 552,  664, 536,  638, 542,  664, 536,  638, 542,  664, 536,  636, 544,  662, 538,  636, 576,  640, 536,  638, 542,  662, 536,  638, 542,  662, 536,  636, 1640,  664, 538,  688, 572,  638, 556,  642, 562,  638, 562,  638, 562,  638, 562,  638, 562,  638, 562,  638, 570,  638, 1638,  610, 564,  638, 1638,  636, 564,  638, 562,  664, 562,  638, 562,  638, 570,  640, 1636,  610, 1660,  642, 1636,  636, 1644,  660, 560,  666, 560,  640, 1638,  610, 1644,  742};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x05, 0xCF};

6

Code      : 0xC387E0006000200000200015DF (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: Toggle, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9190, 4448,  668, 1604,  640, 1610,  668, 508,  668, 510,  692, 506,  720, 506,  692, 1610,  640, 1620,  692, 1608,  666, 1610,  692, 1608,  666, 512,  692, 508,  668, 512,  694, 508,  664, 1624,  692, 508,  694, 532,  668, 532,  668, 534,  666, 532,  666, 1634,  614, 1636,  666, 1646,  640, 536,  668, 534,  640, 538,  666, 534,  642, 538,  666, 536,  640, 540,  666, 544,  642, 538,  666, 534,  640, 540,  666, 536,  640, 538,  666, 1632,  666, 1640,  640, 544,  666, 534,  614, 536,  640, 536,  640, 538,  666, 536,  690, 534,  666, 536,  664, 544,  666, 536,  664, 534,  668, 534,  666, 534,  666, 536,  664, 1636,  614, 540,  664, 546,  640, 538,  666, 534,  640, 540,  664, 536,  638, 540,  666, 536,  640, 540,  666, 546,  638, 540,  664, 536,  638, 540,  664, 536,  638, 542,  664, 536,  638, 542,  664, 546,  638, 540,  664, 536,  638, 542,  662, 536,  638, 540,  664, 1664,  610, 540,  664, 546,  690, 536,  664, 536,  664, 536,  664, 536,  664, 538,  662, 538,  664, 538,  662, 546,  664, 1638,  612, 540,  662, 1636,  636, 566,  634, 1640,  636, 542,  664, 536,  638, 550,  664, 1634,  636, 1638,  690, 1636,  638, 1634,  636, 1640,  690, 536,  664, 1638,  636, 1638,  768};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x15, 0xDF};

7

Code      : 0xC387E0006000200000000005AF (104 Bits)
Mesg Desc.: Power: Off, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9162, 4476,  664, 1634,  610, 1640,  690, 536,  612, 538,  638, 540,  664, 534,  690, 1638,  612, 1648,  664, 1636,  638, 1638,  662, 1638,  638, 542,  664, 536,  640, 542,  664, 536,  638, 1650,  660, 538,  690, 536,  664, 536,  664, 536,  664, 536,  662, 1636,  612, 1640,  664, 1648,  638, 540,  664, 536,  640, 540,  664, 536,  638, 542,  664, 538,  638, 544,  662, 566,  638, 540,  636, 564,  638, 542,  662, 538,  638, 540,  664, 1634,  636, 1642,  664, 572,  662, 538,  664, 536,  662, 538,  660, 540,  664, 538,  662, 538,  636, 566,  662, 548,  636, 564,  662, 538,  660, 540,  662, 538,  636, 562,  636, 1666,  608, 564,  610, 580,  662, 536,  630, 550,  638, 564,  636, 542,  664, 538,  636, 544,  636, 566,  610, 580,  636, 564,  612, 568,  636, 564,  612, 568,  636, 566,  636, 568,  634, 564,  636, 554,  636, 566,  608, 570,  636, 564,  608, 570,  636, 566,  634, 546,  636, 566,  608, 604,  636, 540,  608, 572,  634, 566,  634, 544,  636, 566,  610, 572,  636, 566,  608, 580,  634, 1664,  608, 566,  634, 1666,  610, 568,  636, 564,  610, 570,  636, 566,  610, 578,  636, 1662,  608, 1668,  660, 1666,  608, 1662,  610, 566,  636, 1666,  608, 570,  636, 1666,  740};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0xAF};

8

Code      : 0xC387E0006000200000200005CF (104 Bits)
Mesg Desc.: Power: On, Mode: 1 (Cool), Temp: 24C, Fan: 3 (Low), Swing(V): Off, Swing(H): Off, Light: -, Clean: Off, Turbo: Off
uint16_t rawData[211] = {9194, 4444,  670, 1600,  642, 1610,  668, 506,  694, 482,  696, 504,  722, 504,  694, 1606,  642, 1618,  696, 1604,  670, 1606,  722, 1578,  730, 496,  668, 506,  722, 478,  700, 500,  670, 1594,  668, 508,  666, 508,  694, 506,  720, 506,  694, 506,  692, 1608,  640, 1610,  692, 1620,  666, 512,  692, 508,  666, 512,  666, 536,  638, 540,  692, 508,  666, 516,  664, 546,  664, 514,  692, 508,  660, 520,  690, 510,  638, 540,  664, 1658,  636, 1642,  690, 548,  688, 510,  664, 536,  664, 536,  662, 538,  664, 536,  664, 538,  664, 536,  664, 546,  690, 530,  638, 536,  612, 540,  638, 542,  638, 540,  664, 1636,  636, 540,  664, 548,  688, 536,  664, 536,  664, 536,  664, 538,  662, 536,  664, 538,  662, 538,  662, 548,  662, 536,  664, 538,  662, 538,  662, 538,  662, 540,  662, 540,  662, 540,  660, 550,  662, 538,  660, 540,  662, 538,  662, 538,  636, 562,  650, 1652,  608, 546,  662, 548,  610, 568,  638, 564,  610, 570,  660, 540,  610, 570,  636, 566,  610, 570,  636, 572,  636, 1668,  630, 538,  664, 1666,  584, 568,  636, 564,  610, 570,  636, 564,  612, 578,  636, 1660,  610, 1666,  662, 1664,  610, 1666,  608, 566,  638, 562,  662, 1666,  584, 1670,  714};  // ELECTRA_AC
uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x05, 0xCF};

@crankyoldgit
Copy link
Owner

  1. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0xAF};
  2. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x05, 0xCF};
  3. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x15, 0xDF};
  4. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0xAF};
  5. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x05, 0xCF};
  6. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x15, 0xDF};
  7. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x05, 0xAF};
  8. uint8_t state[13] = {0xC3, 0x87, 0xE0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x05, 0xCF};

So mesgs 1, 4, & 7 are the same. Mesgs 2, 5, & 8 are the same. And mesgs 3 & 6 are the same. So it is a toggle.
As I stated in my last update, state[9] changes as expected from 0x00 and 0x20 because that is the power setting, and state[12] changes because it's the checksum.

That leaves the only other change is state[11] (marked as bold above) changing from 0x05 to 0x15 for the light button etc.

Given we have seen weird values in state[11] at other times, I'm wondering if that byte, like some other aircon protocols, is the value of what button was just pressed on the remote.

To confirm this theory, can you try capturing the other buttons when pressed, and see if state[11 (i.e. the second last byte. e.g. uint8_t state[13] = {0xC3, ..., 0x00, 0x15, 0xAF};) changes with different buttons being press and record what the values are for each different button.

It could be that 0x15 is light button, and 0x05 is the power button. We've seen other values in this byte of 0x08 & 0x19 but we are not sure why it's changing. In short we need to work out what that second last byte is doing to be able to emulate it correctly. At present, we don't understand it fully.

@ShonP40
Copy link
Author

ShonP40 commented Feb 16, 2020

Sorry that I didn't respond yet.
I wasn't home.
I will try to do it in a couple of days.

crankyoldgit added a commit that referenced this issue Feb 18, 2020
This is not a long term/good fix. But it should work, in theory.
For #1033
crankyoldgit added a commit that referenced this issue Feb 25, 2020
- get/setLightToggle, get/setTurbo, & get/setClean added.
- Unit tests added and updated.
- Common A/C api updated according.
- Fudge `ConstructKnownState` test to pass. TODO add for @ShonP40 to explain why this is needed.
- Increase string reserve size for `toString()`
- Horrible hack to make set/getLightToggle() work.

* Turbo & Clean confirmed to be working. LightToggle still iffy.

Ref:
* #1033 
* #1033 (comment)
crankyoldgit added a commit that referenced this issue Feb 26, 2020
_v2.7.4 (20200226)_

**[Bug Fixes]**
- IRMQTTServer: Fix bug when receiving an IR A/C message and not re-transmitting it. (#1035, #1038)
- Coolix: `setRaw()` doesn't update power state. (#1040, #1041)

**[Features]**
- Electra: Add improved feature support. (#1033, #1051)
- Add support for Epson protocol. (#1034, #1050)
- Add options to `decode()` to aid detection. Improve NEC detection. (#1042, #1046)
- SamsungAc: Add support for Light & Ion (VirusDoctor). (#1045, #1048, #1049)
- Add Italian (it-IT) locale/language support. (#1047) (kudos @egueli)
- gc_decode: Add repeat support for pronto codes. (#1034, #1043)

**[Misc]**
- Update supported SamsungAc devices (#1045)
- Coolix: Subtle protocol timing adjustments (#1036, #1037)
- Add supported Electra device model info (#1033)
crankyoldgit added a commit that referenced this issue Feb 26, 2020
_v2.7.4 (20200226)_

**[Bug Fixes]**
- IRMQTTServer: Fix bug when receiving an IR A/C message and not re-transmitting it. (#1035, #1038)
- Coolix: `setRaw()` doesn't update power state. (#1040, #1041)

**[Features]**
- Electra: Add improved feature support. (#1033, #1051)
- Add support for Epson protocol. (#1034, #1050)
- Add options to `decode()` to aid detection. Improve NEC detection. (#1042, #1046)
- SamsungAc: Add support for Light & Ion (VirusDoctor). (#1045, #1048, #1049)
- Add Italian (it-IT) locale/language support. (#1047) (kudos @egueli)
- gc_decode: Add repeat support for pronto codes. (#1034, #1043)

**[Misc]**
- Update supported SamsungAc devices (#1045)
- Coolix: Subtle protocol timing adjustments (#1036, #1037)
- Add supported Electra device model info (#1033)
@crankyoldgit
Copy link
Owner

The changes mentioned thus far have been included in the latest IRremoteESP8266 v2.7.4 release.

@ShonP40
Copy link
Author

ShonP40 commented Feb 26, 2020

Light control is working!

Thank you so much!

@crankyoldgit
Copy link
Owner

crankyoldgit commented Feb 27, 2020

@ShonP40 Thanks for confirming my horrible hack works.

I'd still like us to get to the bottom of it as per #1033 (comment) if you can.

i.e. we've seen 4 possible values for that byte, and right now we are only guessing what it does. Future changes may break it etc.

@crankyoldgit crankyoldgit removed the Pending Confirmation Waiting for confirmation from user label Feb 27, 2020
@ShonP40
Copy link
Author

ShonP40 commented Feb 27, 2020

I’ll try

@crankyoldgit
Copy link
Owner

Any progress?

@ShonP40
Copy link
Author

ShonP40 commented Mar 11, 2020

I didn’t try it yet because I was busy with my smart room project.
It’s finally finished and running (I will add a couple more switches later).

I’ll try to do it tomorrow probably.

@crankyoldgit
Copy link
Owner

Any luck?

1 similar comment
@crankyoldgit
Copy link
Owner

Any luck?

@ShonP40
Copy link
Author

ShonP40 commented Mar 25, 2020

Nope

@crankyoldgit
Copy link
Owner

Oh well I guess we give up on it then until you find something.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants