Climate IR driver for the Daikin BRCxxxx remotes?

Possibly stupid question: won’t ESPHome output the right raw ir codes needed via configuring the transmitter component i.e.

remote_receiver:
  pin: 
    number: GPIO23
    inverted: True
    mode:
     input: True
     pullup: True
  dump: raw
  id: ir_receiver
  tolerance: 55%

?

in theory it should but I had better luck with the rpi setup and using LIRC. The format recorded is I believe a little different.

@hagak I got a Pi set up with a receiver and lirc. I’m able to capture the commands however I’m a little lost on this part:

Should you wish to use this code the timing values are defined in the beginning of the program, you will probably need to adapt it.

It’s probably staring me right in the face but I’m not sure what he means about adapting. I capture the raw output, I get the 6 timing values at the top of the columns but not sure what to tweak. When I compile and run his decode program I get a string of gibberish from the most part, so something is off.

Am I missing the obvious? I can send you a raw file, for example the one I did when pressing on/off if that helps.

his example is using a remote protocol very similar so the timings he has are fine.

Something is off then. Example, here’s a “baseline” from pressing on/off (standard settings) capture:

sudo mode2 -d /dev/lirc0 -m > off_daikin_new

File output:

Running as regular user pi
 11725325

 11697837-space

     9837     9793     9866     9724     4634     2470
      379      349      350      987      317      976
      393      308      395      940      358      351
      390      342      347      388      427      287
      403      940      327      382      384      347
      398      938      359      346      384      347
      384      349      389      933      363      342
      386      346      417      305      396      348
      380      947      359      351      396      338
      384      942      365      346      381      350
      419      906      360      350      379      353
      375      358      384      351      346      386
      381      352      347      385      382      351
      358      964      330      383      378      352
      383      352      379      354      350      383
      376      357      376      356      376      946
      334      379      376      356      383      358
      378      926      377      945      365      345
      380      349      380      352      381      955
      351      349      416      311      393      345
      378      346      379      938      367      920
      379      924      381      352      377      359
      375      925      377    20305

      348      954      343      361      375      356
      391      336      373      362      375      952
      350      357      368      952      328      384
      346      386      347      388      343      387
      345      386      346      386      346      386
      345      418      318      408      322      410
      321      412      320      411      320      411
      321      415      318      412      319      416
      320      413      320      413      320      413
      292      442      316      414      323      420
      312      417      316      418      314      417
      316      415      313      419      287      445
      312      422      310      422      308      423
      309      429      307      424      303      419
      310      437      295      424      308      423
      308      423      310      447      285      426
      310      446      286      447      287      446
      286      446      285      446      285      447
      288      447      284      449      294     1009
      286     1030      273      446      288     1025
      276      445      286      446      286      448
      285      446     4553   138057-pulse

Run that through decode though and I get weird results:

./decode off_daikin_new off_daikin_new.decoded

result:

HHµÒb0C80^T000<87>^T00^R000^M0000^[00^V00ò00000000,0000000^Z000^F^Y000#0000^R^@^D00^E¹"0000 0 000000000000000000000000000g00000000000e0fgfeehdYfYh\ffe^Q]
~

I tried removing the “Running as regular user Pi line” at the start but no real difference.

before you run it through decode you want to remove all NON-numeric data except spaces

Done that, still bad output. All that program does is round values and convert to binary so I’m struggling with what’s going wrong.

Oh yeah you do need to adjust the ranges he has in his. I would make the LONG around 900 and seperator 20000

Improved:

sudo mode2 -d /dev/lirc0 -m > off_daikin_new

Output (non-numeric removed):

 9845     9768     9843     9759     4634     2496
      359      344      389      937      364      939
      400      297      401      941      364      342
      387      344      390      345      346      404
      378      935      391      313      426      312
      383      941      359      342      387      345
      384      364      409      904      362      345
      376      356      385      947      359      344
      389      343      386      348      377      357
      385      345      390      343      389      343
      377      356      388      939      362      348
      388      345      387      347      400      334
      386      345      351      381      387      346
      385      940      369      342      425      289
      408      345      390      343      386      346
      383      349      386      345      386      950
      360      342      391      350      379      404
      329      940      363      952      340      351
      379      354      409      321      381      941
      360      368      362      360      380      362
      363      350      348      980      377      918
      354      953      330      967      366      942
      320      387      377    20296

      352      924      385      344      380      352
      417      317      381      339      394      908
      381      350      394      913      414      308
      388      351      383      350      399      335
      376      356      381      351      382      351
      350      385      380      353      381      353
      375      355      376      356      369      366
      342      389      376      357      348      387
      349      383      397      345      359      369
      381      352      368      364      372      360
      344      386      346      388      344      393
      337      388      343      398      338      382
      354      401      318      416      318      409
      321      414      314      419      316      412
      320      415      357      373      318      410
      320      414      316      415      316      419
      315      420      361      399      308      390
      346      385      319      405      314      415
      315      417      313      420      313      991
      310     1016      287      423      311     1017
      284      422      310      423      310      423
      310      438     4577   135115

./decode off_daikin_new off_daikin_new.decoded

Decoded output:

½»b01101000010010001001000000001000000010^A0000010001100010000111110(1000010100000000000000000000000000000000000000000000000011g1d000)]

Still wrapping my head a little around how the values interact, I get the math but not strong in C so figuring out what to tweak is difficult.

@hajak I’m at a standstill with this unfortunately. I can capture all the raw codes, starting from a standard baseline config from which I create one new file per button press for, but running the rounding program doesn’t convert to binary. I’d be willing to pay to help get this in at this point if you are interested.

if you get me the raw recordings with labels of the STATE for each one. Need to know what each setting is for each one, MODE, TEMP, FAN, ETC.

I will see what i can do. And not really into this for the money so dont worry about that.

Thanks! Do I need to run through all the iterations based on mode or can I just set it to one config i.e. “Cool, Fan low, 75, no swing, no eco” and then do each command/state per file from that baseline?

You just need a baseline to work from.
Cool, Fan Low, 75
Cool,Fan Med, 75
Heat, Fan Low, 75
etc.

Please provide 4 temperature ones.

I’ve gotten the first round of raw codes ready so we can see if they work for you.

Files ordered by change date, I started with “cool_75f_swing-off_fan-low_on-off” that is I had the remote at cool, 75f, no swing, low fan, no aux modes (powerful, quiet, eco, etc.) enabled and then pressed the on/off button and recorded it to the file.
I then created each new file based on a single button push, the change is in the file name i.e. dry_75f* means I used the base config above and set the mode to “dry”, and so on.

It’s a pretty tiny zip file - how do I get it to you? I don’t see a way to attach files here.

Your unit has “powerful, quiet, eco” modes? Is this a Daikin Ceiling Cassette unit? This sounds more like the wall units that use the standard Daikin module. Have you tested that module?

I have, that it didn’t work is what led me to discover your work on BRC remote support.

It’s a 17 series, indoor model FTXB12AVXJU Outdoor RXB12AXVJU. Operations manual: (pictured on 1st page): https://backend.daikincomfort.com/docs/default-source/product-documents/residential/manuals/operationmanuals/operation-manual_17series.pdf?sfvrsn=5d422a26_8

Hmm yeah this remote is much closer to the original remote. The ceiling cassettes that use the remote i built this for do not have those extra modes. I will look at it but it is probably not something i want to add to this module since it is probably a completely different protocol

Also Daikin really could use some unification in their product lines, good lord they seem to be all over the place. Also why I did not bother with their Wifi interface because it looked like a closed system and the IR I could atleast write some code to work with it.

I understand. Appreciate any guidance or insight from the files you can spare.

@hagak I’ve discovered a few interesting things:

The Daikin protocol used with these remotes is 128. I don’t believe that has been upstreamed to ESPHome but it is in the ESP8286 IRRemote library. You can see it referenced in here Starting line 552 you’ll find the correct frequency and bits for this protocol along with the supported modes. It is further broken out in the class reference: IRremoteESP8266: IRDaikin128 Class Reference

I’m fooling around with the library with custom components/libraries in ESPHome but I’m curious if the above is useful to you as well. I haven’t gotten it working yet but that may be more to my unfamiliarity with ESPHome config syntax.

Edit: Well, well. I’ve managed to get the unit to turn on and off. ATM when I try to change the temp. it turns the unit off instead but that’s just something in the code I hacked together. I’m just delighted that much worked, and also confirmed I’m getting enough range from my IR led. More to come :slight_smile: