HumanSkunk
(Human Skunk)
January 10, 2026, 2:07pm
21
When did yours stop working? Was it over Christmas or earlier? And can you pin point it to a specific release?
I do think its partly down to the board as the fact I got one of them working again, but the fact it isnt repeatable means there is something odd with how the ESP8266 board is operating or dealing with UART.
It is just oddly suspicious that it impacted your 3 boards and my 2 boards at the same time…
unhuzpt
(Unhuzpt)
January 10, 2026, 2:14pm
22
And several other people posted the very same issue and no response/support.
I may be wrong but it was around I think November 2025.
I just ignored and we used the wall switch as I had no time for this.
I have one in the WC, another in the Kitchen and the third has not been ever connected until I got the issue with the other 2.
So still I can not believe is a hardware issue.
In my case I use the Seeedstudio Kit so all of them use:
XIAO ESP32C3
MR24HPC1
I also had the most incredible thing that was after several tried one worked but just for 1 boot. I figured is fixed, moved it to the kitchen and…
Not working anymore.
So…
HumanSkunk
(Human Skunk)
January 10, 2026, 2:27pm
23
Did you ever replace them with anything or just left them not working for the time being?
The light in the bathroom is fine as I can control it with the switch but the kitchen cabinet lights don’t have one as they were controlled with a relay also connected to the same board I pulled out, so they are currently unusable until I find a fix.
I wonder if there is an update to the mmWave sensor such as a firmware update or something.
EDIT: Just looked on the Seeed website and what is listed is over 3 years old so my guess it hasnt had any updates in the interim. I am tempted to cut my losses with these sensors and try something new when they turn up, dont really want to spend the next few days repeating the same steps over and over and getting different results.
unhuzpt
(Unhuzpt)
January 10, 2026, 2:43pm
24
So far did not replace because just now had time to come to foruns and raise the issue. Can not be devices/sensors issues, must be something in ESPHome, a breaking change.
These sensors work flawless and never had any issue until now as you and many others.
Going to open a ticket in Seedstudio to try to get to the root cause.
If you really want to move on, use a LD2450 - simple, cheap and reliable.
HumanSkunk
(Human Skunk)
January 10, 2026, 3:19pm
25
Said I wasnt going to, but to satisfy my curiosity I did another couple of tests. I moved the currently working mmWave board and connected it to the ESP8266 in the downstairs bathroom. No response back from the controller. Same issue as I had at the very beginning of this thread.
Ok, let’s move the sensor back to the test board that was working, and also nothing. Also tried the new sensor on the old board and still nothing. Below are the lists of tests I have tried, noting despite everything in test 7 & 10 being the same I got the different results.
Old Sensor 1 - Old Board 1 - Old Config - Didn’t work
Old Sensor 2 - Old Board 2 - Old Config - Didn’t work
Old Sensor 1 - Test Board - Old Config - Didn’t work
New Sensor - New Board - Old Config - Didn’t work
New Sensor - New Board - New Config - Didn’t work
Old Sensor 1 - Old Board - New Config - Didn’t work
Old Sensor 1 - New Board - New Config - Works
Old Sensor 1 - Old Board 1 - New Config - Didn’t work
Old Sensor 1 - Old Board 2 - New Config - Didn’t work
Old Sensor 1 - New Board - New Config - Didn’t work
New Sensor - Old Board 2 - New Config - Didn’t work
So on that I am just going to give up with this. I am going to drive myself mad repeating the same thing over and over again expecting a different result and put this down to a combination of dodgy sensors that haven’t been updated in a number of years with ESPHome changes. I dont have anything else to support the latter. Annoying that I do have 5 of these…
1 Like
unhuzpt
(Unhuzpt)
January 10, 2026, 3:41pm
26
The sensors are not updated but they were working PERFECT until some update ruin them.
Would be really great if ESPHome devs could support people on this.
Tomorrow morning I will try a deep dive.
Karosm
(Karosm)
January 10, 2026, 6:54pm
27
You really should focus on this. Devices are or are not updated? It can’t be somewhere in the middle…
unhuzpt
(Unhuzpt)
January 10, 2026, 10:06pm
28
Hey there
I was referring to the comment "EDIT: Just looked on the Seeed website and what is listed is over 3 years old so my guess it hasnt had any updates in the interim. I am tempted to cut my losses "
Agreed the latest firmware is “old” from Seeedstudio and even the kits I own are discontinued. But this does not mean anything to our discussion. Could be “old” but was working perfect until I believe November.
I lack the tech skills to properly troubleshoot the issue but I am willing to do so If some support is available.
The facts are:
something broke it and several people report the same since the same date
all have the same issue - the sensor stopped sending data
the esp+sensor were not touched or yaml changed - at least i can speak for me
wife is upset
HumanSkunk
(Human Skunk)
January 10, 2026, 10:34pm
29
My point you quoted is that there doesn’t seem to be any updated firmware from Seeed for these devices. I use another mmWave on my Everything Presence Lite and that needed a firmware update to improve reliability.
I’m not saying it is the reason it doesn’t work, but it could be a factor if there is a hardware issue that could’ve sorted with a firmware fix.
It might also be caused by some change with ESPHome but there doesn’t seem to be a fix for that easier.
I have just lost my patience with them. They have worked flawlessly but none currently do. If you have any success debugging let me know and I can see if I can replicate, else I might just try resort to the new sensors I bought when they arrive.
The mystery continues.
I would adjust the title of this thread to include MR24HPC1 and exclude UART (Since I think that is now ruled out?).
If it is software issues then we should get a few more find this thread and confirm the symptoms.
I would say if you get one more person who has similar symptoms then raise an ESPHome issue.
There is only one open issue for that component.
Apparently you can test your sensor independantly of your ESP. I would try that if you still have any debug juice left:)
opened 08:27AM - 03 Aug 25 UTC
component: seeed_mr24hpc1
### The problem
When trying to use the seeed_mr24hpc1 component, I get compilat… ion errors - see below
I also tried using an ESP32-C6 (with appropriately adjusted yaml) and got a waaaay longer list of compile errors...
### Which version of ESPHome has the issue?
2025.7.4
### What type of installation are you using?
Home Assistant Add-on
### What platform are you using?
ESP8266
### Component causing the issue
seeed_mr24hpc1
### YAML Config
```yaml
esphome:
name: bnl2
friendly_name: BNL2
esp8266:
board: d1_mini
logger:
baud_rate: 0
api:
ota:
- platform: esphome
password: "397a868b564ea45b9cde97637dbe60bd"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.1.247
gateway: 192.168.1.1
subnet: 255.255.255.0
ap:
ssid: "Bnl2 Fallback Hotspot"
password: "OalMgpBTap6f"
captive_portal:
web_server:
uart:
id: uart_mmwave
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 115200
seeed_mr24hpc1:
id: mmwave_hub
uart_id: uart_mmwave
binary_sensor:
- platform: seeed_mr24hpc1
has_target:
name: "Presence Information"
```
### Anything in the logs that might be useful for us?
```txt
INFO ESPHome 2025.7.4
INFO Reading configuration /config/esphome/bnl2.yaml...
INFO Detected timezone 'Europe/Berlin'
INFO Generating C++ source...
INFO Compiling app...
Processing bnl2 (board: d1_mini; framework: arduino; platform: platformio/[email protected] )
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
Dependency Graph
|-- ESPAsyncTCP @ 2.0.0
|-- ESP8266WiFi @ 1.0
|-- ESPAsyncWebServer @ 3.7.10
|-- DNSServer @ 1.1.1
|-- ESP8266mDNS @ 1.2
|-- ArduinoJson @ 7.4.2
Compiling .pioenvs/bnl2/src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp.o
Compiling .pioenvs/bnl2/src/esphome/components/template/text_sensor/template_text_sensor.cpp.o
Compiling .pioenvs/bnl2/src/esphome/components/text_sensor/filter.cpp.o
Compiling .pioenvs/bnl2/src/esphome/components/text_sensor/text_sensor.cpp.o
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp: In member function 'void esphome::seeed_mr24hpc1::MR24HPC1Component::r24_frame_parse_open_underlying_information_(uint8_t*)':
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:437:21: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'existence_boundary_select_'
437 | } else if ((this->existence_boundary_select_ != nullptr) &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:439:15: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'existence_boundary_select_'
439 | if (this->existence_boundary_select_->has_index(data[FRAME_DATA_INDEX] - 1)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:440:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'existence_boundary_select_'
440 | this->existence_boundary_select_->publish_state(S_BOUNDARY_STR[data[FRAME_DATA_INDEX] - 1]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:442:21: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'motion_boundary_select_'
442 | } else if ((this->motion_boundary_select_ != nullptr) &&
| ^~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:444:15: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'motion_boundary_select_'
444 | if (this->motion_boundary_select_->has_index(data[FRAME_DATA_INDEX] - 1)) {
| ^~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:445:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'motion_boundary_select_'
445 | this->motion_boundary_select_->publish_state(S_BOUNDARY_STR[data[FRAME_DATA_INDEX] - 1]);
| ^~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp: In member function 'void esphome::seeed_mr24hpc1::MR24HPC1Component::r24_frame_parse_work_status_(uint8_t*)':
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:519:16: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
519 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:519:57: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
519 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:520:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
520 | this->scene_mode_select_->publish_state(S_SCENE_STR[data[FRAME_DATA_INDEX]]);
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:542:16: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
542 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:542:57: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
542 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:543:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
543 | this->scene_mode_select_->publish_state(S_SCENE_STR[data[FRAME_DATA_INDEX]]);
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp: In member function 'void esphome::seeed_mr24hpc1::MR24HPC1Component::r24_frame_parse_human_information_(uint8_t*)':
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:582:21: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'unman_time_select_'
582 | } else if ((this->unman_time_select_ != nullptr) &&
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:586:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'unman_time_select_'
586 | this->unman_time_select_->publish_state(S_UNMANNED_TIME_STR[data[FRAME_DATA_INDEX]]);
| ^~~~~~~~~~~~~~~~~~
Compiling .pioenvs/bnl2/src/esphome/components/time/automation.cpp.o
*** [.pioenvs/bnl2/src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp.o] Error 1
========================== [FAILED] Took 8.28 seconds ==========================
```
### Additional information
_No response_
limengdu on that thread seems to be the code owner.
unhuzpt
(Unhuzpt)
January 11, 2026, 8:37am
31
Hey there
So after spent some time looking into this seems that the ESPHome version after 2025/10 has implemented changes to the class members and variables definitions from previous versions, I would say probably to get more free space on the device memory and standardization… maybe.
So, based on my install and config I find that:
seeed_mr24hpc1.cpp expects many member variables like:
custom_mode_number
scene_mode_select
product_model_text_sensor
movement_signs_sensor
and more…
Those members are declared in the header only if certain config options exist in ESPHome ≥ 2025.11, the component seems to have been partially refactored so resulting in CPP file references members that are no longer declared.
One solution could be to setup a specific external component but this would probably be broken again in further updates of ESPHome.
Possible solution:
Ask Seeedstudio to update the files for the sensor to align with recent ESPHome versions and align with ESPHome devs to keep it supported.
Ask ESPHome devs to maintain support for these devices.
IOT7712
January 11, 2026, 9:11am
33
Just an idea: Have you tried esp-idf for the framework?
I do note the relevant code was updated on GitHub two months ago. For process of elimination, roll back to an earlier release such as September and verify the problem is actually software and not hardware. I strongly recommend you clear your ESPHome cache before attempting a compile with an older version of ESPHome so you do not get a corruption of old and new files.
Perhaps it relates to this?
I haven’t followed the crumbs.
opened 08:27AM - 03 Aug 25 UTC
component: seeed_mr24hpc1
### The problem
When trying to use the seeed_mr24hpc1 component, I get compilat… ion errors - see below
I also tried using an ESP32-C6 (with appropriately adjusted yaml) and got a waaaay longer list of compile errors...
### Which version of ESPHome has the issue?
2025.7.4
### What type of installation are you using?
Home Assistant Add-on
### What platform are you using?
ESP8266
### Component causing the issue
seeed_mr24hpc1
### YAML Config
```yaml
esphome:
name: bnl2
friendly_name: BNL2
esp8266:
board: d1_mini
logger:
baud_rate: 0
api:
ota:
- platform: esphome
password: "397a868b564ea45b9cde97637dbe60bd"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.1.247
gateway: 192.168.1.1
subnet: 255.255.255.0
ap:
ssid: "Bnl2 Fallback Hotspot"
password: "OalMgpBTap6f"
captive_portal:
web_server:
uart:
id: uart_mmwave
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 115200
seeed_mr24hpc1:
id: mmwave_hub
uart_id: uart_mmwave
binary_sensor:
- platform: seeed_mr24hpc1
has_target:
name: "Presence Information"
```
### Anything in the logs that might be useful for us?
```txt
INFO ESPHome 2025.7.4
INFO Reading configuration /config/esphome/bnl2.yaml...
INFO Detected timezone 'Europe/Berlin'
INFO Generating C++ source...
INFO Compiling app...
Processing bnl2 (board: d1_mini; framework: arduino; platform: platformio/[email protected] )
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
Dependency Graph
|-- ESPAsyncTCP @ 2.0.0
|-- ESP8266WiFi @ 1.0
|-- ESPAsyncWebServer @ 3.7.10
|-- DNSServer @ 1.1.1
|-- ESP8266mDNS @ 1.2
|-- ArduinoJson @ 7.4.2
Compiling .pioenvs/bnl2/src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp.o
Compiling .pioenvs/bnl2/src/esphome/components/template/text_sensor/template_text_sensor.cpp.o
Compiling .pioenvs/bnl2/src/esphome/components/text_sensor/filter.cpp.o
Compiling .pioenvs/bnl2/src/esphome/components/text_sensor/text_sensor.cpp.o
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp: In member function 'void esphome::seeed_mr24hpc1::MR24HPC1Component::r24_frame_parse_open_underlying_information_(uint8_t*)':
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:437:21: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'existence_boundary_select_'
437 | } else if ((this->existence_boundary_select_ != nullptr) &&
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:439:15: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'existence_boundary_select_'
439 | if (this->existence_boundary_select_->has_index(data[FRAME_DATA_INDEX] - 1)) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:440:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'existence_boundary_select_'
440 | this->existence_boundary_select_->publish_state(S_BOUNDARY_STR[data[FRAME_DATA_INDEX] - 1]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:442:21: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'motion_boundary_select_'
442 | } else if ((this->motion_boundary_select_ != nullptr) &&
| ^~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:444:15: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'motion_boundary_select_'
444 | if (this->motion_boundary_select_->has_index(data[FRAME_DATA_INDEX] - 1)) {
| ^~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:445:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'motion_boundary_select_'
445 | this->motion_boundary_select_->publish_state(S_BOUNDARY_STR[data[FRAME_DATA_INDEX] - 1]);
| ^~~~~~~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp: In member function 'void esphome::seeed_mr24hpc1::MR24HPC1Component::r24_frame_parse_work_status_(uint8_t*)':
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:519:16: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
519 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:519:57: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
519 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:520:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
520 | this->scene_mode_select_->publish_state(S_SCENE_STR[data[FRAME_DATA_INDEX]]);
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:542:16: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
542 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:542:57: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
542 | if ((this->scene_mode_select_ != nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:543:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'scene_mode_select_'
543 | this->scene_mode_select_->publish_state(S_SCENE_STR[data[FRAME_DATA_INDEX]]);
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp: In member function 'void esphome::seeed_mr24hpc1::MR24HPC1Component::r24_frame_parse_human_information_(uint8_t*)':
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:582:21: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'unman_time_select_'
582 | } else if ((this->unman_time_select_ != nullptr) &&
| ^~~~~~~~~~~~~~~~~~
src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp:586:13: error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'unman_time_select_'
586 | this->unman_time_select_->publish_state(S_UNMANNED_TIME_STR[data[FRAME_DATA_INDEX]]);
| ^~~~~~~~~~~~~~~~~~
Compiling .pioenvs/bnl2/src/esphome/components/time/automation.cpp.o
*** [.pioenvs/bnl2/src/esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp.o] Error 1
========================== [FAILED] Took 8.28 seconds ==========================
```
### Additional information
_No response_
dev ← copilot/fix-10045
opened 05:53AM - 04 Aug 25 UTC
# What does this implement/fix?
The seeed_mr24hpc1 component was failing to com… pile on ESP8266, ESP32-C6, and other platforms when optional components were not included in the configuration. This was causing compilation errors like:
```
error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'existence_boundary_select_'
error: 'class esphome::seeed_mr24hpc1::MR24HPC1Component' has no member named 'sensitivity_number_'
```
The issue occurred because the C++ implementation was accessing entity member variables without proper preprocessor guards. When optional platforms like `select:`, `number:`, `text_sensor:`, etc. aren't used in a configuration, the corresponding `USE_*` defines are not set, which means:
1. Entity headers are not included
2. Entity member variables are not declared in the class (they're wrapped in `#ifdef USE_*`)
3. But the runtime code was still trying to access these variables unconditionally
This fix adds comprehensive `#ifdef USE_*` guards around all optional entity accesses in the C++ implementation, following the same pattern used throughout ESPHome for optional components.
## Changes made:
**Protected entity types with guards:**
- **SELECT**: `scene_mode_select_`, `unman_time_select_`, `existence_boundary_select_`, `motion_boundary_select_`
- **NUMBER**: `sensitivity_number_`, `custom_mode_number_`, `existence_threshold_number_`, `motion_threshold_number_`, `motion_trigger_number_`, `motion_to_rest_number_`, `custom_unman_time_number_`
- **TEXT_SENSOR**: `product_model_text_sensor_`, `product_id_text_sensor_`, `hardware_model_text_sensor_`, `firware_version_text_sensor_`, `heartbeat_state_text_sensor_`, `keep_away_text_sensor_`, `motion_status_text_sensor_`, `custom_mode_end_text_sensor_`
- **SENSOR**: `custom_spatial_static_value_sensor_`, `custom_presence_of_detection_sensor_`, `custom_spatial_motion_value_sensor_`, `custom_motion_distance_sensor_`, `custom_motion_speed_sensor_`, `movement_signs_sensor_`, `custom_mode_num_sensor_`
- **BINARY_SENSOR**: `has_target_binary_sensor_`
- **SWITCH**: `underlying_open_function_switch_`
**Functions updated:**
- `setup()`: Added guards around initial entity state setup
- `r24_frame_parse_product_information_()`: Wrapped entire function with `#ifdef USE_TEXT_SENSOR` to save flash space when no text sensors configured
- `r24_frame_parse_open_underlying_information_()`: Restructured to use separate if statements with early returns, ensuring guards wrap entire conditions including variable access checks
- `r24_frame_parse_work_status_()`: Restructured with same pattern for proper guard placement
- `r24_frame_parse_human_information_()`: Restructured with same pattern for proper guard placement
- `r24_parse_data_frame_()`: Protected heartbeat text sensor access and function call
- `set_underlying_open_function()`: Protected text sensor and sensor accesses
- `set_scene_mode()`: Protected number and sensor accesses
- `set_custom_mode()`: Protected number access
- `set_custom_end_mode()`: Protected number access
- All `set_*_boundary()` and `set_*_threshold()` functions: Protected sensor state checks
**Test improvements:**
- Updated test file to use packages pattern for UART loading (consistent with current repo conventions)
## Types of changes
- [x] Bugfix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Developer breaking change (an API change that could break external components)
- [ ] Code quality improvements to existing code or addition of tests
- [ ] Other
**Related issue or feature (if applicable):**
- fixes #10045
**Pull request in [esphome-docs](https://github.com/esphome/esphome-docs) with documentation (if applicable):**
- N/A
## Test Environment
- [ ] ESP32
- [ ] ESP32 IDF
- [x] ESP8266
- [ ] RP2040
- [ ] BK72xx
- [ ] RTL87xx
- [ ] nRF52840
## Example entry for `config.yaml`:
```yaml
# Minimal config without optional components - now compiles successfully
uart:
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 115200
seeed_mr24hpc1:
id: my_seeed_mr24hpc1
# Only include the entity types you need
binary_sensor:
- platform: seeed_mr24hpc1
has_target:
name: "Presence Information"
```
## Checklist:
- [x] The code change is tested and works locally.
- [x] Tests have been added to verify that the new code works (under `tests/` folder).
If user exposed functionality or configuration variables are added/changed:
- [ ] Documentation added/updated in [esphome-docs](https://github.com/esphome/esphome-docs).
---
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs.
IOT7712
January 11, 2026, 9:27am
35
You already quoted those earlier. First closed without attention, or just too busy?
Those newer ones should link to specific messages.
Might not be relevant just had a peruse of a few threads and thought I’d post them here.
But yes, a bit superfluous I guess.
unhuzpt
(Unhuzpt)
January 11, 2026, 9:35am
37
I do not have a backup from 10/2025 and fear to create more issues with the many other devices I have. For now I will see what the issue turns into and then, if needed, will patch it myself but not much time for it.
I am 100% sure is a breaking change in ESPHome 11/2025.
HumanSkunk
(Human Skunk)
January 11, 2026, 10:16am
38
I have updated the title. Might get get a bit more specific interest now.
1 Like
unhuzpt
(Unhuzpt)
January 15, 2026, 7:25am
39
Hello all!
Just updated ESPHome version and the Seeestudio devices and all is working fine!
ESPHome guys ROCK!
opened 08:47AM - 11 Jan 26 UTC
closed 03:16AM - 12 Jan 26 UTC
### The problem
Since ESPHome update 11/2025 the MR24HPC1 sensor does not work.…
Nothing was changed in the sensor as for hardware and software other than the ESPHome version update.
The device compiles fine, no errors, exact same yaml but no data from the sensor to the ESP32 device is seen.
In my case I use the Seeedstudio Kit so all of them use:
XIAO ESP32C3
MR24HPC1
### Which version of ESPHome has the issue?
2025/11
### What type of installation are you using?
Home Assistant Add-on
### What platform are you using?
ESP32
### Component causing the issue
_No response_
### YAML Config
```yaml
substitutions:
name: "reddacted"
friendly_name: "reddacted"
esphome:
name: "${name}"
friendly_name: "${friendly_name}"
name_add_mac_suffix: true
project:
name: "seeedstudio.mmwave_kit"
version: "2.0"
platformio_options:
board_build.flash_mode: dio
board_build.mcu: esp32c3
# <-- ON_BOOT must go here, indented under 'esphome:'
on_boot:
priority: 600
then:
- delay: 2s
- uart.write:
id: uart_mmw
data: [0x55, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x5A]
external_components:
- source: github://limengdu/mmwave-kit-external-components@main
refresh: 0s
esp32:
board: esp32-c3-devkitm-1
framework:
type: arduino
logger:
hardware_uart: USB_SERIAL_JTAG
level: DEBUG
logs:
uart: DEBUG
seeed_mr24hpc1: DEBUG
api:
encryption:
key: "reddacted"
ota:
- platform: esphome
password: "reddacted"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
use_address: reddacted
ap:
ssid: "reddacted"
password: "reddacted"
captive_portal:
esp32_improv:
authorizer: none
uart:
id: uart_mmw
baud_rate: 256000
tx_pin: GPIO5
rx_pin: GPIO4
parity: NONE
stop_bits: 1
seeed_mr24hpc1:
id: mr24
uart_id: uart_mmw
# ---------------------------------------------------
# ENTITIES
# ---------------------------------------------------
text_sensor:
- platform: seeed_mr24hpc1
heart_beat:
name: "Heartbeat"
product_model:
name: "Product Model"
product_id:
name: "Product ID"
hardware_model:
name: "Hardware Model"
hardware_version:
name: "Hardware Version"
keep_away:
name: "Active Reporting Of Proximity"
motion_status:
name: "Motion Information"
custom_mode_end:
name: "Custom Mode Status"
binary_sensor:
- platform: seeed_mr24hpc1
has_target:
name: "Presence Information"
sensor:
- platform: seeed_mr24hpc1
custom_presence_of_detection:
name: "Static Distance"
movement_signs:
name: "Body Movement Parameter"
custom_motion_distance:
name: "Motion Distance"
custom_spatial_static_value:
name: "Existence Energy"
custom_spatial_motion_value:
name: "Motion Energy"
custom_motion_speed:
name: "Motion Speed"
custom_mode_num:
name: "Current Custom Mode"
switch:
- platform: template
name: "MR24 Enable Active Reporting"
turn_on_action:
- uart.write:
id: uart_mmw
data: [0x55, 0x00, 0x04, 0x00, 0x01, 0x00, 0x01, 0x5A]
button:
- platform: seeed_mr24hpc1
restart:
name: "Module Restart"
custom_set_end:
name: "End Of Custom Mode Settings"
select:
- platform: seeed_mr24hpc1
scene_mode:
name: "Scene"
unman_time:
name: "Time For Entering No Person State (Standard Function)"
existence_boundary:
name: "Existence Boundary"
motion_boundary:
name: "Motion Boundary"
number:
- platform: seeed_mr24hpc1
sensitivity:
name: "Sensitivity"
custom_mode:
name: "Custom Mode"
existence_threshold:
name: "Existence Energy Threshold"
motion_threshold:
name: "Motion Energy Threshold"
motion_trigger:
name: "Motion Trigger Time"
motion_to_rest:
name: "Motion To Rest Time"
custom_unman_time:
name: "Time For Entering No Person State (Underlying Open Function)"
```
### Anything in the logs that might be useful for us?
```txt
Nothing
```
### Additional information
The devices i have: https://www.seeedstudio.com/mmWave-Human-Detection-Sensor-Kit-p-5773.html
HumanSkunk
(Human Skunk)
January 15, 2026, 11:35am
40
Can you provided your formatted config below? I have made no changes updated to the latest ESPHome and same result, aka no response.