mmWave human presence for under $20?!

You should be able to use “binary_sensor” for the primary state — Occupancy clear or detected— and then have attributes for the rest.

Or, you could create multiple sensors for the different things, of course.

That’s a good point, I’ll try that, what I need to figure out, and this gives me a reason to :slight_smile: is how to make this into a proper device, as of now it only shows up as an entity. If I am to do multiple sensors for the 3 classes of binary_sensor data it produces (6 states) it will be nice to have them under one device. I tried to find how to do that but I must be missing something obvious

1 Like

Thanks so much @mattdm for all the tips and hints, I haven’t updated the git repo yet, still testing, but I have the Device and 3 sensors now showing “properly” in Home Assistant and no longer need the configuration.yaml lines.

I still have a lot of code cleanup but this is good for testing, and I’m keeping the retain flag false for the config messages so I can reload HA and just clear out anything that’s been created via MQTT Discovery while I’m testing

1 Like

Cool! Glad to help, especially because I’m probably going taken advantage of your work in the future for myself. Hoping to have something for the stairway motion light which responds faster and also does not get fooled by the cat…

I have… a lot! of cats in my house lol when I put this in play, I’ll let you know how it does. There is one right now in fact, who just chills at the end of my bed and often sets off the simple GPIO pull-down sensor (yes/no) status of the DFRobot mmWave. So I too am very curious if I can use this and its various reporting states to “filter” her out. And also for accurate sleep presence of course.

1 Like

Hi Serena
I ordered a few of the 24GHz lite sensors and the Xiao ESP32-C3’s and have built the presence sensor as in the Seeed Studio tutorial (integration with Home Assistant). One of the problems I have observed is that after an initial power on, the ESP32 works fine (can see the logs wirelessly and HA sees it in ESP home, etc) but the 24GHz sensor does not show up. All the sensor values are greyed out. Sometimes after multiple power off/on cycles it shows up. What seems to work is, if I disconnect and connect power only to the mmWave radar (not the ESP32), then it starts working. This is not a workable solution in realtife. What could be going on? Looks like some power-on sequencing needs to happen with the mmWave radar.
Do the mmWave sensors need a firmware update? If so, how does one do it in the field?
And BTW, I also have other Seeed 60GHz and 24GHz sensors and they don’t suffer from this problem.

Thanks.

2 Likes

Thanks Duncan and @mattdm for your tips, code and inspiration on the 60GHz mmWave radar sensors integration with Home Assistant via MQ. I like the loose coupling approach.
I’ve tested it using Duncan’s latest code and approach and it works reasonably well for presence detection (~2 Meters).
What I really want to do with this sensor is to measure HR and RR, so I’m in the process of using parts of the Seeed supplied libraries into your code to get HR & RR detection working with HA. No luck yet (my coding skills are bad), but will continue to work on it and report progress.

1 Like

@Wijayw If you’re using the MR60BHA1 (heart / breath) sensor module on an ESP MCU… try out this new code I just uploaded for direct Home Assistant integration using ESPHome. I’ve been having a lot of fun adding as many sensors as I can to this and it even has a couple useful buttons so you can restart the ESP or reset the radar module. I’ll add more detail later.

1 Like

Thanks Duncan. Yes, I am using the MR60BHA1. Will try your code and report.

1 Like

Hi @DuncanIdahoCT,
Many thanks for your integration code for the MR60BHA1 with Home Assistant. It works like a charm. I’m using the XIAO ESP32-C3 as the microcontroller. Presence and activity measurements work fine. Although the detection range of this particular sensor is only about 2m.
The Heart Rate (HR) measurement is a bit hit and miss, especially over long periods and at high rates. I’ve not seen it measure HR above 90.
Respiratory Rate (RR) or breathing rate seems alright.
I’m testing it under various conditions, distances, materials to see what its optimal working parameters are.
It would be interesting to get @SerenaLiang0320 's perspective on the sensor’s limits.
Thanks once again.

Glad it’s working for you!

Seeed staff/support has already confirmed to me and others plus it’s in the docs… “somewhere” lol that the range is limited. Anything 100 or over on heart rate or 25 or over on resp rate is out of bounds but I’m not certain what that will show. Also the range of the BHA vs FDA radar is precisely 1.5 Meters vs 6.0 so that figures. I’ve seen it cut in/out at close to 2 Meters. The interesting thing about this, is that Seeed has also confirmed that the hardware is identical and the firmware is interchangeable (they didn’t quite say it like that) but that the price is higher on the BHA because of the different firmware, basically… you’re paying more for “software” and development costs that when into it. But of course they aren’t going to suggest, nor am I, that you simply swap firmware around. Anyway the interesting thing is that the basic functions of presence and movement seem to also be quite limited on the BHA since it’s only able to accurately detect at .4 to 1.5 M (it has not just a max but also a min distance) whereas the FDA can sense a flea crawling on a dog at 5.5M, well ok maybe not quite but it does detect very small movements. You can see this in my other repository:

It does seem like you’re getting what is intended for this sensor hardware with the Heart Breath firmware.

Thanks @DuncanIdahoCT for sharing your wisdom on this sensor. While its disappointing the HR/RR range and accuracy of this sensor is somewhat limited, I guess this is the beginning of a disruptive phase for touchless health metrics measurements. There are already cuff less blood pressure (BP) measurement devices. It would be nice if seeed exposed the raw readings from the sensor before their algorithms are applied to derive HR. Using more sophisticated algorithms and signal processing applied at the microcontroller level may yield better results. What I’m curios about is if the limitations are radar (hardware) or algorithm specific.
I must also explore other MMWave sensors for HR/RR. Remember seeing one from Germany that exposes the raw data (a lot more expensive though). The google soli based devices for instance (Nest Hub) are 24GHz and provide fairly accurate RR, but not HR.

This grafana histogram shows the 95th percentile distribution of HR/RR readings over a 24 hr. period in my living room. So exposed to multiple people in various conditions/activities (inc. exercising). As you can observe, the HR range is limited to 65-95, with a skew towards 85-90.

@DuncanIdahoCT, Agree. Noticed the less flappy presence on these.
I don’t have the FDA, but the following two, which I will test and report on.

The R24B is supposed to be able to measure sleep state and BR.
I have the DFRobot and have similar observation to you.

Hello,
I have exactly the same problem as Wijay. I have built 3 sensors with the presence detection lite modules. One of them works perfectly, the other two also worked at first, but then suddenly stopped sending data to home assistant. Unfortunately, I can’t get it to work again by unplugging and plugging in the 5v supply for the sensor. It would be great if there was a solution to the problem.

1 Like

Same problem as @Wijayw and schmaxi .

@SerenaLiang0320 could you please provide some help? followed the tutorial step by step , using described esp and sensor and nothing works.


No matter what i do, everything stays unknown. Also i cant set some of the properties as they were in some of your screenshots - below minimum value?

[18:46:35][C][mdns:108]: mDNS:
[18:46:35][C][mdns:109]:   Hostname: seeedpresence1
[18:46:35][C][ota:093]: Over-The-Air Updates:
[18:46:35][C][ota:094]:   Address: seeedpresence1.local:3232
[18:46:35][C][ota:097]:   Using Password.
[18:46:35][C][api:138]: API Server:
[18:46:35][C][api:139]:   Address: seeedpresence1.local:6053
[18:46:35][C][api:141]:   Using noise encryption: YES
[18:47:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[18:47:05][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[18:47:09][D][main:336]: text_sensor on_raw_value
[18:47:09][D][text_sensor:067]: 'Standard Product model': Sending state ''
[18:47:22][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[18:47:24][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[18:48:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[18:48:05][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[18:48:09][D][main:336]: text_sensor on_raw_value
[18:48:09][D][text_sensor:067]: 'Standard Product model': Sending state ''
[18:48:22][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[18:48:24][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[18:49:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[18:49:05][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[18:49:09][D][main:336]: text_sensor on_raw_value
[18:49:09][D][text_sensor:067]: 'Standard Product model': Sending state ''
[18:49:22][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[18:49:24][D][text_sensor:067]: 'Standard Hardware model': Sending state ''

My all attempt is also the same :slight_smile: UNKNOWN

[09:00:58][D][main:342]: text_sensor on_raw_value
[09:00:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:01:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:01:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:01:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:01:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:01:58][D][main:342]: text_sensor on_raw_value
[09:01:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:02:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:02:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:02:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:02:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:02:58][D][main:342]: text_sensor on_raw_value
[09:02:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:03:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:03:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:03:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:03:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:03:58][D][main:342]: text_sensor on_raw_value
[09:03:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:04:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:04:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:04:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:04:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:04:58][D][main:342]: text_sensor on_raw_value
[09:04:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:05:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:05:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:05:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:05:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:05:58][D][main:342]: text_sensor on_raw_value
[09:05:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:06:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:06:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:06:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:06:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:06:58][D][main:342]: text_sensor on_raw_value
[09:06:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:07:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:07:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:07:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:07:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:07:58][D][main:342]: text_sensor on_raw_value
[09:07:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:08:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:08:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:08:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:08:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:08:58][D][main:342]: text_sensor on_raw_value
[09:08:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:09:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:09:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:09:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:09:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:09:58][D][main:342]: text_sensor on_raw_value
[09:09:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:10:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:10:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:10:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:10:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:10:58][D][main:342]: text_sensor on_raw_value
[09:10:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:11:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:11:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:11:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:11:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:11:58][D][main:342]: text_sensor on_raw_value
[09:11:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:12:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:12:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:12:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:12:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:12:58][D][main:342]: text_sensor on_raw_value
[09:12:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:13:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''
[09:13:10][D][text_sensor:067]: 'Standard Firmware version': Sending state ''
[09:13:46][D][text_sensor:067]: 'Standard Product ID': Sending state ''
[09:13:54][D][text_sensor:067]: 'Standard Hardware model': Sending state ''
[09:13:58][D][main:342]: text_sensor on_raw_value
[09:13:58][D][text_sensor:067]: 'Standard Product model': Sending state ''
[09:14:05][D][text_sensor:067]: 'Standard protocol type': Sending state ''

Hi,

i found solution for me. Disconect +5V from sensor and connect. After this step, works fine.
But is no good. This step should be performed every time after a power outage.

Hey Everyone, I am sooo sorry for missing your info, I already asked our technical support to check this thread, and recently we are releasing a questionaire to collect feedback about mmWave. And also, we received many feedback in our technical support team, I will ask our technical support to reply here. So sorry for the incovenience.

2 Likes

Hi Serena. Thanks for the info. Is there any update on this?

Hi, our application engineer already checked all feedback here, and he is already dedicated to fixing the bugs but has not achieved any progress yet. :pensive:
Please give us more time…

1 Like