9namespace seeed_mr24hpc1 {
11static const char *
const TAG =
"seeed_mr24hpc1";
16 ESP_LOGCONFIG(TAG,
"MR24HPC1:");
18 LOG_TEXT_SENSOR(
" ",
"Heartbeat Text Sensor", this->heartbeat_state_text_sensor_);
19 LOG_TEXT_SENSOR(
" ",
"Product Model Text Sensor", this->product_model_text_sensor_);
20 LOG_TEXT_SENSOR(
" ",
"Product ID Text Sensor", this->product_id_text_sensor_);
21 LOG_TEXT_SENSOR(
" ",
"Hardware Model Text Sensor", this->hardware_model_text_sensor_);
22 LOG_TEXT_SENSOR(
" ",
"Firware Verison Text Sensor", this->firware_version_text_sensor_);
23 LOG_TEXT_SENSOR(
" ",
"Keep Away Text Sensor", this->keep_away_text_sensor_);
24 LOG_TEXT_SENSOR(
" ",
"Motion Status Text Sensor", this->motion_status_text_sensor_);
25 LOG_TEXT_SENSOR(
" ",
"Custom Mode End Text Sensor", this->custom_mode_end_text_sensor_);
27#ifdef USE_BINARY_SENSOR
28 LOG_BINARY_SENSOR(
" ",
"Has Target Binary Sensor", this->has_target_binary_sensor_);
31 LOG_SENSOR(
" ",
"Custom Presence Of Detection Sensor", this->custom_presence_of_detection_sensor_);
32 LOG_SENSOR(
" ",
"Movement Signs Sensor", this->movement_signs_sensor_);
33 LOG_SENSOR(
" ",
"Custom Motion Distance Sensor", this->custom_motion_distance_sensor_);
34 LOG_SENSOR(
" ",
"Custom Spatial Static Sensor", this->custom_spatial_static_value_sensor_);
35 LOG_SENSOR(
" ",
"Custom Spatial Motion Sensor", this->custom_spatial_motion_value_sensor_);
36 LOG_SENSOR(
" ",
"Custom Motion Speed Sensor", this->custom_motion_speed_sensor_);
37 LOG_SENSOR(
" ",
"Custom Mode Num Sensor", this->custom_mode_num_sensor_);
40 LOG_SWITCH(
" ",
"Underly Open Function Switch", this->underlying_open_function_switch_);
43 LOG_BUTTON(
" ",
"Restart Button", this->restart_button_);
44 LOG_BUTTON(
" ",
"Custom Set End Button", this->custom_set_end_button_);
47 LOG_SELECT(
" ",
"Scene Mode Select", this->scene_mode_select_);
48 LOG_SELECT(
" ",
"Unman Time Select", this->unman_time_select_);
49 LOG_SELECT(
" ",
"Existence Boundary Select", this->existence_boundary_select_);
50 LOG_SELECT(
" ",
"Motion Boundary Select", this->motion_boundary_select_);
53 LOG_NUMBER(
" ",
"Sensitivity Number", this->sensitivity_number_);
54 LOG_NUMBER(
" ",
"Custom Mode Number", this->custom_mode_number_);
55 LOG_NUMBER(
" ",
"Existence Threshold Number", this->existence_threshold_number_);
56 LOG_NUMBER(
" ",
"Motion Threshold Number", this->motion_threshold_number_);
57 LOG_NUMBER(
" ",
"Motion Trigger Time Number", this->motion_trigger_number_);
58 LOG_NUMBER(
" ",
"Motion To Rest Time Number", this->motion_to_rest_number_);
59 LOG_NUMBER(
" ",
"Custom Unman Time Number", this->custom_unman_time_number_);
68 if (this->custom_mode_number_ !=
nullptr) {
69 this->custom_mode_number_->publish_state(0);
73 if (this->custom_mode_num_sensor_ !=
nullptr) {
74 this->custom_mode_num_sensor_->publish_state(0);
78 if (this->custom_mode_end_text_sensor_ !=
nullptr) {
79 this->custom_mode_end_text_sensor_->publish_state(
"Not in custom mode");
83 this->poll_time_base_func_check_ =
true;
84 this->check_dev_inf_sign_ =
true;
86 this->sg_data_len_ = 0;
87 this->sg_frame_len_ = 0;
91 memset(this->c_product_mode_, 0, PRODUCT_BUF_MAX_SIZE);
92 memset(this->c_product_id_, 0, PRODUCT_BUF_MAX_SIZE);
93 memset(this->c_firmware_version_, 0, PRODUCT_BUF_MAX_SIZE);
94 memset(this->c_hardware_model_, 0, PRODUCT_BUF_MAX_SIZE);
95 memset(this->sg_frame_prase_buf_, 0, FRAME_BUF_MAX_SIZE);
96 memset(this->sg_frame_buf_, 0, FRAME_BUF_MAX_SIZE);
102void MR24HPC1Component::update_() {
104 this->poll_time_base_func_check_ =
true;
113 size_t to_read = std::min(avail,
sizeof(buf));
119 for (
size_t i = 0; i < to_read; i++) {
120 this->r24_split_data_frame_(buf[i]);
136 if (this->poll_time_base_func_check_) {
137 switch (this->sg_start_query_data_) {
140 this->sg_start_query_data_++;
144 this->sg_start_query_data_++;
150 this->sg_start_query_data_++;
156 this->sg_start_query_data_++;
157 this->check_dev_inf_sign_ =
false;
161 this->sg_start_query_data_++;
165 this->sg_start_query_data_++;
169 this->sg_start_query_data_++;
173 this->sg_start_query_data_++;
177 this->sg_start_query_data_++;
181 this->sg_start_query_data_++;
185 this->sg_start_query_data_++;
189 this->sg_start_query_data_++;
193 this->sg_start_query_data_++;
197 this->sg_start_query_data_++;
201 this->sg_start_query_data_++;
205 this->sg_start_query_data_++;
209 this->sg_start_query_data_++;
213 this->sg_start_query_data_++;
217 this->sg_start_query_data_++;
221 this->sg_start_query_data_++;
223 this->poll_time_base_func_check_ =
false;
228 this->sg_start_query_data_++;
232 this->sg_start_query_data_++;
236 this->sg_start_query_data_++;
240 this->sg_start_query_data_++;
244 this->sg_start_query_data_++;
248 this->sg_start_query_data_++;
249 this->poll_time_base_func_check_ =
false;
258static uint8_t get_frame_crc_sum(
const uint8_t *data,
int len) {
259 unsigned int crc_sum = 0;
260 for (
int i = 0; i <
len - 3; i++) {
263 return crc_sum & 0xff;
267static int get_frame_check_status(uint8_t *data,
int len) {
268 uint8_t crc_sum = get_frame_crc_sum(data,
len);
269 uint8_t verified = data[
len - 3];
270 return (verified == crc_sum) ? 1 : 0;
274void MR24HPC1Component::r24_split_data_frame_(uint8_t value) {
275 switch (this->sg_recv_data_state_) {
277 if (FRAME_HEADER1_VALUE == value) {
282 if (FRAME_HEADER2_VALUE == value) {
283 this->sg_frame_buf_[0] = FRAME_HEADER1_VALUE;
284 this->sg_frame_buf_[1] = FRAME_HEADER2_VALUE;
288 ESP_LOGD(TAG,
"FRAME_IDLE ERROR value:%x", value);
292 this->sg_frame_buf_[2] = value;
296 this->sg_frame_buf_[3] = value;
301 this->sg_frame_buf_[4] = value;
305 ESP_LOGD(TAG,
"FRAME_DATA_LEN_H ERROR value:%x", value);
309 this->sg_data_len_ = value;
310 if (this->sg_data_len_ == 0 || this->sg_data_len_ > 32) {
311 ESP_LOGD(TAG,
"len=%d, FRAME_DATA_LEN_L ERROR value:%x", this->sg_data_len_, value);
312 this->sg_data_len_ = 0;
315 this->sg_frame_buf_[5] = value;
316 this->sg_frame_len_ = 6;
321 this->sg_frame_buf_[this->sg_frame_len_++] = value;
322 if (--this->sg_data_len_ == 0) {
327 this->sg_frame_buf_[this->sg_frame_len_++] = value;
331 if (FRAME_TAIL1_VALUE == value) {
335 this->sg_frame_len_ = 0;
336 this->sg_data_len_ = 0;
337 ESP_LOGD(TAG,
"FRAME_TAIL1 ERROR value:%x", value);
341 if (FRAME_TAIL2_VALUE == value) {
342 this->sg_frame_buf_[this->sg_frame_len_++] = FRAME_TAIL1_VALUE;
343 this->sg_frame_buf_[this->sg_frame_len_++] = FRAME_TAIL2_VALUE;
344 memcpy(this->sg_frame_prase_buf_, this->sg_frame_buf_, this->sg_frame_len_);
345 if (get_frame_check_status(this->sg_frame_prase_buf_, this->sg_frame_len_)) {
346 this->r24_parse_data_frame_(this->sg_frame_prase_buf_, this->sg_frame_len_);
348 ESP_LOGD(TAG,
"frame check failer!");
351 ESP_LOGD(TAG,
"FRAME_TAIL2 ERROR value:%x", value);
353 memset(this->sg_frame_prase_buf_, 0, FRAME_BUF_MAX_SIZE);
354 memset(this->sg_frame_buf_, 0, FRAME_BUF_MAX_SIZE);
355 this->sg_frame_len_ = 0;
356 this->sg_data_len_ = 0;
365void MR24HPC1Component::r24_frame_parse_product_information_(uint8_t *data) {
366#ifdef USE_TEXT_SENSOR
367 uint16_t product_len =
encode_uint16(data[FRAME_COMMAND_WORD_INDEX + 1], data[FRAME_COMMAND_WORD_INDEX + 2]);
368 if (data[FRAME_COMMAND_WORD_INDEX] == COMMAND_PRODUCT_MODE) {
369 if ((this->product_model_text_sensor_ !=
nullptr) && (product_len < PRODUCT_BUF_MAX_SIZE)) {
370 memset(this->c_product_mode_, 0, PRODUCT_BUF_MAX_SIZE);
371 memcpy(this->c_product_mode_, &data[FRAME_DATA_INDEX], product_len);
372 this->product_model_text_sensor_->publish_state(this->c_product_mode_);
374 ESP_LOGD(TAG,
"Reply: get product_mode error!");
376 }
else if (data[FRAME_COMMAND_WORD_INDEX] == COMMAND_PRODUCT_ID) {
377 if ((this->product_id_text_sensor_ !=
nullptr) && (product_len < PRODUCT_BUF_MAX_SIZE)) {
378 memset(this->c_product_id_, 0, PRODUCT_BUF_MAX_SIZE);
379 memcpy(this->c_product_id_, &data[FRAME_DATA_INDEX], product_len);
380 this->product_id_text_sensor_->publish_state(this->c_product_id_);
382 ESP_LOGD(TAG,
"Reply: get productId error!");
384 }
else if (data[FRAME_COMMAND_WORD_INDEX] == COMMAND_HARDWARE_MODEL) {
385 if ((this->hardware_model_text_sensor_ !=
nullptr) && (product_len < PRODUCT_BUF_MAX_SIZE)) {
386 memset(this->c_hardware_model_, 0, PRODUCT_BUF_MAX_SIZE);
387 memcpy(this->c_hardware_model_, &data[FRAME_DATA_INDEX], product_len);
388 this->hardware_model_text_sensor_->publish_state(this->c_hardware_model_);
389 ESP_LOGD(TAG,
"Reply: get hardware_model :%s", this->c_hardware_model_);
391 ESP_LOGD(TAG,
"Reply: get hardwareModel error!");
393 }
else if (data[FRAME_COMMAND_WORD_INDEX] == COMMAND_FIRMWARE_VERSION) {
394 if ((this->firware_version_text_sensor_ !=
nullptr) && (product_len < PRODUCT_BUF_MAX_SIZE)) {
395 memset(this->c_firmware_version_, 0, PRODUCT_BUF_MAX_SIZE);
396 memcpy(this->c_firmware_version_, &data[FRAME_DATA_INDEX], product_len);
397 this->firware_version_text_sensor_->publish_state(this->c_firmware_version_);
399 ESP_LOGD(TAG,
"Reply: get firmwareVersion error!");
406void MR24HPC1Component::r24_frame_parse_open_underlying_information_(uint8_t *data) {
407 switch (data[FRAME_COMMAND_WORD_INDEX]) {
411 if (this->underlying_open_function_switch_ !=
nullptr) {
412 this->underlying_open_function_switch_->publish_state(data[FRAME_DATA_INDEX]);
419 if (this->custom_spatial_static_value_sensor_ !=
nullptr) {
420 this->custom_spatial_static_value_sensor_->publish_state(data[FRAME_DATA_INDEX]);
422 if (this->custom_presence_of_detection_sensor_ !=
nullptr) {
423 this->custom_presence_of_detection_sensor_->publish_state(data[FRAME_DATA_INDEX + 1] * 0.5f);
425 if (this->custom_spatial_motion_value_sensor_ !=
nullptr) {
426 this->custom_spatial_motion_value_sensor_->publish_state(data[FRAME_DATA_INDEX + 2]);
428 if (this->custom_motion_distance_sensor_ !=
nullptr) {
429 this->custom_motion_distance_sensor_->publish_state(data[FRAME_DATA_INDEX + 3] * 0.5f);
431 if (this->custom_motion_speed_sensor_ !=
nullptr) {
432 this->custom_motion_speed_sensor_->publish_state((data[FRAME_DATA_INDEX + 4] - 10) * 0.5f);
437 if (this->movement_signs_sensor_ !=
nullptr) {
438 this->movement_signs_sensor_->publish_state(data[FRAME_DATA_INDEX]);
442 if (this->custom_spatial_static_value_sensor_ !=
nullptr) {
443 this->custom_spatial_static_value_sensor_->publish_state(data[FRAME_DATA_INDEX]);
447 if (this->custom_spatial_motion_value_sensor_ !=
nullptr) {
448 this->custom_spatial_motion_value_sensor_->publish_state(data[FRAME_DATA_INDEX]);
452 if (this->custom_presence_of_detection_sensor_ !=
nullptr &&
453 data[FRAME_DATA_INDEX] < std::size(S_PRESENCE_OF_DETECTION_RANGE_STR)) {
454 this->custom_presence_of_detection_sensor_->publish_state(
455 S_PRESENCE_OF_DETECTION_RANGE_STR[data[FRAME_DATA_INDEX]]);
459 if (this->custom_motion_distance_sensor_ !=
nullptr) {
460 this->custom_motion_distance_sensor_->publish_state(data[FRAME_DATA_INDEX] * 0.5f);
464 if (this->custom_motion_speed_sensor_ !=
nullptr) {
465 this->custom_motion_speed_sensor_->publish_state((data[FRAME_DATA_INDEX] - 10) * 0.5f);
469#ifdef USE_TEXT_SENSOR
473 if ((this->keep_away_text_sensor_ !=
nullptr) && (data[FRAME_DATA_INDEX] < 3)) {
474 this->keep_away_text_sensor_->publish_state(S_KEEP_AWAY_STR[data[FRAME_DATA_INDEX]]);
481 if (this->existence_threshold_number_ !=
nullptr) {
482 this->existence_threshold_number_->publish_state(data[FRAME_DATA_INDEX]);
487 if (this->motion_threshold_number_ !=
nullptr) {
488 this->motion_threshold_number_->publish_state(data[FRAME_DATA_INDEX]);
493 if (this->motion_trigger_number_ !=
nullptr) {
495 data[FRAME_DATA_INDEX + 2], data[FRAME_DATA_INDEX + 3]);
496 this->motion_trigger_number_->publish_state(motion_trigger_time);
501 if (this->motion_to_rest_number_ !=
nullptr) {
503 data[FRAME_DATA_INDEX + 2], data[FRAME_DATA_INDEX + 3]);
504 this->motion_to_rest_number_->publish_state(move_to_rest_time);
509 if (this->custom_unman_time_number_ !=
nullptr) {
511 data[FRAME_DATA_INDEX + 2], data[FRAME_DATA_INDEX + 3]);
512 this->custom_unman_time_number_->publish_state(enter_unmanned_time / 1000.0f);
519 if (this->existence_boundary_select_ !=
nullptr) {
520 if (this->existence_boundary_select_->has_index(data[FRAME_DATA_INDEX] - 1)) {
521 this->existence_boundary_select_->publish_state(data[FRAME_DATA_INDEX] - 1);
527 if (this->motion_boundary_select_ !=
nullptr) {
528 if (this->motion_boundary_select_->has_index(data[FRAME_DATA_INDEX] - 1)) {
529 this->motion_boundary_select_->publish_state(data[FRAME_DATA_INDEX] - 1);
537void MR24HPC1Component::r24_parse_data_frame_(uint8_t *data, uint8_t
len) {
538 switch (data[FRAME_CONTROL_WORD_INDEX]) {
540 if (data[FRAME_COMMAND_WORD_INDEX] == 0x02) {
541 ESP_LOGD(TAG,
"Reply: query restart packet");
544#ifdef USE_TEXT_SENSOR
545 if (this->heartbeat_state_text_sensor_ !=
nullptr) {
546 this->heartbeat_state_text_sensor_->publish_state(
547 data[FRAME_COMMAND_WORD_INDEX] == 0x01 ?
"Equipment Normal" :
"Equipment Abnormal");
552 this->r24_frame_parse_product_information_(data);
555 this->r24_frame_parse_work_status_(data);
558 this->r24_frame_parse_open_underlying_information_(data);
561 this->r24_frame_parse_human_information_(data);
564 ESP_LOGD(TAG,
"control word:0x%02X not found", data[FRAME_CONTROL_WORD_INDEX]);
569void MR24HPC1Component::r24_frame_parse_work_status_(uint8_t *data) {
570 switch (data[FRAME_COMMAND_WORD_INDEX]) {
573 ESP_LOGD(TAG,
"Reply: get radar init status 0x%02X", data[FRAME_DATA_INDEX]);
577 if (this->custom_mode_num_sensor_ !=
nullptr) {
578 this->custom_mode_num_sensor_->publish_state(data[FRAME_DATA_INDEX]);
582 if (this->custom_mode_number_ !=
nullptr) {
583 this->custom_mode_number_->publish_state(0);
586#ifdef USE_TEXT_SENSOR
587 if (this->custom_mode_end_text_sensor_ !=
nullptr) {
588 this->custom_mode_end_text_sensor_->publish_state(
"Setup in progress");
594 if (this->custom_mode_num_sensor_ !=
nullptr) {
595 this->custom_mode_num_sensor_->publish_state(data[FRAME_DATA_INDEX]);
598 if (data[FRAME_DATA_INDEX] == 0) {
599#ifdef USE_TEXT_SENSOR
600 if (this->custom_mode_end_text_sensor_ !=
nullptr) {
601 this->custom_mode_end_text_sensor_->publish_state(
"Not in custom mode");
605 if (this->custom_mode_number_ !=
nullptr) {
606 this->custom_mode_number_->publish_state(0);
614 if ((this->scene_mode_select_ !=
nullptr) && (this->scene_mode_select_->has_index(data[FRAME_DATA_INDEX]))) {
615 this->scene_mode_select_->publish_state(data[FRAME_DATA_INDEX]);
617 ESP_LOGD(TAG,
"Select has index offset %d Error", data[FRAME_DATA_INDEX]);
624 if (this->sensitivity_number_ !=
nullptr) {
625 this->sensitivity_number_->publish_state(data[FRAME_DATA_INDEX]);
629#ifdef USE_TEXT_SENSOR
631 if (this->custom_mode_end_text_sensor_ !=
nullptr) {
632 this->custom_mode_end_text_sensor_->publish_state(
"Set Success!");
637 ESP_LOGD(TAG,
"[%s] No found COMMAND_WORD(%02X) in Frame", __FUNCTION__, data[FRAME_COMMAND_WORD_INDEX]);
642void MR24HPC1Component::r24_frame_parse_human_information_(uint8_t *data) {
643 switch (data[FRAME_COMMAND_WORD_INDEX]) {
644#ifdef USE_BINARY_SENSOR
647 if (this->has_target_binary_sensor_ !=
nullptr && data[FRAME_DATA_INDEX] < std::size(S_SOMEONE_EXISTS_STR)) {
648 this->has_target_binary_sensor_->publish_state(S_SOMEONE_EXISTS_STR[data[FRAME_DATA_INDEX]]);
655 if (this->movement_signs_sensor_ !=
nullptr) {
656 this->movement_signs_sensor_->publish_state(data[FRAME_DATA_INDEX]);
660#ifdef USE_TEXT_SENSOR
663 if ((this->motion_status_text_sensor_ !=
nullptr) && (data[FRAME_DATA_INDEX] < 3)) {
664 this->motion_status_text_sensor_->publish_state(S_MOTION_STATUS_STR[data[FRAME_DATA_INDEX]]);
670 if ((this->keep_away_text_sensor_ !=
nullptr) && (data[FRAME_DATA_INDEX] < 3)) {
671 this->keep_away_text_sensor_->publish_state(S_KEEP_AWAY_STR[data[FRAME_DATA_INDEX]]);
679 if ((this->unman_time_select_ !=
nullptr) && (data[FRAME_DATA_INDEX] < 9)) {
680 this->unman_time_select_->publish_state(data[FRAME_DATA_INDEX]);
685 ESP_LOGD(TAG,
"[%s] No found COMMAND_WORD(%02X) in Frame", __FUNCTION__, data[FRAME_COMMAND_WORD_INDEX]);
691void MR24HPC1Component::send_query_(
const uint8_t *query,
size_t string_length) {
700 this->send_query_(GET_RADAR_OUTPUT_INFORMATION_SWITCH,
sizeof(GET_RADAR_OUTPUT_INFORMATION_SWITCH));
714 this->send_query_(GET_FIRMWARE_VERSION,
sizeof(GET_FIRMWARE_VERSION));
720 this->send_query_(GET_HUMAN_MOTION_INFORMATION,
sizeof(GET_HUMAN_MOTION_INFORMATION));
724 this->send_query_(GET_BODY_MOTION_PARAMETERS,
sizeof(GET_BODY_MOTION_PARAMETERS));
738 this->send_query_(GET_EXISTENCE_BOUNDARY,
sizeof(GET_EXISTENCE_BOUNDARY));
744 this->send_query_(GET_SPATIAL_STATIC_VALUE,
sizeof(GET_SPATIAL_STATIC_VALUE));
748 this->send_query_(GET_SPATIAL_MOTION_VALUE,
sizeof(GET_SPATIAL_MOTION_VALUE));
752 this->send_query_(GET_DISTANCE_OF_STATIC_OBJECT,
sizeof(GET_DISTANCE_OF_STATIC_OBJECT));
756 this->send_query_(GET_DISTANCE_OF_MOVING_OBJECT,
sizeof(GET_DISTANCE_OF_MOVING_OBJECT));
760 this->send_query_(GET_TARGET_MOVEMENT_SPEED,
sizeof(GET_TARGET_MOVEMENT_SPEED));
764 this->send_query_(GET_EXISTENCE_THRESHOLD,
sizeof(GET_EXISTENCE_THRESHOLD));
768 this->send_query_(GET_MOTION_THRESHOLD,
sizeof(GET_MOTION_THRESHOLD));
772 this->send_query_(GET_MOTION_TRIGGER_TIME,
sizeof(GET_MOTION_TRIGGER_TIME));
776 this->send_query_(GET_MOTION_TO_REST_TIME,
sizeof(GET_MOTION_TO_REST_TIME));
780 this->send_query_(GET_CUSTOM_UNMAN_TIME,
sizeof(GET_CUSTOM_UNMAN_TIME));
787 this->send_query_(UNDERLYING_SWITCH_ON,
sizeof(UNDERLYING_SWITCH_ON));
789 this->send_query_(UNDERLYING_SWITCH_OFF,
sizeof(UNDERLYING_SWITCH_OFF));
791#ifdef USE_TEXT_SENSOR
792 if (this->keep_away_text_sensor_ !=
nullptr) {
793 this->keep_away_text_sensor_->publish_state(
"");
795 if (this->motion_status_text_sensor_ !=
nullptr) {
796 this->motion_status_text_sensor_->publish_state(
"");
800 if (this->custom_spatial_static_value_sensor_ !=
nullptr) {
801 this->custom_spatial_static_value_sensor_->publish_state(NAN);
803 if (this->custom_spatial_motion_value_sensor_ !=
nullptr) {
804 this->custom_spatial_motion_value_sensor_->publish_state(NAN);
806 if (this->custom_motion_distance_sensor_ !=
nullptr) {
807 this->custom_motion_distance_sensor_->publish_state(NAN);
809 if (this->custom_presence_of_detection_sensor_ !=
nullptr) {
810 this->custom_presence_of_detection_sensor_->publish_state(NAN);
812 if (this->custom_motion_speed_sensor_ !=
nullptr) {
813 this->custom_motion_speed_sensor_->publish_state(NAN);
819 uint8_t send_data_len = 10;
820 uint8_t send_data[10] = {0x53, 0x59, 0x05, 0x07, 0x00, 0x01, value, 0x00, 0x54, 0x43};
821 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
822 this->send_query_(send_data, send_data_len);
824 if (this->custom_mode_number_ !=
nullptr) {
825 this->custom_mode_number_->publish_state(0);
829 if (this->custom_mode_num_sensor_ !=
nullptr) {
830 this->custom_mode_num_sensor_->publish_state(0);
848 uint8_t send_data_len = 10;
849 uint8_t send_data[10] = {0x53, 0x59, 0x05, 0x08, 0x00, 0x01, value, 0x00, 0x54, 0x43};
850 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
851 this->send_query_(send_data, send_data_len);
857 this->send_query_(SET_RESTART,
sizeof(SET_RESTART));
858 this->check_dev_inf_sign_ =
true;
862 uint8_t send_data_len = 10;
863 uint8_t send_data[10] = {0x53, 0x59, 0x80, 0x0a, 0x00, 0x01, value, 0x00, 0x54, 0x43};
864 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
865 this->send_query_(send_data, send_data_len);
873 if (this->custom_mode_number_ !=
nullptr) {
874 this->custom_mode_number_->publish_state(0);
879 uint8_t send_data_len = 10;
880 uint8_t send_data[10] = {0x53, 0x59, 0x05, 0x09, 0x00, 0x01,
mode, 0x00, 0x54, 0x43};
881 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
882 this->send_query_(send_data, send_data_len);
896 uint8_t send_data_len = 10;
897 uint8_t send_data[10] = {0x53, 0x59, 0x05, 0x0a, 0x00, 0x01, 0x0F, 0xCB, 0x54, 0x43};
898 this->send_query_(send_data, send_data_len);
900 if (this->custom_mode_number_ !=
nullptr) {
901 this->custom_mode_number_->publish_state(0);
918 if ((this->custom_mode_num_sensor_ !=
nullptr) && (this->custom_mode_num_sensor_->state == 0))
921 uint8_t send_data_len = 10;
922 uint8_t send_data[10] = {0x53, 0x59, 0x08, 0x0A, 0x00, 0x01, (uint8_t) (value + 1), 0x00, 0x54, 0x43};
923 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
924 this->send_query_(send_data, send_data_len);
930 if ((this->custom_mode_num_sensor_ !=
nullptr) && (this->custom_mode_num_sensor_->state == 0))
933 uint8_t send_data_len = 10;
934 uint8_t send_data[10] = {0x53, 0x59, 0x08, 0x0B, 0x00, 0x01, (uint8_t) (value + 1), 0x00, 0x54, 0x43};
935 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
936 this->send_query_(send_data, send_data_len);
942 if ((this->custom_mode_num_sensor_ !=
nullptr) && (this->custom_mode_num_sensor_->state == 0))
945 uint8_t send_data_len = 10;
946 uint8_t send_data[10] = {0x53, 0x59, 0x08, 0x08, 0x00, 0x01, value, 0x00, 0x54, 0x43};
947 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
948 this->send_query_(send_data, send_data_len);
954 if ((this->custom_mode_num_sensor_ !=
nullptr) && (this->custom_mode_num_sensor_->state == 0))
957 uint8_t send_data_len = 10;
958 uint8_t send_data[10] = {0x53, 0x59, 0x08, 0x09, 0x00, 0x01, value, 0x00, 0x54, 0x43};
959 send_data[7] = get_frame_crc_sum(send_data, send_data_len);
960 this->send_query_(send_data, send_data_len);
966 if ((this->custom_mode_num_sensor_ !=
nullptr) && (this->custom_mode_num_sensor_->state == 0))
969 uint8_t send_data_len = 13;
970 uint8_t send_data[13] = {0x53, 0x59, 0x08, 0x0C, 0x00, 0x04, 0x00, 0x00, 0x00, value, 0x00, 0x54, 0x43};
971 send_data[10] = get_frame_crc_sum(send_data, send_data_len);
972 this->send_query_(send_data, send_data_len);
978 if ((this->custom_mode_num_sensor_ !=
nullptr) && (this->custom_mode_num_sensor_->state == 0))
981 uint8_t h8_num = (value >> 8) & 0xff;
982 uint8_t l8_num = value & 0xff;
983 uint8_t send_data_len = 13;
984 uint8_t send_data[13] = {0x53, 0x59, 0x08, 0x0D, 0x00, 0x04, 0x00, 0x00, h8_num, l8_num, 0x00, 0x54, 0x43};
985 send_data[10] = get_frame_crc_sum(send_data, send_data_len);
986 this->send_query_(send_data, send_data_len);
992 if ((this->custom_mode_num_sensor_ !=
nullptr) && (this->custom_mode_num_sensor_->state == 0))
996 uint8_t h24_num = (value_ms >> 24) & 0xff;
997 uint8_t h16_num = (value_ms >> 16) & 0xff;
998 uint8_t h8_num = (value_ms >> 8) & 0xff;
999 uint8_t l8_num = value_ms & 0xff;
1000 uint8_t send_data_len = 13;
1001 uint8_t send_data[13] = {0x53, 0x59, 0x08, 0x0E, 0x00, 0x04, h24_num, h16_num, h8_num, l8_num, 0x00, 0x54, 0x43};
1002 send_data[10] = get_frame_crc_sum(send_data, send_data_len);
1003 this->send_query_(send_data, send_data_len);
BedjetMode mode
BedJet operating mode.
ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") void set_interval(const std voi set_interval)(const char *name, uint32_t interval, std::function< void()> &&f)
Set an interval function with a unique name.
void get_firmware_version()
void set_custom_unman_time(uint16_t value)
void set_underlying_open_function(bool enable)
void set_motion_trigger_time(uint8_t value)
void set_motion_boundary(uint8_t value)
void dump_config() override
void set_unman_time(uint8_t value)
void get_human_motion_info()
void set_sensitivity(uint8_t value)
void set_existence_threshold(uint8_t value)
void get_custom_unman_time()
void set_existence_boundary(uint8_t value)
void get_hardware_model()
void set_motion_threshold(uint8_t value)
void get_radar_output_information_switch()
void set_scene_mode(uint8_t value)
void get_distance_of_moving_object()
void get_motion_trigger_time()
void get_existence_boundary()
void get_motion_to_rest_time()
void get_spatial_motion_value()
void get_motion_threshold()
void get_spatial_static_value()
void set_motion_to_rest_time(uint16_t value)
void set_custom_end_mode()
void get_target_movement_speed()
void get_body_motion_params()
void get_motion_boundary()
void get_existence_threshold()
void set_custom_mode(uint8_t mode)
void get_distance_of_static_object()
void get_heartbeat_packet()
optional< std::array< uint8_t, N > > read_array()
void check_uart_settings(uint32_t baud_rate, uint8_t stop_bits=1, UARTParityOptions parity=UART_CONFIG_PARITY_NONE, uint8_t data_bits=8)
Check that the configuration of the UART bus matches the provided values and otherwise print a warnin...
void write_array(const uint8_t *data, size_t len)
@ UNDERLY_FUNCTION_QUERY_HUMAN_STATUS
@ STANDARD_FUNCTION_QUERY_PRODUCT_ID
@ CUSTOM_FUNCTION_QUERY_EXISTENCE_BOUNDARY
@ STANDARD_FUNCTION_QUERY_KEEPAWAY_STATUS
@ STANDARD_FUNCTION_QUERY_BODY_MOVE_PARAMETER
@ STANDARD_FUNCTION_QUERY_HARDWARE_MODE
@ STANDARD_FUNCTION_QUERY_HUMAN_MOTION_INF
@ CUSTOM_FUNCTION_QUERY_MOTION_TRIGGER_TIME
@ STANDARD_FUNCTION_QUERY_FIRMWARE_VERSION
@ STANDARD_FUNCTION_QUERY_HUMAN_STATUS
@ CUSTOM_FUNCTION_QUERY_MOTION_BOUNDARY
@ STANDARD_FUNCTION_QUERY_UNMANNED_TIME
@ STANDARD_FUNCTION_QUERY_PRODUCT_MODE
@ CUSTOM_FUNCTION_QUERY_MOTION_THRESHOLD
@ UNDERLY_FUNCTION_QUERY_SPATIAL_MOTION_VALUE
@ CUSTOM_FUNCTION_QUERY_EXISTENCE_THRESHOLD
@ STANDARD_FUNCTION_QUERY_SCENE_MODE
@ UNDERLY_FUNCTION_QUERY_SPATIAL_STATIC_VALUE
@ STANDARD_FUNCTION_QUERY_SENSITIVITY
@ CUSTOM_FUNCTION_QUERY_TIME_OF_ENTER_UNMANNED
@ STANDARD_QUERY_CUSTOM_MODE
@ UNDERLY_FUNCTION_QUERY_TARGET_MOVEMENT_SPEED
@ UNDERLY_FUNCTION_QUERY_DISTANCE_OF_STATIC_OBJECT
@ STANDARD_FUNCTION_QUERY_HEARTBEAT_STATE
@ CUSTOM_FUNCTION_QUERY_MOTION_TO_REST_TIME
@ UNDERLY_FUNCTION_QUERY_DISTANCE_OF_MOVING_OBJECT
Providing packet encoding functions for exchanging data with a remote host.
constexpr uint32_t encode_uint32(uint8_t byte1, uint8_t byte2, uint8_t byte3, uint8_t byte4)
Encode a 32-bit value given four bytes in most to least significant byte order.
constexpr uint16_t encode_uint16(uint8_t msb, uint8_t lsb)
Encode a 16-bit value given the most and least significant byte.