mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-05-23 14:18:28 +02:00
ccs811: publish firmware version; log bootloader and HW version; fix a bug (#2006)
This commit is contained in:
@@ -16,7 +16,7 @@ static const char *const TAG = "ccs811";
|
||||
return; \
|
||||
}
|
||||
|
||||
#define CHECKED_IO(f) CHECK_TRUE(f, COMMUNICAITON_FAILED)
|
||||
#define CHECKED_IO(f) CHECK_TRUE(f, COMMUNICATION_FAILED)
|
||||
|
||||
void CCS811Component::setup() {
|
||||
// page 9 programming guide - hwid is always 0x81
|
||||
@@ -38,12 +38,14 @@ void CCS811Component::setup() {
|
||||
// set MEAS_MODE (page 5)
|
||||
uint8_t meas_mode = 0;
|
||||
uint32_t interval = this->get_update_interval();
|
||||
if (interval <= 1000)
|
||||
meas_mode = 1 << 4;
|
||||
else if (interval <= 10000)
|
||||
meas_mode = 2 << 4;
|
||||
if (interval >= 60 * 1000)
|
||||
meas_mode = 3 << 4; // sensor takes a reading every 60 seconds
|
||||
else if (interval >= 10 * 1000)
|
||||
meas_mode = 2 << 4; // sensor takes a reading every 10 seconds
|
||||
else if (interval >= 1 * 1000)
|
||||
meas_mode = 1 << 4; // sensor takes a reading every second
|
||||
else
|
||||
meas_mode = 3 << 4;
|
||||
meas_mode = 4 << 4; // sensor takes a reading every 250ms
|
||||
|
||||
CHECKED_IO(this->write_byte(0x01, meas_mode))
|
||||
|
||||
@@ -51,6 +53,36 @@ void CCS811Component::setup() {
|
||||
// baseline available, write to sensor
|
||||
this->write_bytes(0x11, decode_uint16(*this->baseline_));
|
||||
}
|
||||
|
||||
auto hardware_version_data = this->read_bytes<1>(0x21);
|
||||
auto bootloader_version_data = this->read_bytes<2>(0x23);
|
||||
auto application_version_data = this->read_bytes<2>(0x24);
|
||||
|
||||
uint8_t hardware_version = 0;
|
||||
uint16_t bootloader_version = 0;
|
||||
uint16_t application_version = 0;
|
||||
|
||||
if (hardware_version_data.has_value()) {
|
||||
hardware_version = (*hardware_version_data)[0];
|
||||
}
|
||||
|
||||
if (bootloader_version_data.has_value()) {
|
||||
bootloader_version = encode_uint16((*bootloader_version_data)[0], (*bootloader_version_data)[1]);
|
||||
}
|
||||
|
||||
if (application_version_data.has_value()) {
|
||||
application_version = encode_uint16((*application_version_data)[0], (*application_version_data)[1]);
|
||||
}
|
||||
|
||||
ESP_LOGD(TAG, "hardware_version=0x%x bootloader_version=0x%x application_version=0x%x\n", hardware_version,
|
||||
bootloader_version, application_version);
|
||||
if (this->version_ != nullptr) {
|
||||
char version[20]; // "15.15.15 (0xffff)" is 17 chars, plus NUL, plus wiggle room
|
||||
sprintf(version, "%d.%d.%d (0x%02x)", (application_version >> 12 & 15), (application_version >> 8 & 15),
|
||||
(application_version >> 4 & 15), application_version);
|
||||
ESP_LOGD(TAG, "publishing version state: %s", version);
|
||||
this->version_->publish_state(version);
|
||||
}
|
||||
}
|
||||
void CCS811Component::update() {
|
||||
if (!this->status_has_data_())
|
||||
@@ -117,6 +149,7 @@ void CCS811Component::dump_config() {
|
||||
LOG_UPDATE_INTERVAL(this)
|
||||
LOG_SENSOR(" ", "CO2 Sensor", this->co2_)
|
||||
LOG_SENSOR(" ", "TVOC Sensor", this->tvoc_)
|
||||
LOG_TEXT_SENSOR(" ", "Firmware Version Sensor", this->version_)
|
||||
if (this->baseline_) {
|
||||
ESP_LOGCONFIG(TAG, " Baseline: %04X", *this->baseline_);
|
||||
} else {
|
||||
@@ -124,7 +157,7 @@ void CCS811Component::dump_config() {
|
||||
}
|
||||
if (this->is_failed()) {
|
||||
switch (this->error_code_) {
|
||||
case COMMUNICAITON_FAILED:
|
||||
case COMMUNICATION_FAILED:
|
||||
ESP_LOGW(TAG, "Communication failed! Is the sensor connected?");
|
||||
break;
|
||||
case INVALID_ID:
|
||||
|
||||
Reference in New Issue
Block a user