Anyone who are still confused by the sensitivity settings of mmWave, please check here: The $6.90 Human Static mmWave Module now includes parameter setting templates. What other features should it further introduce/develop? - #2 by ferbulous
Hi Raymond
Here’s my code.
xiao es32c3 yaml
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio
board_build.mcu: esp32c3
includes:
- R24dvd.h
esp32:
board: esp32-c3-devkitm-1
variant: esp32c3
framework:
type: esp-idf
# Enable logging
logger:
hardware_uart: USB_SERIAL_JTAG
level: DEBUG
# Enable Home Assistant API
api:
encryption:
key: "skqlTYVsUQXTx72MuSlCHZwkBObq87yfNoVQzm1yABC="
ota:
password: "c9b9cf809e41066c36d3638e10a92427"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Xiao-Esp32C3 Fallback Hotspot"
password: "xBreLShLQguj"
uart:
id: uart_bus
baud_rate: 115200
rx_pin: 20
tx_pin: 21
select:
- platform: template
name: "Standard Scene mode"
id: scene_mode
icon: mdi:hoop-house
optimistic: true
options:
- "Living room"
- "Area detection"
- "Washroom"
- "Bedroom"
initial_option: "Living room"
set_action:
- logger.log:
format: "set action option: %s"
args: ["x.c_str()"]
- uart.write: !lambda
auto index = id(scene_mode).index_of(x);
uint8_t value = (uint8_t)index.value() + 1;
uint8_t crc = value + 0xB9;
return {0x53,0x59,0x05,0x07,0x00,0x01,value,crc,0x54,0x43};
- platform: template
name: "Standard unmanned time"
id: unmanned_time
icon: mdi:timeline-clock
optimistic: true
options:
- "None"
- "10s"
- "30s"
- "1min"
- "2min"
- "5min"
- "10min"
- "30min"
- "1hour"
initial_option: "None"
set_action:
- logger.log:
format: "Chosen option: %s"
args: ["x.c_str()"]
- uart.write: !lambda
auto index = id(unmanned_time).index_of(x);
uint8_t value = (uint8_t)index.value();
uint8_t crc = value + 0x37;
return {0x53,0x59,0x80,0x0a,0x00,0x01,value,crc,0x54,0x43};
- platform: template
name: "Custom Presence of perception boundary"
id: custom_presence_of_perception_boundary
optimistic: true
options:
- "0.5m"
- "1.0m"
- "1.5m"
- "2.0m"
- "2.5m"
- "3.0m"
- "3.5m"
- "4.0m"
- "4.5m"
- "5.0m"
set_action:
- logger.log:
format: "Chosen option: %s"
args: ["x.c_str()"]
- uart.write: !lambda
auto index = id(unmanned_time).index_of(x);
uint8_t value = (uint8_t)index.value() + 1;
uint8_t crc = value + 0xBF;
return {0x53,0x59,0x08,0x0a,0x00,0x01,value,crc,0x54,0x43};
- platform: template
name: "Custom Motion trigger boundary"
id: custom_motion_trigger_boundary
optimistic: true
options:
- "0.5m"
- "1.0m"
- "1.5m"
- "2.0m"
- "2.5m"
- "3.0m"
- "3.5m"
- "4.0m"
- "4.5m"
- "5.0m"
set_action:
- logger.log:
format: "Chosen option: %s"
args: ["x.c_str()"]
- uart.write: !lambda
auto index = id(unmanned_time).index_of(x);
uint8_t value = (uint8_t)index.value() + 1;
uint8_t crc = value + 0xC0;
return {0x53,0x59,0x08,0x0b,0x00,0x01,value,crc,0x54,0x43};
number:
- platform: template
id: sensitivity
name: "Standard sensitivity"
icon: mdi:archive-check-outline
min_value: 0
max_value: 3
optimistic: false
step: 1
update_interval: 2s
set_action:
- uart.write: !lambda
uint8_t crc = x + 0xBA;
return {0x53,0x59,0x05,0x08,0x00,0x01,(uint8_t)x,crc,0x54,0x43};
- platform: template
name: "Standard Maximum detectable range of moving target"
id: moving_target_detection_max_distance
icon: mdi:map-marker-path
unit_of_measurement: "cm"
min_value: 0
max_value: 65536
step: 500
set_action:
- uart.write: !lambda
int h_num = (int)x >> 8;
int l_num = (int)x & 0xff;
int crc = 0xB6 + h_num + l_num;
return {0x53,0x59,0x07,0x01,0x00,0x02,(uint8_t)(h_num),(uint8_t)(l_num),(uint8_t)crc,0x54,0x43};
- platform: template
name: "Standard Maximum detectable range of stationary target"
id: static_target_detection_max_distance
icon: mdi:map-marker-path
unit_of_measurement: cm
min_value: 0
max_value: 65536
step: 500
set_action:
- uart.write: !lambda
int h_num = (int)x >> 8;
int l_num = (int)x & 0xff;
int crc = 0xB9 + h_num + l_num;
return {0x53,0x59,0x07,0x04,0x00,0x02,(uint8_t)(h_num),(uint8_t)(l_num),(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Judgment threshold exists"
id: custom_judgment_threshold_exists
min_value: 0
max_value: 250
step: 1
set_action:
- uart.write: !lambda
int crc = 0xBD + (int)x;
return {0x53,0x59,0x08,0x08,0x00,0x01,(uint8_t)x,(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Motion amplitude trigger threshold"
id: custom_motion_amplitude_trigger_threshold
min_value: 0
max_value: 250
step: 1
set_action:
- uart.write: !lambda
int crc = 0xBE + (int)x;
return {0x53,0x59,0x08,0x09,0x00,0x01,(uint8_t)x,(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Mode Settings"
id: custom_mode_settings
icon: mdi:cog
min_value: 0
max_value: 250
step: 1
set_action:
- uart.write: !lambda
int crc = 0xBB + (int)x;
return {0x53,0x59,0x05,0x09,0x00,0x01,(uint8_t)x,(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Mode Settings End"
id: custom_mode_setting_completed
icon: mdi:cog
min_value: 0
max_value: 250
step: 1
set_action:
- uart.write: !lambda
int crc = 0xBC + (int)x;
return {0x53,0x59,0x05,0x0a,0x00,0x01,(uint8_t)x,(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Custom Mode Query"
icon: mdi:cog
id: custom_mode_query
min_value: 0
max_value: 250
step: 1
set_action:
- uart.write: !lambda
int crc = 0x3B + (int)x;
return {0x53,0x59,0x05,0x89,0x00,0x01,(uint8_t)x,(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Motion trigger time"
id: custom_motion_trigger_time
icon: mdi:camera-timer
unit_of_measurement: "ms"
min_value: 0
max_value: 4294967295
step: 5000
set_action:
- uart.write: !lambda
int crc = 0xC4 + (int)x;
int h24_num = ((int)x >> 24) & 0xff;
int h16_num = ((int)x >> 16) & 0xff;
int h8_num = ((int)x >> 8) & 0xff;
int l8_num = (int)x & 0xff;
return {0x53,0x59,0x08,0x0c,0x00,0x04,(uint8_t)h24_num,(uint8_t)h16_num,(uint8_t)h8_num,(uint8_t)l8_num,(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Movement to rest time"
id: custom_movement_to_rest_time
icon: mdi:camera-timer
unit_of_measurement: "ms"
min_value: 0
max_value: 4294967295
step: 5000
set_action:
- uart.write: !lambda
int crc = 0xC5 + (int)x;
int h24_num = ((int)x >> 24) & 0xff;
int h16_num = ((int)x >> 16) & 0xff;
int h8_num = ((int)x >> 8) & 0xff;
int l8_num = (int)x & 0xff;
return {0x53,0x59,0x08,0x0d,0x00,0x04,(uint8_t)h24_num,(uint8_t)h16_num,(uint8_t)h8_num,(uint8_t)l8_num,(uint8_t)crc,0x54,0x43};
- platform: template
name: "Custom Time of entering unmanned state"
id: custom_time_of_enter_unmanned
icon: mdi:camera-timer
unit_of_measurement: "ms"
min_value: 0
max_value: 4294967295
step: 5000
set_action:
- uart.write: !lambda
int crc = 0xC6 + (int)x;
int h24_num = ((int)x >> 24) & 0xff;
int h16_num = ((int)x >> 16) & 0xff;
int h8_num = ((int)x >> 8) & 0xff;
int l8_num = (int)x & 0xff;
return {0x53,0x59,0x08,0x0e,0x00,0x04,(uint8_t)h24_num,(uint8_t)h16_num,(uint8_t)h8_num,(uint8_t)l8_num,(uint8_t)crc,0x54,0x43};
text_sensor:
- platform: custom
lambda: |-
auto my_custom_sensor = new MyCustomTextSensor();
App.register_component(my_custom_sensor);
return {my_custom_sensor->Heartbeat};
text_sensors:
- name: "Standard Heartbeat"
icon: mdi:connection
- platform: template
name: "Standard Product model"
id: product_mode
icon: mdi:information-outline
on_raw_value:
then:
- logger.log: text_sensor on_raw_value
- platform: template
name: "Standard Product ID"
id: product_id
icon: mdi:information-outline
- platform: template
name: "Standard Hardware model"
id: hardware_model
icon: mdi:information-outline
- platform: template
name: "Standard Firmware version"
id: firmware_version
icon: mdi:information-outline
- platform: template
name: "Standard protocol type"
id: protocol_type
icon: mdi:information-outline
- platform: template
name: "Standard moving direction"
id: keep_away
icon: mdi:walk
- platform: template
name: "Standard Sports information"
id: motion_status
icon: mdi:human-greeting
- platform: template
name: "Standard Presence information"
id: someoneExists
icon: "mdi:motion-sensor"
- platform: template
name: "Custom Presence of detection"
id: custom_presence_of_detection
icon: mdi:signal-distance-variant
button:
- platform: template
name: "Standard reset"
id: "reset"
icon: mdi:reload
on_press:
then:
- logger.log: Button Pressed
- uart.write: [0x53,0x59,0x01,0x02,0x00,0x01,0x0F,0xBF,0x54,0x43]
switch:
- platform: template
id: output_info_switch
name: "Custom Infor output switch"
icon: mdi:electric-switch
assumed_state: true
turn_on_action:
- uart.write: [0x53,0x59,0x08,0x00,0x00,0x01,0x01,0xB6,0x54,0x43]
- delay: 1s
- lambda: !lambda |-
id(product_mode).publish_state("");
id(product_id).publish_state("");
id(hardware_model).publish_state("");
id(firmware_version).publish_state("");
id(protocol_type).publish_state("");
turn_off_action:
- uart.write: [0x53,0x59,0x08,0x00,0x00,0x01,0x00,0xB5,0x54,0x43]
sensor:
- platform: custom
lambda: |-
auto my_custom_sensor = new UartReadLineSensor(id(uart_bus));
App.register_component(my_custom_sensor);
return {
my_custom_sensor->movementSigns,
my_custom_sensor->inited,
};
sensors:
- name: "Standard body movement"
id: movementSigns
icon: "mdi:human-greeting-variant"
device_class: "temperature"
state_class: "measurement"
- name: "Standard inited"
id: inited
icon: mdi:all-inclusive
- platform: template
name: "Custom Motion distance"
id: custom_motion_distance
icon: mdi:signal-distance-variant
on_value:
then:
# - logger.log: Custom Motion distance on_value
- logger.log:
format: "Custom Motion distance on_value : %d"
args: ["x"]
on_raw_value:
then:
- logger.log:
format: "Custom Motion distance on_raw_value : %d"
args: ["x"]
- platform: template
name: "Custom Static distance"
id: custom_static_distance
icon: mdi:signal-distance-variant
- platform: template
name: "Custom Spatial static value"
id: custom_spatial_static_value
icon: mdi:counter
- platform: template
name: "Custom Spatial motion value"
id: custom_spatial_motion_value
icon: mdi:counter
- platform: template
name: "Custom Motion speed"
id: custom_motion_speed
icon: mdi:run-fast
Hi Serena, thanks for the updated documentation.
Is there any update to the sensor not responding after a power cycle problem?
Surely, that would require a firmware update?
The Tuya ZY-M100 is currently on sale on AliExpress, until the 26th for their anniversary sale. Can be bought for $21.80. Here’s a review od the device, which turned out to be reliant and capable
Here is a comparisson article with another Tuya sensor (PS-HPS) and the Aqara FP1:
Hello, it seems that the issue may be related to the serial port of ESP32C3. Our preliminary solution is to use another UART serial port instead of the default D6/D7 pins. However, we have not had a chance to test it yet. We would appreciate it if you could provide feedback on this issue.
This seems to have fixed the problem! Using D0/D1 on the Xiao, which corresponds to GPIO2/3.
New yaml. looks like this:
uart:
id: uart_bus
baud_rate: 115200
rx_pin: 2
tx_pin: 3
Hello Serena, any update on this issue, I bought 2 boards and both of em are having the same issue.
Hello, did anyone try using seeed static presence sensor with esp8266?
Hello,
I am also tinkering with the seed lite sensor. I am not using Homeassistant at all ( maybe changing because it is getting more and more interesting ) instead using node red and openhab. I would like to configure my sensor with the help off ESPHome change the sensitivity settings and then want to run the sensor “standalone” again over mqtt.
Now my question:
Does the ESP save all the made settings? So that i can make the changes in Homeassistant and then using the sensor standalone again with the correct settings? Or does the sensor need to connect everytime to Homeassistant again at bootup to get the right parameters?
Bye the way going the way over the arduino ide and trying to change there the settings is way to much for most of the standard users out there ( at least for me ), I think.
Thanks for your effort to get a stable product out of it.
Best regards
with my code, and I think all codesets, the BHA / FDA sensor modules store the settings, not the ESP / Arduino controller (aka the MCU) though I’m not certain how it is with the lite variant. The ESP can of course override these settings each time or send “frames” to the radar module to change the settings. To give an example, if I were to take my ESP or Arduino (MQTT) code and flash an MCU with it and send certain settings such as sensitivity or fall detection off. I could then take that radar module and connect to another MCU of any type and it will read back these settings from the radar.
Interesting that Seeed states the following in their privacy policy:
“The Site has the obligation to provide personal information to the judicial organs and government departments in accordance with the relevant laws and regulations.”
That’s just reminding you that companies are subject to laws. Does it surprise you that that’s true, or that the policy has language reminding you?
It just reminds me that there is a lot of naivety amongst us. Who even bothers to read a privacy policy??
That companies are subject to laws is obvious. But what is shocking is that in certain countries companies are forced to provide personal customer information to their governments. Also raises the question exactly what is the extend of this obligation, whether it involves those apps that we are so keen to install on our phones and laptops.
Pretty much the extent of the obligation is, in most countries, if the government has a warrant and says give me the data, the company gives them the data.
Your only recourse is if the data is encrypted, and you’re the only one with the key, then it’s up to the government to deal with that…
Thanks for your respone, ive just jumped on the HA train now. Puhh what a work…
If this is the wrong place to ask, I apologize. Please direct me. =]
I have mostly plagiarized the Yaml posted in post 138, and also made the correction from post 142. Im using a seeed ESP32c3 with the seeed mmWave Human Static Presence Sensor. I have also had issues with the seeed ESP code not being completely erased between flashes, so I there is that.
I had trouble understanding how to add the library, but I figured it out well enough that the code did compile and install. My library may or may not be the most up to date version.
It all shows up in home assistant, but most values just return “Unknown”. Reading the wiki, as best as I can understand it, I think I need to connect the sensor to a usb serial bridge (Which I do have and know how to use) but I dont understand the next step? I would appreciate some help. =]
Slightly off-topic, and not under $20… The Screek MM-wave detector already has ESPHome installed.
Have you got any experience with it?
I’ve heard some people have overheat issues, even in the above pic, your ESP temp seems a bit toasty but perhaps that’s normal… see the thread below for some details and perhaps solutions: