8 hours ago
Hello,
I am trying to integrate a new N10 board with ESPHome (v2026.8.0) and Home Assistant. After extensive testing I have isolated the problem precisely and hope someone who has successfully set up an N10 with ESPHome can help, or that KinCony staff can clarify some undocumented behaviour.
Board: KinCony N10 (ESP32-S3-WROOM-1U N16R8, 16MB flash)
ESPHome version: 2026.8.0
Chip: Freshly erased with esptool before first flash
SYMPTOM
ESPHome's modbus_controller never transmits a single request to the BL0910 ARM CPU. The UART RX line (GPIO10) is flooded with data from the moment power is applied, before ESPHome sends anything. Because ESPHome's Modbus component sees a perpetually busy bus, its frame-guard logic refuses to ever transmit. Every log shows thousands of "Clearing buffer of 2 bytes — timeout after partial response" messages and zero TX lines.
DIAGNOSTIC STEPS COMPLETED
1. Bare UART only (no modbus: component)
RX line completely silent for 60+ seconds. Confirmed the ARM CPU does NOT stream data unprovoked.
2. modbus: component, slave address 1, 115200 baud (ESPHome Devices reference config)
Continuous noise on RX, zero TX ever logged.
3. modbus: component, slave address 100, 38400 baud (per KinCony's own protocol document)
Same continuous noise, BUT real data bursts appeared embedded in the RX stream. This is the only configuration where the ARM CPU visibly responds — confirmed it is responding to address 100, not address 1.
4. All baud rates tested: 9600, 19200, 38400, 115200 with slave address 100.
Best results at 38400 (real data bursts visible). Other baud rates produce background patterns consistent with framing mismatch.
5. Boot drain lambda (on_boot reads and discards all RX bytes before modbus_controller initialises)
No effect, TX still never appears.
WHAT I BELIEVE IS HAPPENING
When ESPHome's modbus: component initialises, something causes the ARM CPU to enter a continuous streaming state. Once streaming starts, ESPHome can never transmit. Without the modbus: component, the ARM CPU stays completely quiet.
QUESTIONS
1. Does the N10 ARM CPU require the KCS factory firmware to run first and perform an initialisation before it will behave as a standard Modbus RTU slave? Has anyone successfully used ESPHome on a freshly-erased N10?
2. Can anyone confirm the correct slave address? Our testing points to 100, not 1 as shown in the ESPHome Devices reference config.
3. Can anyone confirm the correct baud rate? KinCony's protocol document says 38400; the ESPHome Devices reference says 115200. Our best results were at 38400.
4. Is there a known way to suppress the ARM CPU's startup streaming from ESPHome, so the Modbus component can get its first request out?
MINIMAL REPRODUCING CONFIG
Any help appreciated. Thank you.
I am trying to integrate a new N10 board with ESPHome (v2026.8.0) and Home Assistant. After extensive testing I have isolated the problem precisely and hope someone who has successfully set up an N10 with ESPHome can help, or that KinCony staff can clarify some undocumented behaviour.
Board: KinCony N10 (ESP32-S3-WROOM-1U N16R8, 16MB flash)
ESPHome version: 2026.8.0
Chip: Freshly erased with esptool before first flash
SYMPTOM
ESPHome's modbus_controller never transmits a single request to the BL0910 ARM CPU. The UART RX line (GPIO10) is flooded with data from the moment power is applied, before ESPHome sends anything. Because ESPHome's Modbus component sees a perpetually busy bus, its frame-guard logic refuses to ever transmit. Every log shows thousands of "Clearing buffer of 2 bytes — timeout after partial response" messages and zero TX lines.
DIAGNOSTIC STEPS COMPLETED
1. Bare UART only (no modbus: component)
RX line completely silent for 60+ seconds. Confirmed the ARM CPU does NOT stream data unprovoked.
2. modbus: component, slave address 1, 115200 baud (ESPHome Devices reference config)
Continuous noise on RX, zero TX ever logged.
3. modbus: component, slave address 100, 38400 baud (per KinCony's own protocol document)
Same continuous noise, BUT real data bursts appeared embedded in the RX stream. This is the only configuration where the ARM CPU visibly responds — confirmed it is responding to address 100, not address 1.
4. All baud rates tested: 9600, 19200, 38400, 115200 with slave address 100.
Best results at 38400 (real data bursts visible). Other baud rates produce background patterns consistent with framing mismatch.
5. Boot drain lambda (on_boot reads and discards all RX bytes before modbus_controller initialises)
No effect, TX still never appears.
WHAT I BELIEVE IS HAPPENING
When ESPHome's modbus: component initialises, something causes the ARM CPU to enter a continuous streaming state. Once streaming starts, ESPHome can never transmit. Without the modbus: component, the ARM CPU stays completely quiet.
QUESTIONS
1. Does the N10 ARM CPU require the KCS factory firmware to run first and perform an initialisation before it will behave as a standard Modbus RTU slave? Has anyone successfully used ESPHome on a freshly-erased N10?
2. Can anyone confirm the correct slave address? Our testing points to 100, not 1 as shown in the ESPHome Devices reference config.
3. Can anyone confirm the correct baud rate? KinCony's protocol document says 38400; the ESPHome Devices reference says 115200. Our best results were at 38400.
4. Is there a known way to suppress the ARM CPU's startup streaming from ESPHome, so the Modbus component can get its first request out?
MINIMAL REPRODUCING CONFIG
Code:
esphome:
name: n10-test
esp32:
board: esp32-s3-devkitc-1
variant: esp32s3
framework:
type: arduino
logger:
hardware_uart: USB_SERIAL_JTAG
api:
ethernet:
type: W5500
clk_pin: GPIO42
mosi_pin: GPIO43
miso_pin: GPIO44
cs_pin: GPIO41
interrupt_pin: GPIO2
reset_pin: GPIO1
uart:
id: uart_bl0910
tx_pin: GPIO9
rx_pin: GPIO10
baud_rate: 38400
stop_bits: 1
data_bits: 8
parity: NONE
debug:
direction: BOTH
modbus:
uart_id: uart_bl0910
modbus_controller:
- id: energy_meter
address: 100
update_interval: 30s
sensor:
- platform: modbus_controller
modbus_controller_id: energy_meter
address: 162
register_type: holding
name: "Line Voltage"
unit_of_measurement: V
value_type: U_WORD
filters:
- multiply: 0.01Any help appreciated. Thank you.

