mirror of
https://github.com/esphome/esphome.git
synced 2026-05-27 03:36:19 +08:00
[mitsubishi_cn105] add support for half-degree temperature setpoint (#15919)
This commit is contained in:
@@ -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{};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user