Compare commits

...
12 changed files with 64 additions and 74 deletions
@@ -138,9 +138,9 @@ void DFRobotSEN0609Component::dump_config() {
LOG_BINARY_SENSOR(" ", "HasTarget", this->has_target_binary_sensor_);
#endif
#ifdef USE_SENSOR
LOG_SENSOR(" ", "TargetDistance", this->target_distance_sensor_);
LOG_SENSOR(" ", "TargetSpeed", this->target_speed_sensor_);
LOG_SENSOR(" ", "TargetEnergy", this->target_energy_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "TargetDistance", this->target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "TargetSpeed", this->target_speed_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "TargetEnergy", this->target_energy_sensor_);
#endif
#ifdef USE_TEXT_SENSOR
LOG_TEXT_SENSOR(" ", "Version", this->version_text_sensor_);
@@ -330,17 +330,18 @@ void DFRobotSEN0609Component::log_bad_frame_(const LogString *problem, const cha
}
#ifdef USE_SENSOR
static void publish_deduplicated(sensor::Sensor *sens, Deduplicator<float> &dedup, float value) {
if (sens == nullptr)
return;
if (std::isnan(value) ? dedup.next_unknown() : dedup.next(value))
sens->publish_state(value);
static void publish_deduplicated(sensor::SensorWithDedup<float> &sens, float value) {
if (std::isnan(value)) {
sens.publish_state_unknown();
} else {
sens.publish_state_if_not_dup(value);
}
}
void DFRobotSEN0609Component::publish_target_(float distance, float speed, float energy) {
publish_deduplicated(this->target_distance_sensor_, this->distance_dedup_, distance);
publish_deduplicated(this->target_speed_sensor_, this->speed_dedup_, speed);
publish_deduplicated(this->target_energy_sensor_, this->energy_dedup_, energy);
publish_deduplicated(this->target_distance_sensor_, distance);
publish_deduplicated(this->target_speed_sensor_, speed);
publish_deduplicated(this->target_energy_sensor_, energy);
}
#endif
@@ -7,7 +7,7 @@
#include "esphome/components/binary_sensor/binary_sensor.h"
#endif
#ifdef USE_SENSOR
#include "esphome/components/sensor/sensor.h"
#include "esphome/components/sensor/sensor_with_dedup.h"
#endif
#ifdef USE_TEXT_SENSOR
#include "esphome/components/text_sensor/text_sensor.h"
@@ -103,9 +103,9 @@ class DFRobotSEN0609Component final : public Component, public uart::UARTDevice
SUB_BINARY_SENSOR(has_target)
#endif
#ifdef USE_SENSOR
SUB_SENSOR(target_distance)
SUB_SENSOR(target_speed)
SUB_SENSOR(target_energy)
SUB_SENSOR_WITH_DEDUP(target_distance, float)
SUB_SENSOR_WITH_DEDUP(target_speed, float)
SUB_SENSOR_WITH_DEDUP(target_energy, float)
#endif
#ifdef USE_TEXT_SENSOR
SUB_TEXT_SENSOR(version)
@@ -175,9 +175,6 @@ class DFRobotSEN0609Component final : public Component, public uart::UARTDevice
#endif
#ifdef USE_SENSOR
void publish_target_(float distance, float speed, float energy);
Deduplicator<float> distance_dedup_;
Deduplicator<float> speed_dedup_;
Deduplicator<float> energy_dedup_;
#endif
#ifdef USE_NUMBER
+8 -8
View File
@@ -197,17 +197,17 @@ void LD2410Component::dump_config() {
#endif
#ifdef USE_SENSOR
ESP_LOGCONFIG(TAG, "Sensors:");
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "Light", this->light_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "DetectionDistance", this->detection_distance_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "MovingTargetDistance", this->moving_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "MovingTargetEnergy", this->moving_target_energy_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "StillTargetDistance", this->still_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "StillTargetEnergy", this->still_target_energy_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "Light", this->light_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "DetectionDistance", this->detection_distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "MovingTargetDistance", this->moving_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "MovingTargetEnergy", this->moving_target_energy_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "StillTargetDistance", this->still_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "StillTargetEnergy", this->still_target_energy_sensor_);
for (auto &s : this->gate_move_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "GateMove", s);
LOG_SENSOR_WITH_DEDUP(" ", "GateMove", s);
}
for (auto &s : this->gate_still_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "GateStill", s);
LOG_SENSOR_WITH_DEDUP(" ", "GateStill", s);
}
#endif
#ifdef USE_TEXT_SENSOR
+2 -2
View File
@@ -128,8 +128,8 @@ class LD2410Component final : public Component, public uart::UARTDevice {
std::array<number::Number *, TOTAL_GATES> gate_still_threshold_numbers_{};
#endif
#ifdef USE_SENSOR
std::array<SensorWithDedup<uint8_t>, TOTAL_GATES> gate_move_sensors_{};
std::array<SensorWithDedup<uint8_t>, TOTAL_GATES> gate_still_sensors_{};
std::array<sensor::SensorWithDedup<uint8_t>, TOTAL_GATES> gate_move_sensors_{};
std::array<sensor::SensorWithDedup<uint8_t>, TOTAL_GATES> gate_still_sensors_{};
#endif
};
+1 -1
View File
@@ -79,7 +79,7 @@ void LD2410SComponent::dump_config() {
LOG_BINARY_SENSOR(" ", "Has Target", this->target_binary_sensor_);
#endif
#ifdef USE_SENSOR
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "Distance", this->distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "Distance", this->distance_sensor_);
#endif
#ifdef USE_LD2410S_VERSION
LOG_TEXT_SENSOR(" ", "Version", this->version_text_sensor_);
+8 -8
View File
@@ -224,17 +224,17 @@ void LD2412Component::dump_config() {
#endif
#ifdef USE_SENSOR
ESP_LOGCONFIG(TAG, "Sensors:");
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "Light", this->light_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "DetectionDistance", this->detection_distance_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "MovingTargetDistance", this->moving_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "MovingTargetEnergy", this->moving_target_energy_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "StillTargetDistance", this->still_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "StillTargetEnergy", this->still_target_energy_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "Light", this->light_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "DetectionDistance", this->detection_distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "MovingTargetDistance", this->moving_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "MovingTargetEnergy", this->moving_target_energy_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "StillTargetDistance", this->still_target_distance_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "StillTargetEnergy", this->still_target_energy_sensor_);
for (auto &s : this->gate_still_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "GateStill", s);
LOG_SENSOR_WITH_DEDUP(" ", "GateStill", s);
}
for (auto &s : this->gate_move_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "GateMove", s);
LOG_SENSOR_WITH_DEDUP(" ", "GateMove", s);
}
#endif
#ifdef USE_TEXT_SENSOR
+2 -2
View File
@@ -148,8 +148,8 @@ class LD2412Component final : public Component, public uart::UARTDevice {
GateThresholds gate_still_thresholds_;
#endif
#ifdef USE_SENSOR
std::array<SensorWithDedup<uint8_t>, TOTAL_GATES> gate_move_sensors_{};
std::array<SensorWithDedup<uint8_t>, TOTAL_GATES> gate_still_sensors_{};
std::array<sensor::SensorWithDedup<uint8_t>, TOTAL_GATES> gate_move_sensors_{};
std::array<sensor::SensorWithDedup<uint8_t>, TOTAL_GATES> gate_still_sensors_{};
#endif
};
+12 -12
View File
@@ -215,35 +215,35 @@ void LD2450Component::dump_config() {
#endif
#ifdef USE_SENSOR
ESP_LOGCONFIG(TAG, "Sensors:");
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "MovingTargetCount", this->moving_target_count_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "StillTargetCount", this->still_target_count_sensor_);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetCount", this->target_count_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "MovingTargetCount", this->moving_target_count_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "StillTargetCount", this->still_target_count_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "TargetCount", this->target_count_sensor_);
for (auto &s : this->move_x_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetX", s);
LOG_SENSOR_WITH_DEDUP(" ", "TargetX", s);
}
for (auto &s : this->move_y_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetY", s);
LOG_SENSOR_WITH_DEDUP(" ", "TargetY", s);
}
for (auto &s : this->move_angle_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetAngle", s);
LOG_SENSOR_WITH_DEDUP(" ", "TargetAngle", s);
}
for (auto &s : this->move_distance_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetDistance", s);
LOG_SENSOR_WITH_DEDUP(" ", "TargetDistance", s);
}
for (auto &s : this->move_resolution_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetResolution", s);
LOG_SENSOR_WITH_DEDUP(" ", "TargetResolution", s);
}
for (auto &s : this->move_speed_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetSpeed", s);
LOG_SENSOR_WITH_DEDUP(" ", "TargetSpeed", s);
}
for (auto &s : this->zone_target_count_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "ZoneTargetCount", s);
LOG_SENSOR_WITH_DEDUP(" ", "ZoneTargetCount", s);
}
for (auto &s : this->zone_moving_target_count_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "ZoneMovingTargetCount", s);
LOG_SENSOR_WITH_DEDUP(" ", "ZoneMovingTargetCount", s);
}
for (auto &s : this->zone_still_target_count_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "ZoneStillTargetCount", s);
LOG_SENSOR_WITH_DEDUP(" ", "ZoneStillTargetCount", s);
}
#endif
#ifdef USE_TEXT_SENSOR
+9 -9
View File
@@ -193,15 +193,15 @@ class LD2450Component : public Component, public uart::UARTDevice {
ZoneOfNumbers zone_numbers_[MAX_ZONES];
#endif
#ifdef USE_SENSOR
std::array<SensorWithDedup<int16_t>, MAX_TARGETS> move_x_sensors_{};
std::array<SensorWithDedup<int16_t>, MAX_TARGETS> move_y_sensors_{};
std::array<SensorWithDedup<int16_t>, MAX_TARGETS> move_speed_sensors_{};
std::array<SensorWithDedup<float>, MAX_TARGETS> move_angle_sensors_{};
std::array<SensorWithDedup<uint16_t>, MAX_TARGETS> move_distance_sensors_{};
std::array<SensorWithDedup<uint16_t>, MAX_TARGETS> move_resolution_sensors_{};
std::array<SensorWithDedup<uint8_t>, MAX_ZONES> zone_target_count_sensors_{};
std::array<SensorWithDedup<uint8_t>, MAX_ZONES> zone_still_target_count_sensors_{};
std::array<SensorWithDedup<uint8_t>, MAX_ZONES> zone_moving_target_count_sensors_{};
std::array<sensor::SensorWithDedup<int16_t>, MAX_TARGETS> move_x_sensors_{};
std::array<sensor::SensorWithDedup<int16_t>, MAX_TARGETS> move_y_sensors_{};
std::array<sensor::SensorWithDedup<int16_t>, MAX_TARGETS> move_speed_sensors_{};
std::array<sensor::SensorWithDedup<float>, MAX_TARGETS> move_angle_sensors_{};
std::array<sensor::SensorWithDedup<uint16_t>, MAX_TARGETS> move_distance_sensors_{};
std::array<sensor::SensorWithDedup<uint16_t>, MAX_TARGETS> move_resolution_sensors_{};
std::array<sensor::SensorWithDedup<uint8_t>, MAX_ZONES> zone_target_count_sensors_{};
std::array<sensor::SensorWithDedup<uint8_t>, MAX_ZONES> zone_still_target_count_sensors_{};
std::array<sensor::SensorWithDedup<uint8_t>, MAX_ZONES> zone_moving_target_count_sensors_{};
#endif
#ifdef USE_TEXT_SENSOR
std::array<text_sensor::TextSensor *, MAX_TARGETS> direction_text_sensors_{};
+5 -5
View File
@@ -55,12 +55,12 @@ void LD2460Component::dump_config() {
: this->installation_mode_ == InstallationMode::INSTALLATION_MODE_TOP ? LOG_STR_LITERAL("top")
: LOG_STR_LITERAL("side"));
#ifdef USE_SENSOR
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetCount", this->target_count_sensor_);
LOG_SENSOR_WITH_DEDUP(" ", "TargetCount", this->target_count_sensor_);
for (const auto &t : this->target_sensors_) {
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetX", t.x);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetY", t.y);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetDistance", t.distance);
LOG_SENSOR_WITH_DEDUP_SAFE(" ", "TargetAngle", t.angle);
LOG_SENSOR_WITH_DEDUP(" ", "TargetX", t.x);
LOG_SENSOR_WITH_DEDUP(" ", "TargetY", t.y);
LOG_SENSOR_WITH_DEDUP(" ", "TargetDistance", t.distance);
LOG_SENSOR_WITH_DEDUP(" ", "TargetAngle", t.angle);
}
#endif
}
+1 -1
View File
@@ -48,7 +48,7 @@ class LD2460Component : public Component, public uart::UARTDevice {
#ifdef USE_SENSOR
// INT16_MIN marks a slot with no published coordinates, so the next report always publishes
struct TargetSensors {
ld24xx::SensorWithDedup<float> x, y, distance, angle;
sensor::SensorWithDedup<float> x, y, distance, angle;
int16_t last_x{INT16_MIN};
int16_t last_y{INT16_MIN};
};
-8
View File
@@ -10,11 +10,6 @@
#include "esphome/components/sensor/sensor_with_dedup.h"
#endif
#define LOG_SENSOR_WITH_DEDUP_SAFE(tag, name, sensor) \
if ((sensor).has_sensor()) { \
LOG_SENSOR(tag, name, (sensor).get_sensor()); \
}
#define SAFE_PUBLISH_SENSOR(sensor, value) (sensor).publish_state_if_not_dup(value)
#define SAFE_PUBLISH_SENSOR_UNKNOWN(sensor) (sensor).publish_state_unknown()
@@ -53,7 +48,4 @@ inline void format_version_str(const uint8_t *version, std::span<char, 20> buffe
version[2]);
}
#ifdef USE_SENSOR
template<typename T> using SensorWithDedup = sensor::SensorWithDedup<T>;
#endif
} // namespace esphome::ld24xx