12#ifdef USE_BINARY_SENSOR
33static constexpr uint8_t MAX_TARGETS = 3;
34static constexpr uint8_t AREA_COUNT = 4;
37static constexpr uint8_t AREA_ID_COUNT = AREA_COUNT * 2;
38static constexpr size_t DEFAULT_MAX_DATA_LEN = 1024;
39static constexpr size_t DEFAULT_MAX_DATA_LEN_POINT_CLOUD = 4096;
41static constexpr size_t CMD_MAX_DATA_LEN = 28;
120 void setup()
override;
121 void loop()
override;
134 if (target >= MAX_TARGETS)
139 if (target >= MAX_TARGETS)
144 if (target >= MAX_TARGETS)
149 if (target >= MAX_TARGETS)
151 this->
targets_[target].dop_idx = sensor;
154 if (target >= MAX_TARGETS)
156 this->
targets_[target].cluster_id = sensor;
159 if (area >= AREA_COUNT)
164 if (area >= AREA_COUNT)
169 if (area >= AREA_COUNT)
174 if (area >= AREA_COUNT)
179 if (area >= AREA_COUNT)
184 if (area >= AREA_COUNT)
190 if (area >= AREA_COUNT)
195 if (area >= AREA_COUNT)
200 if (area >= AREA_COUNT)
205 if (area >= AREA_COUNT)
210 if (area >= AREA_COUNT)
215 if (area >= AREA_COUNT)
221#ifdef USE_BINARY_SENSOR
224 if (target >= MAX_TARGETS)
229 if (area >= AREA_COUNT)
235#ifdef USE_TEXT_SENSOR
278 std::array<uint8_t, CMD_MAX_DATA_LEN>
data{};
347#ifdef USE_BINARY_SENSOR
352#ifdef USE_TEXT_SENSOR
Base class for all binary_sensor-type classes.
void set_target_presence_binary_sensor(uint8_t target, binary_sensor::BinarySensor *sensor)
text_sensor::TextSensor * work_mode_text_sensor_
select::Select * area_id_select_
bool queue_area_config_(uint8_t area_id, const AreaConfig &desired)
binary_sensor::BinarySensor * presence_binary_sensor_
number::Number * area_z_min_number_
void handle_target_report_(const uint8_t *data, uint16_t len)
text_sensor::TextSensor * ota_version_text_sensor_
void set_z_max_number(number::Number *number)
void set_target_x_sensor(uint8_t target, sensor::Sensor *sensor)
std::array< uint8_t, CMD_MAX_DATA_LEN > wake_scratch_
static constexpr uint8_t CMD_QUEUE_SIZE
static constexpr const char * WAKE_BUTTON_TIMEOUT
void clear_target_state_()
void set_work_mode_text_sensor(text_sensor::TextSensor *sensor)
number::Number * area_z_max_number_
void set_area_y_max_number(number::Number *number)
static void write_int32_le(uint8_t *data, int32_t value)
bool last_work_mode_low_power_
void set_select_value(SelectType type, size_t index)
void save_area_id_pref_(uint8_t value)
void set_hold_delay_number(number::Number *number)
number::Number * z_min_number_
static void write_u32_le(uint8_t *data, uint32_t value)
std::array< PendingCommand, CMD_QUEUE_SIZE > cmd_queue_
void set_target_dop_idx_sensor(uint8_t target, sensor::Sensor *sensor)
bool version_pref_initialized_
void set_presence_binary_sensor(binary_sensor::BinarySensor *sensor)
static float read_f32_le(const uint8_t *data)
uint32_t wakeup_pulse_ms_
ESPPreferenceObject version_pref_
void handle_installation_report_(const uint8_t *data, uint16_t len)
number::Number * z_max_number_
void set_switch_state(SwitchType type, bool state)
std::array< bool, MAX_TARGETS > last_cluster_id_valid_
void set_interference_area_x_max_sensor(uint8_t area, sensor::Sensor *sensor)
std::array< int32_t, MAX_TARGETS > last_cluster_id_
void set_number_value(NumberType type, float value)
void set_target_display_switch(switch_::Switch *sw)
void handle_trigger_speed_report_(const uint8_t *data, uint16_t len)
float get_setup_priority() const override
void set_target_z_sensor(uint8_t target, sensor::Sensor *sensor)
select::Select * installation_select_
void set_interference_area_y_min_sensor(uint8_t area, sensor::Sensor *sensor)
void set_detection_area_x_min_sensor(uint8_t area, sensor::Sensor *sensor)
bool target_display_enabled_
std::array< AreaSensors, AREA_COUNT > detection_areas_
void set_area_presence_binary_sensor(uint8_t area, binary_sensor::BinarySensor *sensor)
void set_area_z_max_number(number::Number *number)
void set_detection_area_y_max_sensor(uint8_t area, sensor::Sensor *sensor)
select::Select * trigger_speed_select_
void init_area_id_pref_()
void set_area_x_min_number(number::Number *number)
static uint32_t read_u32_le(const uint8_t *data)
void publish_area_numbers_()
bool target_presence_any_
bool last_work_mode_valid_
void set_interference_area_z_max_sensor(uint8_t area, sensor::Sensor *sensor)
void save_version_pref_(const char *value)
number::Number * area_x_max_number_
PendingCommand active_command_
sensor::Sensor * point_count_sensor_
static constexpr uint8_t CMD_MAX_RETRIES
void update_area_numbers_for_id_(uint8_t area_id)
void update_area_numbers_(const AreaConfig &area)
void set_detection_area_x_max_sensor(uint8_t area, sensor::Sensor *sensor)
AreaConfig pending_area_updates_
void dump_config() override
uint32_t last_target_count_
std::array< AreaConfig, AREA_COUNT > interference_area_values_
void handle_version_report_(const uint8_t *data, uint16_t len)
void set_wakeup_pin(GPIOPin *pin)
number::Number * area_y_max_number_
void set_detection_area_y_min_sensor(uint8_t area, sensor::Sensor *sensor)
switch_::Switch * target_display_switch_
void send_command_internal_(uint16_t type, const uint8_t *data, uint8_t len, bool track)
static uint16_t read_u16_be(const uint8_t *data)
void set_low_power_switch(switch_::Switch *sw)
static constexpr const char * AREA_REFRESH_TIMEOUT
void handle_area_presence_(const uint8_t *data, uint16_t len)
void publish_number_clamped_(number::Number *number, float value)
select::Select * sensitivity_select_
number::Number * hold_delay_number_
void set_interference_area_y_max_sensor(uint8_t area, sensor::Sensor *sensor)
static constexpr uint32_t MODULE_AWAKE_MS
bool area_write_in_flight_
static constexpr uint32_t CMD_FIRST_ACK_TIMEOUT_MS
void set_ota_version_text_sensor(text_sensor::TextSensor *sensor)
uint32_t discard_remaining_
void init_version_pref_()
void set_trigger_speed_select(select::Select *select)
void set_target_cluster_id_sensor(uint8_t target, sensor::Sensor *sensor)
void set_low_power_sleep_number(number::Number *number)
void set_area_y_min_number(number::Number *number)
static int32_t read_int32_le(const uint8_t *data)
void set_auto_wake(bool enable)
void handle_area_report_(bool interference, const uint8_t *data, uint16_t len)
void set_z_min_number(number::Number *number)
std::array< bool, MAX_TARGETS > slot_occupied_
void handle_low_power_report_(const uint8_t *data, uint16_t len)
std::array< AreaConfig, AREA_COUNT > detection_area_values_
static constexpr uint32_t CMD_ACK_TIMEOUT_MS
bool deferred_apply_pending_
std::array< int32_t, MAX_TARGETS > slot_cluster_
void clear_area_presence_()
std::array< binary_sensor::BinarySensor *, AREA_COUNT > area_presence_
void handle_delay_report_(const uint8_t *data, uint16_t len)
std::array< AreaSensors, AREA_COUNT > interference_areas_
void apply_area_config_()
void set_area_id_select(select::Select *select)
void handle_sensitivity_report_(const uint8_t *data, uint16_t len)
void set_sensitivity_select(select::Select *select)
bool area_id_pref_initialized_
void parse_byte_(uint8_t byte)
bool point_cloud_enabled_
void set_target_y_sensor(uint8_t target, sensor::Sensor *sensor)
std::array< TargetSensors, MAX_TARGETS > targets_
void handle_frame_(uint16_t type, const uint8_t *data, uint16_t len)
void send_command_(uint16_t type, const uint8_t *data, uint8_t len)
switch_::Switch * low_power_switch_
void restore_deferred_edits_()
sensor::Sensor * target_count_sensor_
switch_::Switch * point_cloud_switch_
void set_point_cloud_switch(switch_::Switch *sw)
std::array< bool, MAX_TARGETS > last_target_presence_
uint32_t last_point_count_
number::Number * area_y_min_number_
void publish_work_mode_(bool low_power)
void write_frame_(uint16_t type, const uint8_t *data, uint8_t len, bool track)
std::array< binary_sensor::BinarySensor *, MAX_TARGETS > target_presence_
void set_interference_area_z_min_sensor(uint8_t area, sensor::Sensor *sensor)
void handle_low_power_sleep_report_(const uint8_t *data, uint16_t len)
void set_installation_select(select::Select *select)
void set_point_count_sensor(sensor::Sensor *sensor)
void handle_work_mode_report_(const uint8_t *data, uint16_t len)
void set_wakeup_pulse_ms(uint32_t ms)
void set_interference_area_x_min_sensor(uint8_t area, sensor::Sensor *sensor)
void press_button(ButtonType type)
number::Number * area_x_min_number_
void set_detection_area_z_min_sensor(uint8_t area, sensor::Sensor *sensor)
void try_apply_pending_area_(bool reported_interference)
void set_target_count_sensor(sensor::Sensor *sensor)
void process_command_queue_()
bool queue_command_(uint16_t type, const uint8_t *data, uint8_t len)
void clear_target_slot_(uint8_t index)
void set_area_x_max_number(number::Number *number)
void set_detection_area_z_max_sensor(uint8_t area, sensor::Sensor *sensor)
number::Number * low_power_sleep_number_
static constexpr uint32_t STALE_ACK_MAX_AGE_MS
void set_area_z_min_number(number::Number *number)
ESPPreferenceObject area_id_pref_
bool send_control_command_(uint32_t command)
void handle_point_cloud_(const uint8_t *data, uint16_t len)
void handle_z_range_report_(const uint8_t *data, uint16_t len)
static void write_f32_le(uint8_t *data, float value)
void update_work_mode_fallback_()
uint32_t last_traffic_ms_
Base-class for all numbers.
Base-class for all selects.
Base-class for all sensors.
Base class for all switches.
@ GET_LOW_POWER_SLEEP_TIME
constexpr float DATA
For components that import data from directly connected sensors like DHT.
std::array< uint8_t, CMD_MAX_DATA_LEN > data
sensor::Sensor * cluster_id