mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
dfrobot_sen0395: Use setLatency instead of outputLatency (#5665)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
parent
0fa0904bc5
commit
b28821d846
4 changed files with 19 additions and 28 deletions
|
@ -1,7 +1,6 @@
|
||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome import automation
|
from esphome import automation
|
||||||
from esphome import core
|
|
||||||
from esphome.automation import maybe_simple_id
|
from esphome.automation import maybe_simple_id
|
||||||
from esphome.const import CONF_ID
|
from esphome.const import CONF_ID
|
||||||
from esphome.components import uart
|
from esphome.components import uart
|
||||||
|
@ -101,7 +100,7 @@ def range_segment_list(input):
|
||||||
|
|
||||||
largest_distance = -1
|
largest_distance = -1
|
||||||
for distance in input:
|
for distance in input:
|
||||||
if isinstance(distance, core.Lambda):
|
if isinstance(distance, cv.Lambda):
|
||||||
continue
|
continue
|
||||||
m = cv.distance(distance)
|
m = cv.distance(distance)
|
||||||
if m > 9:
|
if m > 9:
|
||||||
|
@ -128,14 +127,14 @@ MMWAVE_SETTINGS_SCHEMA = cv.Schema(
|
||||||
cv.Optional(CONF_OUTPUT_LATENCY): {
|
cv.Optional(CONF_OUTPUT_LATENCY): {
|
||||||
cv.Required(CONF_DELAY_AFTER_DETECT): cv.templatable(
|
cv.Required(CONF_DELAY_AFTER_DETECT): cv.templatable(
|
||||||
cv.All(
|
cv.All(
|
||||||
cv.positive_time_period,
|
cv.positive_time_period_milliseconds,
|
||||||
cv.Range(max=core.TimePeriod(seconds=1638.375)),
|
cv.Range(max=cv.TimePeriod(seconds=1638.375)),
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
cv.Required(CONF_DELAY_AFTER_DISAPPEAR): cv.templatable(
|
cv.Required(CONF_DELAY_AFTER_DISAPPEAR): cv.templatable(
|
||||||
cv.All(
|
cv.All(
|
||||||
cv.positive_time_period,
|
cv.positive_time_period_milliseconds,
|
||||||
cv.Range(max=core.TimePeriod(seconds=1638.375)),
|
cv.Range(max=cv.TimePeriod(seconds=1638.375)),
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
|
|
@ -50,7 +50,7 @@ class DfrobotSen0395SettingsAction : public Action<Ts...>, public Parented<Dfrob
|
||||||
float detect = this->delay_after_detect_.value(x...);
|
float detect = this->delay_after_detect_.value(x...);
|
||||||
float disappear = this->delay_after_disappear_.value(x...);
|
float disappear = this->delay_after_disappear_.value(x...);
|
||||||
if (detect >= 0 && disappear >= 0) {
|
if (detect >= 0 && disappear >= 0) {
|
||||||
this->parent_->enqueue(make_unique<OutputLatencyCommand>(detect, disappear));
|
this->parent_->enqueue(make_unique<SetLatencyCommand>(detect, disappear));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this->start_after_power_on_.has_value()) {
|
if (this->start_after_power_on_.has_value()) {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "commands.h"
|
#include "commands.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
|
|
||||||
#include "dfrobot_sen0395.h"
|
#include "dfrobot_sen0395.h"
|
||||||
|
@ -194,32 +196,22 @@ uint8_t DetRangeCfgCommand::on_message(std::string &message) {
|
||||||
return 0; // Command not done yet.
|
return 0; // Command not done yet.
|
||||||
}
|
}
|
||||||
|
|
||||||
OutputLatencyCommand::OutputLatencyCommand(float delay_after_detection, float delay_after_disappear) {
|
SetLatencyCommand::SetLatencyCommand(float delay_after_detection, float delay_after_disappear) {
|
||||||
delay_after_detection = round(delay_after_detection / 0.025) * 0.025;
|
delay_after_detection = std::round(delay_after_detection / 0.025f) * 0.025f;
|
||||||
delay_after_disappear = round(delay_after_disappear / 0.025) * 0.025;
|
delay_after_disappear = std::round(delay_after_disappear / 0.025f) * 0.025f;
|
||||||
if (delay_after_detection < 0)
|
this->delay_after_detection_ = clamp(delay_after_detection, 0.0f, 1638.375f);
|
||||||
delay_after_detection = 0;
|
this->delay_after_disappear_ = clamp(delay_after_disappear, 0.0f, 1638.375f);
|
||||||
if (delay_after_detection > 1638.375)
|
this->cmd_ = str_sprintf("setLatency %.03f %.03f", this->delay_after_detection_, this->delay_after_disappear_);
|
||||||
delay_after_detection = 1638.375;
|
|
||||||
if (delay_after_disappear < 0)
|
|
||||||
delay_after_disappear = 0;
|
|
||||||
if (delay_after_disappear > 1638.375)
|
|
||||||
delay_after_disappear = 1638.375;
|
|
||||||
|
|
||||||
this->delay_after_detection_ = delay_after_detection;
|
|
||||||
this->delay_after_disappear_ = delay_after_disappear;
|
|
||||||
|
|
||||||
this->cmd_ = str_sprintf("outputLatency -1 %.0f %.0f", delay_after_detection / 0.025, delay_after_disappear / 0.025);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t OutputLatencyCommand::on_message(std::string &message) {
|
uint8_t SetLatencyCommand::on_message(std::string &message) {
|
||||||
if (message == "sensor is not stopped") {
|
if (message == "sensor is not stopped") {
|
||||||
ESP_LOGE(TAG, "Cannot configure output latency. Sensor is not stopped!");
|
ESP_LOGE(TAG, "Cannot configure output latency. Sensor is not stopped!");
|
||||||
return 1; // Command done
|
return 1; // Command done
|
||||||
} else if (message == "Done") {
|
} else if (message == "Done") {
|
||||||
ESP_LOGI(TAG, "Updated output latency config:");
|
ESP_LOGI(TAG, "Updated output latency config:");
|
||||||
ESP_LOGI(TAG, "Signal that someone was detected is delayed by %.02fs.", this->delay_after_detection_);
|
ESP_LOGI(TAG, "Signal that someone was detected is delayed by %.03f s.", this->delay_after_detection_);
|
||||||
ESP_LOGI(TAG, "Signal that nobody is detected anymore is delayed by %.02fs.", this->delay_after_disappear_);
|
ESP_LOGI(TAG, "Signal that nobody is detected anymore is delayed by %.03f s.", this->delay_after_disappear_);
|
||||||
ESP_LOGD(TAG, "Used command: %s", this->cmd_.c_str());
|
ESP_LOGD(TAG, "Used command: %s", this->cmd_.c_str());
|
||||||
return 1; // Command done
|
return 1; // Command done
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,9 +62,9 @@ class DetRangeCfgCommand : public Command {
|
||||||
// TODO: Set min max values in component, so they can be published as sensor.
|
// TODO: Set min max values in component, so they can be published as sensor.
|
||||||
};
|
};
|
||||||
|
|
||||||
class OutputLatencyCommand : public Command {
|
class SetLatencyCommand : public Command {
|
||||||
public:
|
public:
|
||||||
OutputLatencyCommand(float delay_after_detection, float delay_after_disappear);
|
SetLatencyCommand(float delay_after_detection, float delay_after_disappear);
|
||||||
uint8_t on_message(std::string &message) override;
|
uint8_t on_message(std::string &message) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
Loading…
Reference in a new issue