Tuya Fan component fix to handle enum datapoint type (#6135)

This commit is contained in:
sibowler 2024-02-21 08:40:17 +11:00 committed by GitHub
parent 4b04df2f6b
commit 924389ba74
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 1 deletions

View file

@ -34,9 +34,13 @@ void TuyaFan::setup() {
} }
if (this->oscillation_id_.has_value()) { if (this->oscillation_id_.has_value()) {
this->parent_->register_listener(*this->oscillation_id_, [this](const TuyaDatapoint &datapoint) { this->parent_->register_listener(*this->oscillation_id_, [this](const TuyaDatapoint &datapoint) {
// Whether data type is BOOL or ENUM, it will still be a 1 or a 0, so the functions below are valid in both
// scenarios
ESP_LOGV(TAG, "MCU reported oscillation is: %s", ONOFF(datapoint.value_bool)); ESP_LOGV(TAG, "MCU reported oscillation is: %s", ONOFF(datapoint.value_bool));
this->oscillating = datapoint.value_bool; this->oscillating = datapoint.value_bool;
this->publish_state(); this->publish_state();
this->oscillation_type_ = datapoint.type;
}); });
} }
if (this->direction_id_.has_value()) { if (this->direction_id_.has_value()) {
@ -80,7 +84,11 @@ void TuyaFan::control(const fan::FanCall &call) {
this->parent_->set_boolean_datapoint_value(*this->switch_id_, *call.get_state()); this->parent_->set_boolean_datapoint_value(*this->switch_id_, *call.get_state());
} }
if (this->oscillation_id_.has_value() && call.get_oscillating().has_value()) { if (this->oscillation_id_.has_value() && call.get_oscillating().has_value()) {
this->parent_->set_boolean_datapoint_value(*this->oscillation_id_, *call.get_oscillating()); if (this->oscillation_type_ == TuyaDatapointType::ENUM) {
this->parent_->set_enum_datapoint_value(*this->oscillation_id_, *call.get_oscillating());
} else if (this->speed_type_ == TuyaDatapointType::BOOLEAN) {
this->parent_->set_boolean_datapoint_value(*this->oscillation_id_, *call.get_oscillating());
}
} }
if (this->direction_id_.has_value() && call.get_direction().has_value()) { if (this->direction_id_.has_value() && call.get_direction().has_value()) {
bool enable = *call.get_direction() == fan::FanDirection::REVERSE; bool enable = *call.get_direction() == fan::FanDirection::REVERSE;

View file

@ -29,6 +29,7 @@ class TuyaFan : public Component, public fan::Fan {
optional<uint8_t> direction_id_{}; optional<uint8_t> direction_id_{};
int speed_count_{}; int speed_count_{};
TuyaDatapointType speed_type_{}; TuyaDatapointType speed_type_{};
TuyaDatapointType oscillation_type_{};
}; };
} // namespace tuya } // namespace tuya