diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 7e5a0c19c9..1f9a98d7ec 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -51,6 +51,6 @@ "files.associations": { "**/.vscode/*.json": "jsonc" }, - "C_Cpp.clang_format_path": "/usr/bin/clang-format-11", + "C_Cpp.clang_format_path": "/usr/bin/clang-format-13", } } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 60c987f6c4..d22c2b7e03 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,6 +41,10 @@ jobs: file: tests/test3.yaml name: Test tests/test3.yaml pio_cache_key: test3 + - id: test + file: tests/test3.1.yaml + name: Test tests/test3.1.yaml + pio_cache_key: test3.1 - id: test file: tests/test4.yaml name: Test tests/test4.yaml @@ -129,7 +133,7 @@ jobs: - name: Install clang tools run: | sudo apt-get install \ - clang-format-11 \ + clang-format-13 \ clang-tidy-11 if: matrix.id == 'clang-tidy' || matrix.id == 'clang-format' diff --git a/docker/Dockerfile b/docker/Dockerfile index 59901d7b2c..383c73565d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -135,7 +135,7 @@ RUN \ apt-get update \ # Use pinned versions so that we get updates with build caching && apt-get install -y --no-install-recommends \ - clang-format-11=1:11.0.1-2 \ + clang-format-13=1:13.0.1-6~deb11u1 \ clang-tidy-11=1:11.0.1-2 \ patch=2.7.6-7 \ software-properties-common=0.96.20.2-2.1 \ diff --git a/esphome/components/am43/cover/am43_cover.cpp b/esphome/components/am43/cover/am43_cover.cpp index b09f5ab767..d0ef4a2fbb 100644 --- a/esphome/components/am43/cover/am43_cover.cpp +++ b/esphome/components/am43/cover/am43_cover.cpp @@ -65,7 +65,7 @@ void Am43Component::control(const CoverCall &call) { if (this->invert_position_) pos = 1 - pos; - auto *packet = this->encoder_->get_set_position_request(100 - (uint8_t)(pos * 100)); + auto *packet = this->encoder_->get_set_position_request(100 - (uint8_t) (pos * 100)); auto status = esp_ble_gattc_write_char(this->parent_->get_gattc_if(), this->parent_->get_conn_id(), this->char_handle_, packet->length, packet->data, ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE); diff --git a/esphome/components/api/api_frame_helper.cpp b/esphome/components/api/api_frame_helper.cpp index c18e045a99..f4b18a1fd6 100644 --- a/esphome/components/api/api_frame_helper.cpp +++ b/esphome/components/api/api_frame_helper.cpp @@ -295,7 +295,7 @@ APIError APINoiseFrameHelper::state_action_() { if (aerr != APIError::OK) return aerr; // ignore contents, may be used in future for flags - prologue_.push_back((uint8_t)(frame.msg.size() >> 8)); + prologue_.push_back((uint8_t) (frame.msg.size() >> 8)); prologue_.push_back((uint8_t) frame.msg.size()); prologue_.insert(prologue_.end(), frame.msg.begin(), frame.msg.end()); @@ -492,9 +492,9 @@ APIError APINoiseFrameHelper::write_packet(uint16_t type, const uint8_t *payload // tmpbuf[1], tmpbuf[2] to be set later const uint8_t msg_offset = 3; const uint8_t payload_offset = msg_offset + 4; - tmpbuf[msg_offset + 0] = (uint8_t)(type >> 8); // type + tmpbuf[msg_offset + 0] = (uint8_t) (type >> 8); // type tmpbuf[msg_offset + 1] = (uint8_t) type; - tmpbuf[msg_offset + 2] = (uint8_t)(payload_len >> 8); // data_len + tmpbuf[msg_offset + 2] = (uint8_t) (payload_len >> 8); // data_len tmpbuf[msg_offset + 3] = (uint8_t) payload_len; // copy data std::copy(payload, payload + payload_len, &tmpbuf[payload_offset]); @@ -512,7 +512,7 @@ APIError APINoiseFrameHelper::write_packet(uint16_t type, const uint8_t *payload } size_t total_len = 3 + mbuf.size; - tmpbuf[1] = (uint8_t)(mbuf.size >> 8); + tmpbuf[1] = (uint8_t) (mbuf.size >> 8); tmpbuf[2] = (uint8_t) mbuf.size; struct iovec iov; @@ -610,7 +610,7 @@ APIError APINoiseFrameHelper::write_raw_(const struct iovec *iov, int iovcnt) { APIError APINoiseFrameHelper::write_frame_(const uint8_t *data, size_t len) { uint8_t header[3]; header[0] = 0x01; // indicator - header[1] = (uint8_t)(len >> 8); + header[1] = (uint8_t) (len >> 8); header[2] = (uint8_t) len; struct iovec iov[2]; diff --git a/esphome/components/api/api_server.cpp b/esphome/components/api/api_server.cpp index 6e28637241..acde0966ba 100644 --- a/esphome/components/api/api_server.cpp +++ b/esphome/components/api/api_server.cpp @@ -45,7 +45,7 @@ void APIServer::setup() { struct sockaddr_storage server; - socklen_t sl = socket::set_sockaddr_any((struct sockaddr *) &server, sizeof(server), htons(this->port_)); + socklen_t sl = socket::set_sockaddr_any((struct sockaddr *) &server, sizeof(server), this->port_); if (sl == 0) { ESP_LOGW(TAG, "Socket unable to set sockaddr: errno %d", errno); this->mark_failed(); diff --git a/esphome/components/bme680/bme680.cpp b/esphome/components/bme680/bme680.cpp index e5704a8f9f..2b48f39e31 100644 --- a/esphome/components/bme680/bme680.cpp +++ b/esphome/components/bme680/bme680.cpp @@ -1,6 +1,6 @@ #include "bme680.h" -#include "esphome/core/log.h" #include "esphome/core/hal.h" +#include "esphome/core/log.h" namespace esphome { namespace bme680 { @@ -275,8 +275,8 @@ uint8_t BME680Component::calc_heater_resistance_(uint16_t temperature) { var3 = var1 + (var2 / 2); var4 = (var3 / (res_heat_range + 4)); var5 = (131 * res_heat_val) + 65536; - heatr_res_x100 = (int32_t)(((var4 / var5) - 250) * 34); - heatr_res = (uint8_t)((heatr_res_x100 + 50) / 100); + heatr_res_x100 = (int32_t) (((var4 / var5) - 250) * 34); + heatr_res = (uint8_t) ((heatr_res_x100 + 50) / 100); return heatr_res; } @@ -316,7 +316,7 @@ void BME680Component::read_data_() { uint32_t raw_temperature = (uint32_t(data[5]) << 12) | (uint32_t(data[6]) << 4) | (uint32_t(data[7]) >> 4); uint32_t raw_pressure = (uint32_t(data[2]) << 12) | (uint32_t(data[3]) << 4) | (uint32_t(data[4]) >> 4); uint32_t raw_humidity = (uint32_t(data[8]) << 8) | uint32_t(data[9]); - uint16_t raw_gas = (uint16_t)((uint32_t) data[13] * 4 | (((uint32_t) data[14]) / 64)); + uint16_t raw_gas = (uint16_t) ((uint32_t) data[13] * 4 | (((uint32_t) data[14]) / 64)); uint8_t gas_range = data[14] & 0x0F; float temperature = this->calc_temperature_(raw_temperature); diff --git a/esphome/components/ccs811/ccs811.cpp b/esphome/components/ccs811/ccs811.cpp index 5c60989afa..f1dadf673a 100644 --- a/esphome/components/ccs811/ccs811.cpp +++ b/esphome/components/ccs811/ccs811.cpp @@ -145,8 +145,8 @@ void CCS811Component::send_env_data_() { // https://github.com/adafruit/Adafruit_CCS811/blob/0990f5c620354d8bc087c4706bec091d8e6e5dfd/Adafruit_CCS811.cpp#L135-L142 uint16_t hum_conv = static_cast(lroundf(humidity * 512.0f + 0.5f)); uint16_t temp_conv = static_cast(lroundf(temperature * 512.0f + 0.5f)); - this->write_bytes(0x05, {(uint8_t)((hum_conv >> 8) & 0xff), (uint8_t)((hum_conv & 0xff)), - (uint8_t)((temp_conv >> 8) & 0xff), (uint8_t)((temp_conv & 0xff))}); + this->write_bytes(0x05, {(uint8_t) ((hum_conv >> 8) & 0xff), (uint8_t) ((hum_conv & 0xff)), + (uint8_t) ((temp_conv >> 8) & 0xff), (uint8_t) ((temp_conv & 0xff))}); } void CCS811Component::dump_config() { ESP_LOGCONFIG(TAG, "CCS811"); diff --git a/esphome/components/climate/__init__.py b/esphome/components/climate/__init__.py index 4a16c3fb7d..6734917bf3 100644 --- a/esphome/components/climate/__init__.py +++ b/esphome/components/climate/__init__.py @@ -324,6 +324,10 @@ async def setup_climate_core_(var, config): trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) await automation.build_automation(trigger, [], conf) + for conf in config.get(CONF_ON_CONTROL, []): + trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var) + await automation.build_automation(trigger, [], conf) + async def register_climate(var, config): if not CORE.has_id(config[CONF_ID]): diff --git a/esphome/components/cs5460a/cs5460a.cpp b/esphome/components/cs5460a/cs5460a.cpp index b0c0531936..fb8e50b87a 100644 --- a/esphome/components/cs5460a/cs5460a.cpp +++ b/esphome/components/cs5460a/cs5460a.cpp @@ -305,7 +305,7 @@ bool CS5460AComponent::check_status_() { voltage_sensor_->publish_state(raw_voltage * voltage_multiplier_); if (power_sensor_ != nullptr && raw_energy != prev_raw_energy_) { - int32_t raw = (int32_t)(raw_energy << 8) >> 8; /* Sign-extend */ + int32_t raw = (int32_t) (raw_energy << 8) >> 8; /* Sign-extend */ power_sensor_->publish_state(raw * power_multiplier_); prev_raw_energy_ = raw_energy; } diff --git a/esphome/components/ct_clamp/ct_clamp_sensor.cpp b/esphome/components/ct_clamp/ct_clamp_sensor.cpp index 51b0f1318c..d555befcde 100644 --- a/esphome/components/ct_clamp/ct_clamp_sensor.cpp +++ b/esphome/components/ct_clamp/ct_clamp_sensor.cpp @@ -33,7 +33,10 @@ void CTClampSensor::update() { const float rms_ac_dc_squared = this->sample_squared_sum_ / this->num_samples_; const float rms_dc = this->sample_sum_ / this->num_samples_; - const float rms_ac = std::sqrt(rms_ac_dc_squared - rms_dc * rms_dc); + const float rms_ac_squared = rms_ac_dc_squared - rms_dc * rms_dc; + float rms_ac = 0; + if (rms_ac_squared > 0) + rms_ac = std::sqrt(rms_ac_squared); ESP_LOGD(TAG, "'%s' - Raw AC Value: %.3fA after %d different samples (%d SPS)", this->name_.c_str(), rms_ac, this->num_samples_, 1000 * this->num_samples_ / this->sample_duration_); this->publish_state(rms_ac); diff --git a/esphome/components/daly_bms/daly_bms.cpp b/esphome/components/daly_bms/daly_bms.cpp index 36047e02d0..3b41723327 100644 --- a/esphome/components/daly_bms/daly_bms.cpp +++ b/esphome/components/daly_bms/daly_bms.cpp @@ -61,8 +61,8 @@ void DalyBmsComponent::request_data_(uint8_t data_id) { request_message[9] = 0x00; // | request_message[10] = 0x00; // | request_message[11] = 0x00; // Empty Data - request_message[12] = (uint8_t)(request_message[0] + request_message[1] + request_message[2] + - request_message[3]); // Checksum (Lower byte of the other bytes sum) + request_message[12] = (uint8_t) (request_message[0] + request_message[1] + request_message[2] + + request_message[3]); // Checksum (Lower byte of the other bytes sum) this->write_array(request_message, sizeof(request_message)); this->flush(); diff --git a/esphome/components/dfplayer/dfplayer.cpp b/esphome/components/dfplayer/dfplayer.cpp index dcba95e20c..e16479570f 100644 --- a/esphome/components/dfplayer/dfplayer.cpp +++ b/esphome/components/dfplayer/dfplayer.cpp @@ -19,7 +19,7 @@ void DFPlayer::play_folder(uint16_t folder, uint16_t file) { } void DFPlayer::send_cmd_(uint8_t cmd, uint16_t argument) { - uint8_t buffer[10]{0x7e, 0xff, 0x06, cmd, 0x01, (uint8_t)(argument >> 8), (uint8_t) argument, 0x00, 0x00, 0xef}; + uint8_t buffer[10]{0x7e, 0xff, 0x06, cmd, 0x01, (uint8_t) (argument >> 8), (uint8_t) argument, 0x00, 0x00, 0xef}; uint16_t checksum = 0; for (uint8_t i = 1; i < 7; i++) checksum += buffer[i]; diff --git a/esphome/components/display/display_buffer.cpp b/esphome/components/display/display_buffer.cpp index 7cd85dabd4..19751e7355 100644 --- a/esphome/components/display/display_buffer.cpp +++ b/esphome/components/display/display_buffer.cpp @@ -664,7 +664,7 @@ bool Animation::get_pixel(int x, int y) const { return false; const uint32_t width_8 = ((this->width_ + 7u) / 8u) * 8u; const uint32_t frame_index = this->height_ * width_8 * this->current_frame_; - if (frame_index >= (uint32_t)(this->width_ * this->height_ * this->animation_frame_count_)) + if (frame_index >= (uint32_t) (this->width_ * this->height_ * this->animation_frame_count_)) return false; const uint32_t pos = x + y * width_8 + frame_index; return progmem_read_byte(this->data_start_ + (pos / 8u)) & (0x80 >> (pos % 8u)); @@ -673,7 +673,7 @@ Color Animation::get_color_pixel(int x, int y) const { if (x < 0 || x >= this->width_ || y < 0 || y >= this->height_) return Color::BLACK; const uint32_t frame_index = this->width_ * this->height_ * this->current_frame_; - if (frame_index >= (uint32_t)(this->width_ * this->height_ * this->animation_frame_count_)) + if (frame_index >= (uint32_t) (this->width_ * this->height_ * this->animation_frame_count_)) return Color::BLACK; const uint32_t pos = (x + y * this->width_ + frame_index) * 3; const uint32_t color32 = (progmem_read_byte(this->data_start_ + pos + 2) << 0) | @@ -685,7 +685,7 @@ Color Animation::get_rgb565_pixel(int x, int y) const { if (x < 0 || x >= this->width_ || y < 0 || y >= this->height_) return Color::BLACK; const uint32_t frame_index = this->width_ * this->height_ * this->current_frame_; - if (frame_index >= (uint32_t)(this->width_ * this->height_ * this->animation_frame_count_)) + if (frame_index >= (uint32_t) (this->width_ * this->height_ * this->animation_frame_count_)) return Color::BLACK; const uint32_t pos = (x + y * this->width_ + frame_index) * 2; uint16_t rgb565 = @@ -699,7 +699,7 @@ Color Animation::get_grayscale_pixel(int x, int y) const { if (x < 0 || x >= this->width_ || y < 0 || y >= this->height_) return Color::BLACK; const uint32_t frame_index = this->width_ * this->height_ * this->current_frame_; - if (frame_index >= (uint32_t)(this->width_ * this->height_ * this->animation_frame_count_)) + if (frame_index >= (uint32_t) (this->width_ * this->height_ * this->animation_frame_count_)) return Color::BLACK; const uint32_t pos = (x + y * this->width_ + frame_index); const uint8_t gray = progmem_read_byte(this->data_start_ + pos); diff --git a/esphome/components/ens210/ens210.cpp b/esphome/components/ens210/ens210.cpp index a9c519856b..86890c05e8 100644 --- a/esphome/components/ens210/ens210.cpp +++ b/esphome/components/ens210/ens210.cpp @@ -168,7 +168,7 @@ void ENS210Component::update() { return; } // Pack bytes for humidity - h_val_data = (uint32_t)((uint32_t) data[5] << 16 | (uint32_t) data[4] << 8 | (uint32_t) data[3]); + h_val_data = (uint32_t) ((uint32_t) data[5] << 16 | (uint32_t) data[4] << 8 | (uint32_t) data[3]); // Extract humidity data and update the status extract_measurement_(h_val_data, &humidity_data, &humidity_status); @@ -183,7 +183,7 @@ void ENS210Component::update() { return; } // Pack bytes for temperature - t_val_data = (uint32_t)((uint32_t) data[2] << 16 | (uint32_t) data[1] << 8 | (uint32_t) data[0]); + t_val_data = (uint32_t) ((uint32_t) data[2] << 16 | (uint32_t) data[1] << 8 | (uint32_t) data[0]); // Extract temperature data and update the status extract_measurement_(t_val_data, &temperature_data, &temperature_status); diff --git a/esphome/components/esp32/core.cpp b/esphome/components/esp32/core.cpp index 6123d83a34..b47392bc6b 100644 --- a/esphome/components/esp32/core.cpp +++ b/esphome/components/esp32/core.cpp @@ -23,7 +23,7 @@ void loop(); namespace esphome { void IRAM_ATTR HOT yield() { vPortYield(); } -uint32_t IRAM_ATTR HOT millis() { return (uint32_t)(esp_timer_get_time() / 1000ULL); } +uint32_t IRAM_ATTR HOT millis() { return (uint32_t) (esp_timer_get_time() / 1000ULL); } void IRAM_ATTR HOT delay(uint32_t ms) { vTaskDelay(ms / portTICK_PERIOD_MS); } uint32_t IRAM_ATTR HOT micros() { return (uint32_t) esp_timer_get_time(); } void IRAM_ATTR HOT delayMicroseconds(uint32_t us) { delay_microseconds_safe(us); } diff --git a/esphome/components/esp32_ble_client/ble_client_base.cpp b/esphome/components/esp32_ble_client/ble_client_base.cpp index 9ca82c7239..40eff49266 100644 --- a/esphome/components/esp32_ble_client/ble_client_base.cpp +++ b/esphome/components/esp32_ble_client/ble_client_base.cpp @@ -316,18 +316,18 @@ float BLEClientBase::parse_char_value(uint8_t *value, uint16_t length) { case 0xD: // int12. case 0xE: // int16. if (length > 2) { - return (float) ((int16_t)(value[1] << 8) + (int16_t) value[2]); + return (float) ((int16_t) (value[1] << 8) + (int16_t) value[2]); } // fall through case 0xF: // int24. if (length > 3) { - return (float) ((int32_t)(value[1] << 16) + (int32_t)(value[2] << 8) + (int32_t)(value[3])); + return (float) ((int32_t) (value[1] << 16) + (int32_t) (value[2] << 8) + (int32_t) (value[3])); } // fall through case 0x10: // int32. if (length > 4) { - return (float) ((int32_t)(value[1] << 24) + (int32_t)(value[2] << 16) + (int32_t)(value[3] << 8) + - (int32_t)(value[4])); + return (float) ((int32_t) (value[1] << 24) + (int32_t) (value[2] << 16) + (int32_t) (value[3] << 8) + + (int32_t) (value[4])); } } ESP_LOGW(TAG, "[%d] [%s] Cannot parse characteristic value of type 0x%x length %d", this->connection_index_, diff --git a/esphome/components/esp32_ble_client/ble_client_base.h b/esphome/components/esp32_ble_client/ble_client_base.h index 2879da4d8c..97886d0b19 100644 --- a/esphome/components/esp32_ble_client/ble_client_base.h +++ b/esphome/components/esp32_ble_client/ble_client_base.h @@ -45,10 +45,11 @@ class BLEClientBase : public espbt::ESPBTClient, public Component { memset(this->remote_bda_, 0, sizeof(this->remote_bda_)); this->address_str_ = ""; } else { - this->address_str_ = str_snprintf("%02X:%02X:%02X:%02X:%02X:%02X", 17, (uint8_t)(this->address_ >> 40) & 0xff, - (uint8_t)(this->address_ >> 32) & 0xff, (uint8_t)(this->address_ >> 24) & 0xff, - (uint8_t)(this->address_ >> 16) & 0xff, (uint8_t)(this->address_ >> 8) & 0xff, - (uint8_t)(this->address_ >> 0) & 0xff); + this->address_str_ = + str_snprintf("%02X:%02X:%02X:%02X:%02X:%02X", 17, (uint8_t) (this->address_ >> 40) & 0xff, + (uint8_t) (this->address_ >> 32) & 0xff, (uint8_t) (this->address_ >> 24) & 0xff, + (uint8_t) (this->address_ >> 16) & 0xff, (uint8_t) (this->address_ >> 8) & 0xff, + (uint8_t) (this->address_ >> 0) & 0xff); } } std::string address_str() const { return this->address_str_; } diff --git a/esphome/components/esp32_ble_server/ble_characteristic.cpp b/esphome/components/esp32_ble_server/ble_characteristic.cpp index df822ac0b9..15a51f6ede 100644 --- a/esphome/components/esp32_ble_server/ble_characteristic.cpp +++ b/esphome/components/esp32_ble_server/ble_characteristic.cpp @@ -148,44 +148,44 @@ bool BLECharacteristic::is_failed() { void BLECharacteristic::set_broadcast_property(bool value) { if (value) { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ | ESP_GATT_CHAR_PROP_BIT_BROADCAST); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ | ESP_GATT_CHAR_PROP_BIT_BROADCAST); } else { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_BROADCAST); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_BROADCAST); } } void BLECharacteristic::set_indicate_property(bool value) { if (value) { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ | ESP_GATT_CHAR_PROP_BIT_INDICATE); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ | ESP_GATT_CHAR_PROP_BIT_INDICATE); } else { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_INDICATE); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_INDICATE); } } void BLECharacteristic::set_notify_property(bool value) { if (value) { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ | ESP_GATT_CHAR_PROP_BIT_NOTIFY); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ | ESP_GATT_CHAR_PROP_BIT_NOTIFY); } else { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_NOTIFY); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_NOTIFY); } } void BLECharacteristic::set_read_property(bool value) { if (value) { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ | ESP_GATT_CHAR_PROP_BIT_READ); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ | ESP_GATT_CHAR_PROP_BIT_READ); } else { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_READ); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_READ); } } void BLECharacteristic::set_write_property(bool value) { if (value) { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ | ESP_GATT_CHAR_PROP_BIT_WRITE); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ | ESP_GATT_CHAR_PROP_BIT_WRITE); } else { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_WRITE); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_WRITE); } } void BLECharacteristic::set_write_no_response_property(bool value) { if (value) { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ | ESP_GATT_CHAR_PROP_BIT_WRITE_NR); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ | ESP_GATT_CHAR_PROP_BIT_WRITE_NR); } else { - this->properties_ = (esp_gatt_char_prop_t)(this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_WRITE_NR); + this->properties_ = (esp_gatt_char_prop_t) (this->properties_ & ~ESP_GATT_CHAR_PROP_BIT_WRITE_NR); } } diff --git a/esphome/components/esp32_camera/__init__.py b/esphome/components/esp32_camera/__init__.py index b3abbd5c13..d6a744d24d 100644 --- a/esphome/components/esp32_camera/__init__.py +++ b/esphome/components/esp32_camera/__init__.py @@ -55,6 +55,22 @@ FRAME_SIZES = { "SXGA": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1280X1024, "1600X1200": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1600X1200, "UXGA": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1600X1200, + "1920X1080": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1920X1080, + "FHD": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1920X1080, + "720X1280": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_720X1280, + "PHD": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_720X1280, + "864X1536": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_864X1536, + "P3MP": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_864X1536, + "2048X1536": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2048X1536, + "QXGA": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2048X1536, + "2560X1440": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2560X1440, + "QHD": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2560X1440, + "2560X1600": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2560X1600, + "WQXGA": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2560X1600, + "1080X1920": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1080X1920, + "PFHD": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_1080X1920, + "2560X1920": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2560X1920, + "QSXGA": ESP32CameraFrameSize.ESP32_CAMERA_SIZE_2560X1920, } ESP32GainControlMode = esp32_camera_ns.enum("ESP32GainControlMode") ENUM_GAIN_CONTROL_MODE = { @@ -140,7 +156,7 @@ CONFIG_SCHEMA = cv.ENTITY_BASE_SCHEMA.extend( { cv.Required(CONF_PIN): pins.internal_gpio_input_pin_number, cv.Optional(CONF_FREQUENCY, default="20MHz"): cv.All( - cv.frequency, cv.one_of(20e6, 10e6) + cv.frequency, cv.Range(min=10e6, max=20e6) ), } ), diff --git a/esphome/components/esp32_camera/esp32_camera.cpp b/esphome/components/esp32_camera/esp32_camera.cpp index b1bf1d8532..4a53748213 100644 --- a/esphome/components/esp32_camera/esp32_camera.cpp +++ b/esphome/components/esp32_camera/esp32_camera.cpp @@ -91,6 +91,30 @@ void ESP32Camera::dump_config() { case FRAMESIZE_UXGA: ESP_LOGCONFIG(TAG, " Resolution: 1600x1200 (UXGA)"); break; + case FRAMESIZE_FHD: + ESP_LOGCONFIG(TAG, " Resolution: 1920x1080 (FHD)"); + break; + case FRAMESIZE_P_HD: + ESP_LOGCONFIG(TAG, " Resolution: 720x1280 (P_HD)"); + break; + case FRAMESIZE_P_3MP: + ESP_LOGCONFIG(TAG, " Resolution: 864x1536 (P_3MP)"); + break; + case FRAMESIZE_QXGA: + ESP_LOGCONFIG(TAG, " Resolution: 2048x1536 (QXGA)"); + break; + case FRAMESIZE_QHD: + ESP_LOGCONFIG(TAG, " Resolution: 2560x1440 (QHD)"); + break; + case FRAMESIZE_WQXGA: + ESP_LOGCONFIG(TAG, " Resolution: 2560x1600 (WQXGA)"); + break; + case FRAMESIZE_P_FHD: + ESP_LOGCONFIG(TAG, " Resolution: 1080x1920 (P_FHD)"); + break; + case FRAMESIZE_QSXGA: + ESP_LOGCONFIG(TAG, " Resolution: 2560x1920 (QSXGA)"); + break; default: break; } @@ -257,6 +281,30 @@ void ESP32Camera::set_frame_size(ESP32CameraFrameSize size) { case ESP32_CAMERA_SIZE_1600X1200: this->config_.frame_size = FRAMESIZE_UXGA; break; + case ESP32_CAMERA_SIZE_1920X1080: + this->config_.frame_size = FRAMESIZE_FHD; + break; + case ESP32_CAMERA_SIZE_720X1280: + this->config_.frame_size = FRAMESIZE_P_HD; + break; + case ESP32_CAMERA_SIZE_864X1536: + this->config_.frame_size = FRAMESIZE_P_3MP; + break; + case ESP32_CAMERA_SIZE_2048X1536: + this->config_.frame_size = FRAMESIZE_QXGA; + break; + case ESP32_CAMERA_SIZE_2560X1440: + this->config_.frame_size = FRAMESIZE_QHD; + break; + case ESP32_CAMERA_SIZE_2560X1600: + this->config_.frame_size = FRAMESIZE_WQXGA; + break; + case ESP32_CAMERA_SIZE_1080X1920: + this->config_.frame_size = FRAMESIZE_P_FHD; + break; + case ESP32_CAMERA_SIZE_2560X1920: + this->config_.frame_size = FRAMESIZE_QSXGA; + break; } } void ESP32Camera::set_jpeg_quality(uint8_t quality) { this->config_.jpeg_quality = quality; } diff --git a/esphome/components/esp32_camera/esp32_camera.h b/esphome/components/esp32_camera/esp32_camera.h index 87c5b0ba4a..62fdbabd06 100644 --- a/esphome/components/esp32_camera/esp32_camera.h +++ b/esphome/components/esp32_camera/esp32_camera.h @@ -29,6 +29,14 @@ enum ESP32CameraFrameSize { ESP32_CAMERA_SIZE_1024X768, // XGA ESP32_CAMERA_SIZE_1280X1024, // SXGA ESP32_CAMERA_SIZE_1600X1200, // UXGA + ESP32_CAMERA_SIZE_1920X1080, // FHD + ESP32_CAMERA_SIZE_720X1280, // PHD + ESP32_CAMERA_SIZE_864X1536, // P3MP + ESP32_CAMERA_SIZE_2048X1536, // QXGA + ESP32_CAMERA_SIZE_2560X1440, // QHD + ESP32_CAMERA_SIZE_2560X1600, // WQXGA + ESP32_CAMERA_SIZE_1080X1920, // PFHD + ESP32_CAMERA_SIZE_2560X1920, // QSXGA }; enum ESP32AgcGainCeiling { diff --git a/esphome/components/ethernet/ethernet_component.cpp b/esphome/components/ethernet/ethernet_component.cpp index 7120223cc9..4792728a71 100644 --- a/esphome/components/ethernet/ethernet_component.cpp +++ b/esphome/components/ethernet/ethernet_component.cpp @@ -255,14 +255,22 @@ void EthernetComponent::start_connect_() { if (this->manual_ip_.has_value()) { if (uint32_t(this->manual_ip_->dns1) != 0) { ip_addr_t d; +#if LWIP_IPV6 d.type = IPADDR_TYPE_V4; d.u_addr.ip4.addr = static_cast(this->manual_ip_->dns1); +#else + d.addr = static_cast(this->manual_ip_->dns1); +#endif dns_setserver(0, &d); } if (uint32_t(this->manual_ip_->dns1) != 0) { ip_addr_t d; +#if LWIP_IPV6 d.type = IPADDR_TYPE_V4; d.u_addr.ip4.addr = static_cast(this->manual_ip_->dns2); +#else + d.addr = static_cast(this->manual_ip_->dns2); +#endif dns_setserver(1, &d); } } else { @@ -289,8 +297,13 @@ void EthernetComponent::dump_connect_params_() { const ip_addr_t *dns_ip1 = dns_getserver(0); const ip_addr_t *dns_ip2 = dns_getserver(1); +#if LWIP_IPV6 ESP_LOGCONFIG(TAG, " DNS1: %s", network::IPAddress(dns_ip1->u_addr.ip4.addr).str().c_str()); ESP_LOGCONFIG(TAG, " DNS2: %s", network::IPAddress(dns_ip2->u_addr.ip4.addr).str().c_str()); +#else + ESP_LOGCONFIG(TAG, " DNS1: %s", network::IPAddress(dns_ip1->addr).str().c_str()); + ESP_LOGCONFIG(TAG, " DNS2: %s", network::IPAddress(dns_ip2->addr).str().c_str()); +#endif esp_err_t err; diff --git a/esphome/components/fingerprint_grow/fingerprint_grow.cpp b/esphome/components/fingerprint_grow/fingerprint_grow.cpp index 1d6cb776b7..d27b0ca4cd 100644 --- a/esphome/components/fingerprint_grow/fingerprint_grow.cpp +++ b/esphome/components/fingerprint_grow/fingerprint_grow.cpp @@ -95,7 +95,7 @@ void FingerprintGrowComponent::scan_and_match_() { } if (this->scan_image_(1) == OK) { this->waiting_removal_ = true; - this->data_ = {SEARCH, 0x01, 0x00, 0x00, (uint8_t)(this->capacity_ >> 8), (uint8_t)(this->capacity_ & 0xFF)}; + this->data_ = {SEARCH, 0x01, 0x00, 0x00, (uint8_t) (this->capacity_ >> 8), (uint8_t) (this->capacity_ & 0xFF)}; switch (this->send_command_()) { case OK: { ESP_LOGD(TAG, "Fingerprint matched"); @@ -171,7 +171,7 @@ uint8_t FingerprintGrowComponent::save_fingerprint_() { } ESP_LOGI(TAG, "Storing model"); - this->data_ = {STORE, 0x01, (uint8_t)(this->enrollment_slot_ >> 8), (uint8_t)(this->enrollment_slot_ & 0xFF)}; + this->data_ = {STORE, 0x01, (uint8_t) (this->enrollment_slot_ >> 8), (uint8_t) (this->enrollment_slot_ & 0xFF)}; switch (this->send_command_()) { case OK: ESP_LOGI(TAG, "Stored model"); @@ -188,8 +188,8 @@ uint8_t FingerprintGrowComponent::save_fingerprint_() { bool FingerprintGrowComponent::check_password_() { ESP_LOGD(TAG, "Checking password"); - this->data_ = {VERIFY_PASSWORD, (uint8_t)(this->password_ >> 24), (uint8_t)(this->password_ >> 16), - (uint8_t)(this->password_ >> 8), (uint8_t)(this->password_ & 0xFF)}; + this->data_ = {VERIFY_PASSWORD, (uint8_t) (this->password_ >> 24), (uint8_t) (this->password_ >> 16), + (uint8_t) (this->password_ >> 8), (uint8_t) (this->password_ & 0xFF)}; switch (this->send_command_()) { case OK: ESP_LOGD(TAG, "Password verified"); @@ -203,8 +203,8 @@ bool FingerprintGrowComponent::check_password_() { bool FingerprintGrowComponent::set_password_() { ESP_LOGI(TAG, "Setting new password: %d", this->new_password_); - this->data_ = {SET_PASSWORD, (uint8_t)(this->new_password_ >> 24), (uint8_t)(this->new_password_ >> 16), - (uint8_t)(this->new_password_ >> 8), (uint8_t)(this->new_password_ & 0xFF)}; + this->data_ = {SET_PASSWORD, (uint8_t) (this->new_password_ >> 24), (uint8_t) (this->new_password_ >> 16), + (uint8_t) (this->new_password_ >> 8), (uint8_t) (this->new_password_ & 0xFF)}; if (this->send_command_() == OK) { ESP_LOGI(TAG, "New password successfully set"); ESP_LOGI(TAG, "Define the new password in your configuration and reflash now"); @@ -250,7 +250,7 @@ void FingerprintGrowComponent::get_fingerprint_count_() { void FingerprintGrowComponent::delete_fingerprint(uint16_t finger_id) { ESP_LOGI(TAG, "Deleting fingerprint in slot %d", finger_id); - this->data_ = {DELETE, (uint8_t)(finger_id >> 8), (uint8_t)(finger_id & 0xFF), 0x00, 0x01}; + this->data_ = {DELETE, (uint8_t) (finger_id >> 8), (uint8_t) (finger_id & 0xFF), 0x00, 0x01}; switch (this->send_command_()) { case OK: ESP_LOGI(TAG, "Deleted fingerprint"); @@ -320,8 +320,8 @@ void FingerprintGrowComponent::aura_led_control(uint8_t state, uint8_t speed, ui } uint8_t FingerprintGrowComponent::send_command_() { - this->write((uint8_t)(START_CODE >> 8)); - this->write((uint8_t)(START_CODE & 0xFF)); + this->write((uint8_t) (START_CODE >> 8)); + this->write((uint8_t) (START_CODE & 0xFF)); this->write(this->address_[0]); this->write(this->address_[1]); this->write(this->address_[2]); @@ -329,8 +329,8 @@ uint8_t FingerprintGrowComponent::send_command_() { this->write(COMMAND); uint16_t wire_length = this->data_.size() + 2; - this->write((uint8_t)(wire_length >> 8)); - this->write((uint8_t)(wire_length & 0xFF)); + this->write((uint8_t) (wire_length >> 8)); + this->write((uint8_t) (wire_length & 0xFF)); uint16_t sum = ((wire_length) >> 8) + ((wire_length) &0xFF) + COMMAND; for (auto data : this->data_) { @@ -338,8 +338,8 @@ uint8_t FingerprintGrowComponent::send_command_() { sum += data; } - this->write((uint8_t)(sum >> 8)); - this->write((uint8_t)(sum & 0xFF)); + this->write((uint8_t) (sum >> 8)); + this->write((uint8_t) (sum & 0xFF)); this->data_.clear(); @@ -354,11 +354,11 @@ uint8_t FingerprintGrowComponent::send_command_() { byte = this->read(); switch (idx) { case 0: - if (byte != (uint8_t)(START_CODE >> 8)) + if (byte != (uint8_t) (START_CODE >> 8)) continue; break; case 1: - if (byte != (uint8_t)(START_CODE & 0xFF)) { + if (byte != (uint8_t) (START_CODE & 0xFF)) { idx = 0; continue; } diff --git a/esphome/components/fingerprint_grow/fingerprint_grow.h b/esphome/components/fingerprint_grow/fingerprint_grow.h index 96d02a1e8c..fd316237f7 100644 --- a/esphome/components/fingerprint_grow/fingerprint_grow.h +++ b/esphome/components/fingerprint_grow/fingerprint_grow.h @@ -91,10 +91,10 @@ class FingerprintGrowComponent : public PollingComponent, public uart::UARTDevic void dump_config() override; void set_address(uint32_t address) { - this->address_[0] = (uint8_t)(address >> 24); - this->address_[1] = (uint8_t)(address >> 16); - this->address_[2] = (uint8_t)(address >> 8); - this->address_[3] = (uint8_t)(address & 0xFF); + this->address_[0] = (uint8_t) (address >> 24); + this->address_[1] = (uint8_t) (address >> 16); + this->address_[2] = (uint8_t) (address >> 8); + this->address_[3] = (uint8_t) (address & 0xFF); } void set_sensing_pin(GPIOPin *sensing_pin) { this->sensing_pin_ = sensing_pin; } void set_password(uint32_t password) { this->password_ = password; } diff --git a/esphome/components/hitachi_ac344/hitachi_ac344.cpp b/esphome/components/hitachi_ac344/hitachi_ac344.cpp index 7b93b00503..2825e4f04c 100644 --- a/esphome/components/hitachi_ac344/hitachi_ac344.cpp +++ b/esphome/components/hitachi_ac344/hitachi_ac344.cpp @@ -12,7 +12,7 @@ void set_bits(uint8_t *const dst, const uint8_t offset, const uint8_t nbits, con uint8_t mask = UINT8_MAX >> (8 - ((nbits > 8) ? 8 : nbits)); // Calculate the mask & clear the space for the data. // Clear the destination bits. - *dst &= ~(uint8_t)(mask << offset); + *dst &= ~(uint8_t) (mask << offset); // Merge in the data. *dst |= ((data & mask) << offset); } diff --git a/esphome/components/hitachi_ac424/hitachi_ac424.cpp b/esphome/components/hitachi_ac424/hitachi_ac424.cpp index 65cfaa4175..0bfc3ae564 100644 --- a/esphome/components/hitachi_ac424/hitachi_ac424.cpp +++ b/esphome/components/hitachi_ac424/hitachi_ac424.cpp @@ -12,7 +12,7 @@ void set_bits(uint8_t *const dst, const uint8_t offset, const uint8_t nbits, con uint8_t mask = UINT8_MAX >> (8 - ((nbits > 8) ? 8 : nbits)); // Calculate the mask & clear the space for the data. // Clear the destination bits. - *dst &= ~(uint8_t)(mask << offset); + *dst &= ~(uint8_t) (mask << offset); // Merge in the data. *dst |= ((data & mask) << offset); } diff --git a/esphome/components/honeywellabp/honeywellabp.cpp b/esphome/components/honeywellabp/honeywellabp.cpp index 910c39e8c8..124bd6bb95 100644 --- a/esphome/components/honeywellabp/honeywellabp.cpp +++ b/esphome/components/honeywellabp/honeywellabp.cpp @@ -35,9 +35,9 @@ uint8_t HONEYWELLABPSensor::readsensor_() { // if device is normal and there is new data, bitmask and save the raw data if (status_ == 0) { // 14 - bit pressure is the last 6 bits of byte 0 (high bits) & all of byte 1 (lowest 8 bits) - pressure_count_ = ((uint16_t)(buf_[0]) << 8 & 0x3F00) | ((uint16_t)(buf_[1]) & 0xFF); + pressure_count_ = ((uint16_t) (buf_[0]) << 8 & 0x3F00) | ((uint16_t) (buf_[1]) & 0xFF); // 11 - bit temperature is all of byte 2 (lowest 8 bits) and the first three bits of byte 3 - temperature_count_ = (((uint16_t)(buf_[2]) << 3) & 0x7F8) | (((uint16_t)(buf_[3]) >> 5) & 0x7); + temperature_count_ = (((uint16_t) (buf_[2]) << 3) & 0x7F8) | (((uint16_t) (buf_[3]) >> 5) & 0x7); ESP_LOGV(TAG, "Sensor pressure_count_ %d", pressure_count_); ESP_LOGV(TAG, "Sensor temperature_count_ %d", temperature_count_); } diff --git a/esphome/components/ili9xxx/ili9xxx_display.cpp b/esphome/components/ili9xxx/ili9xxx_display.cpp index 0091a2aabc..1b5248fa29 100644 --- a/esphome/components/ili9xxx/ili9xxx_display.cpp +++ b/esphome/components/ili9xxx/ili9xxx_display.cpp @@ -1,8 +1,8 @@ #include "ili9xxx_display.h" -#include "esphome/core/log.h" #include "esphome/core/application.h" -#include "esphome/core/helpers.h" #include "esphome/core/hal.h" +#include "esphome/core/helpers.h" +#include "esphome/core/log.h" namespace esphome { namespace ili9xxx { @@ -85,7 +85,7 @@ void ILI9XXXDisplay::fill(Color color) { case BITS_16: new_color = display::ColorUtil::color_to_565(color); for (uint32_t i = 0; i < this->get_buffer_length_() * 2; i = i + 2) { - this->buffer_[i] = (uint8_t)(new_color >> 8); + this->buffer_[i] = (uint8_t) (new_color >> 8); this->buffer_[i + 1] = (uint8_t) new_color; } return; @@ -111,8 +111,8 @@ void HOT ILI9XXXDisplay::draw_absolute_pixel_internal(int x, int y, Color color) case BITS_16: pos = pos * 2; new_color = display::ColorUtil::color_to_565(color, display::ColorOrder::COLOR_ORDER_RGB); - if (this->buffer_[pos] != (uint8_t)(new_color >> 8)) { - this->buffer_[pos] = (uint8_t)(new_color >> 8); + if (this->buffer_[pos] != (uint8_t) (new_color >> 8)) { + this->buffer_[pos] = (uint8_t) (new_color >> 8); updated = true; } pos = pos + 1; @@ -192,9 +192,9 @@ void ILI9XXXDisplay::display_() { uint8_t pass_buff[3]; - pass_buff[2] = (uint8_t)((red / 32.0) * 64) << 2; + pass_buff[2] = (uint8_t) ((red / 32.0) * 64) << 2; pass_buff[1] = (uint8_t) green << 2; - pass_buff[0] = (uint8_t)((blue / 32.0) * 64) << 2; + pass_buff[0] = (uint8_t) ((blue / 32.0) * 64) << 2; this->write_array(pass_buff, sizeof(pass_buff)); } diff --git a/esphome/components/json/json_util.cpp b/esphome/components/json/json_util.cpp index f105280b23..f27d441804 100644 --- a/esphome/components/json/json_util.cpp +++ b/esphome/components/json/json_util.cpp @@ -73,7 +73,7 @@ void parse_json(const std::string &data, const json_parse_t &f) { const size_t free_heap = rp2040.getFreeHeap(); #endif bool pass = false; - size_t request_size = std::min(free_heap, (size_t)(data.size() * 1.5)); + size_t request_size = std::min(free_heap, (size_t) (data.size() * 1.5)); do { DynamicJsonDocument json_document(request_size); if (json_document.capacity() == 0) { diff --git a/esphome/components/lcd_gpio/gpio_lcd_display.cpp b/esphome/components/lcd_gpio/gpio_lcd_display.cpp index 94ddc34051..a738893816 100644 --- a/esphome/components/lcd_gpio/gpio_lcd_display.cpp +++ b/esphome/components/lcd_gpio/gpio_lcd_display.cpp @@ -17,7 +17,7 @@ void GPIOLCDDisplay::setup() { this->enable_pin_->setup(); // OUTPUT this->enable_pin_->digital_write(false); - for (uint8_t i = 0; i < (uint8_t)(this->is_four_bit_mode() ? 4u : 8u); i++) { + for (uint8_t i = 0; i < (uint8_t) (this->is_four_bit_mode() ? 4u : 8u); i++) { this->data_pins_[i]->setup(); // OUTPUT this->data_pins_[i]->digital_write(false); } diff --git a/esphome/components/ld2410/ld2410.h b/esphome/components/ld2410/ld2410.h index 5a35798bc2..8edb83a8d5 100644 --- a/esphome/components/ld2410/ld2410.h +++ b/esphome/components/ld2410/ld2410.h @@ -118,7 +118,7 @@ class LD2410Component : public Component, public uart::UARTDevice { #endif std::vector rx_buffer_; - int two_byte_to_int_(char firstbyte, char secondbyte) { return (int16_t)(secondbyte << 8) + firstbyte; } + int two_byte_to_int_(char firstbyte, char secondbyte) { return (int16_t) (secondbyte << 8) + firstbyte; } void send_command_(uint8_t command_str, uint8_t *command_value, int command_value_len); void set_max_distances_timeout_(uint8_t max_moving_distance_range, uint8_t max_still_distance_range, diff --git a/esphome/components/light/color_mode.h b/esphome/components/light/color_mode.h index 77c377d39e..e524763c9f 100644 --- a/esphome/components/light/color_mode.h +++ b/esphome/components/light/color_mode.h @@ -52,25 +52,26 @@ enum class ColorMode : uint8_t { /// Only on/off control. ON_OFF = (uint8_t) ColorCapability::ON_OFF, /// Dimmable light. - BRIGHTNESS = (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS), + BRIGHTNESS = (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS), /// White output only (use only if the light also has another color mode such as RGB). - WHITE = (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::WHITE), + WHITE = (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::WHITE), /// Controllable color temperature output. COLOR_TEMPERATURE = - (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::COLOR_TEMPERATURE), + (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::COLOR_TEMPERATURE), /// Cold and warm white output with individually controllable brightness. - COLD_WARM_WHITE = (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::COLD_WARM_WHITE), + COLD_WARM_WHITE = + (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::COLD_WARM_WHITE), /// RGB color output. - RGB = (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB), + RGB = (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB), /// RGB color output and a separate white output. RGB_WHITE = - (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB | ColorCapability::WHITE), + (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB | ColorCapability::WHITE), /// RGB color output and a separate white output with controllable color temperature. - RGB_COLOR_TEMPERATURE = (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB | - ColorCapability::WHITE | ColorCapability::COLOR_TEMPERATURE), + RGB_COLOR_TEMPERATURE = (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB | + ColorCapability::WHITE | ColorCapability::COLOR_TEMPERATURE), /// RGB color output, and separate cold and warm white outputs. - RGB_COLD_WARM_WHITE = (uint8_t)(ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB | - ColorCapability::COLD_WARM_WHITE), + RGB_COLD_WARM_WHITE = (uint8_t) (ColorCapability::ON_OFF | ColorCapability::BRIGHTNESS | ColorCapability::RGB | + ColorCapability::COLD_WARM_WHITE), }; /// Helper class to allow bitwise operations on ColorMode with ColorCapability diff --git a/esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp b/esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp index b92d7d6f10..b89cf2a724 100644 --- a/esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +++ b/esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp @@ -113,8 +113,8 @@ void LilygoT547Touchscreen::loop() { if (tp.state == 0x06) tp.state = 0x07; - uint16_t y = (uint16_t)((buffer[i * 5 + 1 + offset] << 4) | ((buffer[i * 5 + 3 + offset] >> 4) & 0x0F)); - uint16_t x = (uint16_t)((buffer[i * 5 + 2 + offset] << 4) | (buffer[i * 5 + 3 + offset] & 0x0F)); + uint16_t y = (uint16_t) ((buffer[i * 5 + 1 + offset] << 4) | ((buffer[i * 5 + 3 + offset] >> 4) & 0x0F)); + uint16_t x = (uint16_t) ((buffer[i * 5 + 2 + offset] << 4) | (buffer[i * 5 + 3 + offset] & 0x0F)); switch (this->rotation_) { case ROTATE_0_DEGREES: @@ -142,8 +142,8 @@ void LilygoT547Touchscreen::loop() { tp.id = (buffer[0] >> 4) & 0x0F; tp.state = 0x06; - uint16_t y = (uint16_t)((buffer[0 * 5 + 1] << 4) | ((buffer[0 * 5 + 3] >> 4) & 0x0F)); - uint16_t x = (uint16_t)((buffer[0 * 5 + 2] << 4) | (buffer[0 * 5 + 3] & 0x0F)); + uint16_t y = (uint16_t) ((buffer[0 * 5 + 1] << 4) | ((buffer[0 * 5 + 3] >> 4) & 0x0F)); + uint16_t x = (uint16_t) ((buffer[0 * 5 + 2] << 4) | (buffer[0 * 5 + 3] & 0x0F)); switch (this->rotation_) { case ROTATE_0_DEGREES: diff --git a/esphome/components/mcp2515/mcp2515.cpp b/esphome/components/mcp2515/mcp2515.cpp index e845c79a64..b90b4de66d 100644 --- a/esphome/components/mcp2515/mcp2515.cpp +++ b/esphome/components/mcp2515/mcp2515.cpp @@ -148,19 +148,19 @@ canbus::Error MCP2515::set_clk_out_(const CanClkOut divisor) { } void MCP2515::prepare_id_(uint8_t *buffer, const bool extended, const uint32_t id) { - uint16_t canid = (uint16_t)(id & 0x0FFFF); + uint16_t canid = (uint16_t) (id & 0x0FFFF); if (extended) { - buffer[MCP_EID0] = (uint8_t)(canid & 0xFF); - buffer[MCP_EID8] = (uint8_t)(canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t)(canid & 0x03); - buffer[MCP_SIDL] += (uint8_t)((canid & 0x1C) << 3); + buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); + buffer[MCP_EID8] = (uint8_t) (canid >> 8); + canid = (uint16_t) (id >> 16); + buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); + buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t)(canid >> 5); + buffer[MCP_SIDH] = (uint8_t) (canid >> 5); } else { - buffer[MCP_SIDH] = (uint8_t)(canid >> 3); - buffer[MCP_SIDL] = (uint8_t)((canid & 0x07) << 5); + buffer[MCP_SIDH] = (uint8_t) (canid >> 3); + buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07) << 5); buffer[MCP_EID0] = 0; buffer[MCP_EID8] = 0; } diff --git a/esphome/components/mcp9600/mcp9600.cpp b/esphome/components/mcp9600/mcp9600.cpp index 3fdd788fc6..b56c838f78 100644 --- a/esphome/components/mcp9600/mcp9600.cpp +++ b/esphome/components/mcp9600/mcp9600.cpp @@ -32,7 +32,7 @@ void MCP9600Component::setup() { uint16_t dev_id = 0; this->read_byte_16(MCP9600_REGISTER_DEVICE_ID, &dev_id); - this->device_id_ = (uint8_t)(dev_id >> 8); + this->device_id_ = (uint8_t) (dev_id >> 8); // Allows both MCP9600's and MCP9601's to be connected. if (this->device_id_ != (uint8_t) 0x40 && this->device_id_ != (uint8_t) 0x41) { diff --git a/esphome/components/mcp9808/mcp9808.cpp b/esphome/components/mcp9808/mcp9808.cpp index fca1331fc3..626fcd540d 100644 --- a/esphome/components/mcp9808/mcp9808.cpp +++ b/esphome/components/mcp9808/mcp9808.cpp @@ -54,16 +54,16 @@ void MCP9808Sensor::update() { } float temp = NAN; - uint8_t msb = (uint8_t)((raw_temp & 0xff00) >> 8); + uint8_t msb = (uint8_t) ((raw_temp & 0xff00) >> 8); uint8_t lsb = raw_temp & 0x00ff; msb = msb & MCP9808_AMBIENT_CLEAR_FLAGS; if ((msb & MCP9808_AMBIENT_TEMP_NEGATIVE) == MCP9808_AMBIENT_TEMP_NEGATIVE) { msb = msb & MCP9808_AMBIENT_CLEAR_SIGN; - temp = (256 - ((uint16_t)(msb) *16 + lsb / 16.0f)) * -1; + temp = (256 - ((uint16_t) (msb) *16 + lsb / 16.0f)) * -1; } else { - temp = (uint16_t)(msb) *16 + lsb / 16.0f; + temp = (uint16_t) (msb) *16 + lsb / 16.0f; } if (std::isnan(temp)) { diff --git a/esphome/components/mopeka_pro_check/mopeka_pro_check.cpp b/esphome/components/mopeka_pro_check/mopeka_pro_check.cpp index 60592b00ad..02d77a6b33 100644 --- a/esphome/components/mopeka_pro_check/mopeka_pro_check.cpp +++ b/esphome/components/mopeka_pro_check/mopeka_pro_check.cpp @@ -123,7 +123,8 @@ uint32_t MopekaProCheck::parse_distance_(const std::vector &message) { double raw_level = raw & 0x3FFF; double raw_t = (message[2] & 0x7F); - return (uint32_t)(raw_level * (MOPEKA_LPG_COEF[0] + MOPEKA_LPG_COEF[1] * raw_t + MOPEKA_LPG_COEF[2] * raw_t * raw_t)); + return (uint32_t) (raw_level * + (MOPEKA_LPG_COEF[0] + MOPEKA_LPG_COEF[1] * raw_t + MOPEKA_LPG_COEF[2] * raw_t * raw_t)); } uint8_t MopekaProCheck::parse_temperature_(const std::vector &message) { return (message[2] & 0x7F) - 40; } diff --git a/esphome/components/mopeka_std_check/mopeka_std_check.cpp b/esphome/components/mopeka_std_check/mopeka_std_check.cpp index cbe51b8f2d..ae7b646b9d 100644 --- a/esphome/components/mopeka_std_check/mopeka_std_check.cpp +++ b/esphome/components/mopeka_std_check/mopeka_std_check.cpp @@ -216,7 +216,7 @@ uint8_t MopekaStdCheck::parse_temperature_(const mopeka_std_package *message) { if (tmp == 0x0) { return -40; } else { - return (uint8_t)((tmp - 25.0f) * 1.776964f); + return (uint8_t) ((tmp - 25.0f) * 1.776964f); } } diff --git a/esphome/components/mqtt/mqtt_client.cpp b/esphome/components/mqtt/mqtt_client.cpp index acb863244e..af2828ff15 100644 --- a/esphome/components/mqtt/mqtt_client.cpp +++ b/esphome/components/mqtt/mqtt_client.cpp @@ -2,16 +2,16 @@ #ifdef USE_MQTT +#include +#include "esphome/components/network/util.h" #include "esphome/core/application.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h" -#include "esphome/components/network/util.h" -#include #ifdef USE_LOGGER #include "esphome/components/logger/logger.h" #endif -#include "lwip/err.h" #include "lwip/dns.h" +#include "lwip/err.h" #include "mqtt_component.h" namespace esphome { @@ -104,7 +104,11 @@ void MQTTClientComponent::start_dnslookup_() { // Got IP immediately this->dns_resolved_ = true; #ifdef USE_ESP32 +#if LWIP_IPV6 this->ip_ = addr.u_addr.ip4.addr; +#else + this->ip_ = addr.addr; +#endif #endif #ifdef USE_ESP8266 this->ip_ = addr.addr; @@ -160,8 +164,12 @@ void MQTTClientComponent::dns_found_callback(const char *name, const ip_addr_t * a_this->dns_resolve_error_ = true; } else { #ifdef USE_ESP32 +#if LWIP_IPV6 a_this->ip_ = ipaddr->u_addr.ip4.addr; +#else + a_this->ip_ = ipaddr->addr; #endif +#endif // USE_ESP32 #ifdef USE_ESP8266 a_this->ip_ = ipaddr->addr; #endif diff --git a/esphome/components/network/__init__.py b/esphome/components/network/__init__.py index 40d420c48c..96cfc51ff5 100644 --- a/esphome/components/network/__init__.py +++ b/esphome/components/network/__init__.py @@ -22,6 +22,8 @@ CONFIG_SCHEMA = cv.Schema( async def to_code(config): - if CONF_ENABLE_IPV6 in config and config[CONF_ENABLE_IPV6]: - add_idf_sdkconfig_option("CONFIG_LWIP_IPV6", True) - add_idf_sdkconfig_option("CONFIG_LWIP_IPV6_AUTOCONFIG", True) + if CONF_ENABLE_IPV6 in config: + add_idf_sdkconfig_option("CONFIG_LWIP_IPV6", config[CONF_ENABLE_IPV6]) + add_idf_sdkconfig_option( + "CONFIG_LWIP_IPV6_AUTOCONFIG", config[CONF_ENABLE_IPV6] + ) diff --git a/esphome/components/network/ip_address.h b/esphome/components/network/ip_address.h index d69dee4547..af198179ba 100644 --- a/esphome/components/network/ip_address.h +++ b/esphome/components/network/ip_address.h @@ -12,10 +12,10 @@ struct IPAddress { IPAddress() : addr_({0, 0, 0, 0}) {} IPAddress(uint8_t first, uint8_t second, uint8_t third, uint8_t fourth) : addr_({first, second, third, fourth}) {} IPAddress(uint32_t raw) { - addr_[0] = (uint8_t)(raw >> 0); - addr_[1] = (uint8_t)(raw >> 8); - addr_[2] = (uint8_t)(raw >> 16); - addr_[3] = (uint8_t)(raw >> 24); + addr_[0] = (uint8_t) (raw >> 0); + addr_[1] = (uint8_t) (raw >> 8); + addr_[2] = (uint8_t) (raw >> 16); + addr_[3] = (uint8_t) (raw >> 24); } operator uint32_t() const { uint32_t res = 0; diff --git a/esphome/components/ota/ota_component.cpp b/esphome/components/ota/ota_component.cpp index 0195cb4616..39ba3dbed4 100644 --- a/esphome/components/ota/ota_component.cpp +++ b/esphome/components/ota/ota_component.cpp @@ -65,7 +65,7 @@ void OTAComponent::setup() { struct sockaddr_storage server; - socklen_t sl = socket::set_sockaddr_any((struct sockaddr *) &server, sizeof(server), htons(this->port_)); + socklen_t sl = socket::set_sockaddr_any((struct sockaddr *) &server, sizeof(server), this->port_); if (sl == 0) { ESP_LOGW(TAG, "Socket unable to set sockaddr: errno %d", errno); this->mark_failed(); diff --git a/esphome/components/pipsolar/pipsolar.cpp b/esphome/components/pipsolar/pipsolar.cpp index 5f203645fe..c9d1ed00f6 100644 --- a/esphome/components/pipsolar/pipsolar.cpp +++ b/esphome/components/pipsolar/pipsolar.cpp @@ -770,15 +770,15 @@ uint8_t Pipsolar::check_incoming_crc_() { uint16_t crc16; crc16 = cal_crc_half_(read_buffer_, read_pos_ - 3); ESP_LOGD(TAG, "checking crc on incoming message"); - if (((uint8_t)((crc16) >> 8)) == read_buffer_[read_pos_ - 3] && - ((uint8_t)((crc16) &0xff)) == read_buffer_[read_pos_ - 2]) { + if (((uint8_t) ((crc16) >> 8)) == read_buffer_[read_pos_ - 3] && + ((uint8_t) ((crc16) &0xff)) == read_buffer_[read_pos_ - 2]) { ESP_LOGD(TAG, "CRC OK"); read_buffer_[read_pos_ - 1] = 0; read_buffer_[read_pos_ - 2] = 0; read_buffer_[read_pos_ - 3] = 0; return 1; } - ESP_LOGD(TAG, "CRC NOK expected: %X %X but got: %X %X", ((uint8_t)((crc16) >> 8)), ((uint8_t)((crc16) &0xff)), + ESP_LOGD(TAG, "CRC NOK expected: %X %X but got: %X %X", ((uint8_t) ((crc16) >> 8)), ((uint8_t) ((crc16) &0xff)), read_buffer_[read_pos_ - 3], read_buffer_[read_pos_ - 2]); return 0; } @@ -800,8 +800,8 @@ uint8_t Pipsolar::send_next_command_() { crc16 = cal_crc_half_(byte_command, length); this->write_str(command); // checksum - this->write(((uint8_t)((crc16) >> 8))); // highbyte - this->write(((uint8_t)((crc16) &0xff))); // lowbyte + this->write(((uint8_t) ((crc16) >> 8))); // highbyte + this->write(((uint8_t) ((crc16) &0xff))); // lowbyte // end Byte this->write(0x0D); ESP_LOGD(TAG, "Sending command from queue: %s with length %d", command, length); @@ -829,8 +829,8 @@ void Pipsolar::send_next_poll_() { this->write_array(this->used_polling_commands_[this->last_polling_command_].command, this->used_polling_commands_[this->last_polling_command_].length); // checksum - this->write(((uint8_t)((crc16) >> 8))); // highbyte - this->write(((uint8_t)((crc16) &0xff))); // lowbyte + this->write(((uint8_t) ((crc16) >> 8))); // highbyte + this->write(((uint8_t) ((crc16) &0xff))); // lowbyte // end Byte this->write(0x0D); ESP_LOGD(TAG, "Sending polling command : %s with length %d", @@ -882,7 +882,7 @@ void Pipsolar::add_polling_command_(const char *command, ENUMPollingCommand poll used_polling_command.command = new uint8_t[length]; // NOLINT(cppcoreguidelines-owning-memory) size_t i = 0; for (; beg != end; ++beg, ++i) { - used_polling_command.command[i] = (uint8_t)(*beg); + used_polling_command.command[i] = (uint8_t) (*beg); } used_polling_command.errors = 0; used_polling_command.identifier = polling_command; @@ -907,17 +907,17 @@ uint16_t Pipsolar::cal_crc_half_(uint8_t *msg, uint8_t len) { crc = 0; while (len-- != 0) { - da = ((uint8_t)(crc >> 8)) >> 4; + da = ((uint8_t) (crc >> 8)) >> 4; crc <<= 4; crc ^= crc_ta[da ^ (*ptr >> 4)]; - da = ((uint8_t)(crc >> 8)) >> 4; + da = ((uint8_t) (crc >> 8)) >> 4; crc <<= 4; crc ^= crc_ta[da ^ (*ptr & 0x0f)]; ptr++; } b_crc_low = crc; - b_crc_hign = (uint8_t)(crc >> 8); + b_crc_hign = (uint8_t) (crc >> 8); if (b_crc_low == 0x28 || b_crc_low == 0x0d || b_crc_low == 0x0a) b_crc_low++; diff --git a/esphome/components/pzemdc/pzemdc.h b/esphome/components/pzemdc/pzemdc.h index 21676e3422..b91ab4c0a5 100644 --- a/esphome/components/pzemdc/pzemdc.h +++ b/esphome/components/pzemdc/pzemdc.h @@ -1,5 +1,6 @@ #pragma once +#include "esphome/core/automation.h" #include "esphome/core/component.h" #include "esphome/components/sensor/sensor.h" #include "esphome/components/modbus/modbus.h" diff --git a/esphome/components/qmp6988/qmp6988.cpp b/esphome/components/qmp6988/qmp6988.cpp index 5bad1e4a47..c24780eb25 100644 --- a/esphome/components/qmp6988/qmp6988.cpp +++ b/esphome/components/qmp6988/qmp6988.cpp @@ -121,38 +121,38 @@ bool QMP6988Component::get_calibration_data_() { } qmp6988_data_.qmp6988_cali.COE_a0 = - (QMP6988_S32_t)(((a_data_uint8_tr[18] << SHIFT_LEFT_12_POSITION) | - (a_data_uint8_tr[19] << SHIFT_LEFT_4_POSITION) | (a_data_uint8_tr[24] & 0x0f)) - << 12); + (QMP6988_S32_t) (((a_data_uint8_tr[18] << SHIFT_LEFT_12_POSITION) | + (a_data_uint8_tr[19] << SHIFT_LEFT_4_POSITION) | (a_data_uint8_tr[24] & 0x0f)) + << 12); qmp6988_data_.qmp6988_cali.COE_a0 = qmp6988_data_.qmp6988_cali.COE_a0 >> 12; qmp6988_data_.qmp6988_cali.COE_a1 = - (QMP6988_S16_t)(((a_data_uint8_tr[20]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[21]); + (QMP6988_S16_t) (((a_data_uint8_tr[20]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[21]); qmp6988_data_.qmp6988_cali.COE_a2 = - (QMP6988_S16_t)(((a_data_uint8_tr[22]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[23]); + (QMP6988_S16_t) (((a_data_uint8_tr[22]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[23]); qmp6988_data_.qmp6988_cali.COE_b00 = - (QMP6988_S32_t)(((a_data_uint8_tr[0] << SHIFT_LEFT_12_POSITION) | (a_data_uint8_tr[1] << SHIFT_LEFT_4_POSITION) | - ((a_data_uint8_tr[24] & 0xf0) >> SHIFT_RIGHT_4_POSITION)) - << 12); + (QMP6988_S32_t) (((a_data_uint8_tr[0] << SHIFT_LEFT_12_POSITION) | (a_data_uint8_tr[1] << SHIFT_LEFT_4_POSITION) | + ((a_data_uint8_tr[24] & 0xf0) >> SHIFT_RIGHT_4_POSITION)) + << 12); qmp6988_data_.qmp6988_cali.COE_b00 = qmp6988_data_.qmp6988_cali.COE_b00 >> 12; qmp6988_data_.qmp6988_cali.COE_bt1 = - (QMP6988_S16_t)(((a_data_uint8_tr[2]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[3]); + (QMP6988_S16_t) (((a_data_uint8_tr[2]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[3]); qmp6988_data_.qmp6988_cali.COE_bt2 = - (QMP6988_S16_t)(((a_data_uint8_tr[4]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[5]); + (QMP6988_S16_t) (((a_data_uint8_tr[4]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[5]); qmp6988_data_.qmp6988_cali.COE_bp1 = - (QMP6988_S16_t)(((a_data_uint8_tr[6]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[7]); + (QMP6988_S16_t) (((a_data_uint8_tr[6]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[7]); qmp6988_data_.qmp6988_cali.COE_b11 = - (QMP6988_S16_t)(((a_data_uint8_tr[8]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[9]); + (QMP6988_S16_t) (((a_data_uint8_tr[8]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[9]); qmp6988_data_.qmp6988_cali.COE_bp2 = - (QMP6988_S16_t)(((a_data_uint8_tr[10]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[11]); + (QMP6988_S16_t) (((a_data_uint8_tr[10]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[11]); qmp6988_data_.qmp6988_cali.COE_b12 = - (QMP6988_S16_t)(((a_data_uint8_tr[12]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[13]); + (QMP6988_S16_t) (((a_data_uint8_tr[12]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[13]); qmp6988_data_.qmp6988_cali.COE_b21 = - (QMP6988_S16_t)(((a_data_uint8_tr[14]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[15]); + (QMP6988_S16_t) (((a_data_uint8_tr[14]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[15]); qmp6988_data_.qmp6988_cali.COE_bp3 = - (QMP6988_S16_t)(((a_data_uint8_tr[16]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[17]); + (QMP6988_S16_t) (((a_data_uint8_tr[16]) << SHIFT_LEFT_8_POSITION) | a_data_uint8_tr[17]); ESP_LOGV(TAG, "<-----------calibration data-------------->\r\n"); ESP_LOGV(TAG, "COE_a0[%d] COE_a1[%d] COE_a2[%d] COE_b00[%d]\r\n", qmp6988_data_.qmp6988_cali.COE_a0, @@ -197,7 +197,7 @@ QMP6988_S16_t QMP6988Component::get_compensated_temperature_(qmp6988_ik_data_t * wk2 = ((QMP6988_S64_t) ik->a2 * (QMP6988_S64_t) dt) >> 14; // 30Q47+24-1=53 (39Q33) wk2 = (wk2 * (QMP6988_S64_t) dt) >> 10; // 39Q33+24-1=62 (52Q23) wk2 = ((wk1 + wk2) / 32767) >> 19; // 54,52->55Q23 (20Q04) - ret = (QMP6988_S16_t)((ik->a0 + wk2) >> 4); // 21Q4 -> 17Q0 + ret = (QMP6988_S16_t) ((ik->a0 + wk2) >> 4); // 21Q4 -> 17Q0 return ret; } @@ -332,13 +332,13 @@ void QMP6988Component::calculate_pressure_() { ESP_LOGE(TAG, "Error reading raw pressure/temp values"); return; } - p_read = (QMP6988_U32_t)((((QMP6988_U32_t)(a_data_uint8_tr[0])) << SHIFT_LEFT_16_POSITION) | - (((QMP6988_U16_t)(a_data_uint8_tr[1])) << SHIFT_LEFT_8_POSITION) | (a_data_uint8_tr[2])); - p_raw = (QMP6988_S32_t)(p_read - SUBTRACTOR); + p_read = (QMP6988_U32_t) ((((QMP6988_U32_t) (a_data_uint8_tr[0])) << SHIFT_LEFT_16_POSITION) | + (((QMP6988_U16_t) (a_data_uint8_tr[1])) << SHIFT_LEFT_8_POSITION) | (a_data_uint8_tr[2])); + p_raw = (QMP6988_S32_t) (p_read - SUBTRACTOR); - t_read = (QMP6988_U32_t)((((QMP6988_U32_t)(a_data_uint8_tr[3])) << SHIFT_LEFT_16_POSITION) | - (((QMP6988_U16_t)(a_data_uint8_tr[4])) << SHIFT_LEFT_8_POSITION) | (a_data_uint8_tr[5])); - t_raw = (QMP6988_S32_t)(t_read - SUBTRACTOR); + t_read = (QMP6988_U32_t) ((((QMP6988_U32_t) (a_data_uint8_tr[3])) << SHIFT_LEFT_16_POSITION) | + (((QMP6988_U16_t) (a_data_uint8_tr[4])) << SHIFT_LEFT_8_POSITION) | (a_data_uint8_tr[5])); + t_raw = (QMP6988_S32_t) (t_read - SUBTRACTOR); t_int = this->get_compensated_temperature_(&(qmp6988_data_.ik), t_raw); p_int = this->get_compensated_pressure_(&(qmp6988_data_.ik), p_raw, t_int); diff --git a/esphome/components/remote_base/rc5_protocol.cpp b/esphome/components/remote_base/rc5_protocol.cpp index 47a85cda57..cb6eed4c6c 100644 --- a/esphome/components/remote_base/rc5_protocol.cpp +++ b/esphome/components/remote_base/rc5_protocol.cpp @@ -78,7 +78,7 @@ optional RC5Protocol::decode(RemoteReceiveData src) { out_data |= 1; } - out.command = (uint8_t)(out_data & 0x3F) + (1 - field_bit) * 64u; + out.command = (uint8_t) (out_data & 0x3F) + (1 - field_bit) * 64u; out.address = (out_data >> 6) & 0x1F; return out; } diff --git a/esphome/components/scd30/scd30.cpp b/esphome/components/scd30/scd30.cpp index c25ed107b7..01abca0a1f 100644 --- a/esphome/components/scd30/scd30.cpp +++ b/esphome/components/scd30/scd30.cpp @@ -43,7 +43,7 @@ void SCD30Component::setup() { uint16_t(raw_firmware_version[0] & 0xFF)); if (this->temperature_offset_ != 0) { - if (!this->write_command(SCD30_CMD_TEMPERATURE_OFFSET, (uint16_t)(temperature_offset_ * 100.0))) { + if (!this->write_command(SCD30_CMD_TEMPERATURE_OFFSET, (uint16_t) (temperature_offset_ * 100.0))) { ESP_LOGE(TAG, "Sensor SCD30 error setting temperature offset."); this->error_code_ = MEASUREMENT_INIT_FAILED; this->mark_failed(); diff --git a/esphome/components/scd30/scd30.h b/esphome/components/scd30/scd30.h index 4a4ca832bf..40f075e673 100644 --- a/esphome/components/scd30/scd30.h +++ b/esphome/components/scd30/scd30.h @@ -16,7 +16,7 @@ class SCD30Component : public Component, public sensirion_common::SensirionI2CDe void set_automatic_self_calibration(bool asc) { enable_asc_ = asc; } void set_altitude_compensation(uint16_t altitude) { altitude_compensation_ = altitude; } void set_ambient_pressure_compensation(float pressure) { - ambient_pressure_compensation_ = (uint16_t)(pressure * 1000); + ambient_pressure_compensation_ = (uint16_t) (pressure * 1000); } void set_temperature_offset(float offset) { temperature_offset_ = offset; } void set_update_interval(uint16_t interval) { update_interval_ = interval; } diff --git a/esphome/components/scd4x/scd4x.cpp b/esphome/components/scd4x/scd4x.cpp index 117b92b901..a8a4129b48 100644 --- a/esphome/components/scd4x/scd4x.cpp +++ b/esphome/components/scd4x/scd4x.cpp @@ -50,7 +50,7 @@ void SCD4XComponent::setup() { uint16_t(raw_serial_number[0] & 0xFF), (uint16_t(raw_serial_number[1]) >> 8)); if (!this->write_command(SCD4X_CMD_TEMPERATURE_OFFSET, - (uint16_t)(temperature_offset_ * SCD4X_TEMPERATURE_OFFSET_MULTIPLIER))) { + (uint16_t) (temperature_offset_ * SCD4X_TEMPERATURE_OFFSET_MULTIPLIER))) { ESP_LOGE(TAG, "Error setting temperature offset."); this->error_code_ = MEASUREMENT_INIT_FAILED; this->mark_failed(); diff --git a/esphome/components/sensor/__init__.py b/esphome/components/sensor/__init__.py index 821e0afac0..b63e157efb 100644 --- a/esphome/components/sensor/__init__.py +++ b/esphome/components/sensor/__init__.py @@ -194,6 +194,7 @@ SensorPublishAction = sensor_ns.class_("SensorPublishAction", automation.Action) Filter = sensor_ns.class_("Filter") QuantileFilter = sensor_ns.class_("QuantileFilter", Filter) MedianFilter = sensor_ns.class_("MedianFilter", Filter) +SkipInitialFilter = sensor_ns.class_("SkipInitialFilter", Filter) MinFilter = sensor_ns.class_("MinFilter", Filter) MaxFilter = sensor_ns.class_("MaxFilter", Filter) SlidingWindowMovingAverageFilter = sensor_ns.class_( @@ -365,6 +366,11 @@ MIN_SCHEMA = cv.All( ) +@FILTER_REGISTRY.register("skip_initial", SkipInitialFilter, cv.positive_not_null_int) +async def skip_initial_filter_to_code(config, filter_id): + return cg.new_Pvariable(filter_id, config) + + @FILTER_REGISTRY.register("min", MinFilter, MIN_SCHEMA) async def min_filter_to_code(config, filter_id): return cg.new_Pvariable( diff --git a/esphome/components/sensor/filter.cpp b/esphome/components/sensor/filter.cpp index bf65ac590f..472649ebdc 100644 --- a/esphome/components/sensor/filter.cpp +++ b/esphome/components/sensor/filter.cpp @@ -74,6 +74,19 @@ optional MedianFilter::new_value(float value) { return {}; } +// SkipInitialFilter +SkipInitialFilter::SkipInitialFilter(size_t num_to_ignore) : num_to_ignore_(num_to_ignore) {} +optional SkipInitialFilter::new_value(float value) { + if (num_to_ignore_ > 0) { + num_to_ignore_--; + ESP_LOGV(TAG, "SkipInitialFilter(%p)::new_value(%f) SKIPPING, %u left", this, value, num_to_ignore_); + return {}; + } + + ESP_LOGV(TAG, "SkipInitialFilter(%p)::new_value(%f) SENDING", this, value); + return value; +} + // QuantileFilter QuantileFilter::QuantileFilter(size_t window_size, size_t send_every, size_t send_first_at, float quantile) : send_every_(send_every), send_at_(send_every - send_first_at), window_size_(window_size), quantile_(quantile) {} diff --git a/esphome/components/sensor/filter.h b/esphome/components/sensor/filter.h index b560545b76..05934a26e8 100644 --- a/esphome/components/sensor/filter.h +++ b/esphome/components/sensor/filter.h @@ -102,6 +102,24 @@ class MedianFilter : public Filter { size_t window_size_; }; +/** Simple skip filter. + * + * Skips the first N values, then passes everything else. + */ +class SkipInitialFilter : public Filter { + public: + /** Construct a SkipInitialFilter. + * + * @param num_to_ignore How many values to ignore before the filter becomes a no-op. + */ + explicit SkipInitialFilter(size_t num_to_ignore); + + optional new_value(float value) override; + + protected: + size_t num_to_ignore_; +}; + /** Simple min filter. * * Takes the min of the last values and pushes it out every . diff --git a/esphome/components/sgp4x/sgp4x.cpp b/esphome/components/sgp4x/sgp4x.cpp index 7fe46b9518..52f9adc808 100644 --- a/esphome/components/sgp4x/sgp4x.cpp +++ b/esphome/components/sgp4x/sgp4x.cpp @@ -234,8 +234,8 @@ bool SGP4xComponent::measure_raw_(uint16_t &voc_raw, uint16_t &nox_raw) { response_words = 2; } } - uint16_t rhticks = llround((uint16_t)((humidity * 65535) / 100)); - uint16_t tempticks = (uint16_t)(((temperature + 45) * 65535) / 175); + uint16_t rhticks = llround((uint16_t) ((humidity * 65535) / 100)); + uint16_t tempticks = (uint16_t) (((temperature + 45) * 65535) / 175); // first parameter are the relative humidity ticks data[0] = rhticks; // secomd parameter are the temperature ticks diff --git a/esphome/components/sht4x/sht4x.cpp b/esphome/components/sht4x/sht4x.cpp index bdc3e62d2f..0f9123434d 100644 --- a/esphome/components/sht4x/sht4x.cpp +++ b/esphome/components/sht4x/sht4x.cpp @@ -19,7 +19,7 @@ void SHT4XComponent::setup() { ESP_LOGCONFIG(TAG, "Setting up sht4x..."); if (this->duty_cycle_ > 0.0) { - uint32_t heater_interval = (uint32_t)(this->heater_time_ / this->duty_cycle_); + uint32_t heater_interval = (uint32_t) (this->heater_time_ / this->duty_cycle_); ESP_LOGD(TAG, "Heater interval: %i", heater_interval); if (this->heater_power_ == SHT4X_HEATERPOWER_HIGH) { diff --git a/esphome/components/socket/bsd_sockets_impl.cpp b/esphome/components/socket/bsd_sockets_impl.cpp index b21341e4d6..3a08e3ea52 100644 --- a/esphome/components/socket/bsd_sockets_impl.cpp +++ b/esphome/components/socket/bsd_sockets_impl.cpp @@ -20,7 +20,9 @@ std::string format_sockaddr(const struct sockaddr_storage &storage) { char buf[INET_ADDRSTRLEN]; if (inet_ntop(AF_INET, &addr->sin_addr, buf, sizeof(buf)) != nullptr) return std::string{buf}; - } else if (storage.ss_family == AF_INET6) { + } +#if LWIP_IPV6 + else if (storage.ss_family == AF_INET6) { const struct sockaddr_in6 *addr = reinterpret_cast(&storage); char buf[INET6_ADDRSTRLEN]; // Format IPv4-mapped IPv6 addresses as regular IPv4 addresses @@ -32,6 +34,7 @@ std::string format_sockaddr(const struct sockaddr_storage &storage) { if (inet_ntop(AF_INET6, &addr->sin6_addr, buf, sizeof(buf)) != nullptr) return std::string{buf}; } +#endif return {}; } diff --git a/esphome/components/socket/headers.h b/esphome/components/socket/headers.h index 1e79c8a1ab..20d8fdb8c9 100644 --- a/esphome/components/socket/headers.h +++ b/esphome/components/socket/headers.h @@ -15,19 +15,28 @@ /* Address families. */ #define AF_UNSPEC 0 #define AF_INET 2 -#define AF_INET6 10 #define PF_INET AF_INET -#define PF_INET6 AF_INET6 #define PF_UNSPEC AF_UNSPEC + #define IPPROTO_IP 0 #define IPPROTO_TCP 6 + +#if LWIP_IPV6 +#define AF_INET6 10 +#define PF_INET6 AF_INET6 + #define IPPROTO_IPV6 41 #define IPPROTO_ICMPV6 58 +#endif #define TCP_NODELAY 0x01 #define F_GETFL 3 #define F_SETFL 4 + +#ifdef O_NONBLOCK +#undef O_NONBLOCK +#endif #define O_NONBLOCK 1 #define SHUT_RD 0 @@ -58,6 +67,7 @@ struct sockaddr_in { char sin_zero[SIN_ZERO_LEN]; }; +#if LWIP_IPV6 // NOLINTNEXTLINE(readability-identifier-naming) struct sockaddr_in6 { uint8_t sin6_len; /* length of this structure */ @@ -67,6 +77,7 @@ struct sockaddr_in6 { struct in6_addr sin6_addr; /* IPv6 address */ uint32_t sin6_scope_id; /* Set of interfaces for scope */ }; +#endif // NOLINTNEXTLINE(readability-identifier-naming) struct sockaddr { diff --git a/esphome/components/socket/socket.cpp b/esphome/components/socket/socket.cpp index 22a4c11df8..3fe7491d57 100644 --- a/esphome/components/socket/socket.cpp +++ b/esphome/components/socket/socket.cpp @@ -14,6 +14,34 @@ std::unique_ptr socket_ip(int type, int protocol) { #endif } +socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const char *ip_address, uint16_t port) { +#if LWIP_IPV6 + if (addrlen < sizeof(sockaddr_in6)) { + errno = EINVAL; + return 0; + } + auto *server = reinterpret_cast(addr); + memset(server, 0, sizeof(sockaddr_in6)); + server->sin6_family = AF_INET6; + server->sin6_port = htons(port); + ip6_addr_t ip6; + inet6_aton(ip_address, &ip6); + memcpy(server->sin6_addr.un.u32_addr, ip6.addr, sizeof(ip6.addr)); + return sizeof(sockaddr_in6); +#else + if (addrlen < sizeof(sockaddr_in)) { + errno = EINVAL; + return 0; + } + auto *server = reinterpret_cast(addr); + memset(server, 0, sizeof(sockaddr_in)); + server->sin_family = AF_INET; + server->sin_addr.s_addr = inet_addr(ip_address); + server->sin_port = htons(port); + return sizeof(sockaddr_in); +#endif +} + socklen_t set_sockaddr_any(struct sockaddr *addr, socklen_t addrlen, uint16_t port) { #if LWIP_IPV6 if (addrlen < sizeof(sockaddr_in6)) { @@ -23,7 +51,7 @@ socklen_t set_sockaddr_any(struct sockaddr *addr, socklen_t addrlen, uint16_t po auto *server = reinterpret_cast(addr); memset(server, 0, sizeof(sockaddr_in6)); server->sin6_family = AF_INET6; - server->sin6_port = port; + server->sin6_port = htons(port); server->sin6_addr = in6addr_any; return sizeof(sockaddr_in6); #else @@ -35,7 +63,7 @@ socklen_t set_sockaddr_any(struct sockaddr *addr, socklen_t addrlen, uint16_t po memset(server, 0, sizeof(sockaddr_in)); server->sin_family = AF_INET; server->sin_addr.s_addr = ESPHOME_INADDR_ANY; - server->sin_port = port; + server->sin_port = htons(port); return sizeof(sockaddr_in); #endif } diff --git a/esphome/components/socket/socket.h b/esphome/components/socket/socket.h index ecf117deeb..175cb21a4a 100644 --- a/esphome/components/socket/socket.h +++ b/esphome/components/socket/socket.h @@ -44,7 +44,10 @@ std::unique_ptr socket(int domain, int type, int protocol); /// Create a socket in the newest available IP domain (IPv6 or IPv4) of the given type and protocol. std::unique_ptr socket_ip(int type, int protocol); -/// Set a sockaddr to the any address for the IP version used by socket_ip(). +/// Set a sockaddr to the specified address and port for the IP version used by socket_ip(). +socklen_t set_sockaddr(struct sockaddr *addr, socklen_t addrlen, const char *ip_address, uint16_t port); + +/// Set a sockaddr to the any address and specified port for the IP version used by socket_ip(). socklen_t set_sockaddr_any(struct sockaddr *addr, socklen_t addrlen, uint16_t port); } // namespace socket diff --git a/esphome/components/st7920/st7920.cpp b/esphome/components/st7920/st7920.cpp index 63fa0ba72f..f336d24e24 100644 --- a/esphome/components/st7920/st7920.cpp +++ b/esphome/components/st7920/st7920.cpp @@ -74,7 +74,7 @@ void ST7920::goto_xy_(uint16_t x, uint16_t y) { void HOT ST7920::write_display_data() { uint8_t i, j, b; - for (j = 0; j < (uint8_t)(this->get_height_internal() / 2); j++) { + for (j = 0; j < (uint8_t) (this->get_height_internal() / 2); j++) { this->goto_xy_(0, j); this->enable(); for (i = 0; i < 16; i++) { // 16 bytes from line #0+ diff --git a/esphome/components/sun/sun.cpp b/esphome/components/sun/sun.cpp index 113c14d431..54aaf0942b 100644 --- a/esphome/components/sun/sun.cpp +++ b/esphome/components/sun/sun.cpp @@ -269,7 +269,7 @@ struct SunAtLocation { num_t jd = julian_day(date) + added_d; num_t eot = SunAtTime(jd).equation_of_time() * 240; - time_t new_timestamp = (time_t)(date.timestamp + added_d * 86400 - eot); + time_t new_timestamp = (time_t) (date.timestamp + added_d * 86400 - eot); return time::ESPTime::from_epoch_utc(new_timestamp); } }; diff --git a/esphome/components/tcs34725/tcs34725.cpp b/esphome/components/tcs34725/tcs34725.cpp index 276bf65ebf..88c59eb761 100644 --- a/esphome/components/tcs34725/tcs34725.cpp +++ b/esphome/components/tcs34725/tcs34725.cpp @@ -287,7 +287,7 @@ void TCS34725Component::update() { } // calculate register value from timing - uint8_t regval_atime = (uint8_t)(256.f - integration_time_next / 2.4f); + uint8_t regval_atime = (uint8_t) (256.f - integration_time_next / 2.4f); ESP_LOGD(TAG, "Integration time: %.1fms, ideal: %.1fms regval_new %d Gain: %.f Clear channel raw: %d gain reg: %d", this->integration_time_, integration_time_next, regval_atime, this->gain_, raw_c, this->gain_reg_); diff --git a/esphome/components/tm1637/tm1637.cpp b/esphome/components/tm1637/tm1637.cpp index be2192ea22..5b8cbc6004 100644 --- a/esphome/components/tm1637/tm1637.cpp +++ b/esphome/components/tm1637/tm1637.cpp @@ -168,7 +168,7 @@ uint8_t TM1637Display::get_keys() { // Bit | 7 6 5 4 3 2 1 0 // ------+------------------------ // To | 0 0 0 0 K2 S2 S1 S0 - key_code = (uint8_t)((key_code & 0x80) >> 7 | (key_code & 0x40) >> 5 | (key_code & 0x20) >> 3 | (key_code & 0x08)); + key_code = (uint8_t) ((key_code & 0x80) >> 7 | (key_code & 0x40) >> 5 | (key_code & 0x20) >> 3 | (key_code & 0x08)); } return key_code; } diff --git a/esphome/components/tm1638/tm1638.cpp b/esphome/components/tm1638/tm1638.cpp index 526b53f601..24cb4122bf 100644 --- a/esphome/components/tm1638/tm1638.cpp +++ b/esphome/components/tm1638/tm1638.cpp @@ -140,7 +140,7 @@ void TM1638Component::set_intensity(uint8_t brightness_level) { this->send_command_(TM1638_REGISTER_FIXEDADDRESS); if (brightness_level > 0) { - this->send_command_((uint8_t)(TM1638_REGISTER_DISPLAYON | intensity_)); + this->send_command_((uint8_t) (TM1638_REGISTER_DISPLAYON | intensity_)); } else { this->send_command_(TM1638_REGISTER_DISPLAYOFF); } diff --git a/esphome/components/tuya/tuya.cpp b/esphome/components/tuya/tuya.cpp index 79a9049b04..040b9b7ed5 100644 --- a/esphome/components/tuya/tuya.cpp +++ b/esphome/components/tuya/tuya.cpp @@ -381,8 +381,8 @@ void Tuya::handle_datapoints_(const uint8_t *buffer, size_t len) { } void Tuya::send_raw_command_(TuyaCommand command) { - uint8_t len_hi = (uint8_t)(command.payload.size() >> 8); - uint8_t len_lo = (uint8_t)(command.payload.size() & 0xFF); + uint8_t len_hi = (uint8_t) (command.payload.size() >> 8); + uint8_t len_lo = (uint8_t) (command.payload.size() & 0xFF); uint8_t version = 0; this->last_command_timestamp_ = millis(); diff --git a/esphome/components/vbus/sensor/vbus_sensor.cpp b/esphome/components/vbus/sensor/vbus_sensor.cpp index 57d5a355ad..8261773431 100644 --- a/esphome/components/vbus/sensor/vbus_sensor.cpp +++ b/esphome/components/vbus/sensor/vbus_sensor.cpp @@ -12,7 +12,7 @@ static inline uint16_t get_u16(std::vector &message, int start) { } static inline int16_t get_i16(std::vector &message, int start) { - return (int16_t)((message[start + 1] << 8) + message[start]); + return (int16_t) ((message[start + 1] << 8) + message[start]); } void DeltaSolBSPlusSensor::dump_config() { diff --git a/esphome/components/vl53l0x/vl53l0x_sensor.cpp b/esphome/components/vl53l0x/vl53l0x_sensor.cpp index f851cf6d73..b07779a653 100644 --- a/esphome/components/vl53l0x/vl53l0x_sensor.cpp +++ b/esphome/components/vl53l0x/vl53l0x_sensor.cpp @@ -88,7 +88,7 @@ void VL53L0XSensor::setup() { this->timeout_start_us_ = micros(); while (reg(0x83).get() == 0x00) { - if (this->timeout_us_ > 0 && ((uint16_t)(micros() - this->timeout_start_us_) > this->timeout_us_)) { + if (this->timeout_us_ > 0 && ((uint16_t) (micros() - this->timeout_start_us_) > this->timeout_us_)) { ESP_LOGE(TAG, "'%s' - setup timeout", this->name_.c_str()); this->mark_failed(); return; diff --git a/esphome/components/waveshare_epaper/display.py b/esphome/components/waveshare_epaper/display.py index 46da3f6fb4..747794b631 100644 --- a/esphome/components/waveshare_epaper/display.py +++ b/esphome/components/waveshare_epaper/display.py @@ -29,6 +29,7 @@ WaveshareEPaper2P7In = waveshare_epaper_ns.class_( WaveshareEPaper2P9InB = waveshare_epaper_ns.class_( "WaveshareEPaper2P9InB", WaveshareEPaper ) +GDEY029T94 = waveshare_epaper_ns.class_("GDEY029T94", WaveshareEPaper) WaveshareEPaper4P2In = waveshare_epaper_ns.class_( "WaveshareEPaper4P2In", WaveshareEPaper ) @@ -73,6 +74,7 @@ MODELS = { "2.13in-ttgo-b74": ("a", WaveshareEPaperTypeAModel.TTGO_EPAPER_2_13_IN_B74), "2.90in": ("a", WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_9_IN), "2.90inv2": ("a", WaveshareEPaperTypeAModel.WAVESHARE_EPAPER_2_9_IN_V2), + "gdey029t94": ("c", GDEY029T94), "2.70in": ("b", WaveshareEPaper2P7In), "2.90in-b": ("b", WaveshareEPaper2P9InB), "4.20in": ("b", WaveshareEPaper4P2In), diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.cpp b/esphome/components/waveshare_epaper/waveshare_epaper.cpp index 5580674c34..8fd5c2e1f3 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.cpp +++ b/esphome/components/waveshare_epaper/waveshare_epaper.cpp @@ -663,6 +663,90 @@ void WaveshareEPaper2P9InB::dump_config() { LOG_UPDATE_INTERVAL(this); } +// ======================================================== +// Good Display 2.9in black/white/grey +// Datasheet: +// - https://v4.cecdn.yun300.cn/100001_1909185148/SSD1680.pdf +// - https://github.com/adafruit/Adafruit_EPD/blob/master/src/panels/ThinkInk_290_Grayscale4_T5.h +// ======================================================== + +void GDEY029T94::initialize() { + // from https://www.waveshare.com/w/upload/b/bb/2.9inch-e-paper-b-specification.pdf, page 37 + // EPD hardware init start + this->reset_(); + + // COMMAND POWER SETTINGS + this->command(0x00); + this->data(0x03); + this->data(0x00); + this->data(0x2b); + this->data(0x2b); + this->data(0x03); /* for b/w */ + + // COMMAND BOOSTER SOFT START + this->command(0x06); + this->data(0x17); + this->data(0x17); + this->data(0x17); + + // COMMAND POWER ON + this->command(0x04); + this->wait_until_idle_(); + + // Not sure what this does but it's in the Adafruit EPD library + this->command(0xFF); + this->wait_until_idle_(); + + // COMMAND PANEL SETTING + this->command(0x00); + // 128x296 resolution: 10 + // LUT from OTP: 0 + // B/W mode (doesn't work): 1 + // scan-up: 1 + // shift-right: 1 + // booster ON: 1 + // no soft reset: 1 + this->data(0b10011111); + + // COMMAND RESOLUTION SETTING + // set to 128x296 by COMMAND PANEL SETTING + + // COMMAND VCOM AND DATA INTERVAL SETTING + // use defaults for white border and ESPHome image polarity + + // EPD hardware init end +} +void HOT GDEY029T94::display() { + // COMMAND DATA START TRANSMISSION 2 (B/W only) + this->command(0x13); + delay(2); + this->start_data_(); + for (size_t i = 0; i < this->get_buffer_length_(); i++) { + this->write_byte(this->buffer_[i]); + } + this->end_data_(); + delay(2); + + // COMMAND DISPLAY REFRESH + this->command(0x12); + delay(2); + this->wait_until_idle_(); + + // COMMAND POWER OFF + // NOTE: power off < deep sleep + this->command(0x02); +} +int GDEY029T94::get_width_internal() { return 128; } +int GDEY029T94::get_height_internal() { return 296; } +void GDEY029T94::dump_config() { + LOG_DISPLAY("", "Waveshare E-Paper (Good Display)", this); + ESP_LOGCONFIG(TAG, " Model: 2.9in Greyscale GDEY029T94"); + LOG_PIN(" Reset Pin: ", this->reset_pin_); + LOG_PIN(" DC Pin: ", this->dc_pin_); + LOG_PIN(" Busy Pin: ", this->busy_pin_); + LOG_UPDATE_INTERVAL(this); +} + static const uint8_t LUT_VCOM_DC_4_2[] = { 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, 0x00, 0x17, 0x17, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x01, 0x00, 0x00, 0x01, 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/esphome/components/waveshare_epaper/waveshare_epaper.h b/esphome/components/waveshare_epaper/waveshare_epaper.h index e613899149..848b293c45 100644 --- a/esphome/components/waveshare_epaper/waveshare_epaper.h +++ b/esphome/components/waveshare_epaper/waveshare_epaper.h @@ -146,6 +146,26 @@ class WaveshareEPaper2P7In : public WaveshareEPaper { int get_height_internal() override; }; +class GDEY029T94 : public WaveshareEPaper { + public: + void initialize() override; + + void display() override; + + void dump_config() override; + + void deep_sleep() override { + // COMMAND DEEP SLEEP + this->command(0x07); + this->data(0xA5); // check byte + } + + protected: + int get_width_internal() override; + + int get_height_internal() override; +}; + class WaveshareEPaper2P9InB : public WaveshareEPaper { public: void initialize() override; diff --git a/esphome/components/web_server/web_server.cpp b/esphome/components/web_server/web_server.cpp index 6c74c79ce6..80a53a7515 100644 --- a/esphome/components/web_server/web_server.cpp +++ b/esphome/components/web_server/web_server.cpp @@ -867,7 +867,7 @@ void WebServer::handle_climate_request(AsyncWebServerRequest *request, const Url } // Longest: HORIZONTAL -#define PSTR_LOCAL(mode_s) strncpy_P(__buf, (PGM_P)((mode_s)), 15) +#define PSTR_LOCAL(mode_s) strncpy_P(__buf, (PGM_P) ((mode_s)), 15) std::string WebServer::climate_json(climate::Climate *obj, JsonDetail start_config) { return json::build_json([obj, start_config](JsonObject root) { diff --git a/esphome/components/whirlpool/whirlpool.cpp b/esphome/components/whirlpool/whirlpool.cpp index f354ab070d..225423b4db 100644 --- a/esphome/components/whirlpool/whirlpool.cpp +++ b/esphome/components/whirlpool/whirlpool.cpp @@ -78,7 +78,7 @@ void WhirlpoolClimate::transmit_state() { // Temperature auto temp = (uint8_t) roundf(clamp(this->target_temperature, this->temperature_min_(), this->temperature_max_())); - remote_state[3] |= (uint8_t)(temp - this->temperature_min_()) << 4; + remote_state[3] |= (uint8_t) (temp - this->temperature_min_()) << 4; // Fan speed switch (this->fan_mode.value()) { diff --git a/esphome/components/wifi/wifi_component_esp32_arduino.cpp b/esphome/components/wifi/wifi_component_esp32_arduino.cpp index 54ed7638d2..ab04224161 100644 --- a/esphome/components/wifi/wifi_component_esp32_arduino.cpp +++ b/esphome/components/wifi/wifi_component_esp32_arduino.cpp @@ -4,19 +4,19 @@ #include -#include #include +#include #ifdef USE_WIFI_WPA2_EAP #include #endif -#include "lwip/err.h" -#include "lwip/dns.h" #include "lwip/apps/sntp.h" +#include "lwip/dns.h" +#include "lwip/err.h" +#include "esphome/core/application.h" +#include "esphome/core/hal.h" #include "esphome/core/helpers.h" #include "esphome/core/log.h" -#include "esphome/core/hal.h" -#include "esphome/core/application.h" #include "esphome/core/util.h" namespace esphome { @@ -128,13 +128,23 @@ bool WiFiComponent::wifi_sta_ip_config_(optional manual_ip) { } ip_addr_t dns; +#if LWIP_IPV6 dns.type = IPADDR_TYPE_V4; +#endif if (uint32_t(manual_ip->dns1) != 0) { +#if LWIP_IPV6 dns.u_addr.ip4.addr = static_cast(manual_ip->dns1); +#else + dns.addr = static_cast(manual_ip->dns1); +#endif dns_setserver(0, &dns); } if (uint32_t(manual_ip->dns2) != 0) { +#if LWIP_IPV6 dns.u_addr.ip4.addr = static_cast(manual_ip->dns2); +#else + dns.addr = static_cast(manual_ip->dns2); +#endif dns_setserver(1, &dns); } diff --git a/esphome/components/wifi/wifi_component_esp_idf.cpp b/esphome/components/wifi/wifi_component_esp_idf.cpp index 2883164495..0f3c3a0ca8 100644 --- a/esphome/components/wifi/wifi_component_esp_idf.cpp +++ b/esphome/components/wifi/wifi_component_esp_idf.cpp @@ -451,13 +451,23 @@ bool WiFiComponent::wifi_sta_ip_config_(optional manual_ip) { } ip_addr_t dns; +#if LWIP_IPV6 dns.type = IPADDR_TYPE_V4; +#endif if (uint32_t(manual_ip->dns1) != 0) { +#if LWIP_IPV6 dns.u_addr.ip4.addr = static_cast(manual_ip->dns1); +#else + dns.addr = static_cast(manual_ip->dns1); +#endif dns_setserver(0, &dns); } if (uint32_t(manual_ip->dns2) != 0) { +#if LWIP_IPV6 dns.u_addr.ip4.addr = static_cast(manual_ip->dns2); +#else + dns.addr = static_cast(manual_ip->dns2); +#endif dns_setserver(1, &dns); } @@ -639,7 +649,7 @@ void WiFiComponent::wifi_process_event_(IDFWiFiEvent *data) { } else if (data->event_base == IP_EVENT && data->event_id == IP_EVENT_STA_GOT_IP) { const auto &it = data->data.ip_got_ip; -#ifdef LWIP_IPV6_AUTOCONFIG +#if LWIP_IPV6_AUTOCONFIG tcpip_adapter_create_ip6_linklocal(TCPIP_ADAPTER_IF_STA); #endif ESP_LOGV(TAG, "Event: Got IP static_ip=%s gateway=%s", format_ip4_addr(it.ip_info.ip).c_str(), @@ -912,7 +922,11 @@ network::IPAddress WiFiComponent::wifi_gateway_ip_() { } network::IPAddress WiFiComponent::wifi_dns_ip_(int num) { const ip_addr_t *dns_ip = dns_getserver(num); +#if LWIP_IPV6 return {dns_ip->u_addr.ip4.addr}; +#else + return {dns_ip->addr}; +#endif } } // namespace wifi diff --git a/esphome/components/xiaomi_ble/xiaomi_ble.cpp b/esphome/components/xiaomi_ble/xiaomi_ble.cpp index 95d97defe2..95faea0446 100644 --- a/esphome/components/xiaomi_ble/xiaomi_ble.cpp +++ b/esphome/components/xiaomi_ble/xiaomi_ble.cpp @@ -239,12 +239,12 @@ bool decrypt_xiaomi_payload(std::vector &raw, const uint8_t *bindkey, c } uint8_t mac_reverse[6] = {0}; - mac_reverse[5] = (uint8_t)(address >> 40); - mac_reverse[4] = (uint8_t)(address >> 32); - mac_reverse[3] = (uint8_t)(address >> 24); - mac_reverse[2] = (uint8_t)(address >> 16); - mac_reverse[1] = (uint8_t)(address >> 8); - mac_reverse[0] = (uint8_t)(address >> 0); + mac_reverse[5] = (uint8_t) (address >> 40); + mac_reverse[4] = (uint8_t) (address >> 32); + mac_reverse[3] = (uint8_t) (address >> 24); + mac_reverse[2] = (uint8_t) (address >> 16); + mac_reverse[1] = (uint8_t) (address >> 8); + mac_reverse[0] = (uint8_t) (address >> 0); XiaomiAESVector vector{.key = {0}, .plaintext = {0}, diff --git a/esphome/components/xpt2046/xpt2046.cpp b/esphome/components/xpt2046/xpt2046.cpp index e3317e0fd5..6c7c55a995 100644 --- a/esphome/components/xpt2046/xpt2046.cpp +++ b/esphome/components/xpt2046/xpt2046.cpp @@ -104,8 +104,8 @@ void XPT2046Component::check_touch_() { break; } - touchpoint.x = (int16_t)((int) touchpoint.x * this->display_->get_width() / 0xfff); - touchpoint.y = (int16_t)((int) touchpoint.y * this->display_->get_height() / 0xfff); + touchpoint.x = (int16_t) ((int) touchpoint.x * this->display_->get_width() / 0xfff); + touchpoint.y = (int16_t) ((int) touchpoint.y * this->display_->get_height() / 0xfff); if (!this->touched || (now - this->last_pos_ms_) >= this->report_millis_) { ESP_LOGV(TAG, "Touching at [%03X, %03X] => [%3d, %3d]", this->x_raw, this->y_raw, touchpoint.x, touchpoint.y); @@ -185,7 +185,7 @@ int16_t XPT2046Component::normalize(int16_t val, int16_t min_val, int16_t max_va } else if (val >= max_val) { ret = 0xfff; } else { - ret = (int16_t)((int) 0xfff * (val - min_val) / (max_val - min_val)); + ret = (int16_t) ((int) 0xfff * (val - min_val) / (max_val - min_val)); } return ret; diff --git a/esphome/config_validation.py b/esphome/config_validation.py index 469b7031f6..f0bbc368b8 100644 --- a/esphome/config_validation.py +++ b/esphome/config_validation.py @@ -211,6 +211,9 @@ RESERVED_IDS = [ "open", "setup", "loop", + "uart0", + "uart1", + "uart2", ] diff --git a/esphome/core/__init__.py b/esphome/core/__init__.py index 117b19a6ae..1866f9c9f5 100644 --- a/esphome/core/__init__.py +++ b/esphome/core/__init__.py @@ -409,6 +409,9 @@ class Define: return self.as_tuple == other.as_tuple return NotImplemented + def __str__(self): + return f"{self.name}={self.value}" + class Library: def __init__(self, name, version, repository=None): diff --git a/esphome/core/helpers.cpp b/esphome/core/helpers.cpp index 4ac9303b20..7f5c3ad333 100644 --- a/esphome/core/helpers.cpp +++ b/esphome/core/helpers.cpp @@ -393,13 +393,13 @@ void hsv_to_rgb(int hue, float saturation, float value, float &red, float &green } // System APIs -#if defined(USE_ESP8266) +#if defined(USE_ESP8266) || defined(USE_RP2040) // ESP8266 doesn't have mutexes, but that shouldn't be an issue as it's single-core and non-preemptive OS. Mutex::Mutex() {} void Mutex::lock() {} bool Mutex::try_lock() { return true; } void Mutex::unlock() {} -#elif defined(USE_ESP32) || defined(USE_RP2040) +#elif defined(USE_ESP32) Mutex::Mutex() { handle_ = xSemaphoreCreateMutex(); } void Mutex::lock() { xSemaphoreTake(this->handle_, portMAX_DELAY); } bool Mutex::try_lock() { return xSemaphoreTake(this->handle_, 0) == pdTRUE; } diff --git a/esphome/core/helpers.h b/esphome/core/helpers.h index 0d2a7e298a..a107b1b849 100644 --- a/esphome/core/helpers.h +++ b/esphome/core/helpers.h @@ -17,9 +17,6 @@ #if defined(USE_ESP32) #include #include -#elif defined(USE_RP2040) -#include -#include #endif #define HOT __attribute__((hot)) @@ -539,7 +536,7 @@ class Mutex { Mutex &operator=(const Mutex &) = delete; private: -#if defined(USE_ESP32) || defined(USE_RP2040) +#if defined(USE_ESP32) SemaphoreHandle_t handle_; #endif }; diff --git a/esphome/core/log.h b/esphome/core/log.h index bef5e5c633..6775aa5ac5 100644 --- a/esphome/core/log.h +++ b/esphome/core/log.h @@ -167,7 +167,7 @@ struct LogString; #include #if USE_ARDUINO_VERSION_CODE >= VERSION_CODE(2, 5, 0) -#define LOG_STR_ARG(s) ((PGM_P)(s)) +#define LOG_STR_ARG(s) ((PGM_P) (s)) #else // Pre-Arduino 2.5, we can't pass a PSTR() to printf(). Emulate support by copying the message to a // local buffer first. String length is limited to 63 characters. @@ -176,7 +176,7 @@ struct LogString; ({ \ char __buf[64]; \ __buf[63] = '\0'; \ - strncpy_P(__buf, (PGM_P)(s), 63); \ + strncpy_P(__buf, (PGM_P) (s), 63); \ __buf; \ }) #endif diff --git a/esphome/platformio_api.py b/esphome/platformio_api.py index ef62e62ce7..c46a3fc767 100644 --- a/esphome/platformio_api.py +++ b/esphome/platformio_api.py @@ -47,7 +47,7 @@ FILTER_PLATFORMIO_LINES = [ r"CONFIGURATION: https://docs.platformio.org/.*", r"DEBUG: Current.*", r"LDF Modes:.*", - r"LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf.*", + r"LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf.*", f"Looking for {IGNORE_LIB_WARNINGS} library in registry", f"Warning! Library `.*'{IGNORE_LIB_WARNINGS}.*` has not been found in PlatformIO Registry.", f"You can ignore this message, if `.*{IGNORE_LIB_WARNINGS}.*` is a built-in library.*", diff --git a/requirements.txt b/requirements.txt index df041db26f..93a3592aed 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ platformio==6.1.6 # When updating platformio, also update Dockerfile esptool==4.5.1 click==8.1.3 esphome-dashboard==20230214.0 -aioesphomeapi==13.5.0 +aioesphomeapi==13.5.1 zeroconf==0.47.3 # esp-idf requires this, but doesn't bundle it by default diff --git a/script/clang-format b/script/clang-format index ae807262f1..165fbd269f 100755 --- a/script/clang-format +++ b/script/clang-format @@ -17,7 +17,7 @@ def run_format(args, queue, lock, failed_files): """Takes filenames out of queue and runs clang-format on them.""" while True: path = queue.get() - invocation = ["clang-format-11"] + invocation = ["clang-format-13"] if args.inplace: invocation.append("-i") else: @@ -59,14 +59,14 @@ def main(): args = parser.parse_args() try: - get_output("clang-format-11", "-version") + get_output("clang-format-13", "-version") except: print( """ Oops. It looks like clang-format is not installed. - Please check you can run "clang-format-11 -version" in your terminal and install - clang-format (v11) if necessary. + Please check you can run "clang-format-13 -version" in your terminal and install + clang-format (v13) if necessary. Note you can also upload your code as a pull request on GitHub and see the CI check output to apply clang-format. diff --git a/tests/test1.yaml b/tests/test1.yaml index 90bbef6977..f248817efa 100644 --- a/tests/test1.yaml +++ b/tests/test1.yaml @@ -161,13 +161,13 @@ mqtt: id: ${roomname}_lights relative_brightness: 5% - uart.write: - id: uart0 + id: uart_0 data: Hello World - uart.write: - id: uart0 + id: uart_0 data: [0x00, 0x20, 0x30] - uart.write: - id: uart0 + id: uart_0 data: !lambda |- return {}; on_connect: @@ -199,7 +199,7 @@ uart: number: GPIO23 inverted: true baud_rate: 115200 - id: uart0 + id: uart_0 parity: NONE data_bits: 8 stop_bits: 1 @@ -798,7 +798,7 @@ sensor: reference_resistance: 430 Ω rtd_nominal_resistance: 100 Ω - platform: mhz19 - uart_id: uart0 + uart_id: uart_0 co2: name: MH-Z19 CO2 Value temperature: @@ -938,7 +938,7 @@ sensor: name: Pulse Width pin: GPIO12 - platform: sm300d2 - uart_id: uart0 + uart_id: uart_0 co2: name: SM300D2 CO2 Value formaldehyde: @@ -1130,7 +1130,7 @@ sensor: root["key"] = id(the_sensor).state; root["greeting"] = "Hello World"; - platform: sds011 - uart_id: uart0 + uart_id: uart_0 pm_2_5: name: SDS011 PM2.5 pm_10_0: @@ -2112,7 +2112,7 @@ climate: on_state: logger.log: State changed! id: midea_unit - uart_id: uart0 + uart_id: uart_0 name: Midea Climate transmitter_id: period: 1s @@ -2437,15 +2437,15 @@ switch: id: my_switch state: !lambda "return false;" - platform: uart - uart_id: uart0 + uart_id: uart_0 name: UART String Output data: DataToSend - platform: uart - uart_id: uart0 + uart_id: uart_0 name: UART Bytes Output data: [0xDE, 0xAD, 0xBE, 0xEF] - platform: uart - uart_id: uart0 + uart_id: uart_0 name: UART Recurring Output data: [0xDE, 0xAD, 0xBE, 0xEF] send_every: 1s @@ -2797,7 +2797,7 @@ pn532_i2c: i2c_id: i2c_bus rdm6300: - uart_id: uart0 + uart_id: uart_0 rc522_spi: cs_pin: GPIO23 @@ -2826,7 +2826,7 @@ mcp4728: i2c_id: i2c_bus gps: - uart_id: uart0 + uart_id: uart_0 time: - platform: sntp @@ -3151,7 +3151,7 @@ canbus: teleinfo: id: myteleinfo - uart_id: uart0 + uart_id: uart_0 update_interval: 60s historical_mode: true diff --git a/tests/test3.1.yaml b/tests/test3.1.yaml new file mode 100644 index 0000000000..19e4341ee6 --- /dev/null +++ b/tests/test3.1.yaml @@ -0,0 +1,600 @@ +--- +esphome: + name: $device_name + comment: $device_comment + build_path: build/test3.1 + includes: + - custom.h + +esp8266: + board: d1_mini + +substitutions: + device_name: test3-1 + device_comment: test3-1 device + min_sub: "0.03" + max_sub: "12.0%" + +api: + +wifi: + ssid: "MySSID" + password: "password1" + +i2c: + sda: 4 + scl: 5 + scan: false + +spi: + clk_pin: GPIO12 + mosi_pin: GPIO13 + miso_pin: GPIO14 + +ota: + +logger: + +sensor: + - platform: apds9960 + type: proximity + name: APDS9960 Proximity + - platform: vl53l0x + name: VL53L0x Distance + address: 0x29 + update_interval: 60s + enable_pin: GPIO13 + timeout: 200us + - platform: apds9960 + type: clear + name: APDS9960 Clear + - platform: apds9960 + type: red + name: APDS9960 Red + - platform: apds9960 + type: green + name: APDS9960 Green + - platform: apds9960 + type: blue + name: APDS9960 Blue + + - platform: aht10 + temperature: + name: Temperature + humidity: + name: Humidity + - platform: am2320 + temperature: + name: Temperature + humidity: + name: Humidity + - platform: adc + pin: VCC + id: my_sensor + filters: + - offset: 5.0 + - multiply: 2.0 + - filter_out: NAN + - sliding_window_moving_average: + - exponential_moving_average: + - quantile: + window_size: 5 + send_every: 5 + send_first_at: 3 + quantile: .8 + - lambda: "return 0;" + - delta: 100 + - throttle: 100ms + - debounce: 500s + - calibrate_linear: + - 0 -> 0 + - 100 -> 100 + - calibrate_polynomial: + degree: 3 + datapoints: + - 0 -> 0 + - 100 -> 200 + - 400 -> 500 + - -50 -> -1000 + - -100 -> -10000 + - platform: cd74hc4067 + id: cd74hc4067_0 + number: 0 + sensor: my_sensor + - platform: resistance + sensor: my_sensor + configuration: DOWNSTREAM + resistor: 10kΩ + reference_voltage: 3.3V + name: Resistance + id: resist + - platform: ntc + sensor: resist + name: NTC Sensor + calibration: + b_constant: 3950 + reference_resistance: 10k + reference_temperature: 25°C + - platform: ntc + sensor: resist + name: NTC Sensor2 + calibration: + - 10.0kOhm -> 25°C + - 27.219kOhm -> 0°C + - 14.674kOhm -> 15°C + - platform: ct_clamp + sensor: my_sensor + name: CT Clamp + sample_duration: 500ms + update_interval: 5s + + - platform: tcs34725 + red_channel: + name: Red Channel + green_channel: + name: Green Channel + blue_channel: + name: Blue Channel + clear_channel: + name: Clear Channel + illuminance: + name: Illuminance + color_temperature: + name: Color Temperature + integration_time: 614ms + gain: 60x + - platform: custom + lambda: |- + auto s = new CustomSensor(); + App.register_component(s); + return {s}; + sensors: + - id: custom_sensor + name: Custom Sensor + + - platform: ade7953 + irq_pin: GPIO16 + voltage: + name: ADE7953 Voltage + id: ade7953_voltage + current_a: + name: ADE7953 Current A + id: ade7953_current_a + current_b: + name: ADE7953 Current B + id: ade7953_current_b + active_power_a: + name: ADE7953 Active Power A + id: ade7953_active_power_a + active_power_b: + name: ADE7953 Active Power B + id: ade7953_active_power_b + + - platform: tmp102 + name: TMP102 Temperature + - platform: hm3301 + pm_1_0: + name: PM1.0 + pm_2_5: + name: PM2.5 + pm_10_0: + name: PM10.0 + aqi: + name: AQI + calculation_type: AQI + - platform: ezo + id: ph_ezo + address: 99 + unit_of_measurement: pH + - platform: tof10120 + name: Distance sensor + update_interval: 5s + + - platform: mlx90393 + oversampling: 1 + filter: 0 + gain: 3X + x_axis: + name: mlxxaxis + y_axis: + name: mlxyaxis + z_axis: + name: mlxzaxis + resolution: 17BIT + temperature: + name: mlxtemp + oversampling: 2 + + - platform: adc128s102 + id: adc128s102_channel_0 + channel: 0 + +apds9960: + address: 0x20 + update_interval: 60s + +mpr121: + id: mpr121_first + address: 0x5A + +binary_sensor: + - platform: apds9960 + direction: up + name: APDS9960 Up + device_class: motion + filters: + - invert + - delayed_on: 20ms + - delayed_off: 20ms + - lambda: "return false;" + on_state: + - logger.log: New state + id: my_binary_sensor + - platform: apds9960 + direction: down + name: APDS9960 Down + - platform: apds9960 + direction: left + name: APDS9960 Left + - platform: apds9960 + direction: right + name: APDS9960 Right + + - platform: mpr121 + id: touchkey0 + channel: 0 + name: touchkey0 + - platform: mpr121 + channel: 1 + name: touchkey1 + id: bin1 + - platform: mpr121 + channel: 2 + name: touchkey2 + id: bin2 + - platform: mpr121 + channel: 3 + name: touchkey3 + id: bin3 + on_press: + then: + - switch.toggle: mpr121_toggle + - platform: ttp229_lsf + channel: 1 + name: TTP229 LSF Test + - platform: ttp229_bsf + channel: 1 + name: TTP229 BSF Test + - platform: custom + lambda: |- + auto s = new CustomBinarySensor(); + App.register_component(s); + return {s}; + binary_sensors: + - id: custom_binary_sensor + name: Custom Binary Sensor + + - platform: template + id: cover_toggle + on_press: + then: + - cover.toggle: time_based_cover + - cover.toggle: endstop_cover + - cover.toggle: current_based_cover + +globals: + - id: my_global_string + type: std::string + initial_value: '""' + +text_sensor: + - platform: custom + lambda: |- + auto s = new CustomTextSensor(); + App.register_component(s); + return {s}; + text_sensors: + - id: custom_text_sensor + name: Custom Text Sensor + +sm2135: + data_pin: GPIO12 + clock_pin: GPIO14 + +switch: + - platform: template + name: mpr121_toggle + id: mpr121_toggle + optimistic: true + - platform: gpio + id: gpio_switch1 + pin: + mcp23xxx: mcp23017_hub + number: 0 + mode: OUTPUT + interlock: &interlock [gpio_switch1, gpio_switch2, gpio_switch3] + - platform: gpio + id: gpio_switch2 + pin: + mcp23xxx: mcp23008_hub + number: 0 + mode: OUTPUT + interlock: *interlock + - platform: gpio + id: gpio_switch3 + pin: GPIO1 + interlock: *interlock + - platform: custom + lambda: |- + auto s = new CustomSwitch(); + return {s}; + switches: + - id: custom_switch + name: Custom Switch + on_turn_on: + - http_request.get: + url: https://esphome.io + headers: + Content-Type: application/json + verify_ssl: false + - http_request.post: + url: https://esphome.io + verify_ssl: false + json: + key: !lambda |- + return id(custom_text_sensor).state; + greeting: Hello World + - http_request.send: + method: PUT + url: https://esphome.io + headers: + Content-Type: application/json + body: Some data + verify_ssl: false + + +custom_component: + lambda: |- + auto s = new CustomComponent(); + s->set_update_interval(15000); + return {s}; + +stepper: + - platform: uln2003 + id: my_stepper + pin_a: GPIO12 + pin_b: GPIO13 + pin_c: GPIO14 + pin_d: GPIO15 + sleep_when_done: false + step_mode: HALF_STEP + max_speed: 250 steps/s + acceleration: inf + deceleration: inf + - platform: a4988 + id: my_stepper2 + step_pin: GPIO1 + dir_pin: GPIO2 + max_speed: 0.1 steps/s + acceleration: 10 steps/s^2 + deceleration: 10 steps/s^2 + +interval: + interval: 5s + then: + - logger.log: Interval Run + - stepper.set_target: + id: my_stepper2 + target: 500 + - stepper.set_target: + id: my_stepper + target: !lambda "return 0;" + - stepper.report_position: + id: my_stepper2 + position: 0 + - stepper.report_position: + id: my_stepper + position: !lambda "return 50/100.0;" + +cover: + - platform: endstop + name: Endstop Cover + id: endstop_cover + stop_action: + - switch.turn_on: gpio_switch1 + open_endstop: my_binary_sensor + open_action: + - switch.turn_on: gpio_switch1 + open_duration: 5min + close_endstop: my_binary_sensor + close_action: + - switch.turn_on: gpio_switch2 + - output.set_level: + id: out + level: 50% + - output.esp8266_pwm.set_frequency: + id: out + frequency: 500.0Hz + - output.esp8266_pwm.set_frequency: + id: out + frequency: !lambda "return 500.0;" + - servo.write: + id: my_servo + level: -100% + - servo.write: + id: my_servo + level: !lambda "return -1.0;" + - delay: 2s + - servo.detach: my_servo + close_duration: 4.5min + max_duration: 10min + - platform: time_based + name: Time Based Cover + id: time_based_cover + stop_action: + - switch.turn_on: gpio_switch1 + open_action: + - switch.turn_on: gpio_switch1 + open_duration: 5min + close_action: + - switch.turn_on: gpio_switch2 + close_duration: 4.5min + - platform: current_based + name: Current Based Cover + id: current_based_cover + open_sensor: ade7953_current_a + open_moving_current_threshold: 0.5 + open_obstacle_current_threshold: 0.8 + open_duration: 12s + open_action: + - switch.turn_on: gpio_switch1 + close_sensor: ade7953_current_b + close_moving_current_threshold: 0.5 + close_obstacle_current_threshold: 0.8 + close_duration: 10s + close_action: + - switch.turn_on: gpio_switch2 + stop_action: + - switch.turn_off: gpio_switch1 + - switch.turn_off: gpio_switch2 + obstacle_rollback: 30% + start_sensing_delay: 0.8s + malfunction_detection: true + malfunction_action: + then: + - logger.log: Malfunction Detected + - platform: template + name: Template Cover with Tilt + tilt_lambda: "return 0.5;" + tilt_action: + - output.set_level: + id: out + level: !lambda "return tilt;" + position_action: + - output.set_level: + id: out + level: !lambda "return pos;" + +output: + - platform: esp8266_pwm + id: out + pin: D3 + frequency: 50Hz + - platform: esp8266_pwm + id: out2 + pin: D4 + - platform: custom + type: binary + lambda: |- + auto s = new CustomBinaryOutput(); + App.register_component(s); + return {s}; + outputs: + - id: custom_binary + - platform: sigma_delta_output + id: sddac + update_interval: 60s + pin: D4 + turn_on_action: + then: + - logger.log: "Turned on" + turn_off_action: + then: + - logger.log: "Turned off" + state_change_action: + then: + - logger.log: + format: "Changed state: %d" + args: ["state"] + - platform: custom + type: float + lambda: |- + auto s = new CustomFloatOutput(); + App.register_component(s); + return {s}; + outputs: + - id: custom_float + - platform: slow_pwm + pin: GPIO5 + id: my_slow_pwm + period: 15s + restart_cycle_on_state_change: false + - platform: sm2135 + id: sm2135_0 + channel: 0 + - platform: sm2135 + id: sm2135_1 + channel: 1 + - platform: sm2135 + id: sm2135_2 + channel: 2 + - platform: sm2135 + id: sm2135_3 + channel: 3 + - platform: sm2135 + id: sm2135_4 + channel: 4 + +mcp23017: + id: mcp23017_hub + +mcp23008: + id: mcp23008_hub + + +light: + - platform: hbridge + name: Icicle Lights + pin_a: out + pin_b: out2 + +servo: + id: my_servo + output: out + restore: true + min_level: $min_sub + max_level: $max_sub + +ttp229_lsf: + +ttp229_bsf: + sdo_pin: D2 + scl_pin: D1 + + +display: + - platform: max7219digit + cs_pin: GPIO15 + num_chips: 4 + rotate_chip: 0 + intensity: 10 + scroll_mode: STOP + id: my_matrix + lambda: |- + it.printdigit("hello"); + + +http_request: + useragent: esphome/device + timeout: 10s + +button: + - platform: output + id: output_button + output: out + duration: 100ms + - platform: wake_on_lan + target_mac_address: 12:34:56:78:90:ab + name: wol_test_1 + id: wol_1 + - platform: factory_reset + name: Restart Button (Factory Default Settings) + +cd74hc4067: + pin_s0: GPIO12 + pin_s1: GPIO13 + pin_s2: GPIO14 + pin_s3: GPIO15 + +adc128s102: + cs_pin: GPIO12 diff --git a/tests/test3.yaml b/tests/test3.yaml index 651683c381..ceb9047d17 100644 --- a/tests/test3.yaml +++ b/tests/test3.yaml @@ -3,8 +3,6 @@ esphome: name: $device_name comment: $device_comment build_path: build/test3 - platformio_options: - board_build.partitions: huge_app.csv on_boot: - if: condition: @@ -13,8 +11,6 @@ esphome: - time.has_time then: - logger.log: Have time - includes: - - custom.h esp8266: board: d1_mini @@ -23,8 +19,6 @@ esp8266: substitutions: device_name: test3 device_comment: test3 device - min_sub: "0.03" - max_sub: "12.0%" api: port: 8000 @@ -52,9 +46,6 @@ api: string_: string then: - logger.log: Something happened - - stepper.set_target: - id: my_stepper2 - target: !lambda "return int_;" - service: array_types variables: bool_arr: bool[] @@ -224,48 +215,38 @@ wifi: ssid: "MySSID" password: "password1" -i2c: - sda: 4 - scl: 5 - scan: false - -spi: - clk_pin: GPIO12 - mosi_pin: GPIO13 - miso_pin: GPIO14 - uart: - - id: uart1 + - id: uart_1 tx_pin: number: GPIO1 inverted: true rx_pin: GPIO3 baud_rate: 115200 - - id: uart2 + - id: uart_2 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 - - id: uart3 + - id: uart_3 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 4800 - - id: uart4 + - id: uart_4 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 - - id: uart5 + - id: uart_5 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 - - id: uart6 + - id: uart_6 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 - - id: uart7 + - id: uart_7 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 38400 - - id: uart8 + - id: uart_8 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 4800 @@ -273,28 +254,28 @@ uart: stop_bits: 2 # Specifically added for testing debug with no options at all. debug: - - id: uart9 + - id: uart_9 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 - - id: uart10 + - id: uart_10 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 - - id: uart11 + - id: uart_11 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 - - id: uart12 + - id: uart_12 tx_pin: GPIO4 rx_pin: GPIO5 baud_rate: 9600 modbus: - uart_id: uart1 + uart_id: uart_1 vbus: - uart_id: uart4 + uart_id: uart_4 ota: safe_mode: true @@ -349,50 +330,21 @@ sensor: name: Temperature 1 temperature_2: name: Temperature 2 - - platform: apds9960 - type: proximity - name: APDS9960 Proximity - - platform: vl53l0x - name: VL53L0x Distance - address: 0x29 - update_interval: 60s - enable_pin: GPIO13 - timeout: 200us - - platform: apds9960 - type: clear - name: APDS9960 Clear - - platform: apds9960 - type: red - name: APDS9960 Red - - platform: apds9960 - type: green - name: APDS9960 Green - - platform: apds9960 - type: blue - name: APDS9960 Blue + - platform: homeassistant entity_id: sensor.hello_world id: ha_hello_world - - platform: aht10 - temperature: - name: Temperature - humidity: - name: Humidity - - platform: am2320 - temperature: - name: Temperature - humidity: - name: Humidity + - platform: hydreon_rgxx model: RG 9 - uart_id: uart6 + uart_id: uart_6 id: hydreon_rg9 moisture: name: hydreon_rain id: hydreon_rain - platform: hydreon_rgxx model: RG_15 - uart_id: uart6 + uart_id: uart_6 acc: name: hydreon_acc event_acc: @@ -404,86 +356,7 @@ sensor: - platform: adc pin: VCC id: my_sensor - filters: - - offset: 5.0 - - multiply: 2.0 - - filter_out: NAN - - sliding_window_moving_average: - - exponential_moving_average: - - quantile: - window_size: 5 - send_every: 5 - send_first_at: 3 - quantile: .8 - - lambda: "return 0;" - - delta: 100 - - throttle: 100ms - - debounce: 500s - - calibrate_linear: - - 0 -> 0 - - 100 -> 100 - - calibrate_polynomial: - degree: 3 - datapoints: - - 0 -> 0 - - 100 -> 200 - - 400 -> 500 - - -50 -> -1000 - - -100 -> -10000 - - platform: cd74hc4067 - id: cd74hc4067_0 - number: 0 - sensor: my_sensor - - platform: resistance - sensor: my_sensor - configuration: DOWNSTREAM - resistor: 10kΩ - reference_voltage: 3.3V - name: Resistance - id: resist - - platform: ntc - sensor: resist - name: NTC Sensor - calibration: - b_constant: 3950 - reference_resistance: 10k - reference_temperature: 25°C - - platform: ntc - sensor: resist - name: NTC Sensor2 - calibration: - - 10.0kOhm -> 25°C - - 27.219kOhm -> 0°C - - 14.674kOhm -> 15°C - - platform: ct_clamp - sensor: my_sensor - name: CT Clamp - sample_duration: 500ms - update_interval: 5s - - platform: tcs34725 - red_channel: - name: Red Channel - green_channel: - name: Green Channel - blue_channel: - name: Blue Channel - clear_channel: - name: Clear Channel - illuminance: - name: Illuminance - color_temperature: - name: Color Temperature - integration_time: 614ms - gain: 60x - - platform: custom - lambda: |- - auto s = new CustomSensor(); - App.register_component(s); - return {s}; - sensors: - - id: custom_sensor - name: Custom Sensor - platform: binary_sensor_map name: Binary Sensor Map type: group @@ -494,25 +367,9 @@ sensor: value: 15.0 - binary_sensor: bin3 value: 100.0 - - platform: ade7953 - irq_pin: GPIO16 - voltage: - name: ADE7953 Voltage - id: ade7953_voltage - current_a: - name: ADE7953 Current A - id: ade7953_current_a - current_b: - name: ADE7953 Current B - id: ade7953_current_b - active_power_a: - name: ADE7953 Active Power A - id: ade7953_active_power_a - active_power_b: - name: ADE7953 Active Power B - id: ade7953_active_power_b + - platform: bl0939 - uart_id: uart8 + uart_id: uart_8 voltage: name: BL0939 Voltage current_1: @@ -530,7 +387,7 @@ sensor: energy_total: name: BL0939 Total energy - platform: bl0940 - uart_id: uart3 + uart_id: uart_3 voltage: name: BL0940 Voltage current: @@ -544,7 +401,7 @@ sensor: external_temperature: name: BL0940 External temperature - platform: bl0942 - uart_id: uart3 + uart_id: uart_3 voltage: name: BL0942 Voltage current: @@ -556,7 +413,7 @@ sensor: frequency: name: BL0942 Frequency - platform: pzem004t - uart_id: uart3 + uart_id: uart_3 voltage: name: PZEM004T Voltage current: @@ -587,20 +444,9 @@ sensor: name: PZEMDC Power energy: name: PZEMDC Energy - - platform: tmp102 - name: TMP102 Temperature - - platform: hm3301 - pm_1_0: - name: PM1.0 - pm_2_5: - name: PM2.5 - pm_10_0: - name: PM10.0 - aqi: - name: AQI - calculation_type: AQI + - platform: pmsx003 - uart_id: uart9 + uart_id: uart_9 type: PMSX003 pm_1_0: name: PM 1.0 Concentration @@ -628,7 +474,7 @@ sensor: name: Particulate Count >10.0um update_interval: 30s - platform: pmsx003 - uart_id: uart5 + uart_id: uart_5 type: PMS5003T pm_1_0: name: PM 1.0 Concentration @@ -655,7 +501,7 @@ sensor: humidity: name: PMS Humidity - platform: pmsx003 - uart_id: uart6 + uart_id: uart_6 type: PMS5003ST pm_1_0: name: PM 1.0 Concentration @@ -688,7 +534,7 @@ sensor: formaldehyde: name: PMS Formaldehyde Concentration - platform: cse7761 - uart_id: uart7 + uart_id: uart_7 voltage: name: CSE7761 Voltage current_1: @@ -700,20 +546,14 @@ sensor: active_power_2: name: CSE7761 Active Power 2 - platform: cse7766 - uart_id: uart3 + uart_id: uart_3 voltage: name: CSE7766 Voltage current: name: CSE7766 Current power: name: CSE776 Power - - platform: ezo - id: ph_ezo - address: 99 - unit_of_measurement: pH - - platform: tof10120 - name: Distance sensor - update_interval: 5s + - platform: fingerprint_grow fingerprint_count: name: Fingerprint Count @@ -796,22 +636,8 @@ sensor: name: testwave component_id: 2 wave_channel_id: 1 - - platform: mlx90393 - oversampling: 1 - filter: 0 - gain: 3X - x_axis: - name: mlxxaxis - y_axis: - name: mlxyaxis - z_axis: - name: mlxzaxis - resolution: 17BIT - temperature: - name: mlxtemp - oversampling: 2 - platform: smt100 - uart_id: uart10 + uart_id: uart_10 counts: name: Counts dielectric_constant: @@ -824,10 +650,6 @@ sensor: name: Voltage update_interval: 60s - - platform: adc128s102 - id: adc128s102_channel_0 - channel: 0 - - platform: vbus model: deltasol c temperature_1: @@ -842,79 +664,19 @@ sensor: time: - platform: homeassistant -apds9960: - address: 0x20 - update_interval: 60s - -mpr121: - id: mpr121_first - address: 0x5A - binary_sensor: - platform: daly_bms charging_mos_enabled: name: Charging MOS discharging_mos_enabled: name: Discharging MOS - - platform: apds9960 - direction: up - name: APDS9960 Up - device_class: motion - filters: - - invert - - delayed_on: 20ms - - delayed_off: 20ms - - lambda: "return false;" - on_state: - - logger.log: New state - id: my_binary_sensor - - platform: apds9960 - direction: down - name: APDS9960 Down - - platform: apds9960 - direction: left - name: APDS9960 Left - - platform: apds9960 - direction: right - name: APDS9960 Right + - platform: homeassistant entity_id: binary_sensor.hello_world id: ha_hello_world_binary - - platform: mpr121 - id: touchkey0 - channel: 0 - name: touchkey0 - - platform: mpr121 - channel: 1 - name: touchkey1 - id: bin1 - - platform: mpr121 - channel: 2 - name: touchkey2 - id: bin2 - - platform: mpr121 - channel: 3 - name: touchkey3 - id: bin3 - on_press: - then: - - switch.toggle: mpr121_toggle - - platform: ttp229_lsf - channel: 1 - name: TTP229 LSF Test - - platform: ttp229_bsf - channel: 1 - name: TTP229 BSF Test + - platform: fingerprint_grow name: Fingerprint Enrolling - - platform: custom - lambda: |- - auto s = new CustomBinarySensor(); - App.register_component(s); - return {s}; - binary_sensors: - - id: custom_binary_sensor - name: Custom Binary Sensor - platform: nextion page_id: 0 component_id: 2 @@ -923,13 +685,7 @@ binary_sensor: id: r0_sensor name: R0 Sensor component_name: page0.r0 - - platform: template - id: cover_toggle - on_press: - then: - - cover.toggle: time_based_cover - - cover.toggle: endstop_cover - - cover.toggle: current_based_cover + - platform: hydreon_rgxx hydreon_rgxx_id: hydreon_rg9 too_cold: @@ -954,6 +710,16 @@ binary_sensor: relay1: name: Relay 1 On + - platform: gpio + id: bin1 + pin: 1 + - platform: gpio + id: bin2 + pin: 2 + - platform: gpio + id: bin3 + pin: 3 + globals: - id: my_global_string type: std::string @@ -998,14 +764,6 @@ text_sensor: - platform: homeassistant entity_id: sensor.hello_world2 id: ha_hello_world2 - - platform: custom - lambda: |- - auto s = new CustomTextSensor(); - App.register_component(s); - return {s}; - text_sensors: - - id: custom_text_sensor - name: Custom Text Sensor - platform: nextion name: text0 id: text0 @@ -1022,87 +780,22 @@ script: then: - lambda: 'ESP_LOGD("main", "Hello World!");' -sm2135: - data_pin: GPIO12 - clock_pin: GPIO14 - switch: - - platform: template - name: mpr121_toggle - id: mpr121_toggle - optimistic: true - platform: gpio id: gpio_switch1 - pin: - mcp23xxx: mcp23017_hub - number: 0 - mode: OUTPUT - interlock: &interlock [gpio_switch1, gpio_switch2, gpio_switch3] + pin: 1 - platform: gpio id: gpio_switch2 - pin: - mcp23xxx: mcp23008_hub - number: 0 - mode: OUTPUT - interlock: *interlock + pin: 2 - platform: gpio id: gpio_switch3 - pin: GPIO1 - interlock: *interlock - - platform: custom - lambda: |- - auto s = new CustomSwitch(); - return {s}; - switches: - - id: custom_switch - name: Custom Switch + pin: 3 + - platform: nextion id: r0 name: R0 Switch component_name: page0.r0 -custom_component: - lambda: |- - auto s = new CustomComponent(); - s->set_update_interval(15000); - return {s}; - -stepper: - - platform: uln2003 - id: my_stepper - pin_a: GPIO12 - pin_b: GPIO13 - pin_c: GPIO14 - pin_d: GPIO15 - sleep_when_done: false - step_mode: HALF_STEP - max_speed: 250 steps/s - acceleration: inf - deceleration: inf - - platform: a4988 - id: my_stepper2 - step_pin: GPIO1 - dir_pin: GPIO2 - max_speed: 0.1 steps/s - acceleration: 10 steps/s^2 - deceleration: 10 steps/s^2 - -interval: - interval: 5s - then: - - logger.log: Interval Run - - stepper.set_target: - id: my_stepper2 - target: 500 - - stepper.set_target: - id: my_stepper - target: !lambda "return 0;" - - stepper.report_position: - id: my_stepper2 - position: 0 - - stepper.report_position: - id: my_stepper - position: !lambda "return 50/100.0;" climate: - platform: bang_bang @@ -1232,7 +925,7 @@ climate: - horizontal - both update_interval: 10s - uart_id: uart12 + uart_id: uart_12 sprinkler: - id: yard_sprinkler_ctrlr @@ -1276,85 +969,6 @@ sprinkler: run_duration: 10s valve_switch_id: gpio_switch2 -cover: - - platform: endstop - name: Endstop Cover - id: endstop_cover - stop_action: - - switch.turn_on: gpio_switch1 - open_endstop: my_binary_sensor - open_action: - - switch.turn_on: gpio_switch1 - open_duration: 5min - close_endstop: my_binary_sensor - close_action: - - switch.turn_on: gpio_switch2 - - output.set_level: - id: out - level: 50% - - output.esp8266_pwm.set_frequency: - id: out - frequency: 500.0Hz - - output.esp8266_pwm.set_frequency: - id: out - frequency: !lambda "return 500.0;" - - servo.write: - id: my_servo - level: -100% - - servo.write: - id: my_servo - level: !lambda "return -1.0;" - - delay: 2s - - servo.detach: my_servo - close_duration: 4.5min - max_duration: 10min - - platform: time_based - name: Time Based Cover - id: time_based_cover - stop_action: - - switch.turn_on: gpio_switch1 - open_action: - - switch.turn_on: gpio_switch1 - open_duration: 5min - close_action: - - switch.turn_on: gpio_switch2 - close_duration: 4.5min - - platform: current_based - name: Current Based Cover - id: current_based_cover - open_sensor: ade7953_current_a - open_moving_current_threshold: 0.5 - open_obstacle_current_threshold: 0.8 - open_duration: 12s - open_action: - - switch.turn_on: gpio_switch1 - close_sensor: ade7953_current_b - close_moving_current_threshold: 0.5 - close_obstacle_current_threshold: 0.8 - close_duration: 10s - close_action: - - switch.turn_on: gpio_switch2 - stop_action: - - switch.turn_off: gpio_switch1 - - switch.turn_off: gpio_switch2 - obstacle_rollback: 30% - start_sensing_delay: 0.8s - malfunction_detection: true - malfunction_action: - then: - - logger.log: Malfunction Detected - - platform: template - name: Template Cover with Tilt - tilt_lambda: "return 0.5;" - tilt_action: - - output.set_level: - id: out - level: !lambda "return tilt;" - position_action: - - output.set_level: - id: out - level: !lambda "return pos;" - output: - platform: esp8266_pwm id: out @@ -1363,63 +977,11 @@ output: - platform: esp8266_pwm id: out2 pin: D4 - - platform: custom - type: binary - lambda: |- - auto s = new CustomBinaryOutput(); - App.register_component(s); - return {s}; - outputs: - - id: custom_binary - - platform: sigma_delta_output - id: sddac - update_interval: 60s - pin: D4 - turn_on_action: - then: - - logger.log: "Turned on" - turn_off_action: - then: - - logger.log: "Turned off" - state_change_action: - then: - - logger.log: - format: "Changed state: %d" - args: ["state"] - - platform: custom - type: float - lambda: |- - auto s = new CustomFloatOutput(); - App.register_component(s); - return {s}; - outputs: - - id: custom_float - platform: slow_pwm pin: GPIO5 id: my_slow_pwm period: 15s restart_cycle_on_state_change: false - - platform: sm2135 - id: sm2135_0 - channel: 0 - - platform: sm2135 - id: sm2135_1 - channel: 1 - - platform: sm2135 - id: sm2135_2 - channel: 2 - - platform: sm2135 - id: sm2135_3 - channel: 3 - - platform: sm2135 - id: sm2135_4 - channel: 4 - -mcp23017: - id: mcp23017_hub - -mcp23008: - id: mcp23008_hub e131: @@ -1434,7 +996,7 @@ light: effects: - wled: - adalight: - uart_id: uart3 + uart_id: uart_3 - e131: universe: 1 - platform: hbridge @@ -1442,7 +1004,7 @@ light: pin_a: out pin_b: out2 - platform: sonoff_d1 - uart_id: uart2 + uart_id: uart_2 use_rm433_remote: false name: Sonoff D1 Dimmer id: d1_light @@ -1457,23 +1019,10 @@ light: name: "Shelly Dimmer Current" max_brightness: 500 firmware: "51.6" - uart_id: uart11 - -servo: - id: my_servo - output: out - restore: true - min_level: $min_sub - max_level: $max_sub - -ttp229_lsf: - -ttp229_bsf: - sdo_pin: D2 - scl_pin: D1 + uart_id: uart_11 sim800l: - uart_id: uart4 + uart_id: uart_4 on_sms_received: - lambda: |- std::string str; @@ -1486,7 +1035,7 @@ sim800l: recipient: "+1234" dfplayer: - uart_id: uart5 + uart_id: uart_5 on_finished_playback: then: if: @@ -1500,7 +1049,7 @@ tm1651: dio_pin: D5 rf_bridge: - uart_id: uart5 + uart_id: uart_5 on_code_received: - lambda: |- uint32_t test; @@ -1530,38 +1079,11 @@ rf_bridge: code: "ABC123" - rf_bridge.send_raw: raw: "AAA5070008001000ABC12355" - - http_request.get: - url: https://esphome.io - headers: - Content-Type: application/json - verify_ssl: false - - http_request.post: - url: https://esphome.io - verify_ssl: false - json: - key: !lambda |- - return id(version_sensor).state; - greeting: Hello World - - http_request.send: - method: PUT - url: https://esphome.io - headers: - Content-Type: application/json - body: Some data - verify_ssl: false + display: - - platform: max7219digit - cs_pin: GPIO15 - num_chips: 4 - rotate_chip: 0 - intensity: 10 - scroll_mode: STOP - id: my_matrix - lambda: |- - it.printdigit("hello"); - platform: nextion - uart_id: uart1 + uart_id: uart_1 tft_url: http://esphome.io/default35.tft update_interval: 5s on_sleep: @@ -1577,10 +1099,6 @@ display: then: lambda: 'ESP_LOGD("display","Display shows new page %u", x);' -http_request: - useragent: esphome/device - timeout: 10s - fingerprint_grow: sensing_pin: 4 password: 0x12FE37DC @@ -1610,11 +1128,11 @@ fingerprint_grow: event: esphome.${device_name}_fingerprint_grow_enrollment_failed data: finger_id: !lambda "return finger_id;" - uart_id: uart6 + uart_id: uart_6 dsmr: decryption_key: 00112233445566778899aabbccddeeff - uart_id: uart6 + uart_id: uart_6 max_telegram_length: 1000 request_pin: D5 request_interval: 20s @@ -1622,29 +1140,8 @@ dsmr: daly_bms: update_interval: 20s - uart_id: uart1 + uart_id: uart_1 qr_code: - id: homepage_qr value: https://esphome.io/index.html - -button: - - platform: output - id: output_button - output: out - duration: 100ms - - platform: wake_on_lan - target_mac_address: 12:34:56:78:90:ab - name: wol_test_1 - id: wol_1 - - platform: factory_reset - name: Restart Button (Factory Default Settings) - -cd74hc4067: - pin_s0: GPIO12 - pin_s1: GPIO13 - pin_s2: GPIO14 - pin_s3: GPIO15 - -adc128s102: - cs_pin: GPIO12 diff --git a/tests/test5.yaml b/tests/test5.yaml index bb55887d75..0d044ac241 100644 --- a/tests/test5.yaml +++ b/tests/test5.yaml @@ -29,11 +29,11 @@ ota: logger: uart: - - id: uart1 + - id: uart_1 tx_pin: 1 rx_pin: 3 baud_rate: 9600 - - id: uart2 + - id: uart_2 tx_pin: 17 rx_pin: 16 baud_rate: 19200 @@ -42,7 +42,7 @@ i2c: frequency: 100khz modbus: - uart_id: uart1 + uart_id: uart_1 flow_control_pin: 5 id: mod_bus1 @@ -67,7 +67,7 @@ mqtt: # yamllint enable rule:line-length vbus: - - uart_id: uart2 + - uart_id: uart_2 binary_sensor: - platform: gpio @@ -422,7 +422,7 @@ sensor: value_type: U_WORD - platform: t6615 - uart_id: uart2 + uart_id: uart_2 co2: name: CO2 Sensor