Merge pull request #3134 from s-schnitzer/fix-negative-dew-point-calculation

fix: negative dew point calculation (emulated RC100H)
This commit is contained in:
Proddy
2026-06-25 21:05:17 +02:00
committed by GitHub

View File

@@ -377,19 +377,23 @@ void Roomctrl::temperature(uint8_t addr, uint8_t dst, uint8_t hc) {
// send telegram 0x047B only for RC100H // send telegram 0x047B only for RC100H
void Roomctrl::humidity(uint8_t addr, uint8_t dst, uint8_t hc) { void Roomctrl::humidity(uint8_t addr, uint8_t dst, uint8_t hc) {
int16_t dew = calc_dew(remotetemp_[hc], remotehum_[hc]);
int8_t dew8 = EMS_VALUE_INT8_NOTSET;
if (dew != EMS_VALUE_INT16_NOTSET) {
dew8 = static_cast<int8_t>((dew >= 0 ? dew + 5 : dew - 5) / 10);
}
uint8_t data[11]; uint8_t data[11];
data[0] = addr | EMSbus::ems_mask(); data[0] = addr | EMSbus::ems_mask();
data[1] = dst & 0x7F; data[1] = dst & 0x7F;
uint16_t dew = calc_dew(remotetemp_[hc], remotehum_[hc]); data[2] = 0xFF;
data[2] = 0xFF; data[3] = 0;
data[3] = 0; data[4] = 3;
data[4] = 3; data[5] = 0x7B + hc;
data[5] = 0x7B + hc; data[6] = static_cast<uint8_t>(dew8);
data[6] = dew == EMS_VALUE_INT16_NOTSET ? EMS_VALUE_INT8_NOTSET : (uint8_t)((dew + 5) / 10); data[7] = remotehum_[hc];
data[7] = remotehum_[hc]; data[8] = static_cast<uint8_t>(static_cast<uint16_t>(dew) >> 8);
data[8] = (uint8_t)(dew << 8); data[9] = static_cast<uint8_t>(static_cast<uint16_t>(dew) & 0xFF);
data[9] = (uint8_t)(dew & 0xFF); data[10] = EMSbus::calculate_crc(data, 10); // append CRC
data[10] = EMSbus::calculate_crc(data, 10); // append CRC
EMSuart::transmit(data, 11); EMSuart::transmit(data, 11);
} }