CC1101 RF Transmitting

Hi All

I have been hitting my head against this for a couple of days and run out of ideas.

I have a cooker hood that uses a 433MHz remote to control it. I am trying to capture the RF from the remote and replay it back to allow Home Assistant to “press” the button. There are really only 3 buttons that I care about; Light, Fan Up and Fan Down and I am starting with just the Light. I have purchased a CC1101 dongle and connected it up to a ESP-WROOM-32 board that I had already

Im following the guide here for “Setting up RF Devices”

I seem to be able to receive data properly but am unable to retransmit it back (or at least, the device is not responding).

Connections are:
Signal----------ESP Pin------CC1101
SPI Clock-----GPIO18-------pin 5
MOSI-----------GPIO23------pin 6
MISO-----------GPIO19------pin 7
CS--------------GPIO5--------pin 4
Tx---------------GPIO21------pin 3
Rx---------------GPIO15------pin 8

My Yaml for ESPHome:

esphome:
  name: esphome-web-48921c
  friendly_name: RF Blaster
  min_version: 2025.5.0
  name_add_mac_suffix: false

esp32:
  board: esp32dev
  framework:
    type: esp-idf

# Enable logging

logger:
  baud_rate: 0
# Enable Home Assistant API
api:

# Allow Over-The-Air updates
ota:
- platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

spi:
  clk_pin: GPIO18
  mosi_pin: GPIO23
  miso_pin: GPIO19

cc1101:
   cs_pin: GPIO05
   frequency: 433.92MHz

remote_receiver:
  pin: GPIO15  # Must match GDO2
  dump: all
  tolerance: 50%
  filter: 250us
  idle: 4ms

remote_transmitter:
  pin: GPIO21
  # RF uses a 100% carrier signal
  carrier_duty_percent: 100%
  on_transmit: 
    then:
      - cc1101.begin_tx
  on_complete: 
    then:
      - cc1101.begin_rx

button:
  - platform: template
    name: RF Extractor Light
    on_press:
     - remote_transmitter.transmit_rc_switch_raw:
          code: '101101010011110101'
          protocol: 6
          repeat:
           times: 10
           wait_time: 0ms

When I press the button on the physical remote I get the following output:

[09:08:22.790][I][remote.canalsat:102]: Received CanalSat: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.790][I][remote.canalsatld:099]: Received CanalSatLD: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.790][I][remote.pronto:232]: Received Pronto: data=
[09:08:22.790][I][remote.pronto:240]: 0000 006D 0013 0000 000D 001D 000C 000F 001B 001D 000D 001C 000D 000F 001B 001C 000D 000E 001B 001C 000D 000F 001B 000E 001B 001C 000C 001D 000D 001D 000D 001C 000C 000F 001B 001D 000C 000F 001A 001D 000C 009B 
[09:08:22.790][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='101101010011110101'
[09:08:22.826][I][remote.canalsat:102]: Received CanalSat: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.826][I][remote.canalsatld:099]: Received CanalSatLD: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.826][I][remote.pronto:232]: Received Pronto: data=
[09:08:22.826][I][remote.pronto:240]: 0000 006D 0013 0000 000E 001C 000C 000F 001B 001C 000C 001D 000D 000F 001A 001C 000D 000E 001B 001C 000D 000E 001B 000F 001B 001C 000D 001C 000D 001C 000D 001D 000C 000F 001B 001D 000C 000F 001B 001D 000D 009B 
[09:08:22.842][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='101101010011110101'
[09:08:22.842][I][remote.canalsatld:099]: Received CanalSatLD: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.842][I][remote.pronto:232]: Received Pronto: data=
[09:08:22.842][I][remote.pronto:240]: 0000 006D 0013 0000 000E 001C 000C 000F 001B 001C 000D 001D 000C 000F 001B 001D 000D 000E 001C 001C 000C 000F 001B 000E 001C 001C 000C 001D 000E 001C 000D 001C 000C 000F 001B 001D 000C 000F 001B 001C 000C 009B 
[09:08:22.865][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='101101010011110101'
[09:08:22.934][I][remote.canalsatld:099]: Received CanalSatLD: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.934][I][remote.pronto:232]: Received Pronto: data=
[09:08:22.934][I][remote.pronto:240]: 0000 006D 0013 0000 000E 001B 000D 000F 001B 001C 000E 001C 000C 000F 001B 001C 000E 000E 001B 001D 000D 000E 001B 000E 001B 001C 000D 001C 000D 001C 000D 001C 000D 000E 001B 001C 000D 000F 001B 001D 000D 009B 
[09:08:22.934][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='101101010011110101'
[09:08:22.934][I][remote.canalsat:102]: Received CanalSat: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.934][I][remote.canalsatld:099]: Received CanalSatLD: device=0x11, address=0x09, command=0x04, repeat=0x1
[09:08:22.934][I][remote.pronto:232]: Received Pronto: data=
[09:08:22.958][I][remote.pronto:240]: 0000 006D 0013 0000 000D 001C 000D 000F 001B 001D 000C 001C 000D 000F 001B 001C 000D 000E 001B 001D 000D 000E 001B 000E 001B 001C 000D 001C 000C 001D 000C 001D 000E 000E 001B 001C 000C 000F 001B 001C 000D 009B 
[09:08:22.958][I][remote.rc_switch:261]: Received RCSwitch Raw: protocol=6 data='101101010011110101'

When I take the RCSwitch data from there and try to replay it, I dont get any reaction from the end device.
I have tried different repeats, wait times (10ms increments up to 100ms), tried capturing and replaying it raw but still no response. Every example I have found in the forums seems to match my YAML as well.
I am not sure what else to try at this point. Any suggestions?

There are a couple of things confusing me though:

  1. I am unsure why I am getting CanalSat, Pronto etc as well. I also dont know if that matters or not!
  2. In the example I linked, the log for the receive just states “Received RCSwitch” when mine states “Received RCSwitch Raw”. Also not sure if that matters.

Thanks in advance!

Try what you get with this and post the output.

remote_receiver:
  pin: GPIO15  # Must match GDO2
  dump: raw
  #tolerance: 50%
  filter: 100us
  idle: 30ms

Hi

Here is what I get:

[12:11:36.765][I][remote.raw:027]: Received Raw: 400, -723, 313, -389, 688, -745, 340, -728, 349, -365, 710, -721, 337, -396, 692, -720, 366, -342, 732, -353, 718, -710, 348, -740, 339, -735, 342, -723, 344, -362, 721, -718, 364, -335, 735, -709, 370, -15640, 378, -715, 369, -336, 733, 
[12:11:36.765][I][remote.raw:027]:   -699, 365, -699, 389, -342, 715, -716, 365, -339, 732, -709, 371, -340, 735, -341, 732, -691, 366, -708, 389, -693, 357, -716, 360, -345, 732, -712, 368, -346, 743, -693, 368, -15637, 396, -716, 328, -387, 702, -723, 333, -744, 337, -362, 707, -744, 
[12:11:36.765][I][remote.raw:027]:   340, -373, 713, -697, 365, -360, 710, -366, 723, -698, 360, -718, 355, -717, 365, -722, 363, -345, 716, -722, 366, -342, 733, -705, 371, -15645, 379, -704, 363, -333, 732, -720, 363, -708, 367, -345, 740, -700, 364, -340, 732, -694, 366, -371, 721, 
[12:11:36.765][I][remote.raw:027]:   -340, 732, -713, 361, -700, 386, -692, 359, -717, 365, -350, 722, -714, 357, -345, 730, -722, 365, -15633, 394, -714, 338, -366, 705, -722, 361, -723, 327, -387, 704, -723, 336, -370, 717, -714, 368, -341, 730, -356, 716, -722, 344, -716, 364, -707, 
[12:11:36.771][I][remote.raw:036]:   368, -709, 375, -338, 735, -722, 338, -370, 714, -725, 351

Just updated the transmit to send that raw and it worked first time! Light came on immediately.

Thank you so much for your help.

1 Like

Looks clean enough.
Try to replicate it :

- remote_transmitter.transmit_raw:
    code: [378, -715, 369, -336, 733, -699, 365, -699, 389, -342, 715, -716, 365, -339, 732, -709, 371, -340, 735, -341, 732, -691, 366, -708, 389, -693, 357, -716, 360, -345, 732, -712, 368, -346, 743, -693, 368, -15637]
    repeat:
      times: 5
      wait_time: 0s

That works great!

Managed to get all the other buttons working the same way.
Thank you so much!

You’re welcome.
Interesting signal by the way, it doesn’t have just 0 and 1, it’s quaternary.
Could never be decoded by esphome protocols.

Thats bizare!

Its a Elica Skydome extractor hood. The remotes are individually paired to the hood.
Love the look of it but the wifi control is flaky and keeps dropping. Was a fudge to get it into home assistant that way. This is much better!