mirror of
https://github.com/esphome/esphome.git
synced 2024-11-29 12:55:46 +01:00
Tuya Number: split "multiply" to a separate option (#5458)
This commit is contained in:
parent
e95ba57a61
commit
f38849828d
@ -6,6 +6,7 @@ from esphome.const import (
|
|||||||
CONF_NUMBER_DATAPOINT,
|
CONF_NUMBER_DATAPOINT,
|
||||||
CONF_MAX_VALUE,
|
CONF_MAX_VALUE,
|
||||||
CONF_MIN_VALUE,
|
CONF_MIN_VALUE,
|
||||||
|
CONF_MULTIPLY,
|
||||||
CONF_STEP,
|
CONF_STEP,
|
||||||
)
|
)
|
||||||
from .. import tuya_ns, CONF_TUYA_ID, Tuya
|
from .. import tuya_ns, CONF_TUYA_ID, Tuya
|
||||||
@ -31,6 +32,7 @@ CONFIG_SCHEMA = cv.All(
|
|||||||
cv.Required(CONF_MAX_VALUE): cv.float_,
|
cv.Required(CONF_MAX_VALUE): cv.float_,
|
||||||
cv.Required(CONF_MIN_VALUE): cv.float_,
|
cv.Required(CONF_MIN_VALUE): cv.float_,
|
||||||
cv.Required(CONF_STEP): cv.positive_float,
|
cv.Required(CONF_STEP): cv.positive_float,
|
||||||
|
cv.Optional(CONF_MULTIPLY, default=1.0): cv.float_,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
.extend(cv.COMPONENT_SCHEMA),
|
.extend(cv.COMPONENT_SCHEMA),
|
||||||
@ -49,7 +51,8 @@ async def to_code(config):
|
|||||||
step=config[CONF_STEP],
|
step=config[CONF_STEP],
|
||||||
)
|
)
|
||||||
|
|
||||||
paren = await cg.get_variable(config[CONF_TUYA_ID])
|
cg.add(var.set_write_multiply(config[CONF_MULTIPLY]))
|
||||||
cg.add(var.set_tuya_parent(paren))
|
parent = await cg.get_variable(config[CONF_TUYA_ID])
|
||||||
|
cg.add(var.set_tuya_parent(parent))
|
||||||
|
|
||||||
cg.add(var.set_number_id(config[CONF_NUMBER_DATAPOINT]))
|
cg.add(var.set_number_id(config[CONF_NUMBER_DATAPOINT]))
|
||||||
|
@ -10,7 +10,7 @@ void TuyaNumber::setup() {
|
|||||||
this->parent_->register_listener(this->number_id_, [this](const TuyaDatapoint &datapoint) {
|
this->parent_->register_listener(this->number_id_, [this](const TuyaDatapoint &datapoint) {
|
||||||
if (datapoint.type == TuyaDatapointType::INTEGER) {
|
if (datapoint.type == TuyaDatapointType::INTEGER) {
|
||||||
ESP_LOGV(TAG, "MCU reported number %u is: %d", datapoint.id, datapoint.value_int);
|
ESP_LOGV(TAG, "MCU reported number %u is: %d", datapoint.id, datapoint.value_int);
|
||||||
this->publish_state(datapoint.value_int * this->traits.get_step());
|
this->publish_state(datapoint.value_int / multiply_by_);
|
||||||
} else if (datapoint.type == TuyaDatapointType::ENUM) {
|
} else if (datapoint.type == TuyaDatapointType::ENUM) {
|
||||||
ESP_LOGV(TAG, "MCU reported number %u is: %u", datapoint.id, datapoint.value_enum);
|
ESP_LOGV(TAG, "MCU reported number %u is: %u", datapoint.id, datapoint.value_enum);
|
||||||
this->publish_state(datapoint.value_enum);
|
this->publish_state(datapoint.value_enum);
|
||||||
@ -22,7 +22,7 @@ void TuyaNumber::setup() {
|
|||||||
void TuyaNumber::control(float value) {
|
void TuyaNumber::control(float value) {
|
||||||
ESP_LOGV(TAG, "Setting number %u: %f", this->number_id_, value);
|
ESP_LOGV(TAG, "Setting number %u: %f", this->number_id_, value);
|
||||||
if (this->type_ == TuyaDatapointType::INTEGER) {
|
if (this->type_ == TuyaDatapointType::INTEGER) {
|
||||||
int integer_value = lround(value / this->traits.get_step());
|
int integer_value = lround(value * multiply_by_);
|
||||||
this->parent_->set_integer_datapoint_value(this->number_id_, integer_value);
|
this->parent_->set_integer_datapoint_value(this->number_id_, integer_value);
|
||||||
} else if (this->type_ == TuyaDatapointType::ENUM) {
|
} else if (this->type_ == TuyaDatapointType::ENUM) {
|
||||||
this->parent_->set_enum_datapoint_value(this->number_id_, value);
|
this->parent_->set_enum_datapoint_value(this->number_id_, value);
|
||||||
|
@ -12,6 +12,7 @@ class TuyaNumber : public number::Number, public Component {
|
|||||||
void setup() override;
|
void setup() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
void set_number_id(uint8_t number_id) { this->number_id_ = number_id; }
|
void set_number_id(uint8_t number_id) { this->number_id_ = number_id; }
|
||||||
|
void set_write_multiply(float factor) { multiply_by_ = factor; }
|
||||||
|
|
||||||
void set_tuya_parent(Tuya *parent) { this->parent_ = parent; }
|
void set_tuya_parent(Tuya *parent) { this->parent_ = parent; }
|
||||||
|
|
||||||
@ -20,6 +21,7 @@ class TuyaNumber : public number::Number, public Component {
|
|||||||
|
|
||||||
Tuya *parent_;
|
Tuya *parent_;
|
||||||
uint8_t number_id_{0};
|
uint8_t number_id_{0};
|
||||||
|
float multiply_by_{1.0};
|
||||||
TuyaDatapointType type_{};
|
TuyaDatapointType type_{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user