mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Add greeyac protocol to IR Climate / HeatpumpIR (#2694)
This commit is contained in:
		| @@ -30,6 +30,7 @@ PROTOCOLS = { | |||||||
|     "gree": Protocol.PROTOCOL_GREE, |     "gree": Protocol.PROTOCOL_GREE, | ||||||
|     "greeya": Protocol.PROTOCOL_GREEYAA, |     "greeya": Protocol.PROTOCOL_GREEYAA, | ||||||
|     "greeyan": Protocol.PROTOCOL_GREEYAN, |     "greeyan": Protocol.PROTOCOL_GREEYAN, | ||||||
|  |     "greeyac": Protocol.PROTOCOL_GREEYAC, | ||||||
|     "hisense_aud": Protocol.PROTOCOL_HISENSE_AUD, |     "hisense_aud": Protocol.PROTOCOL_HISENSE_AUD, | ||||||
|     "hitachi": Protocol.PROTOCOL_HITACHI, |     "hitachi": Protocol.PROTOCOL_HITACHI, | ||||||
|     "hyundai": Protocol.PROTOCOL_HYUNDAI, |     "hyundai": Protocol.PROTOCOL_HYUNDAI, | ||||||
| @@ -111,4 +112,6 @@ def to_code(config): | |||||||
|     cg.add(var.set_max_temperature(config[CONF_MIN_TEMPERATURE])) |     cg.add(var.set_max_temperature(config[CONF_MIN_TEMPERATURE])) | ||||||
|     cg.add(var.set_min_temperature(config[CONF_MAX_TEMPERATURE])) |     cg.add(var.set_min_temperature(config[CONF_MAX_TEMPERATURE])) | ||||||
|  |  | ||||||
|     cg.add_library("tonia/HeatpumpIR", "1.0.15") |     # PIO isn't updating releases, so referencing the release tag directly. See: | ||||||
|  |     # https://github.com/ToniA/arduino-heatpumpir/commit/0948c619d86407a4e50e8db2f3c193e0576c86fd | ||||||
|  |     cg.add_library("", "", "https://github.com/ToniA/arduino-heatpumpir.git#1.0.18") | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ const std::map<Protocol, std::function<HeatpumpIR *()>> PROTOCOL_CONSTRUCTOR_MAP | |||||||
|     {PROTOCOL_GREE, []() { return new GreeGenericHeatpumpIR(); }},                           // NOLINT |     {PROTOCOL_GREE, []() { return new GreeGenericHeatpumpIR(); }},                           // NOLINT | ||||||
|     {PROTOCOL_GREEYAA, []() { return new GreeYAAHeatpumpIR(); }},                            // NOLINT |     {PROTOCOL_GREEYAA, []() { return new GreeYAAHeatpumpIR(); }},                            // NOLINT | ||||||
|     {PROTOCOL_GREEYAN, []() { return new GreeYANHeatpumpIR(); }},                            // NOLINT |     {PROTOCOL_GREEYAN, []() { return new GreeYANHeatpumpIR(); }},                            // NOLINT | ||||||
|  |     {PROTOCOL_GREEYAC, []() { return new GreeYACHeatpumpIR(); }},                            // NOLINT | ||||||
|     {PROTOCOL_HISENSE_AUD, []() { return new HisenseHeatpumpIR(); }},                        // NOLINT |     {PROTOCOL_HISENSE_AUD, []() { return new HisenseHeatpumpIR(); }},                        // NOLINT | ||||||
|     {PROTOCOL_HITACHI, []() { return new HitachiHeatpumpIR(); }},                            // NOLINT |     {PROTOCOL_HITACHI, []() { return new HitachiHeatpumpIR(); }},                            // NOLINT | ||||||
|     {PROTOCOL_HYUNDAI, []() { return new HyundaiHeatpumpIR(); }},                            // NOLINT |     {PROTOCOL_HYUNDAI, []() { return new HyundaiHeatpumpIR(); }},                            // NOLINT | ||||||
| @@ -61,6 +62,19 @@ void HeatpumpIRClimate::setup() { | |||||||
|   } |   } | ||||||
|   this->heatpump_ir_ = protocol_constructor->second(); |   this->heatpump_ir_ = protocol_constructor->second(); | ||||||
|   climate_ir::ClimateIR::setup(); |   climate_ir::ClimateIR::setup(); | ||||||
|  |   if (this->sensor_) { | ||||||
|  |     this->sensor_->add_on_state_callback([this](float state) { | ||||||
|  |       this->current_temperature = state; | ||||||
|  |  | ||||||
|  |       IRSenderESPHome esp_sender(this->transmitter_); | ||||||
|  |       this->heatpump_ir_->send(esp_sender, uint8_t(lround(this->current_temperature + 0.5))); | ||||||
|  |  | ||||||
|  |       // current temperature changed, publish state | ||||||
|  |       this->publish_state(); | ||||||
|  |     }); | ||||||
|  |     this->current_temperature = this->sensor_->state; | ||||||
|  |   } else | ||||||
|  |     this->current_temperature = NAN; | ||||||
| } | } | ||||||
|  |  | ||||||
| void HeatpumpIRClimate::transmit_state() { | void HeatpumpIRClimate::transmit_state() { | ||||||
| @@ -171,8 +185,7 @@ void HeatpumpIRClimate::transmit_state() { | |||||||
|  |  | ||||||
|   temperature_cmd = (uint8_t) clamp(this->target_temperature, this->min_temperature_, this->max_temperature_); |   temperature_cmd = (uint8_t) clamp(this->target_temperature, this->min_temperature_, this->max_temperature_); | ||||||
|  |  | ||||||
|   IRSenderESPHome esp_sender(0, this->transmitter_); |   IRSenderESPHome esp_sender(this->transmitter_); | ||||||
|  |  | ||||||
|   heatpump_ir_->send(esp_sender, power_mode_cmd, operating_mode_cmd, fan_speed_cmd, temperature_cmd, swing_v_cmd, |   heatpump_ir_->send(esp_sender, power_mode_cmd, operating_mode_cmd, fan_speed_cmd, temperature_cmd, swing_v_cmd, | ||||||
|                      swing_h_cmd); |                      swing_h_cmd); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ enum Protocol { | |||||||
|   PROTOCOL_GREE, |   PROTOCOL_GREE, | ||||||
|   PROTOCOL_GREEYAA, |   PROTOCOL_GREEYAA, | ||||||
|   PROTOCOL_GREEYAN, |   PROTOCOL_GREEYAN, | ||||||
|  |   PROTOCOL_GREEYAC, | ||||||
|   PROTOCOL_HISENSE_AUD, |   PROTOCOL_HISENSE_AUD, | ||||||
|   PROTOCOL_HITACHI, |   PROTOCOL_HITACHI, | ||||||
|   PROTOCOL_HYUNDAI, |   PROTOCOL_HYUNDAI, | ||||||
|   | |||||||
| @@ -11,8 +11,8 @@ namespace heatpumpir { | |||||||
|  |  | ||||||
| class IRSenderESPHome : public IRSender { | class IRSenderESPHome : public IRSender { | ||||||
|  public: |  public: | ||||||
|   IRSenderESPHome(uint8_t pin, remote_transmitter::RemoteTransmitterComponent *transmitter) |   IRSenderESPHome(remote_transmitter::RemoteTransmitterComponent *transmitter) | ||||||
|       : IRSender(pin), transmit_(transmitter->transmit()){}; |       : IRSender(0), transmit_(transmitter->transmit()){}; | ||||||
|   void setFrequency(int frequency) override;  // NOLINT(readability-identifier-naming) |   void setFrequency(int frequency) override;  // NOLINT(readability-identifier-naming) | ||||||
|   void space(int space_length) override; |   void space(int space_length) override; | ||||||
|   void mark(int mark_length) override; |   void mark(int mark_length) override; | ||||||
|   | |||||||
| @@ -49,7 +49,9 @@ lib_deps = | |||||||
|     glmnet/Dsmr@0.5                                       ; dsmr |     glmnet/Dsmr@0.5                                       ; dsmr | ||||||
|     rweather/Crypto@0.2.0                                 ; dsmr |     rweather/Crypto@0.2.0                                 ; dsmr | ||||||
|     dudanov/MideaUART@1.1.8                               ; midea |     dudanov/MideaUART@1.1.8                               ; midea | ||||||
|     tonia/HeatpumpIR@1.0.15                               ; heatpumpir |     ; PIO isn't update releases correctly, see: | ||||||
|  |     ; https://github.com/ToniA/arduino-heatpumpir/commit/0948c619d86407a4e50e8db2f3c193e0576c86fd | ||||||
|  |     https://github.com/ToniA/arduino-heatpumpir.git#1.0.18  ; heatpumpir | ||||||
| build_flags = | build_flags = | ||||||
|     ${common.build_flags} |     ${common.build_flags} | ||||||
|     -DUSE_ARDUINO |     -DUSE_ARDUINO | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user