mirror of
https://github.com/esphome/esphome.git
synced 2024-11-25 08:28:12 +01:00
Add delay after sending REG_READ_START (#7130)
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
This commit is contained in:
parent
038f24fcea
commit
dfacf1bbfe
1 changed files with 31 additions and 30 deletions
|
@ -72,43 +72,44 @@ void PMWCS3Component::dump_config() {
|
||||||
LOG_SENSOR(" ", "vwc", this->vwc_sensor_);
|
LOG_SENSOR(" ", "vwc", this->vwc_sensor_);
|
||||||
}
|
}
|
||||||
void PMWCS3Component::read_data_() {
|
void PMWCS3Component::read_data_() {
|
||||||
uint8_t data[8];
|
|
||||||
float e25, ec, temperature, vwc;
|
|
||||||
|
|
||||||
/////// Super important !!!! first activate reading PMWCS3_REG_READ_START (if not, return always the same values) ////
|
/////// Super important !!!! first activate reading PMWCS3_REG_READ_START (if not, return always the same values) ////
|
||||||
|
|
||||||
if (!this->write_bytes(PMWCS3_REG_READ_START, nullptr, 0)) {
|
if (!this->write_bytes(PMWCS3_REG_READ_START, nullptr, 0)) {
|
||||||
this->status_set_warning();
|
this->status_set_warning();
|
||||||
ESP_LOGVV(TAG, "Failed to write into REG_READ_START register !!!");
|
ESP_LOGVV(TAG, "Failed to write into REG_READ_START register !!!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// NOLINT delay(100);
|
|
||||||
|
|
||||||
if (!this->read_bytes(PMWCS3_REG_GET_DATA, (uint8_t *) &data, 8)) {
|
// Wait for the sensor to be ready.
|
||||||
ESP_LOGVV(TAG, "Error reading PMWCS3_REG_GET_DATA registers");
|
// 80ms empirically determined (conservative).
|
||||||
this->mark_failed();
|
this->set_timeout(80, [this] {
|
||||||
return;
|
uint8_t data[8];
|
||||||
}
|
float e25, ec, temperature, vwc;
|
||||||
if (this->e25_sensor_ != nullptr) {
|
if (!this->read_bytes(PMWCS3_REG_GET_DATA, (uint8_t *) &data, 8)) {
|
||||||
e25 = ((data[1] << 8) | data[0]) / 100.0;
|
ESP_LOGVV(TAG, "Error reading PMWCS3_REG_GET_DATA registers");
|
||||||
this->e25_sensor_->publish_state(e25);
|
this->mark_failed();
|
||||||
ESP_LOGVV(TAG, "e25: data[0]=%d, data[1]=%d, result=%f", data[0], data[1], e25);
|
return;
|
||||||
}
|
}
|
||||||
if (this->ec_sensor_ != nullptr) {
|
if (this->e25_sensor_ != nullptr) {
|
||||||
ec = ((data[3] << 8) | data[2]) / 10.0;
|
e25 = ((data[1] << 8) | data[0]) / 100.0;
|
||||||
this->ec_sensor_->publish_state(ec);
|
this->e25_sensor_->publish_state(e25);
|
||||||
ESP_LOGVV(TAG, "ec: data[2]=%d, data[3]=%d, result=%f", data[2], data[3], ec);
|
ESP_LOGVV(TAG, "e25: data[0]=%d, data[1]=%d, result=%f", data[0], data[1], e25);
|
||||||
}
|
}
|
||||||
if (this->temperature_sensor_ != nullptr) {
|
if (this->ec_sensor_ != nullptr) {
|
||||||
temperature = ((data[5] << 8) | data[4]) / 100.0;
|
ec = ((data[3] << 8) | data[2]) / 10.0;
|
||||||
this->temperature_sensor_->publish_state(temperature);
|
this->ec_sensor_->publish_state(ec);
|
||||||
ESP_LOGVV(TAG, "temp: data[4]=%d, data[5]=%d, result=%f", data[4], data[5], temperature);
|
ESP_LOGVV(TAG, "ec: data[2]=%d, data[3]=%d, result=%f", data[2], data[3], ec);
|
||||||
}
|
}
|
||||||
if (this->vwc_sensor_ != nullptr) {
|
if (this->temperature_sensor_ != nullptr) {
|
||||||
vwc = ((data[7] << 8) | data[6]) / 10.0;
|
temperature = ((data[5] << 8) | data[4]) / 100.0;
|
||||||
this->vwc_sensor_->publish_state(vwc);
|
this->temperature_sensor_->publish_state(temperature);
|
||||||
ESP_LOGVV(TAG, "vwc: data[6]=%d, data[7]=%d, result=%f", data[6], data[7], vwc);
|
ESP_LOGVV(TAG, "temp: data[4]=%d, data[5]=%d, result=%f", data[4], data[5], temperature);
|
||||||
}
|
}
|
||||||
|
if (this->vwc_sensor_ != nullptr) {
|
||||||
|
vwc = ((data[7] << 8) | data[6]) / 10.0;
|
||||||
|
this->vwc_sensor_->publish_state(vwc);
|
||||||
|
ESP_LOGVV(TAG, "vwc: data[6]=%d, data[7]=%d, result=%f", data[6], data[7], vwc);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace pmwcs3
|
} // namespace pmwcs3
|
||||||
|
|
Loading…
Reference in a new issue