mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Add reports fahrenheit to tuya climate (#4032)
This commit is contained in:
		| @@ -25,6 +25,7 @@ CONF_CURRENT_TEMPERATURE_MULTIPLIER = "current_temperature_multiplier" | ||||
| CONF_TARGET_TEMPERATURE_MULTIPLIER = "target_temperature_multiplier" | ||||
| CONF_ECO_DATAPOINT = "eco_datapoint" | ||||
| CONF_ECO_TEMPERATURE = "eco_temperature" | ||||
| CONF_REPORTS_FAHRENHEIT = "reports_fahrenheit" | ||||
|  | ||||
| TuyaClimate = tuya_ns.class_("TuyaClimate", climate.Climate, cg.Component) | ||||
|  | ||||
| @@ -110,6 +111,7 @@ CONFIG_SCHEMA = cv.All( | ||||
|             cv.Optional(CONF_TARGET_TEMPERATURE_MULTIPLIER): cv.positive_float, | ||||
|             cv.Optional(CONF_ECO_DATAPOINT): cv.uint8_t, | ||||
|             cv.Optional(CONF_ECO_TEMPERATURE): cv.temperature, | ||||
|             cv.Optional(CONF_REPORTS_FAHRENHEIT, default=False): cv.boolean, | ||||
|         } | ||||
|     ).extend(cv.COMPONENT_SCHEMA), | ||||
|     cv.has_at_least_one_key(CONF_TARGET_TEMPERATURE_DATAPOINT, CONF_SWITCH_DATAPOINT), | ||||
| @@ -186,3 +188,6 @@ async def to_code(config): | ||||
|         cg.add(var.set_eco_id(config[CONF_ECO_DATAPOINT])) | ||||
|         if CONF_ECO_TEMPERATURE in config: | ||||
|             cg.add(var.set_eco_temperature(config[CONF_ECO_TEMPERATURE])) | ||||
|  | ||||
|     if config[CONF_REPORTS_FAHRENHEIT]: | ||||
|         cg.add(var.set_reports_fahrenheit()) | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| #include "esphome/core/log.h" | ||||
| #include "tuya_climate.h" | ||||
| #include "esphome/core/log.h" | ||||
|  | ||||
| namespace esphome { | ||||
| namespace tuya { | ||||
| @@ -44,6 +44,10 @@ void TuyaClimate::setup() { | ||||
|   if (this->target_temperature_id_.has_value()) { | ||||
|     this->parent_->register_listener(*this->target_temperature_id_, [this](const TuyaDatapoint &datapoint) { | ||||
|       this->manual_temperature_ = datapoint.value_int * this->target_temperature_multiplier_; | ||||
|       if (this->reports_fahrenheit_) { | ||||
|         this->manual_temperature_ = (this->manual_temperature_ - 32) * 5 / 9; | ||||
|       } | ||||
|  | ||||
|       ESP_LOGV(TAG, "MCU reported manual target temperature is: %.1f", this->manual_temperature_); | ||||
|       this->compute_target_temperature_(); | ||||
|       this->compute_state_(); | ||||
| @@ -53,6 +57,10 @@ void TuyaClimate::setup() { | ||||
|   if (this->current_temperature_id_.has_value()) { | ||||
|     this->parent_->register_listener(*this->current_temperature_id_, [this](const TuyaDatapoint &datapoint) { | ||||
|       this->current_temperature = datapoint.value_int * this->current_temperature_multiplier_; | ||||
|       if (this->reports_fahrenheit_) { | ||||
|         this->current_temperature = (this->current_temperature - 32) * 5 / 9; | ||||
|       } | ||||
|  | ||||
|       ESP_LOGV(TAG, "MCU reported current temperature is: %.1f", this->current_temperature); | ||||
|       this->compute_state_(); | ||||
|       this->publish_state(); | ||||
| @@ -105,7 +113,10 @@ void TuyaClimate::control(const climate::ClimateCall &call) { | ||||
|   } | ||||
|  | ||||
|   if (call.get_target_temperature().has_value()) { | ||||
|     const float target_temperature = *call.get_target_temperature(); | ||||
|     float target_temperature = *call.get_target_temperature(); | ||||
|     if (this->reports_fahrenheit_) | ||||
|       target_temperature = (target_temperature * 9 / 5) + 32; | ||||
|  | ||||
|     ESP_LOGV(TAG, "Setting target temperature: %.1f", target_temperature); | ||||
|     this->parent_->set_integer_datapoint_value(*this->target_temperature_id_, | ||||
|                                                (int) (target_temperature / this->target_temperature_multiplier_)); | ||||
|   | ||||
| @@ -35,6 +35,8 @@ class TuyaClimate : public climate::Climate, public Component { | ||||
|   void set_eco_id(uint8_t eco_id) { this->eco_id_ = eco_id; } | ||||
|   void set_eco_temperature(float eco_temperature) { this->eco_temperature_ = eco_temperature; } | ||||
|  | ||||
|   void set_reports_fahrenheit() { this->reports_fahrenheit_ = true; } | ||||
|  | ||||
|   void set_tuya_parent(Tuya *parent) { this->parent_ = parent; } | ||||
|  | ||||
|  protected: | ||||
| @@ -77,6 +79,7 @@ class TuyaClimate : public climate::Climate, public Component { | ||||
|   bool cooling_state_{false}; | ||||
|   float manual_temperature_; | ||||
|   bool eco_; | ||||
|   bool reports_fahrenheit_{false}; | ||||
| }; | ||||
|  | ||||
| }  // namespace tuya | ||||
|   | ||||
| @@ -381,6 +381,7 @@ climate: | ||||
|     target_temperature_datapoint: 3 | ||||
|     current_temperature_multiplier: 0.5 | ||||
|     target_temperature_multiplier: 0.5 | ||||
|     reports_fahrenheit: true | ||||
|  | ||||
| switch: | ||||
|   - platform: tuya | ||||
|   | ||||
		Reference in New Issue
	
	Block a user