Add some sanity checking when set to Internal temperature source

This commit is contained in:
Sammy1Am 2024-08-15 04:10:24 +00:00
parent 0bb5419851
commit 25326fa6b9
2 changed files with 19 additions and 13 deletions

View file

@ -51,19 +51,25 @@ void MitsubishiUART::loop() {
if (ts_bridge_) if (ts_bridge_)
ts_bridge_->loop(); ts_bridge_->loop();
// If it's been too long since we received a temperature update (and we're not set to Internal) if ((millis() - last_received_temperature_) > TEMPERATURE_SOURCE_TIMEOUT_MS) {
if (((millis() - last_received_temperature_) > TEMPERATURE_SOURCE_TIMEOUT_MS) && if (current_temperature_source_.empty() || current_temperature_source_ != TEMPERATURE_SOURCE_INTERNAL) {
current_temperature_source_ != TEMPERATURE_SOURCE_INTERNAL && !temperature_source_timeout_) { ESP_LOGD(TAG, "Reminding heat pump to use internal temperature sensor");
ESP_LOGW(TAG, "No temperature received from %s for %lu milliseconds, reverting to Internal source", // Check to make sure a temperature source is set-- if not, set to internal for sanity reasons
current_temperature_source_.c_str(), (unsigned long) TEMPERATURE_SOURCE_TIMEOUT_MS); IFACTIVE(this->select_temperature_source(TEMPERATURE_SOURCE_INTERNAL);)
// Let listeners know we've changed to the Internal temperature source (but do not change last_received_temperature_ = millis(); // Count this as "receiving" the internal temperature
// currentTemperatureSource) } else if (!temperature_source_timeout_) {
for (auto *listener : listeners_) { // If it's been too long since we received a temperature update (and we're not set to Internal)
listener->temperature_source_change(TEMPERATURE_SOURCE_INTERNAL); ESP_LOGW(TAG, "No temperature received from %s for %lu milliseconds, reverting to Internal source",
current_temperature_source_.c_str(), (unsigned long) TEMPERATURE_SOURCE_TIMEOUT_MS);
// Let listeners know we've changed to the Internal temperature source (but do not change
// currentTemperatureSource)
for (auto *listener : listeners_) {
listener->temperature_source_change(TEMPERATURE_SOURCE_INTERNAL);
}
temperature_source_timeout_ = true;
// Send a packet to the heat pump to tell it to switch to internal temperature sensing
IFACTIVE(hp_bridge_.send_packet(RemoteTemperatureSetRequestPacket().use_internal_temperature());)
} }
temperature_source_timeout_ = true;
// Send a packet to the heat pump to tell it to switch to internal temperature sensing
IFACTIVE(hp_bridge_.send_packet(RemoteTemperatureSetRequestPacket().use_internal_temperature());)
} }
} }

View file

@ -165,7 +165,7 @@ class MitsubishiUART : public PollingComponent, public climate::Climate, public
} }
// Temperature select extras // Temperature select extras
std::string current_temperature_source_ = TEMPERATURE_SOURCE_INTERNAL; std::string current_temperature_source_;
uint32_t last_received_temperature_ = millis(); uint32_t last_received_temperature_ = millis();
bool temperature_source_timeout_ = false; // Has the current source timed out? bool temperature_source_timeout_ = false; // Has the current source timed out?