Help with ESPHome RF Receiver Configuration

Decoding 433MHz RF signals from a chicken door transmitter

I’m trying to decode the RF signals from a handheld transmitter (remote) for a chicken door I bought from Aliexpress, and then integrate it with my Home Assistant setup using ESPHome.

Issue

I’m experiencing two problems with my RF receiver setup:

  1. Initially, I was getting a continuous string of rolling responses in the logs even when I wasn’t pushing any buttons on the handheld transmitter. This suggests the receiver might be picking up random noise or interference.
  2. Now, I’m trying to detect when a button is pressed on my handheld transmitter, but I’m not seeing any response in the logs when I press buttons. I’ve verified:
  • The ESP32 is connected and operational (status shows online)
  • The RF receiver module is properly wired to GPIO33
  • The handheld transmitter has working batteries and its LED lights up when buttons are pressed

Important note: I’ve confirmed the handheld transmitter works properly. I purchased a commercial RF receiver unit from Aliexpress (https://www.aliexpress.com/item/1005007681100948.html) that successfully detects signals from this same transmitter. I can control the chicken door using the official app on my iPhone. This confirms my transmitter is functioning correctly, but my ESPHome setup isn’t detecting it.

Hardware Details

Hardware Details

this is a stripped down version of the basic code I’m using

esphome:
  name: rf-detector
  friendly_name: RF Detector

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:
  level: DEBUG
  logs:
    remote_receiver: DEBUG

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

api:

remote_receiver:
  pin: 
    number: GPIO33
    inverted: true
  filter: 8000us
  idle: 100ms
  tolerance: 25%
  
  on_raw:
    - lambda: |-
        ESP_LOGI("remote", "RF signal detected!");
        ESP_LOGI("remote", "Number of pulses: %d", x.size());
        
        std::string signal = "";
        for (int i = 0; i < std::min(10, (int)x.size()); i++) {
          signal += std::to_string(x[i]) + ", ";
        }
        if (x.size() > 10) signal += "...";
        ESP_LOGI("remote", "Signal pattern: %s", signal.c_str());

binary_sensor:
  - platform: status
    name: "RF Detector Status"

Questions

  1. How can I filter out the random noise/interference that was causing false detections?
  2. Are my ESPHome remote_receiver parameters appropriate for a 433MHz receiver?
  3. Do I need to add pull-up/pull-down resistors or additional components?
  4. Are there recommended troubleshooting steps to verify the receiver module is working correctly?
  5. Could the initial rolling responses and current lack of response be related issues?

Any help would be greatly appreciated. I’m trying to automate my chicken door using Home Assistant and just need to get past this initial RF signal detection hurdle.

Thank you!

Your post is very confusing, using terms like remote and controller.
To understand better use terms transmitter and receiver.
On your receiver component use
dump: all to see if signal gets decoded, if not, use dump: raw.

thank you for the clarification on remote and controller issue. I have tried to clear up the help post above but let me know if I haven’t succeeded and I’ll have another go. Here is the modified code again which includes the change you requested and the attached log file

I opened the cat door physical remote (transmitter) and did some photographs to reveal any numbering and found the following if this helps KXD089B-RF433-2/KEY-PCB-V04

esphome:
  name: catio-remote
  friendly_name: Catio Remote

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging for debugging
logger:
  level: DEBUG
  logs:
    remote_receiver: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_encryption_key

# OTA updates
ota:
  platform: esphome
  password: "2a6b651ce7fd146d53b8d00d8e6c07ac"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.55.53
    gateway: 192.168.55.1
    subnet: 255.255.255.0

# Remote receiver configuration for the 433MHz module
remote_receiver:
  pin: GPIO33  # The DATA pin from your receiver
  dump: raw    # Changed from 'all' to 'raw' to see raw signals
  filter: 200us
  idle: 10ms
  tolerance: 55%
  
  # Adding raw signal handler to see detailed pulse information
  on_raw:
    - lambda: |-
        ESP_LOGI("remote", "Received %d pulses:", x.size());
        std::string s = "";
        for (int i = 0; i < std::min(100, (int)x.size()); i++) {
          s += (x[i] > 0 ? "+" : "-");
          s += std::to_string(abs(x[i])) + " ";
        }
        ESP_LOGI("remote", "%s", s.c_str());

# Visual indicator for RF activity
binary_sensor:
  - platform: template
    name: "RF Activity"
    id: rf_activity
   
  - platform: status
    name: "Catio Remote Status"

# Door control switch
switch:
  - platform: template
    name: "Door Control"
    id: door_open
    optimistic: true

https://www.dropbox.com/scl/fi/8uxoqr5864dz0nf0f1x7x/logs_remote-mapper_logs.txt?rlkey=4vrz2p0rmjv2t8sn6ibhyytxk&st=0qgnaxsi&dl=0

Looks just junk that receiver is picking up. You should find some less polluted place to play with it.
So did you try with dump: all? Didn’t recognize any protocol?

I’ll move it away and try again. I didn’t recognise anything.

You bought a Sonoff RF bridge and it can pick up the signal?
Then flash that with ESPHome.

Sonoff RF Bridge is extremely easy to flash and they work extremely well at catching most RF signals.

Thanks for the reply. I thought the later versions were hard to flash? I assume the method you are talking about is the crack the box open and solder method.

It is the same as the previous one.
The difference is that you can not flash the radio chip with Portisch, which limit the spectrum of signals that it can receive.
You have however confirmed that it can receive the signal you need.

Opening the box is just removing the rubber feet and unscrew the screws.
A couple a dupont cables and a FTDI adapter or similar and you have it flash in a jif.