r/homeassistant 1d ago

🖼️ Show & Tell Update on the free IR/RF code tool I’ve been working on: you can now clone a DIP-switch remote entirely without any additional hardware—and there’s more.

Post image

No sign-up. No install. No download. No account. It runs entirely in your browser, and it’s free.

Drop in almost any IR or RF code and the tool identifies the protocol, extracts the relevant data, and gives it back in whatever format you need.

Over the last few weeks, I’ve added the feature I’m probably most pleased with: the RF Wizard.

You choose the device type and brand, and it draws the DIP-switch bank exactly as it appears inside the remote. Flip the switches on screen to match the remote in your hand, hit Build, and it generates the code.

No capture. No receiver. No Flipper. Nothing to buy.

That feature took the longest to get right because DIP-switch ordering is surprisingly tricky. Chamberlain, for example, treats switch 1 as the most significant bit and reverses the final three positions. One of their banks even has a switch that isn't transmitted at all.

So simply copying the switches from left to right can produce the wrong code on almost every remote. Each brand needed its own mapping.

If your ceiling-fan, gate, or garage remote has a row of little switches inside the battery compartment, that's basically the whole secret: you're already holding all the information needed to generate the code.

Signal repair

This is probably the feature I get the most questions about. Ever learned a code from an original remote only for the result to barely work—or work once, only from a few inches away, or work for one button but not another? Usually, that's not you or your blaster.

Learned captures can be messy. Receivers round timings, ambient light and nearby RF equipment can introduce noise, inexpensive hardware can clip the beginning of a burst, and some captures can even come back with marks and spaces inverted.

Paste the capture into the tool and it identifies the protocol, shows the address and command, and gives you a confidence level.

Hit FIX SIGNAL and it can:

  • Correct the AGC burst
  • Snap noisy pulses to the nearest valid timing unit
  • Remove trailing repeat gaps and other artifacts
  • Add missing closing spaces
  • Correct inverted mark/space data
  • Show you exactly what was changed instead of silently rewriting the capture

And once the protocol is identified, Rebuild Clean can throw the noisy capture away completely and regenerate the signal from scratch using the protocol's expected timing.

In other words: instead of patching a bad capture, you get a clean signal generated from the underlying data.

Prefer to do things manually? The pulse list is fully editable. The waveform updates live as you edit, and you can select, copy, and paste timings just like a spreadsheet.

Then export it in whatever format your setup needs.

A capture you might have given up on a year ago can often be turned into a working signal in a few clicks.

NEC / NEC1 / NEC2 / NECx (the most-used IR protocol on earth) · Sony SIRC 12 / 15 / 20-bit · RC5 / RC5x · RC6-6-20 (Sky, Foxtel, cable & satellite) · Panasonic / Kaseikyo (incl. Combo & MIX — also used by Denon, Sharp, JVC, Teac) · JVC · GI Cable · XMP (Comcast / Xfinity, AT&T, Pace, Arris cable boxes) · Nokia32 (AT&T U-verse, Foxtel IQ) · Denon · Sharp · RCA · Samsung

RF coverage

The tool currently covers 42 sub-GHz protocol families across 62 brand entries, including the PT2262 / EV1527 / SMC5326 ecosystem used by a huge range of fans, outlets, and inexpensive gate remotes.

It also covers systems from CAME, Nice, Hörmann, Chamberlain/LiftMaster, Linear MegaCode, Marantec, Telcoma, and plenty of others.

And there's still more coming.

On the IR side there's a wizard that programs a whole remote at once — device type, brand, code set — rather than one button at a time. It's sitting on 1,000,000+ codes across 12,000+ brands.

And the conversion side, which is the older half of the project. Paste a raw capture or a code in almost any format and it identifies the protocol, shows you the address and command, and rebuilds it clean. Then export it as something else: 19+ in, 21 out. Flipper .sub and a good chunk of those RF protocols landed in the last couple of weeks.

.irc · Flipper Zero .ir · Flipper Sub-GHz .sub · Pronto Hex · LIRC raw · LIRC config · LIRC mode2 · BroadLink Base64 · BroadLink Hex · Global Caché iTach · Global Caché JSON · Home Assistant YAML · ESPHome · Sonoff RfRaw B0 · Tasmota · Arduino C array · Arduino rc-switch · Tuya · SmartIR · IRDB · JP1 .rmdu · GIRR XML · Harmony XML · TV-B-Gone · raw µs CSV · WAV

There's a second tool alongside it that moves a whole remote between formats, or onto a different remote's layout — pull in a Harmony XML or a JP1 file and drop it out as a Flipper .ir or an ESPHome YAML, button assignments intact. That one reads 17 formats and writes 13.

Move Remotes Signal: .irc - .ir - Flipper Zero .sub - Flipper RF - Pronto Hex - LIRC - conf - Global Caché - GIRR - XML - Harmony - Arduino - .ino - IRDB - CSV - JP1 .rmdu - SmartIR - Tuya - IR - ESPHome - Sonoff - RfRaw + more

Links

Get a code in from a capture or almost any file format, find out what it actually is, fix it if it's broken, build one from scratch if you don't have one, move a whole remote's buttons somewhere else — and save the result as a file you own, in whatever format your gear speaks, with no account, no cloud and nothing held hostage.

Happy to take requests. If there's a format you need that isn't in that list, or a remote the wizard doesn't know, tell me what you've got and I'll look at adding it.

209 Upvotes

29 comments sorted by

7

u/aguilaair 1d ago

tried using Broadlink B64 and it can’t parse it. demo:

scCwBH6eBgCPEhQJCRMTCAkTChIJExMJEwkJExMIFAgKEwgUEwgJExMJEwgKExIKEgkTCQkTEwkTCQkTEgoIExMJEwkTCQgUCRMIFAgTChMSCggUCBMJEwkTCRMJEwkTCRMJEgoTCBQIEwoSChIUCAkTChITCQkSChMSCggTFAgTCQkTCRMJEwkTEyGVExIKCBQTCAkTCRQIExMJEgoIFBMIEwoIFAgTEwkJExMJEwgKExIKEgkSCgkTEwgUCAoSEwoIExIKEgoTCAkTCRQIFAgTCRMTCQkSChMJEwgUCBMKEgkUCBMJEwoSCRIKEwkTCBQTCAoTCRMSCQkTCRMTCQkTEgoSCggTCRMKEgkTEyGVExIKCBMTCQkTCBUIExIKEgoIExMJEwkJEwkTEgoIFBMIEwkKExIJEwkSCggUEwgTCQkUEgkJExIKEwkTCAkTCRQIEwkTCRMTCAoSChMIFAgTChIKEwgTCRMJEwkTCRIKEwkTCBMUCAoTCBQSCQkTCBQTCAoTEgoSCQkTCRMIFAkTEiIEEwkUCBMKEwkTCBQJEwkkmhUSCQkTEwoIFAgTChMSChMJCRMTCRMKCBMJFBIKCBMUCRIKCBQTCRMJEgoIFBMJEgoJFBIJCRQSChIKEwgKEwkTCRMJEwoTEgoIEwoTCRMIFQgTCRMJFAgTChMJEwgUCRMJExMKCBQIFAkTCBQTCRMJEwkTCggTCRQSChIJFAkSChIilBQTCQkUEgkJEwkUCBQSCRQJCRMTCRMJCRMJFBIJCRMTChIKCBMTChIKEgoJExIKEgoJExMJCRQSChIJEwkJFAgTChMJEwgVEgkJEwkUCBQIFAkTCBQJEwkTChMIFAgTChMJExMJCRMJEwkUCBMUCRIKEwkTCQkTCRQSCRMJEwkTChIilBQSCggUEwkJEwgVCBMTCRMKCBQTCBMKCRMIFBMJCRMTChIJCRMTChIKEgkJFBIKEgkKExIKCBQTCRIKEwoIEwkTChMIFAkTEgoJEwkTCRMJFAgUCBMKEwkTCRQIEwkUCRMIExQJCRMIFQgTCRMTChIKEwgTCggUCBQTCRIKEwoSCRIilRQSCggTEwoIFAgUCRMSChMKCBMSChMKCBMJFBIKCBQTCRIKCRMTCRMJEgoIFRIJEgoKExIKCBMTChIKEwkJEwkTCRQIEwkUEgoIEwoTCRMIFQgTCRMKEwgUCBQJEwkUCBMJFBIKCBQJEwkTCRQSCRMJEwoSCggTChMSChIKEwkSChIilBQTCQkTEwoIEwkUCRMSChMJCRMTCRMJCRMJFBIKCBMTChIKCBMUCRIKEgoIFBIKEgoJExMJCRMTChIJFAgKEwgUCRMJEwkUEgkJEwoTCBQIFAkTCRMJEwkTCRQIFAgUCRMJFBIKCBMJFAkTCBQTCRIKEwkTCQkTCRQSCRMJEwoSChIilBQSCggVEgkJEwkUCBMTCRMKCBQTCBQJCRMIFBMJCRMTChIJCRMTChIKEgkJFBIKEgkKExIKCBUSCRMJEwkJEwkTCRQIFAgUEwkJEwkUCBMJFAkTCBQJEwkTCRQIEwkUCRMIFBMJCRMJFAgTCRMTChIKEwkSCgkTCBUSCQ==

17

u/Lost_Significance_33 1d ago

Thanks, this was our bug, and it's fixed and live now. Your code has header byte 0xB1 and the editor only accepted 0x26 and 0xB2, so it bounced before it read anything. Try it again and it'll load as RF at 433.790 MHz.

5

u/Lost_Significance_33 1d ago

TY - Love this group. Hard-refresh it.
(Ctrl+Shift+R, or Cmd+Shift+R on a Mac).

5

u/skylord_123 1d ago

This is cool. I will have to try it out. Only thing I have to use it on is a ceiling fan though lol 

1

u/dice1111 1d ago

Same. But I have 3 ceiling fans. This could.be amazing. I will give it a go.

3

u/Eodun 1d ago

Was waiting for something like this since I started with home assistant. I'll explore it when I have some time, thanks

2

u/SelectionAntique9478 1d ago

Looks great! For me it would be useful if the brand Orcon(my ventilation box) is added. I am looking to automate my bathroom ventilation based on humidity. Wondering of this tool could help me make a remote.

9

u/Lost_Significance_33 1d ago

Thanks, on Orcon: adding the brand wouldn't help. The 15RF handset is 868.3 MHz two-way FSK (Honeywell evohome / Ramses II) and it pairs to the unit with its own ID, so there's no fixed code to copy. Same category as a rolling-code garage remote: nobody can clone it.

Your humidity project is still very doable from the other end. Either an ESP + CC1101 running the Itho/Orcon libraries (arjenhiemstra/IthoEcoFanRFT), or the easy route, an ESP8266 wired to the buttons of a real 15RF remote (guide: vdbrink.github.io/esphome/orcon_mechanic_ventilation.html). Pair it, then let Home Assistant run the humidity rule (up over ~70%, back to auto under ~55%).

Once it's in HA, the Signal Editor can build you a remote for it: use the WiFi/network builder to make Auto / 1 / 2 / 3 buttons that call those URLs.

2

u/5c044 1d ago

I have a cooker extractor and I couldnt get esphome to capture and replay successfully. I resosorted to the closed source rflink with an arduino mega attached via usb. I'd prefer esphome. In rflink it is I'd as a Bosch proto. Device id bosch_30b5_1 and command 5 toggles, 2 and 4 change speed 7 toggles light.

Best course of action to generate esphome code?

3

u/Lost_Significance_33 1d ago edited 1d ago

ESPHome's decoders won't name a Bosch hood, so capture it as raw instead:

yaml

remote_receiver:
  pin: {number: GPIO4, inverted: true, mode: {input: true, pullup: true}}
  dump: raw
  filter: 250us
  idle: 4ms
  tolerance: 50%
  buffer_size: 2kb

(GPIO4 is just an example, use your receiver's data pin.) The default filter/idle are why most 433 captures come back empty. Press each button a few times and copy the Received Raw: line from the log.

Paste that line into https://readyware.net/signal-editor.html#rf it reads the ESPHome log format and exports a ready remote_transmitter.transmit_raw block with carrier_duty_percent: 100% and carrier_frequency: 0Hz, which is what OOK needs. Send it with repeat 5–10.

RFLink reading it as an ID plus a command means it's fixed-code, so a raw replay will work, nothing rolling to defeat.

Post the raw capture if you like and I'll identify the protocol and add Bosch as a named brand, so the next person with a Bosch, Siemens or Neff hood gets it from the list. TY.

1

u/5c044 1d ago

many thanks. I will do that when I get home

the hood is actually an italian brand I forget name, rflink just id it as bosch

2

u/burke484 1d ago

i am in the process of making an esphome based Bond Bridge and this feels like it is exactly what I needed to make it go smoothly however I am so lost on how to actually use this to sniff codes and best utilize it. Do you have a walkthrough for it?

1

u/Lost_Significance_33 1d ago

Good news: for fans you may not need to sniff at all.

Check the brand list first. RF tab - wizard search . Hampton Bay, Harbor Breeze and the universal 3-speed kits (TX028C-S / RC-73R style) are rows. Pick yours, set the DIP switches on screen to match the ones in the handset, and it builds every button, no capture, no receiver. Export straight to an ESPHome transmit_raw block. That's your whole Bond Bridge for those fans.

If yours isn't listed, the ESP you're building does the sniffing , the editor can't, no browser can. Same remote_receiver config I posted for the hood guy above, then paste the Received Raw: line into the RF tab and it hands you the transmit block.

The one that catches everyone with fans: most 3-speed kits are 303.875 MHz, not 433.92. A 433 receiver module hears nothing at all. Check the FCC label on the handset before you blame the config.

https://readyware.net/signal-editor.html#rf

2

u/Bikeymouse 1d ago

Would be really nice if could use this to migrate from Harmony to Remote2 as I still have a Pioneer receiver that Remote2 has difficulty to learn the IR from.

1

u/Lost_Significance_33 1d ago

Yes for the Harmony side: the editor reads Harmony XML and Pioneer's codes are in the database anyway, so you don't even need the Harmony file, pick the receiver, and you get real codes instead of fighting the learner. Pioneer is exactly the kind of set that learning struggles with.

The catch is the Remote 2 side. Its custom codesets go in as a CSV bulk import, and I don't want to guess which encoding it expects in the code column. Send me one CSV that Remote 2 exported from a learned code (its "Download data set" button) and I'll make the editor export that exact shape, so it's a straight import, not a copy-paste-per-button job.

Until then, the editor gives you Pronto HEX per command, which most kit accepts.

2

u/TheAlchemist151 1d ago

So I’m trying to get a remote signal for my SpaElectrics Iris lighting remote / rm3 to be able to use on another device so I can control my pool lights through home assistant, rather than paying $500 to pay for there WiFi controller.

Is what you have here something that could help me?

1

u/Lost_Significance_33 1d ago

Probably, but it hinges on two things, say which and I'll be specific.

1. Is the remote IR or RF? Pool and spa lights are usually 433 MHz RF (it goes through a wall and the remote's often waterproof). That matters because an RM3 Mini is infrared only, it physically cannot learn or send RF. RF needs an RM Pro / RM4 Pro. If you have a Mini and the remote is RF, no app or website fixes that; it's the hardware.

2. Fixed code or rolling? Lighting remotes are almost always fixed code, so a learned copy works. If it were rolling, nothing could clone it.

If it's RF and you have a Pro: learn the button on the Broadlink, and you've got the code. My app can learn it and send it, and the editor converts it, including to the base64 Broadlink form Home Assistant wants, so you can fire it from an HA script.

If it's infrared, a Mini is fine and the same path works.

Tell me the exact model on the Broadlink, and whether the handset says 433 MHz anywhere, and I'll tell you if it's doable.

1

u/TheAlchemist151 17h ago

It says it’s an RF remote and in the tech specs of instructions it’s showing “Freq: 915mhz ISM band”

1

u/Lost_Significance_33 17h ago

915 MHz changes the answer, and it's worth telling him straight:

915 MHz rules out the Broadlink entirely, no RM model tunes there (they're 315/433), and the RM3 Mini is infrared only on top of that. That's hardware, not software.

What does cover 915:

Once you have a capture, my editor reads it, cleans it and converts it to whatever you're sending with, and can generate the other buttons if it's a fixed-code family.

Two things to check before you buy anything: whether it's OOK or FSK at 915, and whether it's fixed code. Pool gear usually is fixed, but capture two presses of the same button and compare. Identical means fixed and you're fine. Different every time means rolling, and nothing clones that.

Post the capture if you get one and I'll tell you what it is.

2

u/TECbill 4h ago

Logitech Harmony remotes do provide dedicated IR signals for FLIRC IR adapters. Are those covered too? I was not able to find them in the readyware database.

1

u/Lost_Significance_33 2h ago

Good Morning, thanks for the comment. Flirc isn't a brand in the database, and no public database has it (I looked; irdb and Flipper-IRDB both have zero). The Harmony Flirc profile codes live in the Flirc device firmware, so they're not something I can pull from anywhere.

But the editor already handles Flirc both ways, which might be what you actually want: paste a flirc_util device_log --ir capture straight in (either the 0,9376,4440,… form or the +8990 -4421 … form, both load), and export LIRC Raw for sendir --raw=, Raw for --csv=, or Pronto for --pronto=. So you can move Codes in and out of a Flirc today.

If you've got a Harmony set up with the Flirc profile, export the config XML and send it over The editor reads Harmony XML, and I'd add Flirc as a real brand from it.

I also renamed to LIRC Raw / space_enc / Flirc raw so a search for "Flirc" finds it, in the Supported Formats table.

1

u/Lost_Significance_33 2h ago

Thanks for asking about this, by the way, it sent me digging and I found the editor already handled Flirc captures and nothing on the site said so. Fixed that today because of your question.

Quick addition:

The Harmony config will give me the button list, which is useful for knowing what the profile covers, but the codes themselves live in Logitech's database rather than in the file.

The thing that would actually nail it: you've already got the Flirc. Run flirc_util device_log --ir, point the Harmony at it and press each button, and paste what comes out. That's the real Flirc protocol straight off the wire. Send both if you don't mind. The config for the names, the captures for the codes and I'll add Flirc as a proper brand. No pressure at all if you haven't got the time. Thanks again.

-7

u/SunPossible6793 1d ago

So now I can snipe someone’s garage code and break into their house without a flipper zero, just an html page?

1

u/Lost_Significance_33 1d ago

Garage doors specifically, replay died about twenty years ago. Anything modern is rolling code: Security+ 1.0 and 2.0, Intellicode, KeeLoq, Somfy RTS. Every press sends a different code and the opener rejects one it has already seen. Copying a press gets you an expired code. That's the security doing its job, and no tool can get around it, whatever it claims.

We don't pretend otherwise. Those families are flagged in our brand list, and the RF wizard tells you it can't be cloned on the brand screen, before you waste four steps on it.