06-10-2025, 05:23 PM
Hello,
I'm using the Kincony F-24 controller and trying to get the built-in 433MHz receiver working under ESPHome.
I get the following error:
Below is part of my ESPHome YAML configuration:
My questions:
I'm using the Kincony F-24 controller and trying to get the built-in 433MHz receiver working under ESPHome.
I get the following error:
Code:
[15:27:57][C][remote_receiver.esp32:161]: Remote Receiver:
[15:27:57][C][remote_receiver.esp32:162]: Pin: GPIO40
[15:27:57][C][remote_receiver.esp32:173]: Channel: 0
[15:27:57][C][remote_receiver.esp32:174]: RMT memory blocks: 3
[15:27:57][C][remote_receiver.esp32:175]: Clock divider: 80
[15:27:57][C][remote_receiver.esp32:178]: Tolerance: 25%
[15:27:57][C][remote_receiver.esp32:179]: Filter out pulses shorter than: 50 us
[15:27:57][C][remote_receiver.esp32:180]: Signal is done after 10000 us of no changes
[15:27:57][E][remote_receiver.esp32:183]: Configuring RMT driver failed: ESP_ERR_INVALID_ARG (in rmt_config)
[15:27:57][E][component:085]: Component remote_receiver is marked FAILEDBelow is part of my ESPHome YAML configuration:
Code:
esphome:
name: f24
friendly_name: "Kincony F24 Controller"
project:
name: kincony.f24-smart-home
version: "1.0"
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
id: ha_api
encryption:
key: !secret
ota:
platform: esphome
password: !secret
ethernet:
type: W5500
clk_pin: GPIO42
mosi_pin: GPIO43
miso_pin: GPIO44
cs_pin: GPIO41
interrupt_pin: GPIO2
reset_pin: GPIO1
domain: .local
id: ethernet_interface
web_server:
port: 80
i2c:
- id: bus_a
sda: GPIO8
scl: GPIO18
scan: true
frequency: 400kHz
pcf8574:
- id: 'pcf8574_outputs_9_24'
i2c_id: bus_a
address: 0x25
- id: 'pcf8574_inputs_1_16'
i2c_id: bus_a
address: 0x24
- id: 'pcf8574_outputs_1_8_inputs_17_24'
i2c_id: bus_a
address: 0x26
globals:
- id: current_ip_address
type: std::string
restore_value: no
initial_value: '"Booting..."'
- id: ha_status_text
type: std::string
restore_value: no
initial_value: '"Offline"'
- id: rf_code_display
type: std::string
restore_value: no
initial_value: '""'
- id: click_counts
type: int
initial_value: '0'
# Sekcja definiująca fizyczne wyjścia (przekaźniki)
output:
- platform: gpio
id: output_wiatrolap
pin: { pcf8574: pcf8574_outputs_1_8_inputs_17_24, number: 12, mode: OUTPUT, inverted: true }
- platform: gpio
id: output_salon
pin: { pcf8574: pcf8574_outputs_1_8_inputs_17_24, number: 13, mode: OUTPUT, inverted: true }
binary_sensor:
- platform: status
name: "Kincony F24 Status"
id: f24_status_ha
- platform: template
name: "Kincony F24 Ethernet Status"
id: ethernet_connected_status
lambda: |-
return id(ethernet_interface).is_connected();
on_press:
then:
- lambda: |-
id(current_ip_address) = id(ethernet_interface).get_ip_addresses()[0].str();
id(ha_status_text) = "ETH OK";
ESP_LOGI("ethernet", "Ethernet connected. IP: %s", id(current_ip_address).c_str());
on_release:
then:
- lambda: |-
id(current_ip_address) = "AP Mode";
id(ha_status_text) = "AP Mode";
ESP_LOGW("ethernet", "Ethernet disconnected. Activating AP mode.");
- platform: template
id: wifi_ap_active
name: "Kincony F24 WiFi AP Active"
internal: true
lambda: |-
return !id(ethernet_interface).is_connected();
- platform: gpio
name: "Włącznik Wiatrołap"
pin:
pcf8574: pcf8574_inputs_1_16
number: 0
inverted: true
filters:
- delayed_on: 10ms
on_press:
then:
- lambda: 'id(click_counts) = 0;'
on_multi_click:
- timing:
- ON for at most 600ms
- OFF for at most 600ms
- ON for at most 600ms
- OFF for at least 200ms
then:
- homeassistant.event:
event: esphome.wiatrolap_double_click
data:
input: "1"
- logger.log: "Włącznik Wiatrołap: Dwuklik"
- timing:
- ON for at most 600ms
- OFF for at least 351ms
then:
- light.toggle: light_wiatrolap
- logger.log: "Wlacznik Wiatrołap: Pojedynczy klik"
- platform: gpio
name: "Włącznik Salon"
pin:
pcf8574: pcf8574_inputs_1_16
number: 1
inverted: true
filters:
- delayed_on: 10ms
on_press:
then:
- lambda: 'id(click_counts) = 0;'
on_multi_click:
- timing:
- ON for at most 600ms
- OFF for at most 600ms
- ON for at most 600ms
- OFF for at least 200ms
then:
- homeassistant.event:
event: esphome.salon_double_click
- logger.log: "Włącznik Salon: Dwuklik"
- timing:
- ON for at most 600ms
- OFF for at least 351ms
then:
- light.toggle: light_salon
- logger.log: "Wlacznik Salon: Pojedynczy klik"
# Sekcja definiująca logiczne encje świateł
light:
- platform: binary
name: "Wiatrołap"
id: light_wiatrolap
output: output_wiatrolap
- platform: binary
name: "Salon"
id: light_salon
output: output_salon
#normal version for RF receiver - not working
#remote_receiver:
# pin:
# number: GPIO40
# inverted: true
# dump:
# - rc_switch
# tolerance: 50%
# filter: 250us
# idle: 4ms
# buffer_size: 2kb
# on_rc_switch:
# then:
# - logger.log:
# format: "RC Switch received. Code: %u"
# args: [ 'x.code' ]
# - lambda: |-
# id(rf_code_display) = "RC: " + to_string(x.code);
# - homeassistant.event:
# event: esphome.f24_rf_received
# data:
# code: !lambda 'return x.code;'
# Minimal version for testing - not working
remote_receiver:
pin:
number: GPIO40
inverted: true
dump: rc_switch
button:
- platform: restart
name: "Kincony F24 Restart"
font:
- file: "gfonts://Roboto"
id: roboto_12
size: 12
- file: "gfonts://Roboto"
id: roboto_10
size: 10
display:
- platform: ssd1306_i2c
id: oled_display
model: "SSD1306 128x64"
address: 0x3C
i2c_id: bus_a
update_interval: 2s
pages:
- id: page1
lambda: |-
it.strftime(0, 0, id(roboto_10), "%H:%M:%S", id(homeassistant_time).now());
it.print(0, 12, id(roboto_12), id(current_ip_address).c_str());
it.print(0, 28, id(roboto_12), id(ha_status_text).c_str());
if (!id(rf_code_display).empty()) {
it.print(0, 44, id(roboto_12), id(rf_code_display).c_str());
}
it.horizontal_line(0, 57, 128);
it.printf(0, 58, id(roboto_10), "F24 Controller");;
time:
- platform: homeassistant
id: homeassistant_time
on_time:
- seconds: 0
minutes: 0
then:
- logger.log: "Synchronizing time with Home Assistant."
interval:
- interval: 5s
then:
- lambda: |-
if (id(ethernet_interface).is_connected()) {
id(current_ip_address) = id(ethernet_interface).get_ip_addresses()[0].str();
if (id(f24_status_ha).state) {
id(ha_status_text) = "ETH HA OK";
} else {
id(ha_status_text) = "ETH OK";
}
} else if (id(wifi_ap_active).state) {
id(current_ip_address) = "AP: 192.168.4.1";
id(ha_status_text) = "AP Mode";
} else {
id(current_ip_address) = "No Network";
id(ha_status_text) = "Offline";
}
sensor:
- platform: adc
pin: GPIO5
name: "F24 A1 Voltage"
update_interval: 60s
attenuation: 12db
- platform: adc
pin: GPIO7
name: "F24 A2 Voltage"
update_interval: 60s
attenuation: 12db
- platform: adc
pin: GPIO6
name: "F24 A3 Current"
update_interval: 60s
unit_of_measurement: mA
attenuation: 12db
filters:
- multiply: 6.66666666
- platform: adc
pin: GPIO4
name: "F24 A4 Current"
update_interval: 60s
unit_of_measurement: mA
attenuation: 12db
filters:
- multiply: 6.66666666My questions:
- Is the 433MHz receiver really connected to native GPIO40 of the ESP32?
- Is this GPIO compatible with the RMT hardware required by remote_receiver in ESPHome?
- Could the RF receiver be connected via an I²C expander (like PCF8574), or is it mapped internally in another way?


