8static const char *
const TAG =
"mics_4514";
10static const uint8_t SENSOR_REGISTER = 0x04;
11static const uint8_t POWER_MODE_REGISTER = 0x0a;
17 ESP_LOGCONFIG(TAG,
"Waking up MICS 4514, sensors will have data after 3 minutes");
25 ESP_LOGCONFIG(TAG,
"Device already awake.");
28void MICS4514Component::dump_config() {
29 ESP_LOGCONFIG(TAG,
"MICS 4514:");
31 LOG_UPDATE_INTERVAL(
this);
32 LOG_SENSOR(
" ",
"Nitrogen Dioxide", this->nitrogen_dioxide_sensor_);
33 LOG_SENSOR(
" ",
"Carbon Monoxide", this->carbon_monoxide_sensor_);
34 LOG_SENSOR(
" ",
"Methane", this->methane_sensor_);
35 LOG_SENSOR(
" ",
"Ethanol", this->ethanol_sensor_);
36 LOG_SENSOR(
" ",
"Hydrogen", this->hydrogen_sensor_);
37 LOG_SENSOR(
" ",
"Ammonia", this->ammonia_sensor_);
39void MICS4514Component::update() {
49 ESP_LOGV(TAG,
"Got data: %02X %02X %02X %02X %02X %02X", data[0], data[1], data[2], data[3], data[4], data[5]);
62 ESP_LOGW(TAG,
"Calibration values are zero, retrying");
70 if (this->carbon_monoxide_sensor_ !=
nullptr) {
74 }
else if (red_f < 0.01) {
77 co = 4.2 / pow(red_f, 1.2);
79 this->carbon_monoxide_sensor_->publish_state(co);
82 if (this->nitrogen_dioxide_sensor_ !=
nullptr) {
83 float nitrogendioxide = 0.0f;
85 nitrogendioxide = 0.0;
87 nitrogendioxide = 0.164 * pow(ox_f, 0.975);
89 this->nitrogen_dioxide_sensor_->publish_state(nitrogendioxide);
92 if (this->methane_sensor_ !=
nullptr) {
94 if (red_f > 0.9f || red_f < 0.5) {
97 methane = 630 / pow(red_f, 4.4);
99 this->methane_sensor_->publish_state(methane);
102 if (this->ethanol_sensor_ !=
nullptr) {
103 float ethanol = 0.0f;
104 if (red_f > 1.0f || red_f < 0.02) {
107 ethanol = 1.52 / pow(red_f, 1.55);
109 this->ethanol_sensor_->publish_state(ethanol);
112 if (this->hydrogen_sensor_ !=
nullptr) {
113 float hydrogen = 0.0f;
114 if (red_f > 0.9f || red_f < 0.02) {
117 hydrogen = 0.85 / pow(red_f, 1.75);
119 this->hydrogen_sensor_->publish_state(hydrogen);
122 if (this->ammonia_sensor_ !=
nullptr) {
123 float ammonia = 0.0f;
124 if (red_f > 0.98f || red_f < 0.2532) {
127 ammonia = 0.9 / pow(red_f, 4.6);
129 this->ammonia_sensor_->publish_state(ammonia);
ESPDEPRECATED("Use const char* or uint32_t overload instead. Removed in 2026.7.0", "2026.1.0") void set_timeout(const std voi set_timeout)(const char *name, uint32_t timeout, std::function< void()> &&f)
Set a timeout function with a unique name.