[mitsubishi_cn105] add support for half-degree temperature setpoint (#15919)

This commit is contained in:
Boris Krivonog
2026-04-26 14:19:49 +02:00
committed by GitHub
parent b084fa4490
commit c8d4420408
2 changed files with 14 additions and 3 deletions
@@ -352,7 +352,7 @@ void MitsubishiCN105::set_target_temperature(float target_temperature) {
ESP_LOGD(TAG, "Setting temperature out-of-range: %.1f", target_temperature); ESP_LOGD(TAG, "Setting temperature out-of-range: %.1f", target_temperature);
return; return;
} }
this->status_.target_temperature = std::round(target_temperature); this->status_.target_temperature = target_temperature;
this->pending_updates_.set(UpdateFlag::TEMPERATURE); this->pending_updates_.set(UpdateFlag::TEMPERATURE);
} }
@@ -387,9 +387,9 @@ void MitsubishiCN105::apply_settings_() {
if (this->pending_updates_.has(UpdateFlag::TEMPERATURE)) { if (this->pending_updates_.has(UpdateFlag::TEMPERATURE)) {
payload[1] |= 0x04; payload[1] |= 0x04;
if (this->use_temperature_encoding_b_) { if (this->use_temperature_encoding_b_) {
payload[14] = static_cast<uint8_t>(this->status_.target_temperature * 2.0f + 128.0f); payload[14] = static_cast<uint8_t>(std::round(this->status_.target_temperature * 2.0f) + 128);
} else { } else {
payload[5] = static_cast<uint8_t>(TARGET_TEMPERATURE_ENC_A_OFFSET - this->status_.target_temperature); payload[5] = static_cast<uint8_t>(TARGET_TEMPERATURE_ENC_A_OFFSET - std::round(this->status_.target_temperature));
} }
} }
@@ -341,6 +341,17 @@ TEST(MitsubishiCN105Tests, ApplySettingsTemperatureEncodedB) {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0xC5)); 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x00, 0xC5));
} }
TEST(MitsubishiCN105Tests, ApplySettingsHalfDegreeTemperatureEncodedB) {
auto ctx = TestContext{};
ctx.sut.use_temperature_encoding_b_ = true;
ctx.sut.set_target_temperature(26.5f);
ctx.sut.apply_settings();
EXPECT_THAT(ctx.uart.tx, ::testing::ElementsAre(0xFC, 0x41, 0x01, 0x30, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB5, 0x00, 0xC4));
}
TEST(MitsubishiCN105Tests, ApplyModeCool) { TEST(MitsubishiCN105Tests, ApplyModeCool) {
auto ctx = TestContext{}; auto ctx = TestContext{};