diff --git a/esphome/components/daikin_madoka/daikin_madoka.cpp b/esphome/components/daikin_madoka/daikin_madoka.cpp index 283fe0a96ac7..24f5e9542d2c 100644 --- a/esphome/components/daikin_madoka/daikin_madoka.cpp +++ b/esphome/components/daikin_madoka/daikin_madoka.cpp @@ -45,6 +45,7 @@ void DaikinMadoka::loop() { void DaikinMadoka::control(const ClimateCall &call) { if (this->node_state != espbt::ClientState::ESTABLISHED) return; + this->last_control_ms_ = millis(); if (call.get_mode().has_value()) { ClimateMode mode = *call.get_mode(); uint8_t mode_out = 255, status_out = 0; @@ -209,6 +210,11 @@ void DaikinMadoka::update() { ESP_LOGD(TAG, "...but device is disconnected"); return; } + if (this->last_control_ms_ > 0 && millis() - this->last_control_ms_ < 5000) { + ESP_LOGD(TAG, "...skipping, cooldown after control command"); + return; + } + this->last_control_ms_ = 0; std::vector all_cmds{CMD_GET_SETTING_STATUS, CMD_GET_OPERATION_MODE, CMD_GET_SETPOINT, CMD_GET_FAN_SPEED, CMD_GET_SENSOR_INFORMATION}; diff --git a/esphome/components/daikin_madoka/daikin_madoka.h b/esphome/components/daikin_madoka/daikin_madoka.h index c9725276f434..561545d5e1ab 100644 --- a/esphome/components/daikin_madoka/daikin_madoka.h +++ b/esphome/components/daikin_madoka/daikin_madoka.h @@ -52,6 +52,7 @@ static const espbt::ESPBTUUID WWR_CHARACTERISTIC_UUID = class DaikinMadoka : public climate::Climate, public esphome::ble_client::BLEClientNode, public PollingComponent { protected: bool should_update_ = false; + uint32_t last_control_ms_{0}; std::queue> received_chunks_ = {}; std::map> pending_chunks_ = {}; uint16_t notify_handle_;