1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-15 15:18:16 +00:00

Chore: Reorganization and optimization of the algorithm

This commit is contained in:
Andrew J.Swan 2025-02-22 10:45:51 +02:00
parent ec333215f6
commit ba1bcc5405
2 changed files with 45 additions and 47 deletions

View File

@ -24,13 +24,13 @@ static const uint8_t MEASURING_VALUE_INDEX = 9;
static const LogString *pm2005_get_situation_string(int status) { static const LogString *pm2005_get_situation_string(int status) {
switch (status) { switch (status) {
case 1: case 1:
return LOG_STR("Close."); return LOG_STR("Close");
case 2: case 2:
return LOG_STR("Malfunction."); return LOG_STR("Malfunction");
case 3: case 3:
return LOG_STR("Under detecting."); return LOG_STR("Under detecting");
case 0x80: case 0x80:
return LOG_STR("Detecting completed."); return LOG_STR("Detecting completed");
default: default:
return LOG_STR("Invalid"); return LOG_STR("Invalid");
} }
@ -40,13 +40,13 @@ static const LogString *pm2005_get_situation_string(int status) {
static const LogString *pm2005_get_measuring_mode_string(int status) { static const LogString *pm2005_get_measuring_mode_string(int status) {
switch (status) { switch (status) {
case 2: case 2:
return LOG_STR("Single measuring mode."); return LOG_STR("Single measuring mode");
case 3: case 3:
return LOG_STR("Continuous measuring mode."); return LOG_STR("Continuous measuring mode");
case 5: case 5:
return LOG_STR("Dynamic measuring mode."); return LOG_STR("Dynamic measuring mode");
default: default:
return LOG_STR("Unknown"); return LOG_STR("Timing measuring mode");
} }
} }
@ -57,17 +57,19 @@ void PM2005Component::update() {
return; return;
} }
if (this->sensor_situation_ != data_buffer_[SITUATION_VALUE_INDEX]) { if (this->sensor_situation_ == data_buffer_[SITUATION_VALUE_INDEX]) {
return;
}
this->sensor_situation_ = data_buffer_[SITUATION_VALUE_INDEX]; this->sensor_situation_ = data_buffer_[SITUATION_VALUE_INDEX];
if (this->sensor_situation_ == 1)
ESP_LOGD(TAG, "Sensor situation: %s.", LOG_STR_ARG(pm2005_get_situation_string(this->sensor_situation_)));
else if (this->sensor_situation_ == 2) {
ESP_LOGD(TAG, "Sensor situation: %s.", LOG_STR_ARG(pm2005_get_situation_string(this->sensor_situation_))); ESP_LOGD(TAG, "Sensor situation: %s.", LOG_STR_ARG(pm2005_get_situation_string(this->sensor_situation_)));
if (this->sensor_situation_ == 2) {
this->status_set_warning(); this->status_set_warning();
} else if (this->sensor_situation_ == 3) return;
ESP_LOGD(TAG, "Sensor situation: %s.", LOG_STR_ARG(pm2005_get_situation_string(this->sensor_situation_))); }
else if (this->sensor_situation_ == 0x80) { if (this->sensor_situation_ != 0x80) {
ESP_LOGD(TAG, "Sensor situation: %s.", LOG_STR_ARG(pm2005_get_situation_string(this->sensor_situation_))); return;
}
if (this->pm_1_0_sensor_ != nullptr) { if (this->pm_1_0_sensor_ != nullptr) {
int16_t pm1 = get_sensor_value_(data_buffer_, PM_1_0_VALUE_INDEX); int16_t pm1 = get_sensor_value_(data_buffer_, PM_1_0_VALUE_INDEX);
@ -88,15 +90,11 @@ void PM2005Component::update() {
} }
uint16_t sensor_measuring_mode = get_sensor_value_(data_buffer_, MEASURING_VALUE_INDEX); uint16_t sensor_measuring_mode = get_sensor_value_(data_buffer_, MEASURING_VALUE_INDEX);
if (sensor_measuring_mode >= 2 && sensor_measuring_mode <= 5) {
ESP_LOGD(TAG, "The measuring mode of sensor: %s.", ESP_LOGD(TAG, "The measuring mode of sensor: %s.",
LOG_STR_ARG(pm2005_get_measuring_mode_string(sensor_measuring_mode))); LOG_STR_ARG(pm2005_get_measuring_mode_string(sensor_measuring_mode)));
}
this->status_clear_warning(); this->status_clear_warning();
} }
}
}
uint16_t PM2005Component::get_sensor_value_(const uint8_t *data, uint8_t i) { uint16_t PM2005Component::get_sensor_value_(const uint8_t *data, uint8_t i) {
return data_buffer_[i] * 0x100 + data_buffer_[i + 1]; return data_buffer_[i] * 0x100 + data_buffer_[i + 1];

View File

@ -21,7 +21,7 @@ class PM2005Component : public PollingComponent, public i2c::I2CDevice {
void update() override; void update() override;
protected: protected:
uint8_t sensor_situation_ = 0; uint8_t sensor_situation_{0};
uint8_t data_buffer_[12]; uint8_t data_buffer_[12];
sensor::Sensor *pm_1_0_sensor_{nullptr}; sensor::Sensor *pm_1_0_sensor_{nullptr};