mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
Properly calculate negative temperatures in sm300d2 (#2335)
Co-authored-by: Matt Hallacy <github@poptix.net>
This commit is contained in:
parent
945ed5d3bd
commit
81685573e1
1 changed files with 8 additions and 2 deletions
|
@ -29,8 +29,11 @@ void SM300D2Sensor::update() {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t calculated_checksum = this->sm300d2_checksum_(response);
|
uint16_t calculated_checksum = this->sm300d2_checksum_(response);
|
||||||
|
// Occasionally the checksum has a +/- 0x80 offset. Negative temperatures are
|
||||||
|
// responsible for some of these. The rest are unknown/undocumented.
|
||||||
if ((calculated_checksum != response[SM300D2_RESPONSE_LENGTH - 1]) &&
|
if ((calculated_checksum != response[SM300D2_RESPONSE_LENGTH - 1]) &&
|
||||||
(calculated_checksum - 0x80 != response[SM300D2_RESPONSE_LENGTH - 1])) {
|
(calculated_checksum - 0x80 != response[SM300D2_RESPONSE_LENGTH - 1]) &&
|
||||||
|
(calculated_checksum + 0x80 != response[SM300D2_RESPONSE_LENGTH - 1])) {
|
||||||
ESP_LOGW(TAG, "SM300D2 Checksum doesn't match: 0x%02X!=0x%02X", response[SM300D2_RESPONSE_LENGTH - 1],
|
ESP_LOGW(TAG, "SM300D2 Checksum doesn't match: 0x%02X!=0x%02X", response[SM300D2_RESPONSE_LENGTH - 1],
|
||||||
calculated_checksum);
|
calculated_checksum);
|
||||||
this->status_set_warning();
|
this->status_set_warning();
|
||||||
|
@ -46,7 +49,10 @@ void SM300D2Sensor::update() {
|
||||||
const uint16_t tvoc = (response[6] * 256) + response[7];
|
const uint16_t tvoc = (response[6] * 256) + response[7];
|
||||||
const uint16_t pm_2_5 = (response[8] * 256) + response[9];
|
const uint16_t pm_2_5 = (response[8] * 256) + response[9];
|
||||||
const uint16_t pm_10_0 = (response[10] * 256) + response[11];
|
const uint16_t pm_10_0 = (response[10] * 256) + response[11];
|
||||||
const float temperature = response[12] + (response[13] * 0.1);
|
// A negative value is indicated by adding 0x80 (128) to the temperature value
|
||||||
|
const float temperature = ((response[12] + (response[13] * 0.1)) > 128)
|
||||||
|
? (((response[12] + (response[13] * 0.1)) - 128) * -1)
|
||||||
|
: response[12] + (response[13] * 0.1);
|
||||||
const float humidity = response[14] + (response[15] * 0.1);
|
const float humidity = response[14] + (response[15] * 0.1);
|
||||||
|
|
||||||
ESP_LOGD(TAG, "Received CO₂: %u ppm", co2);
|
ESP_LOGD(TAG, "Received CO₂: %u ppm", co2);
|
||||||
|
|
Loading…
Reference in a new issue